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 以来将可见性作为线性变量添加到模型中可能会更好?
干杯
尝试平滑只有三个唯一值的变量没有多大意义;该效果必须在很大程度上偏离非线性,才能根据线性拟合进行识别。
在这种情况下,将其分别拟合为Visibility
或poly(Visibility, 2)
用于二次参数项的线性。
请注意 k'
和 edf
之间的差异并没有那么大,因为它不可能大得多。 k'
是给定可识别性约束的可能最大值,并且 edf
尽可能小,因为平滑具有未惩罚的空值 space(线性分量)。
我有一个类似的问题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 值,还有什么我可以做的吗?
干杯
尝试平滑只有三个唯一值的变量没有多大意义;该效果必须在很大程度上偏离非线性,才能根据线性拟合进行识别。
在这种情况下,将其分别拟合为Visibility
或poly(Visibility, 2)
用于二次参数项的线性。
请注意 k'
和 edf
之间的差异并没有那么大,因为它不可能大得多。 k'
是给定可识别性约束的可能最大值,并且 edf
尽可能小,因为平滑具有未惩罚的空值 space(线性分量)。