逻辑回归模型不收敛

机器算法验证 r 物流 分离
2022-02-11 10:36:10

我有一些关于航空公司航班的数据(在一个名为 的数据框中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值是TRUEandFALSE而不是0and 1,但是在转换所有内容后我得到了同样的错误。有任何想法吗?

2个回答

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变大,就像你的例子一样。如果您允许更多的迭代,如果您有分离问题,模型系数将进一步发散。

您可以尝试检查 Firth 的偏差减少是否适用于您的数据集。这是一种惩罚似然方法,可用于使用标准glm包产生分歧的数据集。有时可以使用它来代替消除产生完全/几乎完全分离的变量。

对于减少偏差的公式(O(n1)- 使用经典累积量扩展作为激励示例删除最大似然估计器偏差的渐近扩展中的项)请查看 http://biomet.oxfordjournals.org/content/80/1/27.abstract

Firth 的偏差减少在 R 包中实现logistf: http: //cran.r-project.org/web/packages/logistf/logistf.pdf