Wie richte ich ein multinomiales Logit-Modell in R ein und schätze es?


20

Ich führte ein multinomiales Logit-Modell in JMP durch und erhielt Ergebnisse, die den AIC sowie Chi-Quadrat-p-Werte für jede Parameterschätzung enthielten. Das Modell hat ein kategoriales Ergebnis und 7 kategoriale erklärende Varianten.

Ich passe dann an, was ich dachte, würde dasselbe Modell in R bauen, indem ich die multinomFunktion im nnet- Paket verwende.

Der Code war im Grunde:

fit1 <- multinom(y ~ x1+x2+...xn,data=mydata);
summary(fit1);

Die beiden geben jedoch unterschiedliche Ergebnisse. Mit JMP ist der AIC 2923,21 und mit nnet::multinomdem AIC 3116,588.

Meine erste Frage lautet also: Ist eines der Modelle falsch?

Die zweite Sache ist, dass JMP Chi-Quadrat-p-Werte für jede Parameterschätzung angibt, die ich benötige. Zusammenfassung auf dem Multinom fit1läuft nicht - es gibt nur die Schätzungen, AIC und Abweichung.

Meine zweite Frage lautet daher: Gibt es eine Möglichkeit, die p-Werte für das Modell und die Schätzungen bei der Verwendung zu ermitteln nnet::multinom?

Ich weiß, dass mlogit ein weiteres R-Paket dafür ist, und es sieht so aus, als ob seine Ausgabe die p-Werte enthält. Ich konnte jedoch nicht mlogitmit meinen Daten ausgeführt werden. Ich glaube, ich hatte die Daten richtig formatiert, aber es hieß, ich hätte eine ungültige Formel. Ich habe die gleiche Formel verwendet, die ich verwendet habe multinom, aber es scheint, dass ein anderes Format für die Verwendung einer Pipe erforderlich ist, und ich verstehe nicht, wie das funktioniert.

Vielen Dank.


2
Sie können das Argument Hess = TRUE setzen, um das Hessische von multinom zurückzugewinnen und dann die p-Werte manuell zu berechnen. Aber ich schlage vor, Sie verwenden die mlogit-Bibliothek (nnet kann Konvergenzprobleme haben, wenn die Kovariaten nicht richtig skaliert sind). Die Vignetten für mlogit sind ziemlich gut und sollten Ihnen helfen, Ihre Daten korrekt einzurichten. Die Vignetten sind an der üblichen Stelle zu finden: cran.r-project.org/web/packages/mlogit
Jason Morgan

Antworten:


9

Ich bin mir sicher, dass Sie Ihre Lösungen bereits gefunden haben, da dieser Beitrag sehr alt ist, aber für diejenigen von uns, die noch nach Lösungen suchen, ist http://youtu.be/-Cp_KP9mq94 eine großartige Quelle für Anleitungen Führen Sie mit mlogit package ein multinomiales logistisches Regressionsmodell in R aus. Wenn Sie auf die Website der Econonometrics Academy gehen, hat sie alle Skripte, Daten für R und SAS und STATA, glaube ich, oder SPSS eine davon.

Welche Art erklärt, wie / warum und was zu tun ist, um Ihre Daten in das Format "Lang" oder "Breit" umzuwandeln? Höchstwahrscheinlich haben Sie ein breites Format, für das eine Transformation erforderlich ist.

https://sites.google.com/site/econometricsacademy/econometrics-models/multinomial-probit-and-logit-models


3

Im Allgemeinen sind Unterschiede in den AIC-Werten zwischen zwei verschiedenen Softwareteilen nicht ganz überraschend. Bei der Berechnung der Wahrscheinlichkeiten wird häufig eine Konstante verwendet, die für verschiedene Modelle derselben Daten gleich ist. Verschiedene Entwickler können unterschiedliche Entscheidungen darüber treffen, was in oder aus dieser Konstante herausgelassen werden soll. Sie sollten sich Sorgen machen, wenn sich die Unterschiede in den AIC-Werten zwischen zwei Modellen unterscheiden. Eigentlich ist mir gerade ein Argument aufgefallen, multinom()mit dem Sie ändern können, wie Zeilen mit identischen X-Werten reduziert werden, und das sich auf die Grundlinie der Abweichung und damit auf den AIC auswirkt. Sie können verschiedene Werte des summ-Arguments ausprobieren und prüfen, ob die Abweichungen damit übereinstimmen. Wir wissen nicht, was JMP tut! :)

Wenn die geschätzten Koeffizienten und Standardfehler gleich sind, sind Sie gut. Wenn die Koeffizienten nicht gleich sind, vergessen Sie nicht, dass JMP möglicherweise ein anderes Basisergebnis wählt, um die Koeffizienten für zu berechnen. multinom()trifft mlogit()zum Beispiel eine andere Wahl als .

Es ist ziemlich einfach, p-Werte aus dem summary () -Ergebnis von multinom () zu erhalten. Ich kann Ihre Modelle nicht reproduzieren. Hier ist das Beispiel auf der Hilfeseite von multinom ():

library("nnet")
data("Fishing", package = "mlogit")
fishing.mu <- multinom(mode ~ income, data = Fishing)
sum.fishing <- summary(fishing.mu) # gives a table of outcomes by covariates for coef and SE
str(sum.fishing)
# now get the p values by first getting the t values
pt(abs(sum.fishing$coefficients / sum.fishing$standard.errors),
  df=nrow(Fishing)-6,lower=FALSE)

Ich bin damit einverstanden, dass das Herausfinden des mlogit-Pakets eine Herausforderung darstellt! Lesen Sie die Vignetten sorgfältig durch. Sie helfen.


Wie würde ich die anderen (generischen) Variablen aus dem FishingDatensatz mit multinom verwenden?
Gregmacfarlane

@ gmacfarlane Fügen Sie einfach die gewünschten Variablen zur Formel in multinom (mode ~ income + price.beach, ...
atiretoo

@atiretoo Ich suchte nach einem Weg, um meine Pvals zu bekommen, also danke! aber nur zur klarstellung - woher kommt die 6 mit der df? wie soll ich zählen, um meinen df zu bekommen? Ich habe eine kontinuierliche Variable und eine kategoriale Variable (4 Kategorien) in meinem Modell. Also wäre das ein df von 5? Auch das Angeln ist der gesamte Datensatz richtig? Welches ist Stichprobengröße-Freiheitsgrad.
Kerry

@atiretoo Ich entschuldige mich, ich habe gerade festgestellt, dass bei Verwendung des Pakets nnet zur Ausführung der logit-Regression die effektive df tatsächlich berechnet und im nnet-Objekt gespeichert wird. Also kann ich die df aus dem Modell extrahieren und diese verwenden. Ich habe nicht geprüft, ob mlogit-Objekte dieselben Informationen enthalten.
Kerry

@ Kerry froh, dass du es gefunden hast.
atiretoo

1

Sie können auch versuchen, eine multinomiale Protokollierung mit dem Paket glmnet auszuführen. Ich bin nicht sicher, wie ich es zwingen soll, alle Variablen zu behalten, aber ich bin sicher, dass es möglich ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.