所以这是一个非常简单的问题,只是似乎无法弄清楚。
我正在使用 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" ...
如果您查看
?glm
(甚至在 Google 中搜索第二条警告消息),您可能会从文档中偶然发现这一点:
有关二项式 GLM 的“出现数字 0 或 1 的拟合概率”的警告消息的背景,请参阅 Venables 和 Ripley(2002 年,第 197-8 页)。
现在,并不是每个人都拥有那本书。但假设我这样做是符合犹太教规的,以下是相关段落:
有一种相当常见的情况,其中两种收敛 问题和 Hauck-Donner 现象可能会发生。这是当 拟合概率极其接近于零或一。考虑一个 包含数千个病例和大约 50 个二进制文件的医疗诊断问题 解释变量(可能是由于编码较少的分类变量而产生的) 变量);这些指标之一很少是真实的,但总是 表明该疾病的存在。然后拟合概率 具有该指标的案例应该是 1 个,这只能实现 取 βi = ∞。
的结果将是 警告和估计系数约为 +/- 10。 统计文献中对此进行了相当广泛的讨论, 通常声称不存在最大似然估计;看 索特纳和达菲(1989,第 234 页)。glm
本书的一位作者在这里进行了更详细的评论。所以这里的教训是仔细观察你的预测因子的一个水平。 (并谷歌警告消息!)
这可能是由于完全分离,即一组完全由 0 或 1 组成。
有几种选择可以解决这个问题:
(a) 使用 Firth 的惩罚似然方法,如 R 中的 loggerf、brglm 或 brglm2 包中所实现。这使用 Firth (1993)“最大似然估计的偏差减少”中提出的方法,生物计量学,80,1.;这消除了最大似然估计中的一阶偏差。
(b) 通过在精确条件逻辑回归中使用中值无偏估计。 R 中的包 elrm 或 logisticiX 可以做到这一点。
(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/5354/logistic-regression-model-does-not-converge?rq=1
如果您已正确指定 GLM 公式和相应的输入(即设计矩阵、链接函数等)。由于迭代重新加权最小二乘 (IRLS) 算法中使用的迭代次数不足,glm 算法可能无法收敛。在 R 中将 maxit=25(默认)更改为 maxit=100。