Domanda

Ho scoperto il mlogit-pacchetto per modelli logit multinomiali alla ricerca della stima di un modello logit misto multinomiale.Dopo aver letto l'eccellente vignetta ho scoperto che non potevo applicare i miei dati a nessuno degli esempi descritti.

Ora scrivo nella speranza di ricevere aiuto con il mio problema e ho creato un esempio minimo per illustrare la mia situazione.

Il problema è il seguente:Da qualche parte ci sono parole con la consonante "Q".Ora è stato condotto un esperimento con persone a cui era stato assegnato il compito di ascoltare queste parole e dire se sentivano una Q, una U o qualche ALTRA consonante.Questo deve essere modellato in dipendenza di alcuni fattori come la posizione della sillaba o la parola reale/non reale.

Nell'esempio minimo ho creato 4 persone e le loro risposte con la posizione della sillaba.

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 

Per quanto ne so nnet'S multinomla funzione non copre i modelli misti.

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

Per prima cosa ho usato il mlogit.data-funzione per rimodellare il file.Dopo aver discusso con un collega siamo giunti alla conclusione che non esiste una variabile alternativa.specifica.

 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, non so cosa fare, quindi chiedo aiuto qui.Ma credo che questo tipo di problema possa essere risolto mlogit e ancora non lo vedo ;)

È stato utile?

Soluzione

IL rpar L'argomento accetta solo variabili specifiche dell'alternativa.Non è necessario specificare l'ID specifico della persona nella formula del modello: questa operazione viene gestita includendo id.var = something nel mlogit.data comando.Ad esempio, se avessi una covariata specifica alternativa acov, potresti consentire pendenze casuali per acov attraverso un pannello:

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)

Sembra che tu stia cercando di adattare un modello con un'intercetta casuale e specifica per ogni alternativa (non pendenze casuali).Purtroppo non credo che tu possa farlo mlogit (ma vedi questo post).

Un'opzione che funzionerebbe per adattare le intercettazioni casuali in assenza di covariate specifiche per l'alternativa è 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)

Le questioni rilevanti sono la selezione preventiva, la convergenza delle catene di Markov, ecc.Il blog del laboratorio di Florian Jaeger ha un breve tutorial sui modelli multinomiali via MCMCglmm che potresti trovare utile, oltre a MCMCglmm documentazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top