r - 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,将可见性作为线性变量添加到模型中会更好吗?
干杯
解决方案
尝试平滑只有三个唯一值的变量没有多大意义。该效果必须在很大程度上偏离非线性,才能根据线性拟合进行识别。
在这种情况下,只需将其分别拟合为Visibility
或拟合poly(Visibility, 2)
二次参数项的线性即可。
请注意 和 之间的区别k'
并edf
没有那么大,因为它不可能更大。k'
是给定可识别性约束可能的最大值,并且edf
在平滑具有未惩罚的零空间(线性分量)的情况下尽可能小。
推荐阅读
- sorting - For Each 循环并在找到特定名称时停止
- ruby - Ruby Sequel Gem 无法查找具有不同所有者的表
- ruby - 点(.)和双冒号(::)在访问类方法中的区别
- java - 为什么它不打印?链表
- php - 如何使用 base64_encode 使用单引号和双引号对密码进行编码
- constraints - 流口水中的算术运算符
- .net - .Net Framework websocket 有效负载损坏
- shell - 安装包并捕获错误的 Bash 脚本
- docker - 使用 Helm2 的 Kubernetes 滚动更新
- cypress - 将多个环境的赛普拉斯结果组合为仪表板中的单次运行