sch*_*sie 5 r mixed-models multinomial mlogit
我发现了mlogit- 多项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
Run Code Online (Sandbox Code Playgroud)
据我所知nnet,multinom功能不包括混合型号.
modNnet1 <- multinom(decision ~ syllable, data=data)
Run Code Online (Sandbox Code Playgroud)
首先,我使用mlogit.data-function来重塑文件.在与同事讨论后,我们得出结论,没有替代品.特定.变量.
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
Run Code Online (Sandbox Code Playgroud)
不,我不知道该怎么做,所以我在这里寻求帮助.但我相信这种问题可以解决,mlogit我只是看不到它;)
该rpar参数仅接受替代特定的变量。不需要在模型公式中指定特定于个人的 id——这通过包含id.var = something在mlogit.data命令中来处理。例如,如果您有一个替代的特定 covariate 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)
Run Code Online (Sandbox Code Playgroud)
似乎您正在尝试为每个备选方案(而不是随机斜率)拟合具有随机的、特定于个人的截距的模型。不幸的是,我认为您不能这样做mlogit(但请参阅这篇文章)。
在没有替代特定协变量的情况下,一种适用于随机截距的选项是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)
Run Code Online (Sandbox Code Playgroud)
相关问题是先验选择、马尔可夫链的收敛等。除了文档之外,Florian Jaeger 实验室的博客还有一个关于多项模型MCMCglmm的简短教程,您可能会发现它很有帮助MCMCglmm。