首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多项式混合logit模型mlogit r包

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

Stack Overflow用户
提问于 2014-02-25 16:20:59
回答 1查看 8.2K关注 0票数 6

为了估计多项混合logit模型,我发现了多项式logit模型的mlogit-套餐。在阅读了这篇精彩的文章之后,我发现我无法将我的数据应用于所描述的任何一个例子。

我现在写信希望帮助我的问题,并创造了一个最低限度的例子,以说明我的情况。

问题如下:在某个地方有辅音'Q‘的单词。现在,我们对那些受命听这些词的人进行了一项实验,如果他们听到了Q,U或其他辅音,他们就会说。这个模型必须依赖于音节位置或实/非实字等因素。

在最小的例子中,我创建了4个人和他们的答案与音节的位置。

代码语言:javascript
复制
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函数不包括混合模型。

代码语言:javascript
复制
modNnet1 <- multinom(decision ~ syllable, data=data)

首先,我使用mlogit.data-function对文件进行了整形。经过与一位同事的讨论,我们得出结论:没有alternative.specific.variable。

代码语言:javascript
复制
 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解决,我只是还没有看到;)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-25 22:45:08

rpar参数只接受可选的特定变量。不需要在模型公式中指定特定于个人的id --这是通过在id.var = something命令中包含mlogit.data来处理的。例如,如果您有一个可供选择的特定协变量acov,则可以允许acov在面板上的随机斜率:

代码语言:javascript
复制
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中做到这一点(但请参阅这个职位)。

在没有其他特定协变量的情况下,一种适合随机拦截的选择是MCMCglmm

代码语言:javascript
复制
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的实验室博客除了MCMCglmm文档之外,还有一个您可能会发现有帮助的MCMCglmm

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22020050

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档