我正在使用ChoiceModelR进行分层多项式logit。我希望获得外部商品效用的估计值(遵循正态分布)。外部商品没有像内部商品那样的协变量-例如,它不能有价格或品牌虚拟-,所以我设置了list(none=TRUE),并且不将此no-choice添加到X数据(如ChoiceModelR文档中所述),而只添加到y(choice)数据。
迭代正常开始,然后在某个点停止并说
"Error in betadraw[good, ] = newbeta[good, ] : NAs are not allowed in subscripted assignments".
这可能发生,因为在函数“choicmodelr”的行388中,“good”下标是NA.
我看了一些关于choicmodelr(this,this,this)的问题,也看了一些关于下标中的NA(this,this)的问题,但我猜想我的问题是特定于这个函数的,因为迭代中的一些输入可能太大/太小,以至于“good”将变成NA。
下面是一个非常简单的示例。我生成了具有不同属性的3个产品的数据。在一半的时段中,产品3未被提供。2000个消费者对3个属性具有偏好(正态分布(以及对外部商品的偏好)。添加Logit误差以与模型保持一致。外部商品被索引为产品4(当选择集中有3个和2个产品时)。
我怎样才能避免NA错误?我做错了什么,还是函数中的一个普通bug?
我还在网上搜索了设置选项none=TRUE的例子,但没有找到任何可重复的例子。也许这个选项只是有问题的地方,因为如果我设置none=FALSE,恢复真实的参数没有问题,而且我不让客户选择外部选项。
因此,导致NA错误的代码如下所示:
library("ChoiceModelR")
library("MASS")
set.seed(36)
# Set demand pars
beta_mu = c(-3,4,1)
beta_sigma = diag(c(1,1,1))
alfa_mu = 5 #outside good mean utility
alfa_sigma = 2 #outside good sd
# Three/two products, 3 vars (2 continuous,1 dummy)
threeprod <- list()
twoprod <- list()
purchase <- list()
for (t in 1:1000){
threeprod[[t]] = cbind(rep(t,3),c(1,1,1),c(1,2,3),runif(3),runif(3),ceiling(runif(3,-0.5,0.5)))
purchase[[t]] = which.max(rbind(threeprod[[t]][,c(4,5,6)]%*%mvrnorm(1,beta_mu,beta_sigma) +
matrix( -log(-log(runif(3))), 3, 1),rnorm(1,alfa_mu,alfa_sigma)) )
threeprod[[t]] = cbind(threeprod[[t]],c(purchase[[t]],0,0))
}
for (t in 1001:2000){
twoprod[[t]] = cbind(rep(t,2),c(1,1),c(1,2),runif(2),runif(2),ceiling(runif(2,-0.5,0.5)))
purchase[[t]] = which.max(rbind(twoprod[[t]][,c(4,5,6)]%*%mvrnorm(1,beta_mu,beta_sigma) +
matrix( -log(-log(runif(2))), 2, 1),rnorm(1,alfa_mu,alfa_sigma)) )
if (purchase[[t]] == 3) {purchase[[t]] <- 4}
twoprod[[t]] = cbind(twoprod[[t]],c(purchase[[t]],0))
}
X <- rbind(do.call(rbind,threeprod),do.call(rbind,twoprod))
xcoding <- c(1,1,1)
mcmc = list(R = 5000, use = 2000)
options = list(none=TRUE, save=TRUE, keep=5)
out = choicemodelr(X, xcoding, mcmc = mcmc,options = options)
1条答案
按热度按时间col17t5w1#
你必须排序他们的ID,集,备用..这解决了错误(你得到的相同)的问题必须排序的答卷人ID,集号码(问题)和备选方案在给定的问题。