我正在使用ChoiceModelR進行分層多項式logit。我想獲得外部商品效用的估計值(其遵循正態分佈)。外部貨物沒有內部貨物的協變量 - 例如,它不能有價格或品牌虛擬 - 因此我設置了list(none = TRUE),並且不要將這個無選擇項添加到X數據(如ChoiceModelR的文檔中所述),而僅添加到y(選擇)數據。ChoiceModelR,none = TRUE,「betadraw [good,] = newbeta [good,]中的錯誤」
的迭代正常啓動,然後在某個時候停止,並說
"Error in betadraw[good, ] = newbeta[good, ] : NAs are not allowed in subscripted assignments".
這可能是因爲在函數「choicemodelr」 388行中,「好」下標NA。
我看着約choicemodelr(this,this,this)的一些問題,也即將在標(this,this)來港定居,但我的猜測是,我的問題是特定於在這個意義上這個功能,可能一些投入在迭代中只是變得如此大/小,這樣「好」會變成NA。
下面是一個非常簡單的例子。我使用具有不同屬性的3種產品生成數據。在一半的時間內不提供產品3。 2000年的消費者有偏好 - 通常分配 - 超過3個屬性(以及對外部商品的偏好)。添加的Logit錯誤與模型一致。外部商品被指定爲產品4(當3個和2個產品都在選擇集合中時)。
我怎樣才能避免NA錯誤?我做錯了什麼,還是它在函數中的一個常見錯誤?
我也搜索了在線設置示例none = TRUE的示例,但是我沒有找到任何可重現的示例。也許這個選項只是有問題的事情,因爲如果我設置none = FALSE,恢復真實參數沒有問題,並且我不讓客戶選擇外部選項。
因此,這導致NA的bug的代碼如下:
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)