Вопрос

Я обнаружил, что 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 

насколько я знаю nnetmultinomфункция не распространяется на смешанные модели.

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 и я просто пока этого не вижу ;)

Это было полезно?

Решение

То 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 документация.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top