r - 广义加法模型。根据我放的 K 尺寸,我得到不同的结果
问题描述
这是我在社区提出的第一个问题,所以我希望我做的正确。
直接针对我的问题。基本上,我正在研究多样性对森林社区生产力的净影响的时间动态。
为了分析这一点,我执行了广义加法模型(GAM)。我最终得到了以下模型。
model_1<-gam(NE~s(Inv,bs='cr') +
s(FdisPC1,bs='cr') +
s(CWM_PC1,bs='cr') +
s(CWM_PC2,bs='cr') +
ti(Inv,FdisPC1)+
ti(Inv,CWM_PC1)+
ti(Inv,CWM_PC2)+
s(Block,bs='re'),
data=BioEffectsTime)
其中 Inv 是库存 (1,2,3...11),FdisPC1 是我之前做过的 PCA 的主成分 1 (PC1) 的功能离散度,CWM_PC1,是 PC1 的社区加权平均值,CWM_PC2,相同,但 PC2。
这里是模型的结果。
但是,如果我执行 gam.check(model_1),我们可以看到我需要增加 K 个维度,因为 edf 接近 k'。
所以,我执行了相同的模型,但现在将 K 值增加到我可以的最大值(即 24)。
model_2<-gam(NE~s(Inv,bs='cr') +
s(FdisPC1,k=24,bs='cr') +
s(CWM_PC1,k=24,bs='cr') +
s(CWM_PC2,k=24,bs='cr') +
ti(Inv,FdisPC1)+
ti(Inv,CWM_PC1)+
ti(Inv,CWM_PC2)+
s(Block,bs='re'),
data=BioEffectsTime)
现在我们可以看到 FdisPC1 和 CWM_PC1 不再重要了。
如果我们现在执行 gam.check (model_2),我们会看到它看起来比以前的模型好得多。
但是,我执行了第三个模型,我设置了 K=20 的值,以查看它如何影响模型。
model_3<-gam(NE~s(Inv,bs='cr') +
s(FdisPC1,k=20,bs='cr') +
s(CWM_PC1,k=20,bs='cr') +
s(CWM_PC2,k=20,bs='cr') +
ti(Inv,FdisPC1)+
ti(Inv,CWM_PC1)+
ti(Inv,CWM_PC2)+
s(Block,bs='re'),
data=BioEffectsTime)
如果我们再次对模型进行 gam.check,我们会发现它看起来也不错。
此时,我会选择model_3,因为与model_2相比,它的AIC值较低。
AIC_model_2 = -2635,98
AIC_model_3 = -2637,106
但是,我不知道为什么 K 维度的微小变化会对结果产生如此大的影响。你对此有什么解释吗??我错过了什么吗?更重要的是,有谁知道如何处理这个?我在这一点上迷路了,我真的不知道我应该选择哪种型号。
非常感谢您提前
解决方案
没有数据和绘图很难说,但总的来说,由于正则化,ak 大于你实际需要的应该没问题。您可以尝试设置method = "REML"
或method = "GCV"
查看这是否会影响结果。要检查一个模型是否明显优于另一个模型,您还可以使用 ANOVA 分析anova(mod1, mod2)
。
推荐阅读
- angular8 - Angular 6+ 中的公共私有 RSA 密钥生成
- javascript - 未捕获的 ReferenceError:未定义项目
- neo4j - Neo4j 中的节点合并
- awk - 如何用awk比较两个csv文件的两列?
- aws-glue - 如何使用参数
- json - 提取 JSONObject 并遍历 HashMap 字段
- r - 将列名中以“string”开头的所有非 NA 值转换为 1,将 NA 转换为 0
- reactjs - 图像 url 路径设置以在网站上显示来自 firebase 存储的图像
- c# - 如何在 Razor 页面中使用 Humanizer?/ 'ByteSizeExtensions.Bytes(byte)' 是一个方法,在给定的上下文中是无效的
- python - ValueError:无法配置处理程序“errors_file”:[Errno 2] 没有这样的文件或目录:“/log/ErrorLoggers.log”