Oto, co chcę zrobić, ale wydaje się, że nie ma predict
metody dla mlogit. Jakieś pomysły?
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
źródło
źródło
Odpowiedzi:
Oto przydatna sztuczka: dodaj dane, które chcesz przewidzieć, do oryginalnej próbki szacunkowej, ale użyj zmiennej wagi, aby ustawić wagę tych nowych obserwacji na zero. Oszacuj model (z nowymi obserwacjami ważonymi do zera) i uzyskaj prognozy z danych wyjściowych „prawdopodobieństwa”. W ten sposób można ominąć funkcję przewidywania, która jest bałaganem.
źródło
Pakiet mlogit ma metodę predykcji (), przynajmniej w wersji, której używam (0.2-3 z R 2.15.3).
Kod wystawiony przez @Zach zawiera jeden błąd. Dane „długiego formatu” używane przez mlogit () mają jeden wiersz dla każdej alternatywy; jest to format utworzony przez funkcję mlogit.data (). Dlatego, aby uzyskać prognozę dla pierwszego przypadku, musisz wyciągnąć wszystkie wiersze dla tego przypadku, a są 4:
co daje dobry wynik.
źródło
Po dość dużym wysiłku w próbie użycia funkcji przewidywania dla populacji, myślę, że mogę dodać kilka spostrzeżeń do wszystkich twoich odpowiedzi.
predict
Funkcją mlogit działa dobrze, po prostu trzeba dokonać pewnych korekt i mieć pewność, że następujące rzeczy są pod opieką:newdata
( Zgodnie z oczekiwaniami) powinny zawierać dokładnie te same dane, co próbka użyta do oszacowania modelu. Oznacza to, że należy sprawdzić „ukryte” właściwości danych (takie jakfactor
dziedziczące poziomy, które nie istnieją -droplevel
mogą być przydatne w tym przypadku - lub nie zostaną wprowadzone w przykładowych czynnikach, lub błędnecolname
itp.).Musisz dokonać dowolnego wyboru w nowych danych (jeśli nie istnieje), co można łatwo zrobić za pomocą
sample
funkcji:Kolejnym wymaganym krokiem jest ponowne przekształcenie danych w dane mlogit, przy użyciu tej samej funkcji, co w przypadku danych przykładowych, na przykład:
Ostatnim krokiem byłoby rzeczywiste przewidywanie za pomocą
predict
funkcji.źródło
Aby odpowiedzieć na moje pytanie, przeszedłem do używania pakietu „glmnet” w celu dopasowania moich logów wielomianowych, co ma tę dodatkową zaletę, że używa lasso lub elastycznej sieci do regularyzacji moich zmiennych niezależnych. glmnet wydaje się być znacznie bardziej „gotowym” pakietem niż mlogit, wraz z funkcją „przewidywania”.
źródło
mlogit
ma funkcję przewidywania, ale korzystanie z niej jest bardzo trudne. Napisałem własny bardzo brzydki zestaw funkcji dla mojej implementacji. Każdy może używać lub ulepszać je, zapisane na moim profilu github .źródło
Jestem prawie pewien, że można to łatwo zrobić z danym pakietem mlogit, używając dopasowanej funkcji, a następnie standardowej funkcji przewidywania R. Jak chl wskazał, chociaż nie zrobił się jeszcze (przynajmniej nie przewidują) jest przykładowa w winiet pakietowych tutaj na stronie 29.
źródło