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?


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


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(n−1)

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.