predict
Folgendes möchte ich tun, aber es scheint keine Methode für den mlogit zu geben. Irgendwelche Ideen?
library(mlogit)
data("Fishing", package = "mlogit")
Fish <- mlogit.data(Fishing, varying = c(2:9), shape = "wide", choice = "mode")
Fish_fit<-Fish[-1,]
Fish_test<-Fish[1,]
m <- mlogit(mode ~price+ catch | income, data = Fish_fit)
predict(m,newdata=Fish_test)
r
logistic
logit
multinomial
Zach
quelle
quelle
Antworten:
Hier ist ein nützlicher Trick: Fügen Sie die Daten, die Sie vorhersagen möchten, zu Ihrer ursprünglichen Schätzungsstichprobe hinzu, aber verwenden Sie die Gewichtungsvariable, um das Gewicht dieser neuen Beobachtungen auf Null zu setzen. Schätzen Sie das Modell (wobei die neuen Beobachtungen auf Null gewichtet sind) und erhalten Sie die Vorhersagen aus der Ausgabe der "Wahrscheinlichkeiten". Auf diese Weise können Sie die Vorhersagefunktion umgehen, was ein Chaos ist.
quelle
Das mlogit-Paket verfügt über eine Predict () -Methode, zumindest in der von mir verwendeten Version (0.2-3 mit R 2.15.3).
Der von @Zach erstellte Code enthält einen Fehler. Die von mlogit () verwendeten "Langformat" -Daten enthalten für jede Alternative eine Zeile. Dies ist das Format, das von der Funktion mlogit.data () erstellt wurde. Um eine Vorhersage für den ersten Fall zu erhalten, müssen Sie daher alle Zeilen für diesen Fall herausziehen, und es gibt 4:
das gibt ein gutes Ergebnis.
quelle
Nachdem ich mich sehr bemüht habe, die Vorhersagefunktion für die Bevölkerung zu verwenden, kann ich all Ihren Antworten einige Erkenntnisse hinzufügen.
Die
predict
Funktion von mlogit funktioniert einwandfrei. Sie müssen nur einige Anpassungen vornehmen und sicherstellen, dass die folgenden Dinge erledigt sind:Die
newdata
(wie erwartet) sollten genau die gleichen Daten enthalten wie die Stichprobe, die für die Schätzung des Modells verwendet wurde. Dies bedeutet, dass nach "versteckten" Eigenschaften der Datenfactor
gesucht werden sollte (z. B. nach Ebenen, die nicht vorhandene Ebenen erben -droplevel
kann in diesem Fall nützlich sein - oder nicht in die Stichprobenfaktoren eingeführt werden oder nach falschencolname
usw.).Sie müssen in Ihren neuen Daten eine willkürliche Auswahl treffen (falls diese nicht vorhanden ist), was mit der folgenden
sample
Funktion einfach möglich ist:Der nächste erforderliche Schritt besteht darin, die Daten erneut in mlogit-Daten umzuwandeln, wobei dieselbe Funktion wie für die Beispieldaten verwendet wird, zum Beispiel:
Der letzte Schritt wäre die tatsächliche Vorhersage unter Verwendung der
predict
Funktion.quelle
Um meine eigene Frage zu beantworten, habe ich das 'glmnet'-Paket verwendet, um meine multinomialen Logs anzupassen. Dies hat den zusätzlichen Vorteil, dass ich das Lasso oder das elastische Netz verwende, um meine unabhängigen Variablen zu regulieren. glmnet scheint viel "fertiger" als mlogit zu sein, komplett mit einer "Vorhersage" -Funktion.
quelle
mlogit
hat eine Vorhersagefunktion, aber ich fand es sehr schwierig zu bedienen. Ich habe meine eigenen sehr hässlichen Funktionen für eine Implementierung geschrieben, die ich habe. Jeder kann sie verwenden oder verbessern, die in meinem Github- Profil gespeichert sind .quelle
Ich bin mir ziemlich sicher, dass dies mit dem angegebenen mlogit-Paket einfach möglich ist, indem die angepasste Funktion und dann die Standard-R-Vorhersagefunktion verwendet werden. Wie chl hervorhob, obwohl ich es selbst noch nicht getan habe (zumindest nicht vorhergesagt), ist dies in den Paketvignetten hier auf S. 29 aufgeführt.
quelle