首页 > 解决方案 > mgcv: gam.check() 低 p 值但没有足够的变量组合来增加基函数 k

问题描述

我在这里描述了一个类似的问题,但不同之处在于我无法在不出现错误的情况下增加 k 值:

Error in smooth.construct.tp.smooth.spec(object, dk$data, dk$knots) : 
  A term has fewer unique covariate combinations than specified maximum degrees of freedom

我正在尝试对 GAM 中具有多个协变量的观察物种的计数数据进行建模,例如月球(照明百分比)、云量(百分比)、调查持续时间(分钟)等。

> gam_Sp1 <- gam(ln~s(LunarPerc, k=20) + s(Duration, k=30) + s(Clouds, k=20) 
+ (Visibility, k=3) + Seastate + WindDir, data=df_count, method="REML")

变量可见性是这里的问题,由于独特的组合,我不能将基函数 k 增加到高于 3。我已经排除了所有能见度 <90% 的调查,所以现在我的数据集中只有 90%、95% 和 100% 的值。这里的 gam.check() 输出可见度 k=3

> gam.check(gam_Sp1_perc_all) #all sign--> model unstable? NO,because:  

Method: REML   Optimizer: outer newton
full convergence after 10 iterations.
Gradient range [-5.630335e-05,5.578655e-05]
(score 204.5643 & scale 0.2980554).
Hessian positive definite, eigenvalue range [4.648033e-05,107.0027].
Model rank =  81 / 81 

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(LunarPerc) 19.00  1.51    0.98   0.370  
s(Duration)   29.00  1.00    1.07   0.830  
s(Clouds)     19.00  1.96    1.08   0.870  
s(Visibility)  2.00  1.00    0.88   0.035 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

能见度的 p 值很低,但我不能增加 k 值,我还能做什么?在这里,他们建议增加协变量的数量,但我认为我的模型已经足够了。edf 和 k 之间的差异也不大,所以有什么建议可能导致这种情况吗?或者,由于 edf=1,将可见性作为线性变量添加到模型中会更好吗?

干杯

标签: rgammgcv

解决方案


尝试平滑只有三个唯一值的变量没有多大意义。该效果必须在很大程度上偏离非线性,才能根据线性拟合进行识别。

在这种情况下,只需将其分别拟合为Visibility或拟合poly(Visibility, 2)二次参数项的线性即可。

请注意 和 之间的区别k'edf没有那么大,因为它不可能更大。k'是给定可识别性约束可能的最大值,并且edf在平滑具有未惩罚的零空间(线性分量)的情况下尽可能小。


推荐阅读