为什么我在运行 GLM 时收到此警告? pcurv 是平方
“glm.fit:出现数字 0 或 1 的拟合概率”
>summary(df.1)
lon lat Roughness Pcurv
Min. :-71.00 Min. :-29.98 Min. :-0.7575 Min. :-6.62627
1st Qu.:-68.70 1st Qu.:-23.90 1st Qu.:-0.7048 1st Qu.:-0.08573
Median :-67.34 Median :-19.13 Median :-0.4133 Median : 0.28108
Mean :-66.62 Mean :-20.71 Mean : 0.0000 Mean : 0.00000
3rd Qu.:-65.11 3rd Qu.:-17.45 3rd Qu.: 0.4076 3rd Qu.: 0.32911
Max. :-60.15 Max. :-14.07 Max. : 4.7961 Max. : 6.09728
Mean.MIN.Temp Mean.MAX.Temp Precipitation pres
Min. :-1.7400 Min. :-1.9045 Min. :-0.8101 Min. :0.0
1st Qu.:-0.7141 1st Qu.:-0.7716 1st Qu.:-0.6943 1st Qu.:0.0
Median :-0.4810 Median :-0.3799 Median :-0.4338 Median :0.5
Mean : 0.0000 Mean : 0.0000 Mean : 0.0000 Mean :0.5
3rd Qu.: 1.0841 3rd Qu.: 1.0467 3rd Qu.: 0.5794 3rd Qu.:1.0
Max. : 1.7223 Max. : 1.8859 Max. : 4.3427 Max. :1.0
grp
Min. :1
1st Qu.:2
Median :3
Mean :3
3rd Qu.:4
Max. :5
我的模型代码:
mdl.glm <- glm(pres~Roughness+Pcurv*I(Pcurv^2)+Mean.MIN.Temp+Mean.MAX.Temp, family=binomial(link=logit), data=subset(df.1,grp!=1))
最佳答案
警告意味着,当 R 在内部计算概率时,作为拟合过程的一部分,它们有时会“下溢/上溢” - 也就是说,它们非常接近 0 或 1,以至于无法将它们区分开来当使用 R 的标准 64 位浮点精度时(例如,值小于约 1e-308 或大于约 1-1e-16)。
对此您无能为力,它通常与数据结构有关。您也许可以通过以下两种通用策略来提高拟合的数值稳定性并避免警告:
- 将所有连续变量居中并缩放(例如使用
scale()
函数)。 (这将改变系数的数值,但不会改变它们的 p 值 [截距除外],并且根本不会影响模型的整体拟合(R^2、预测等)。)里> - 使用正交多项式
poly(Pcurv,2)
而不是“原始”二次方Pcurv + I(Pcurv^2)
。 (这将改变这两个参数及其 p 值等,但同样不会影响模型的整体拟合。)
如果您无法使警告消失,我会仔细检查以下问题:
- 您有 complete separation 的症状吗? ,即大(绝对)参数值(例如
|beta|>8
)以及可能大得离谱的标准误差/p 值?参见例如here , here , here有关如何处理的建议(例如,用似然比检验替换 Wald 检验;通过brglm2
进行 Firth 回归;使用正则化先验的贝叶斯模型) - 您的拟合总体上是否有意义,即诊断看起来正常(例如,参见
DHARMa
包),预测值是否合理? (当然,这是您应该始终检查的事情,但要格外小心)
之后,忽略警告并继续分析。
关于r - 如何修复 R 中发生警告的数字拟合概率 0 或 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67360883/