Модель логистической регрессии не сходится


40

У меня есть некоторые данные о рейсах авиакомпании (в фрейме данных 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 Приора объяснил, что случилось с вашей моделью. Я подумал, что стоит объяснить предупреждение, которое вы упомянули в терминах алгоритма.
Восстановить Монику - Г. Симпсон

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, и это хороший показатель, что у вас что-то не так с моделью.

β^я


Не могли бы вы объяснить, что именно вы подразумеваете под сходимостью моделей здесь?
Бах

1
Под сходимостью я подразумеваю, что параметры, оцениваемые в модели, не меняются (или меняются меньше, чем какой-то небольшой допуск) между итерациями. Здесь параметры становятся все больше и подходят для остановок из-за ограничения на итерации, но оценки параметров сильно изменились между предпоследней и последней итерациями и поэтому не сходятся.
Восстановить Монику - Дж. Симпсон

6

Вы можете попытаться проверить, работает ли уменьшение смещения Фёрта с вашим набором данных. Это наказанный подход правдоподобия, который может быть полезен для наборов данных, которые производят расхождения, используя стандартный glmпакет. Иногда его можно использовать вместо исключения той переменной, которая производит полное / почти полное разделение.

О(N-1)

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.