为什么我得到“算法没有收敛”和用glm“用数字0或1拟合概率”警告?

时间:2011-12-21 20:49:40

标签: r statistics r-zelig

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

我正在使用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" ...

3 个答案:

答案 0 :(得分:36)

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

  

对于二项式GLM的“数字0或1发生的拟合概率”的警告信息的背景,请参见Venables&amp;里普利(2002年,第197-8页)。

现在,不是每个人都有那本书。但是假设这对我来说是犹太人,这是相关的段落:

  

有一个相当普遍的情况,两者都趋同   可能会出现问题和Hauck-Donner现象。这是什么时候的   拟合概率非常接近于零或一。考虑一下   医疗诊断问题有数千例和50左右的二进制   解释变量(可能来自编码较少的分类   变量);其中一个指标很少是真实的,但总是如此   表明疾病存在。然后拟合概率   具有该指标的案件应该是一个,只能实现   通过β i =∞。 glm的结果将是。{1}}   警告和大约+/- 10的估计系数。已经有   在统计文献中对此进行了相当广泛的讨论,   通常声称不存在最大似然估计;看到   Sautner和Duffy(1989,p.234)。

本书的一位作者更详细地评论了here。因此,这里的教训是仔细查看预测器的其中一个级别。 (还有Google的警告信息!)

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

有几种解决方法:

(a)使用Firth的惩罚似然法,该方法在R的软件包logistfbrglm中实现。它使用Firth(1993)提出的方法“最大似然估计的Bias减少”。 , Biometrika 80 ,1。从最大似然估计中去除一阶偏差。

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

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

(d)进行贝叶斯运算,请参阅。手臂包装中的论文Gelman et al (2008), "A weakly informative default prior distribution for logistic & other regression models", Ann. Appl. Stat., 2, 4和功能bayesglm

(e)使用隐藏的Logistic回归模型,如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