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

多项式混合logit模型mlogit r-包,r,mixed-models,multinomial,mlogit,R,Mixed Models,Multinomial,Mlogit,为了估计多项式混合logit模型,我发现了多项式logit模型的mlogit。在阅读了这篇精彩的小插曲之后,我发现我无法将我的数据应用到所描述的任何示例中 我现在写这篇文章是希望能对我的问题有所帮助,并创建了一个简单的例子来说明我的情况 问题如下: 在某处有辅音“Q”的单词。现在进行了一项实验,要求听这些单词的人说他们是否听到了Q、U或其他辅音。这必须根据音节位置或实/非实单词等因素进行建模 在最简单的例子中,我创建了4个人,他们的答案带有音节位置 library(mlogit) library

为了估计多项式混合logit模型,我发现了多项式logit模型的
mlogit
。在阅读了这篇精彩的小插曲之后,我发现我无法将我的数据应用到所描述的任何示例中

我现在写这篇文章是希望能对我的问题有所帮助,并创建了一个简单的例子来说明我的情况

问题如下: 在某处有辅音“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 
首先,我使用
mlogit.data
-函数来重塑文件。与同事讨论后,我们得出结论,没有替代的.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

dataMod参数
rpar
只接受可选的特定变量。不需要在模型公式中指定特定于个人的id——这可以通过在
mlogit.data
命令中包含
id.var=something
来处理。例如,如果您有一个替代的特定协变量
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)

相关问题包括优先选择、马尔可夫链的收敛等。Florian Jaeger的实验室博客中除了
MCMCglmm
文档外,还提供了一个您可能会觉得有用的方法。

您是否碰巧知道如何实现
音节
变量的效果编码?我试过
dat$sylleleeff@schlusie,你可以手动构建对比度。在定义<代码> SelabelEff<<代码>如你的评论:<代码> MMC@ ScLusie之后,只需跟随一个(希望)更清晰的例子,考虑下面的线性模型,根据上面的模拟数据:<代码> DAT$Y非常感谢伊北。第一条评论帮助我解决了问题,第二条评论帮助我理解了问题背后的原因。(甚至能理解哪种特质做得更好;)
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)
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)