我在寻找估计多项混合Logit模型的过程中发现了
现在我希望能得到帮助解决我的问题,并创建了一个最小化的示例来说明我的情况。
问题如下: 有一些包含辅音“Q”的单词。现在进行了实验,让人们听这些单词并说出他们是否听到了Q、U或其他辅音。这必须根据一些因素(如音节位置或真实/非真实单词)建模。
在我创建的最小示例中,有4个人和他们的答案以及音节位置。
据我所知,
mlogit
-package,它用于多项式Logit模型。阅读了优秀的vignette之后,我发现无法将我的数据应用于任何描述的示例中。现在我希望能得到帮助解决我的问题,并创建了一个最小化的示例来说明我的情况。
问题如下: 有一些包含辅音“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
来解决,只是我还没有看到它的方法 ;)
音节(syllable)
变量的效应编码?我尝试过使用dat$syllableEff <- C(dat$syllable, sum,3)
的代码,并使用公式decision ~ -1 + trait + syllableEff
,但好像没有起作用。如果你不知道的话,我会发一个新主题。 - schlusiesyllableEff
如您的评论中所述之后:mmC <- model.matrix(decision ~ 0 + syllable, data = dat) %*% contrasts(dat$syllableEff); colnames(mmC) <- c("s1", "s2", "s3"); dat <- data.frame(dat, mmC)
然后使用公式decision ~ -1 + trait + s1 + s2 + s3
,并将data = dat
。 - Nate Popedat$y <- rnorm(N); dat$trait <- factor(sample(1:3, N, replace = T)); mod1 <- lm(y ~ 0+trait+syllableEff, data = dat); mod2 <- lm(y ~ 0+trait+mmC, data = dat)
。这些模型是相同的:coef(mod1) == coef(mod2)
。因此,手动创建虚拟变量只是绕过了自动化步骤。显然,在您的情况下,响应是多项式的,但是相同的线性模型描述了潜在变量(多项式响应下的线性预测器)。 - Nate Pope