2017-04-21 80 views
1

我正在使用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(thisthisthis)的一些問題,也即將在標(thisthis)來港定居,但我的猜測是,我的問題是特定於在這個意義上這個功能,可能一些投入在迭代中只是變得如此大/小,這樣「好」會變成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) 

回答

0

你必須通過ID對它們進行排序,設置,Alt鍵..這解決了這個錯誤(你得到了相同)的問題有按受訪者ID,給定問題中的設置編號(問題)和替代方法排序。

相關問題