39

所以这是一个非常简单的问题,只是似乎无法弄清楚。

我正在使用 glm 函数运行 logit,但不断收到与自变量相关的警告消息。它们被存储为因子,我已将它们更改为数字但没有运气。我也将它们编码为 0/1,但这也不起作用。

请帮忙!

> mod2 <- glm(winorlose1 ~ bid1, family="binomial")
Warning messages:
1: glm.fit: algorithm did not converge 
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

我也在 Zelig 中尝试过,但类似的错误:

> mod2 = zelig(factor(winorlose1) ~ bid1, data=dat, model="logit")
How to cite this model in Zelig:
Kosuke Imai, Gary King, and Oliva Lau. 2008. "logit: Logistic Regression for Dichotomous Dependent Variables" in Kosuke Imai, Gary King, and Olivia Lau, "Zelig: Everyone's Statistical Software," http://gking.harvard.edu/zelig
Warning messages:
1: glm.fit: algorithm did not converge 
2: glm.fit: fitted probabilities numerically 0 or 1 occurred 

编辑:

> str(dat)
'data.frame':   3493 obs. of  3 variables:
 $ winorlose1: int  2 2 2 2 2 2 2 2 2 2 ...
 $ bid1      : int  700 300 700 300 500 300 300 700 300 300 ...
 $ home      : int  1 0 1 0 0 0 0 1 0 0 ...
 - attr(*, "na.action")=Class 'omit'  Named int [1:63021] 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 ...
  .. ..- attr(*, "names")= chr [1:63021] "3494" "3495" "3496" "3497" ...
4

3 回答 3

45

如果您查看?glm(甚至在 Google 上搜索您的第二条警告消息),您可能会从文档中偶然发现:

有关二项式 GLM 的“出现数字 0 或 1 的拟合概率”警告消息的背景,请参见 Venables & Ripley (2002, pp. 197-8)。

现在,并不是每个人都有那本书。但是假设我这样做是犹太教,这是相关的段落:

在一种相当普遍的情况下,收敛问题和 Hauck-Donner 现象都可能发生。这是当拟合概率非常接近零或一时。考虑一个有数千个病例和大约 50 个二进制解释变量的医学诊断问题(这可能是由于编码较少的分类变量而产生的);这些指标之一很少是真的,但总是表明疾病存在。那么具有该指标的案例的拟合概率应该为 1,这只能通过取 β i = ∞ 来实现。结果来自glm将是警告,估计系数约为 +/- 10。在统计文献中对此进行了相当广泛的讨论,通常声称不存在最大似然估计;参见 Sautner 和 Duffy (1989, p. 234)。

这本书的一位作者在这里进行了更详细的评论。因此,这里的教训是仔细查看您的预测器的一个级别。(和谷歌警告信息!)

于 2011-12-21T21:21:40.440 回答
5

这可能是由于完全分离,即一组完全由 0 或 1 组成。

有几种选择可以解决这个问题:

(a) 使用 Firth 的惩罚似然法,在 R 中的logistfbrglm包中实现。这使用了 Firth (1993),“最大似然估计的偏差减少”,Biometrika80,1中提出的方法;从最大似然估计中消除一阶偏差。

(b) 通过在精确条件逻辑回归中使用中值无偏估计。R 中的elrmlogistiX包可以做到这一点。

(c) 使用 LASSO 或弹性网络正则化逻辑回归,例如使用 R 中的glmnet包。

(d) 去贝叶斯,cf。论文Gelman 等人 (2008),“逻辑和其他回归模型的信息量不足的默认先验分布”,Ann。应用程序。统计。, 2 , 4和 arm 包中的函数bayesglm

(e) 使用隐藏的逻辑回归模型,如 Rousseeuw & Christmann (2003)“逻辑回归中的抗分离和异常值的鲁棒性”,计算统计和数据分析43、3中所述,并在 R 包hlr中实现。

您需要先将您的因素重新编码为因素,但使用dat$bid1 = as.factor(dat$bid1))

此处还讨论了此问题的解决方案:

https://stats.stackexchange.com/questions/11109/how-to-deal-with-perfect-separation-in-logistic-regression

https://stats.stackexchange.com/questions/45803/logistic-regression-in-r-resulted-in-perfect-separation-hauck-donner-phenomenon

https://stats.stackexchange.com/questions/239928/is-there-any-intuitive-explanation-of-why-logistic-regression-will-not-work-for

https://stats.stackexchange.com/questions/5354/logistic-regression-model-does-not-converge?rq=1

于 2019-01-03T15:51:53.030 回答
1

如果您正确指定了 GLM 公式和相应的输入(即设计矩阵、链接函数等)。由于迭代重加权最小二乘 (IRLS) 算法中使用的迭代次数不足,glm 算法可能不会收敛。在 R 中将 maxit=25(默认)更改为 maxit=100。

于 2018-12-19T23:33:34.477 回答