Pergunta

Eu descobri o mlogit-pacote para multinomial logit modelos na pesquisa de estimativa de um multinomial misto do modelo logit.Depois de ler o excelente vinheta que eu descobri que eu não poderia aplicar os meus dados em qualquer um dos exemplos descritos.

Agora eu escrevo na esperança de ajudar com o meu problema e criou um mínimo de exemplo para ilustrar a minha situação.

O Problema é o seguinte:Há palavras com a consoante 'Q' em algum lugar.Agora, um experimento foi realizado com pessoas que foram incumbidos da tarefa de ouvir essas palavras e dizer se eles ouviram um Q, U ou alguma OUTRA consoante.Isso tem modelado na dependência de alguns fatores como a posição da sílaba ou real/não-real da palavra.

No mínimo exemplo, eu criei 4 pessoas e suas respostas com a posição da sílaba.

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 

Tanto quanto eu sei nnet's multinomfunção não abrange modelos mistos.

modNnet1 <- multinom(decision ~ syllable, data=data)

Primeiro eu usei o mlogit.data-função para remodelar o arquivo.Após uma discussão com um colega, chegamos à conclusão de que não há alternativa.específicos.variável.

 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

Não, eu não sei o que fazer, por isso peço ajuda aqui.Mas creio que esse tipo de problema pode ser resolvido com mlogit e eu simplesmente não consigo vê-lo ainda ;)

Foi útil?

Solução

O rpar argumento aceita apenas a alternativa-de variáveis específicas.Não há necessidade de especificar a pessoa-identificação específica na fórmula do modelo -- isso é tratado pelo incluindo id.var = something no mlogit.data de comando.Por exemplo, se você tivesse uma alternativa específica covariável acov, você pode permitir aleatório pistas para acov através de um painel:

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)

Parece que você está tentando ajustar um modelo com um random, pessoa específica intercepto para cada alternativa (não aleatório pistas).Infelizmente, eu não acho que você pode fazê-lo em mlogit (mas ver este post).

Uma opção que iria trabalhar para ajuste aleatório intercepta na ausência de alternativas específicas de covariáveis é 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)

Questões relevantes são antes de selecção, a convergência das cadeias de Markov, etc.Florian Jaeger laboratório blog tem um breve tutorial sobre multinomial modelos através de MCMCglmm que você pode achar útil, além de MCMCglmm a documentação.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top