首页 > 解决方案 > 广义加法模型。根据我放的 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'。

gam.check 表(model_1)

所以,我执行了相同的模型,但现在将 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),我们会看到它看起来比以前的模型好得多。

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,我们会发现它看起来也不错。

gam.check(model_3) 表

此时,我会选择model_3,因为与model_2相比,它的AIC值较低。

AIC_model_2 = -2635,98

AIC_model_3 = -2637,106

但是,我不知道为什么 K 维度的微小变化会对结果产生如此大的影响。你对此有什么解释吗??我错过了什么吗?更重要的是,有谁知道如何处理这个?我在这一点上迷路了,我真的不知道我应该选择哪种型号。

非常感谢您提前

标签: rstatisticsgam

解决方案


没有数据和绘图很难说,但总的来说,由于正则化,ak 大于你实际需要的应该没问题。您可以尝试设置method = "REML"method = "GCV"查看这是否会影响结果。要检查一个模型是否明显优于另一个模型,您还可以使用 ANOVA 分析anova(mod1, mod2)


推荐阅读