Frage

Ich habe das entdeckt mlogit-Paket für multinomiale Logit-Modelle auf der Suche nach der Schätzung eines multinomialen gemischten Logit-Modells.Nachdem ich die ausgezeichnete Vignette gelesen hatte, stellte ich fest, dass ich meine Daten auf keines der beschriebenen Beispiele anwenden konnte.

Ich schreibe jetzt in der Hoffnung auf Hilfe bei meinem Problem und habe ein minimales Beispiel erstellt, um meine Situation zu veranschaulichen.

Das Problem ist wie folgt:Irgendwo gibt es Wörter mit dem Konsonanten 'Q'.Nun wurde ein Experiment mit Leuten durchgeführt, die beauftragt wurden, diese Wörter zu hören und zu sagen, ob sie ein Q, ein U oder einen ANDEREN Konsonanten hörten.Dies muss in Abhängigkeit einiger Faktoren wie Silbenposition oder reales / nicht-reales Wort modelliert werden.

Im Minimalbeispiel habe ich 4 Personen und ihre Antworten mit der Silbenposition erstellt.

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 

Soweit ich weiß nnetvon multinomfunktion gilt nicht für gemischte modelle.

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

Zuerst habe ich den benutzt mlogit.data-funktion zum Umformen der Datei.Nach einem Gespräch mit einem Kollegen kamen wir zu dem Schluss, dass es keine Alternative gibt.spezifisch.variabel.

 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

Nein, ich weiß nicht, was ich tun soll, also bitte ich hier drinnen um Hilfe.Aber ich glaube, dass diese Art von Problem gelöst werden kann mit mlogit und ich sehe es einfach noch nicht;)

War es hilfreich?

Lösung

Der rpar argument akzeptiert nur alternativspezifische Variablen.Es ist nicht erforderlich, die personenspezifische ID in der Modellformel anzugeben - dies wird durch Einschließen gehandhabt id.var = something in der mlogit.data Befehl.Zum Beispiel, wenn Sie eine alternative spezifische Kovariate hatten acov, könnten Sie zufällige Steigungen für zulassen acov über ein 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)

Anscheinend versuchen Sie, ein Modell mit einem zufälligen, personenspezifischen Achsenabschnitt für jede Alternative anzupassen (keine zufälligen Steigungen).Leider glaube ich nicht, dass Sie das in tun können mlogit (aber siehe dieser Beitrag).

Eine Option, die funktionieren würde, um zufällige Abschnitte ohne alternativspezifische Kovariaten anzupassen, ist 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)

Relevante Themen sind Vorselektion, Konvergenz von Markov-Ketten usw.Der Blog von Florian Jaeger's Lab hat eine kurzes Tutorial zu multinomialen Modellen über MCMCglmm das könnten Sie hilfreich finden, zusätzlich zu den MCMCglmm Dokumentation.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top