使用 gam.check() 检查基础尺寸结果的 GAM 拟合问题

问题描述

我正在使用 R 包“mgcv”来创建用于预测海鸟分布的 GAM。我在解释一些模型(每个物种一个模型)的 gam.check() 结果时遇到了一些问题。

我正在使用负二项式族和对数链接,以及样本区域对数的偏移量。我有 13 个可能的预测变量。我的响应数据是来自调查的离散计数数据,它是高度零膨胀的。

在每个候选中,我检查曲线(在整个模型中使用 0.8 作为阈值),并且我的模型项使用 summary() 很重要,(否则它们会被删除),并且模型每次都会收敛。 尽管如此,我仍然从 gam.check() 中获得了非常显着的结果。这是尽管 edf 远低于 k。 我试过增加 ka 很多,但它不会对结果产生影响,也不经常对 edf 产生影响,我也尝试过使用花呢和零膨胀泊松 (zip) 系列,但这也没有太大区别.然而,我会说,我的 QQ 情节并不好看。

permissions

有谁知道为什么会发生这种情况?我认为该模型不稳定,不应使用,但是我不知道如何修复它。几乎所有物种都会发生这种情况,因此并非特定于一个文件

这是我的模型

   gam_nb <- gam(COUNT_SUM ~ s(X_MEAN_2,k=25) + s(Currents_northward,k=25),data=my_data,family = "nb",select=TRUE,offset=LOG_AREA_SUM,method = "REML")

这是诊断结果

Method: REML   Optimizer: outer newton
full convergence after 7 iterations.
Gradient range [-0.002334867,0.0005403022]
(score 1783.03 & scale 1).
Hessian positive definite,eigenvalue range [1.846342e-06,121.4505].
Model rank =  49 / 49 

Basis dimension (k) checking results. Low p-value (k-index<1) may
indicate that k is too low,especially if edf is close to k'.

                        k'  edf k-index p-value    
s(X_MEAN_2)           24.0 11.4    0.66  <2e-16 ***
s(Currents_northward) 24.0 11.8    0.69   0.025 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

现在看看当我增加 k 时会发生什么

gam_nb <- gam(COUNT_SUM ~ s(X_MEAN_2,k=100) + s(Currents_northward,k=100),method = "REML")


Method: REML   Optimizer: outer newton
full convergence after 7 iterations.
Gradient range [-6.715822e-05,1.121576e-05]
(score 1783.004 & scale 1).
Hessian positive definite,eigenvalue range [7.32924e-06,120.848].
Model rank =  199 / 199 

Basis dimension (k) checking results. Low p-value (k-index<1) may
indicate that k is too low,especially if edf is close to k'.

                        k'  edf k-index p-value    
s(X_MEAN_2)           99.0 12.0    0.67  <2e-16 ***
s(Currents_northward) 99.0 13.1    0.68  <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

解决方法

您不应该根据 summary() 输出中的项/平滑度的类似 Wald 显着性检验保留项来进行模型选择;您注定会偏向于偏低(即排除时假设为 0)或偏高(因为极端效应/函数更有可能显着,但也可能是虚假的)。

您使用的是 select = TRUE,因此只需包含您认为对响应很重要的一组协变量,并拟合该单个模型,然后对其进行解释。

gam.check() 的输出是启发式的;并且只是表明模型存在一些问题。表面上您正在运行它来检查基础维度,但是当项的 EDF 与最大值 (k') 相比较低但 p 值仍然较低时,这可能表明模型存在其他问题。您可能遗漏了协变量(您根据显着性排除的那些因素很可能控制了现在显示为未建模依赖的响应中的变化)。

要检查这一点,请使用所有协变量(单独或组合)对残差进行建模,并针对协变量绘制残差。您可能还遗漏了一些您没有想到或测量过的其他协变量。除非您可以为这种未建模的“效果”引入一个替代术语,否则您的可用选项较少,因为您对此无能为力。

此外,请考虑数据中是否存在未建模的空间或时间结构或聚类(来自相同位置的重复观察)。所有这些都会导致 gam.check() 中的启发式测试失败。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...