Полиномиальная модель смешанного логита mlogit r-package
Я обнаружил 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
Насколько я знаю nnet
"s 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
а я просто пока не вижу;)
1 ответ
rpar
Аргумент принимает только альтернативные переменные. Нет необходимости указывать индивидуальный идентификатор в формуле модели - это выполняется путем включения id.var = something
в mlogit.data
команда. Например, если у вас был альтернативный конкретный ковариат 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)
Кажется, вы пытаетесь подобрать модель со случайным, индивидуально-ориентированным перехватом для каждой альтернативы (не случайных уклонов). К сожалению, я не думаю, что вы можете сделать это в 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)
Соответствующими вопросами являются предварительный отбор, сходимость цепей Маркова и т. Д. В блоге лаборатории Флориана Йегера есть краткое руководство по многочленным моделям черезMCMCglmm
что вы могли бы найти полезным, в дополнение к MCMCglmm
документация.