Модель логістичної регресії не збігається


39

У мене є деякі дані про рейси авіакомпанії (у кадрі даних, який називається flights), і я хотів би побачити, чи впливає час польоту на ймовірність значно затримки прильоту (мається на увазі 10 і більше хвилин). Я подумав, що я буду використовувати логістичну регресію з тим, що час польоту є передбачувачем, і чи буде кожен рейс значно затриманий (купа Бернулліса) як відповідь. Я використав наступний код ...

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

... але отримав наступний вихід.

> 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

Що означає, що алгоритм не сходився? Я думав, що це було тому, що BigDelayзначення були TRUEі FALSEзамість 0і 1, але я отримав таку ж помилку після того, як все перетворив. Будь-які ідеї?


Перша думка: Ідеальне розлучення , тобто предиктор "занадто хороший", логи переходять до +/- нескінченності і все перепадає. Друга думка: чи робить код тим, що, на вашу думку, робить? Імена вашої змінної, схоже, не зовсім відповідають вашому опису. Ви можете уточнити , що дані більш точно, так як вона виглядає , як ви , можливо , намагається передбачити що - небудь з собою.
кон'югатприор

1
не впевнений, що я заслуговую на "прийняти". У відповіді @Conjugate Prior було пояснено, що з вашою моделлю не так. Я подумав, що варто пояснити попередження, яке ви згадали з точки зору алгоритму.
Відновіть Моніку - Г. Сімпсон

3
Якщо у вас фактичний час затримки, ви, швидше за все, отримаєте кращу інформацію, моделюючи їх, а не зменшуючи їх до двійкової змінної.
whuber

пов’язане питання
user603

ви можете спробувати функцію glm1 (). Він подолав проблему конвергенції

Відповіді:


33

glm()використовує ітеративний алгоритм повторних зважених найменших квадратів. Алгоритм вражає максимальну кількість дозволених ітерацій перед конвергенцією сигналів. За замовчуванням задокументовано ?glm.control25. Ви параметри керування передаєте як список у glmвиклику:

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

Як говорить @Conjugate Prior, ви, здається, прогнозуєте відповідь із даними, які використовуються для їх генерування. У вас є повна розлука, як ArrDelay < 10передбачить будь- яка людина, FALSEі будь- ArrDelay >= 10яка передбачить TRUE. Інше попереджувальне повідомлення говорить про те, що встановлені ймовірності для деяких спостережень були фактично 0 або 1, і це хороший показник, що з моделлю щось не так.

Два попередження можуть йти рука об руку. Функція ймовірності може бути досить рівною, коли деякі набувають великих розмірів, як у вашому прикладі. Якщо ви дозволите більше ітерацій, коефіцієнти моделі будуть розходитись далі, якщо у вас є проблеми з розділенням.β^i


Чи можете ви пояснити, що саме ви маєте на увазі під зближенням моделі?
Бах

1
Під конвергенцією я маю на увазі, що параметри, що оцінюються в моделі, не змінюються (або змінюються лише менше, ніж деякі невеликі допуски) між ітераціями. Тут параметри стають все більш великими і примірні зупинки через обмеження в ітераціях, але оцінки параметрів сильно змінилися між передостанньою та останньою ітераціями та як такі не зблизились.
Відновіть Моніку - Г. Сімпсон,

6

Ви можете спробувати перевірити, чи зменшує зміщення зміщення Фірта з вашим набором даних. Це пеніалізований імовірнісний підхід, який може бути корисним для наборів даних, які виробляють розбіжності, використовуючи стандартний glmпакет. Іноді його можна використовувати замість виключення тієї змінної, яка виробляє повне / майже повне розділення.

Для формулювання скорочення зміщення ( -терміна при асимптотичному розширенні зміщення максимального оцінювача ймовірності видаляється з використанням класичного розширення кумулянтів як мотивуючий приклад), будь ласка, перевірте http: // biomet. oxfordjournals.org/content/80/1/27.af AbstractO(n1)

Зменшення зміщення Фірта реалізовано в пакеті R logistf: http://cran.r-project.org/web/packages/logistf/logistf.pdf

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.