mgcv: gam.check() 低 p 值但没有足够的变量组合来增加基函数 k

mgcv: gam.check() low p-value but not enough variable combinations to increase basis functions k

我有一个类似的问题here,但不同之处在于我无法增加 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 以来将可见性作为线性变量添加到模型中可能会更好?

干杯

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

在这种情况下,将其分别拟合为Visibilitypoly(Visibility, 2)用于二次参数项的线性。

请注意 k'edf 之间的差异并没有那么大,因为它不可能大得多。 k' 是给定可识别性约束的可能最大值,并且 edf 尽可能小,因为平滑具有未惩罚的空值 space(线性分量)。