我发现了用于多项式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
据我所知,
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
解决这种问题,但我还没有看到;) 最佳答案
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/