多项式混合logit模型mlogit r-package [英] multinomial mixed logit model mlogit r-package

查看:546
本文介绍了多项式混合logit模型mlogit r-package的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我发现了mlogit- package 多项式logit模型以寻找估计多项式混合logit模型的方法.阅读了出色的插图后,我发现我无法将数据应用于所描述的任何示例.

I discovered the mlogit-package for multinomial logit models in search of estimating a multinomial mixed logit model. After reading the excellent vignette I discovered that I could not apply my data on any of the described examples.

我现在写信希望对我的问题有所帮助,并创建了一个最小的例子来说明我的情况.

I now write in hope of help with my problem and created a minimal example to illustrate my situation.

问题如下: 某处有带有辅音"Q"的单词.现在,对负责听这些话并说出他们是否听到Q,U或其他辅音的人进行了实验.必须根据某些因素(例如音节位置或实/非实词)进行建模.

The Problem is as follows: There are words with the consonant 'Q' somewhere. Now an experiment was conducted with people who were tasked to listen to these words and say if they heard a Q, an U or some OTHER consonant. This has to modeled in dependence of some factors like syllable position or real/non-real-word.

在最小的示例中,我创建了4个人及其答案的音节位置.

In the minimal example I created 4 people and their answers with the syllable position.

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函数不涵盖混合模型.

As far as I know nnet's multinomfunction does not cover mixed models.

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

首先,我使用了mlogit.data函数来调整文件的形状.与同事讨论后,我们得出的结论是,没有其他选择.specific.variable.

First I used the mlogit.data-function to reshape the file. After discussion with a colleague we came to the conclusion that there is no alternative.specific.variable.

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

No I do not know what to do, so I ask for help in here. But I believe this kind of problem can be solved with mlogit and I just don't see it yet ;)

推荐答案

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

The rpar argument accepts only alternative-specific variables. There is no need to specify the person-specific id in the model formula -- this is handled by including id.var = something in the mlogit.data command. For example, if you had an alternative specific covariate acov, you could allow random slopes for acov across a panel:

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中这样做(但请参阅

It seems you are trying to fit a model with a random, person-specific intercept for each alternative (not random slopes). Unfortunately, I don't think you can do so in mlogit (but see this post).

在没有替代特定协变量的情况下,适合于随机截距的一个选项是MCMCglmm.

One option that would work to fit random intercepts in the absence of alternative-specific covariates is 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的实验室博客中有

Relevant issues are prior selection, convergence of Markov chains, etc. Florian Jaeger's lab's blog has a short tutorial on multinomial models via MCMCglmm that you might find helpful, in addition to the MCMCglmm documentation.

这篇关于多项式混合logit模型mlogit r-package的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆