Logistic回归模型不收敛


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值是TRUEand FALSE而不是0and 1,但是转换完所有内容后出现了同样的错误。有任何想法吗?


首先想到的是:完美分离,这意味着预测变量“太好了”,对数变为+/-无穷大,一切都掉了。再想一想:代码是否按照您的想法去做?您的变量名似乎与您的描述不太吻合。您可能会详细说明数据的准确性,因为看起来您可能正在尝试自己预测一些数据。
conjugateprior 2010年

1
不确定我应得的“接受”。@Conjugate Prior的答案解释了您的模型出了什么问题。我认为有必要解释您在算法方面提到的警告。
恢复莫妮卡-辛普森

3
如果您具有实际的延迟时间,则可以通过对它们建模而不是将其简化为二进制变量来获得更好的信息。
ub


您可以尝试glm1()函数。它克服了聚合的问题

Answers:


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


您能否解释一下此处的模型收敛是什么意思?
巴赫(Bach)

1
通过收敛,我的意思是模型中估计的参数在迭代之间不会更改(或仅更改为小于一些小的容差)。在这里,参数由于迭代的限制而变得越来越大,并且拟合停止,但是参数估计在倒数第二次迭代和最后一次迭代之间变化很大,因此尚未收敛。
恢复莫妮卡-G.辛普森,

6

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

O(n1)

在R-package中可以实现Firth的偏差减少logistfhttp : //cran.r-project.org/web/packages/logistf/logistf.pdf

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.