У меня есть некоторые данные о рейсах авиакомпании (в фрейме данных 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
, но я получил ту же ошибку после того, как я все преобразовал. Любые идеи?
r
logistic
separation
Дэниэл Стендж
источник
источник
Ответы:
glm()
использует итеративный повторно взвешенный алгоритм наименьших квадратов. Алгоритм достиг максимального числа разрешенных итераций перед сигналом сходимости. По умолчанию задокументировано значение?glm.control
25. Вы передаете управляющие параметры в виде списка вglm
вызове:Как говорит @Conjugate Prior, вы, похоже, предсказываете ответ с помощью данных, использованных для его генерации. У вас есть полное разделение, так как любой
ArrDelay < 10
будет предсказывать,FALSE
и любойArrDelay >= 10
будет предсказыватьTRUE
. Другое предупреждающее сообщение говорит вам, что подобранные вероятности для некоторых наблюдений были фактически 0 или 1, и это хороший показатель, что у вас что-то не так с моделью.источник
Вы можете попытаться проверить, работает ли уменьшение смещения Фёрта с вашим набором данных. Это наказанный подход правдоподобия, который может быть полезен для наборов данных, которые производят расхождения, используя стандартный
glm
пакет. Иногда его можно использовать вместо исключения той переменной, которая производит полное / почти полное разделение.Уменьшение смещения Фёрта реализовано в R-пакете
logistf
: http://cran.r-project.org/web/packages/logistf/logistf.pdfисточник