Pregunta

descubrí el mlogit-paquete para modelos logit multinomiales en busca de estimar un modelo logit mixto multinomial.Después de leer la excelente viñeta descubrí que no podía aplicar mis datos en ninguno de los ejemplos descritos.

Ahora escribo con la esperanza de recibir ayuda con mi problema y creé un ejemplo mínimo para ilustrar mi situación.

El problema es el siguiente:Hay palabras con la consonante 'Q' en alguna parte.Ahora se realizó un experimento con personas a las que se les pidió que escucharan estas palabras y dijeran si escuchaban una Q, una U o alguna OTRA consonante.Esto tiene que modelarse en dependencia de algunos factores como la posición de la sílaba o la palabra real/no real.

En el ejemplo mínimo creé 4 personas y sus respuestas con la posición de la 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 

Por lo que yo sé nnet's multinomLa función no cubre modelos mixtos.

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

Primero usé el mlogit.data-función para remodelar el archivo.Después de discutirlo con un colega, llegamos a la conclusión de que no existe una variable específica alternativa.

 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

No, no sé qué hacer, así que pido ayuda aquí.Pero creo que este tipo de problema se puede resolver con mlogit y todavía no lo veo ;)

¿Fue útil?

Solución

El rpar El argumento acepta sólo variables alternativas específicas.No es necesario especificar la identificación específica de la persona en la fórmula del modelo; esto se maneja incluyendo id.var = something en el mlogit.data dominio.Por ejemplo, si tuviera una covariable específica alternativa acov, podría permitir pendientes aleatorias para acov a través de un panel:

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 está intentando ajustar un modelo con una intersección aleatoria específica de cada persona para cada alternativa (no pendientes aleatorias).Desafortunadamente, no creo que puedas hacerlo en mlogit (pero mira esta publicación).

Una opción que funcionaría para ajustar interceptos aleatorios en ausencia de covariables alternativas específicas es 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)

Las cuestiones relevantes son la selección previa, la convergencia de las cadenas de Markov, etc.El blog del laboratorio de Florian Jaeger tiene un breve tutorial sobre modelos multinomiales vía MCMCglmm que puede resultarle útil, además de la MCMCglmm documentación.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top