为什么在运行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、预测等(。( - 使用正交多项式CCD_ 2;生的";二次型CCD_ 3。(这将改变这两个参数及其p值等,但不会影响模型的整体拟合。(
如果你不能让警告消失,我会仔细检查以下问题:
- 您是否有完全分离的症状,即大的(绝对(参数值(例如
|beta|>8
(和可能大得离谱的标准误差/p-值?请参阅此处,此处,此处以获取如何处理它的建议(例如,用似然比检验代替Wald检验;通过brglm2
的Firth回归;具有正则化先验的贝叶斯模型( - 您的拟合通常有意义吗,即诊断看起来正常(例如,请参阅
DHARMa
软件包(,预测值是否合理?(当然,这是你应该始终检查的事情,但要格外小心(
之后,忽略警告,继续分析。