多项式混合logit模型mlogit r-package

时间:2014-02-25 16:21:00

标签: r mixed-models multinomial mlogit

我发现mlogit - package用于多项logit模型以寻找多项混合logit模型。在阅读了优秀的插图后,我发现我无法在任何描述的示例中应用我的数据。

我现在写信希望能帮助解决我的问题并创建一个最简单的例子来说明我的情况。

问题如下: 在某处有辅音'Q'的字样。现在,我们进行了一项实验,他们的任务是听取这些话,并说他们是否听过Q,U或其他辅音。这必须依赖于音节位置或真实/非真实词等一些因素来建模。

在最小的例子中,我用音节位置创建了4个人和他们的答案。

library(mlogit)
library(nnet)
set.seed(1234)
data <- data.frame(personID = as.factor(sample(1:4, 40, replace=TRUE)),
               decision = as.factor(sample(c("Q","U", "other"), 40, replace=TRUE)),
               syllable = as.factor(sample(1:4, 40, replace=TRUE)))
summary(data)
 personID  decision  syllable
 1:11     other:10   1:18    
 2:10     Q    :18   2: 9    
 3:10     U    :12   3: 5    
 4: 9                4: 8 

据我所知nnet multinom函数不涵盖混合模型。

modNnet1 <- multinom(decision ~ syllable, data=data)

首先,我使用mlogit.data - 函数来重塑文件。在与同事讨论后,我们得出的结论是没有替代方案。变量。

 dataMod <- mlogit.data(data, shape="wide", choice="decision", id.var="personID")

 mod1 <- mlogit(formula = decision ~ 0|syllable,
           data = dataMod,
           reflevel="Q", rpar=c(personID="n"), panel=TRUE)
  Error in names(sup.coef) <- names.sup.coef : 
    'names' attribute [1] must be the same length as the vector [0]

 mod2 <- mlogit(formula = decision ~ personID|syllable,
           data = dataMod,
           reflevel="Q", rpar=c(personID="n"), panel=TRUE)
  Error in solve.default(H, g[!fixed]) : 
     Lapack routine dgesv: system is exactly singular: U[3,3] = 0

不,我不知道该怎么做,所以我在这里寻求帮助。但是我相信这种问题可以用mlogit来解决,而我还没有看到它;)

1 个答案:

答案 0 :(得分:3)

rpar参数仅接受替代特定变量。无需在模型公式中指定特定于人员的ID - 这可以通过在id.var = something命令中包含mlogit.data来处理。例如,如果您有其他特定协变量acov,则可以在整个面板中允许acov的随机斜率:

N = 200
dat <- data.frame(personID = as.factor(sample(1:4, N, replace=TRUE)),
               decision = as.factor(sample(c("Q","U", "other"), N, replace=TRUE)),
               syllable = as.factor(sample(1:4, N, replace=TRUE)),
               acov.Q = rnorm(N), acov.U = rnorm(N), acov.other = rnorm(N))
dataMod <- mlogit.data(dat, shape="wide", choice="decision", id.var="personID", varying = 4:6)
mlogit(formula = decision ~ acov|syllable, rpar = c(acov = "n"), panel = T, data = dataMod)

似乎你正试图为每个替代品(不是随机斜坡)的随机,特定于人的拦截拟合模型。不幸的是,我认为你不能在mlogit中这样做(但请参阅this post)。

在没有替代特定协变量的情况下,可以使用随机截距的一个选项是MCMCglmm

library(MCMCglmm)
priors = list(R = list(fix = 1, V = 0.5 * diag(2), n = 2),
              G = list(G1 = list(V = diag(2), n = 2)))
m <- MCMCglmm(decision ~ -1 + trait + syllable,
              random = ~ idh(trait):personID,
              rcov = ~ us(trait):units,
              prior = priors,
              nitt = 30000, thin = 20, burnin = 10000,
              family = "categorical",
              data = dat)

相关问题包括事先选择,马尔可夫链的融合等。除了MCMCglmm文档之外,Florian Jaeger的实验室博客还有一个short tutorial on multinomial models via MCMCglmm,除了{{1}}文档之外,还有帮助。