Jak skonfigurować i oszacować wielomianowy model logit w R?

20

Uruchomiłem wielomianowy model logarytmiczny w JMP i otrzymałem wyniki, które obejmowały AIC oraz wartości p-kwadrat chi dla każdego oszacowania parametru. Model ma jeden kategoryczny wynik i 7 kategorycznych zmiennych objaśniających.

Następnie dopasowałem to, co, jak sądziłem, zbuduje ten sam model w R, używając multinomfunkcji w pakiecie nnet .

Kod był w zasadzie:

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

Oba dają jednak różne wyniki. W przypadku JMP AIC to 2923.21, a w nnet::multinomprzypadku AIC to 3116.588.

Moje pierwsze pytanie brzmi: czy jeden z modeli jest zły?

Po drugie, JMP podaje wartości p-kwadrat chi dla każdego oszacowania parametru, którego potrzebuję. Uruchamianie podsumowania na multinomie fit1nie - daje tylko szacunki, AIC i Deviance.

Moje drugie pytanie brzmi zatem: czy istnieje sposób na uzyskanie wartości p dla modelu i oszacowań przy użyciu nnet::multinom?

Wiem, że mlogit to kolejny pakiet R do tego i wygląda na to, że jego dane wyjściowe zawierają wartości p; jednak nie byłem w stanie uruchomić mlogitprzy użyciu moich danych. Wydaje mi się, że miałem poprawnie sformatowane dane, ale napisano, że mam niepoprawną formułę. Użyłem tej samej formuły, której użyłem multinom, ale wygląda na to, że wymaga innego formatu przy użyciu potoku i nie rozumiem, jak to działa.

Dzięki.

Paweł
źródło
2
Możesz ustawić argument Hess = PRAWDA, aby odzyskać Hesjan z multinom, a następnie ręcznie obliczyć wartości p. Ale sugeruję użycie biblioteki mlogit (nnet może mieć problemy z konwergencją, gdy zmienne towarzyszące nie są poprawnie skalowane). Winiety dla mlogit są całkiem dobre i powinny pomóc w prawidłowym skonfigurowaniu danych. Winiety można znaleźć w zwykłym miejscu: cran.r-project.org/web/packages/mlogit
Jason Morgan

Odpowiedzi:

9

Jestem pewien, że już znalazłeś swoje rozwiązania, ponieważ ten post jest bardzo stary, ale dla tych z nas, którzy wciąż szukają rozwiązań - znalazłem http://youtu.be/-Cp_KP9mq94 to świetne źródło instrukcji, jak uruchom wielomianowy model regresji logistycznej w R, używając pakietu mlogit. Jeśli wejdziesz na stronę akademii ekononometrii, ona ma wszystkie skrypty, dane dla R i SAS i STATA, jak sądzę, lub SPSS jeden z nich.

Który rodzaj wyjaśnia, jak / dlaczego i co zrobić, aby przekształcić dane w format „długi” w porównaniu z „szerokim”. Najprawdopodobniej masz szeroki format, który wymaga transformacji.

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

Kerry
źródło
3

Zasadniczo różnice w wartościach AIC między dwoma różnymi programami nie są do końca zaskakujące. Obliczanie prawdopodobieństw często wymaga stałej, która jest taka sama między różnymi modelami tych samych danych. Różni programiści mogą dokonywać różnych wyborów dotyczących tego, co należy pozostawić w tej stałej lub poza nią. Powinieneś się martwić, gdy różnice w wartościach AIC między dwoma modelami różnią się. Właśnie zauważyłem argument, który multinom()pozwala zmienić sposób, w jaki wiersze o identycznych wartościach X są zawijane, i że wpływa to na linię podstawową dewiacji, a tym samym na AIC. Możesz wypróbować różne wartości argumentu summ i przekonać się, czy to powoduje, że odchylenia się zgadzają. Nie wiemy, co robi JMP! :)

Jeśli szacowane współczynniki i standardowe błędy są takie same, jesteś dobry. Jeśli współczynniki nie są takie same, nie zapominaj, że JMP może wybrać inny wynik wyjściowy do obliczenia współczynników. multinom()dokonuje mlogit()na przykład różnych wyborów .

Uzyskanie wartości p z wyniku podsumowania () multinom () jest dość łatwe. Nie mogę odtworzyć twoich modeli, więc oto przykład ze strony pomocy na 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)

Zgadzam się, że znalezienie pakietu mlogit to trochę wyzwanie! Przeczytaj uważnie winiety. Oni pomagają.

atiretoo
źródło
Jak miałbym używać innych (ogólnych) zmiennych z Fishingzestawu danych z multinom?
gregmacfarlane
@gmacfarlane Po prostu dodaj zmienne, które chcesz do formuły w multinomie (tryb ~ dochód + cena. plaża, ...
atiretoo
@atiretoo Szukałem sposobu na zdobycie moich przyjaciół, więc dzięki! ale tylko dla wyjaśnienia - skąd pochodzi 6 z df? jak powinienem liczyć, aby uzyskać mój df? Mam zmienną ciągłą i zmienną kategorialną (4 kategorie) w moim modelu. Czy to byłby df 5? Ponadto rybołówstwo to cały zestaw danych, prawda? Co jest wielkością próbki - stopniem swobody.
Kerry
@atiretoo Przepraszam, właśnie odkryłem, że jeśli używam pakietu nnet do uruchomienia regresji logit - faktycznie oblicza efektywny df i jest przechowywany w obiekcie nnet. Mogę więc wyodrębnić plik df z modelu i użyć go. Nie sprawdziłem, czy obiekt mlogit będzie zawierał te same informacje.
Kerry
@Kerry cieszę się, że go znalazłeś.
atiretoo
1

Możesz także spróbować uruchomić wielomianowy logit przy użyciu pakietu glmnet. Nie jestem pewien, jak wymusić zachowanie wszystkich zmiennych, ale jestem pewien, że jest to możliwe.

Zach
źródło