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ż BigDelay
wartości były TRUE
i FALSE
zamiast 0
i 1
, ale dostałem ten sam błąd po przekonwertowaniu wszystkiego. Jakieś pomysły?
r
logistic
separation
Daniel Standage
źródło
źródło
Odpowiedzi:
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.control
jest to udokumentowane w 25. Parametry kontroli przekazujesz jako listę wglm
wywołaniu: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 < 10
przewi,FALSE
a każdyArrDelay >= 10
przewi, coTRUE
. 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
źródło
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
glm
pakietu. 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źródło