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

ATM*_*hew 33 statistics r 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 
Run Code Online (Sandbox Code Playgroud)

我也在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 
Run Code Online (Sandbox Code Playgroud)

编辑:

> 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" ...
Run Code Online (Sandbox Code Playgroud)

jor*_*ran 36

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

对于二项式GLM中关于"拟合概率数值0或1发生"的警告信息的背景,参见Venables&Ripley(2002,pp.197-8).

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

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

一个这本书的作者的稍微详细的评论在这里.因此,这里的教训是仔细查看预测器的其中一个级别.(和谷歌的警告信息!)

  • +1好答案.只是补充一点:看模型,模型诊断,有时是不同的模型是很好的.例如,尝试分类树.这可能告诉你(a)你有一个很好的预测器(好东西),或者(b)你有一些抽样问题(坏事). (7认同)
  • 这个答案是否只解决了 OP 问题中的第二个警告?我在 http://discuss.analyticsvidhya.com/t/warning-message-glm-fit-algorithm-did-not-converge/5299 找到了调整参数“maxit”的建议(未在文档中列出) `glm`,但作为 `control` 参数的一部分传递给 `glm.fit`,然后传递给 `glm.control`),这似乎解决了第一个警告 `1: glm.fit: algorithm did not为我收敛`。 (2认同)
  • @par “解决”这个问题的算法方法通常是采用某种形式的正则化。但在模型背景下重新考虑协变量的选择以及它们的意义也是明智的。正如引文所示,您通常可以通过查找 +/- 10 的系数来发现问题变量。 (2认同)

Tom*_*ers 10

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

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

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

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

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

(d) 采用贝叶斯,参见。论文Gelman 等人 (2008),“逻辑和其他回归模型的弱信息默认先验分布”,Ann。应用。统计。, 2 , 4,例如使用brms包或使用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