Question

J'ai découvert le mlogit-emballer pour les modèles logit multinomiaux à la recherche d'estimation d'un modèle logit mixte multinomial.Après avoir lu l'excellente vignette, j'ai découvert que je ne pouvais appliquer mes données sur aucun des exemples décrits.

J'écris maintenant dans l'espoir d'aider à résoudre mon problème et j'ai créé un exemple minimal pour illustrer ma situation.

Le problème est le suivant :Il y a des mots avec la consonne « Q » quelque part.Maintenant, une expérience a été menée avec des personnes chargées d'écouter ces mots et de dire si elles avaient entendu un Q, un U ou une AUTRE consonne.Cela doit être modélisé en fonction de certains facteurs tels que la position de la syllabe ou le mot réel/non réel.

Dans l'exemple minimal, j'ai créé 4 personnes et leurs réponses avec la position de la syllabe.

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 

Pour autant que je sache nnetc'est multinomLa fonction ne couvre pas les modèles mixtes.

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

J'ai d'abord utilisé le mlogit.data-fonction pour remodeler le fichier.Après discussion avec un collègue, nous sommes arrivés à la conclusion qu'il n'existe pas de variable alternative.spécifique.

 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

Non, je ne sais pas quoi faire, alors je demande de l'aide ici.Mais je crois que ce genre de problème peut être résolu avec mlogit et je ne le vois pas encore ;)

Était-ce utile?

La solution

Le rpar L'argument n'accepte que les variables spécifiques aux alternatives.Il n'est pas nécessaire de spécifier l'identifiant spécifique à la personne dans la formule du modèle : cela est géré en incluant id.var = something dans le mlogit.data commande.Par exemple, si vous aviez une covariable spécifique alternative acov, vous pouvez autoriser des pentes aléatoires pour acov sur un panneau :

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)

Il semble que vous essayiez d'ajuster un modèle avec une intersection aléatoire spécifique à la personne pour chaque alternative (et non des pentes aléatoires).Malheureusement, je ne pense pas que vous puissiez le faire mlogit (mais voyez ce post).

Une option qui fonctionnerait pour ajuster les interceptions aléatoires en l'absence de covariables spécifiques alternatives est 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)

Les questions pertinentes sont la sélection préalable, la convergence des chaînes de Markov, etc.Le blog du laboratoire de Florian Jaeger contient un petit tutoriel sur les modèles multinomiaux via MCMCglmm que vous pourriez trouver utile, en plus du MCMCglmm Documentation.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top