r - 如何修复 R 中发生警告的数字拟合概率 0 或 1

标签 r

为什么我在运行 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/

相关文章:

r - Beta 分布的特征函数

r - 在 R 中绘制回归线

R:加速 'table()' 数据表对象的操作

r - 初始化图形设备时如何设置设备复制参数?

r - 在R中的另一列下方插入多列

r - 相对频率表怎么画

r - R : Find the catch 中的积分/积分

r - 如何将 "descending sort in data table"包装成一个函数?

r - 在 data.frame 命令中从列表中指定列名

r - 根据输入更改传单 map ,无需重绘(多个多边形)