Vorhersage nach Ausführung der mlogit-Funktion in R.


11

predictFolgendes 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)

4
Haben Sie die beiliegende Vignette " Schätzung multinomialer Logit-Modelle" in R: The mlogit Packages gelesen ? Mir scheint, Sie müssen nur die angepassten Koeffizienten auf neue Daten anwenden, nicht wahr?
Chl

@chl das muss ich tun, ja, aber ich hatte gehofft, ich müsste das Rad nicht neu erfinden.
Zach

Antworten:


2

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.


6

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:

Fish_fit<-Fish[-(1:4),]
Fish_test<-Fish[1:4,]
m <- mlogit(mode ~price+ catch | income, data = Fish_fit)
predict(m,newdata=Fish_test)

das gibt ein gutes Ergebnis.


4

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 predictFunktion von mlogit funktioniert einwandfrei. Sie müssen nur einige Anpassungen vornehmen und sicherstellen, dass die folgenden Dinge erledigt sind:

  1. 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 Daten factorgesucht werden sollte (z. B. nach Ebenen, die nicht vorhandene Ebenen erben - droplevelkann in diesem Fall nützlich sein - oder nicht in die Stichprobenfaktoren eingeführt werden oder nach falschen colnameusw.).

  2. Sie müssen in Ihren neuen Daten eine willkürliche Auswahl treffen (falls diese nicht vorhanden ist), was mit der folgenden sampleFunktion einfach möglich ist:

    MrChoice <-sample(c("Car", "Bus", "Walk"),nrow(datase),replace=TRUE, prob = c(0.5, 0.4, 0.1))
    mynewData$mode<-MrChoice
  3. 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:

    ExpData3<- mlogit.data(mynewData, shape="wide", choice = "mode",sep=".",id = "TripID")
  4. Der letzte Schritt wäre die tatsächliche Vorhersage unter Verwendung der predictFunktion.

    resulted<-predict(ml1,newdata=ExpData3)

2

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.


1

mlogithat 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 .


0

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.


1
Die Vignette ist täuschend einfach; In der Praxis konnte ich nicht herausfinden, wie ich mich auf neue Daten anwenden soll. Also habe ich meinen eigenen Code geschrieben, der unten verlinkt ist.
Gregmacfarlane
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.