我发现了用于多项式logit模型的mlogit-package,以寻找估计多项式混合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


据我所知,nnetmultinom功能不涵盖混合模型。

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解决这种问题,但我还没有看到;)

最佳答案

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)


相关问题包括事先选择,马尔可夫链收敛等。Florian Jaeger的实验室博客中除了MCMCglmm文档外,还有一个short tutorial on multinomial models via MCMCglmm可能对您有所帮助。

关于r - 多项式混合logit模型mlogit r-package,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22020050/

10-12 17:32