Model regresji logistycznej nie jest zbieżny

39

Mam dane na temat lotów linii lotniczych (w ramce danych o nazwie flights) i chciałbym sprawdzić, czy czas lotu ma jakikolwiek wpływ na prawdopodobieństwo znacznie opóźnionego przybycia (co oznacza 10 lub więcej minut). Uznałem, że użyję regresji logistycznej, z czasem lotu jako predyktorem i czy każdy lot był znacznie opóźniony (kilka Bernoullis) jako odpowiedź. Użyłem następującego kodu ...

flights$BigDelay <- flights$ArrDelay >= 10
delay.model <- glm(BigDelay ~ ArrDelay, data=flights, family=binomial(link="logit"))
summary(delay.model)

... ale otrzymałem następujące dane wyjściowe.

> flights$BigDelay <- flights$ArrDelay >= 10
> delay.model <- glm(BigDelay ~ ArrDelay, data=flights, family=binomial(link="logit"))
Warning messages:
1: In glm.fit(x = X, y = Y, weights = weights, start = start, etastart = etastart,  :
  algorithm did not converge
2: In glm.fit(x = X, y = Y, weights = weights, start = start, etastart = etastart,  :
  fitted probabilities numerically 0 or 1 occurred
> summary(delay.model)

Call:
glm(formula = BigDelay ~ ArrDelay, family = binomial(link = "logit"),
    data = flights)

Deviance Residuals:
       Min          1Q      Median          3Q         Max
-3.843e-04  -2.107e-08  -2.107e-08   2.107e-08   3.814e-04

Coefficients:
            Estimate Std. Error z value Pr(>|z|)
(Intercept)  -312.14     170.26  -1.833   0.0668 .
ArrDelay       32.86      17.92   1.833   0.0668 .
---
Signif. codes:  0 â***â 0.001 â**â 0.01 â*â 0.05 â.â 0.1 â â 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 2.8375e+06  on 2291292  degrees of freedom
Residual deviance: 9.1675e-03  on 2291291  degrees of freedom
AIC: 4.0092

Number of Fisher Scoring iterations: 25

Co to znaczy, że algorytm się nie zbiegał? Myślałem, że tak jest, ponieważ BigDelaywartości były TRUEi FALSEzamiast 0i 1, ale dostałem ten sam błąd po przekonwertowaniu wszystkiego. Jakieś pomysły?

Daniel Standage
źródło
Pierwsza myśl: Idealna separacja , co oznacza, że ​​predyktor jest „zbyt dobry”, logi przechodzą w nieskończoność +/- i wszystko przewraca się. Druga myśl: czy kod działa tak, jak myślisz? Twoje nazwy zmiennych nie pasują do opisu. Możesz opracować dokładniejsze dane, ponieważ wygląda na to, że próbujesz coś przewidzieć samemu.
conjugateprior
1
nie jestem pewien czy zasługuję na „zaakceptuj”. Odpowiedź @ Conjugate Prior wyjaśniła, co było nie tak z twoim modelem. Pomyślałem, że warto wyjaśnić ostrzeżenie, które wspomniałeś w odniesieniu do algorytmu.
Przywróć Monikę - G. Simpson,
3
Jeśli masz rzeczywiste czasy opóźnienia, prawdopodobnie uzyskasz lepsze informacje, modelując je, zamiast redukować je do zmiennej binarnej.
whuber
powiązane pytanie
user603
możesz wypróbować funkcję glm1 (). To rozwiązało problem zbieżności

Odpowiedzi:

33

glm()wykorzystuje iteracyjny ponownie ważony algorytm najmniejszych kwadratów. Algorytm osiągnął maksymalną liczbę dozwolonych iteracji przed sygnalizacją zbieżności. Domyślnie ?glm.controljest to udokumentowane w 25. Parametry kontroli przekazujesz jako listę w glmwywołaniu:

delay.model <- glm(BigDelay ~ ArrDelay, data=flights, family=binomial,
                   control = list(maxit = 50))

Jak mówi @Conjugate Prior, wydaje się, że przewidujesz odpowiedź na podstawie danych użytych do jej wygenerowania. Masz całkowitą separację, jak każdy ArrDelay < 10przewi, FALSEa każdy ArrDelay >= 10przewi, co TRUE. Drugi komunikat ostrzegawczy informuje, że dopasowane prawdopodobieństwa dla niektórych obserwacji wynosiły 0 lub 1 i jest to dobry wskaźnik, że masz coś nie tak z modelem.

Oba ostrzeżenia mogą iść w parze. Funkcja prawdopodobieństwa może być dość płaska, gdy niektóre stają się duże, jak w twoim przykładzie. Jeśli zezwolisz na więcej iteracji, współczynniki modelu będą się dalej różnić, jeśli masz problem z separacją.β^i

Przywróć Monikę - G. Simpson
źródło
Czy mógłbyś tutaj wyjaśnić, co dokładnie masz na myśli mówiąc o konwergencji modeli?
Bach,
1
Przez zbieżność rozumiem, że parametry szacowane w modelu nie zmieniają się (lub zmieniają jedynie mniej niż pewną małą tolerancję) między iteracjami. Tutaj parametry stają się coraz większe, a dopasowanie zatrzymuje się z powodu ograniczenia iteracji, ale oszacowania parametrów bardzo się zmieniły między przedostatnią a ostatnią iteracją i jako takie nie są zbieżne.
Przywróć Monikę - G. Simpson
6

Możesz spróbować sprawdzić, czy redukcja stronniczości Firtha działa z twoim zestawem danych. Jest to podejście oparte na prawdopodobieństwie karnym, które może być przydatne w przypadku zbiorów danych, które powodują rozbieżności przy użyciu standardowego glmpakietu. Czasami można go użyć zamiast eliminować tę zmienną, która powoduje całkowite / prawie całkowite rozdzielenie.

Aby sformułować redukcję odchylenia ( w asymptotycznej ekspansji odchylenia estymatora maksymalnego prawdopodobieństwa usunięto przy użyciu klasycznego rozszerzenia kumulantów jako motywującego przykładu), sprawdź http: // biomet. oxfordjournals.org/content/80/1/27.abstractO(n1)

Redukcja uprzedzeń Firtha jest zaimplementowana w pakiecie R logistf: http://cran.r-project.org/web/packages/logistf/logistf.pdf

Avitus
źródło