输出anova()
是一系列似然比检验。输出中的行是:
- 输出中的第一行对应于最简单的模型,只有一个平滑的
x1
(我忽略了这个因素x0
,因为在你的例子中没有考虑到它)——这没有针对任何更简单的东西进行测试,因此最后几列条目是空的。
第二行是第 1 行中的模型和第 2 行中的模型之间的似然比检验。以0.97695
额外的自由度为代价,剩余偏差减少了1180.2
. x2
如果 的真实效果为 0 ,则以 <1 自由度为代价的这种偏差减少(或相反地解释偏差增加)是极不可能的。
为什么0.97695
自由度会增加?好吧,线性函数x2
将向模型添加 1 个 df,但更平滑的x1
将比以前受到更多的惩罚,因此使用的有效自由度略少,因此整体自由度的变化 <1。
- 第三行与我上面描述的完全相同,但用于比较第二行中的模型和第三行中的模型:即第三行正在评估从建模
x2
为线性项到建模x2
为平滑函数。同样,如果与 相关的额外参数都等于 0 ,则模型拟合的这种改进(偏差的变化现在以更多的自由度为2211.8
代价)是不可能的。7.37288
s(x2)
总之,第 2 行表示模型 2 比模型 1 更适合,因此 的线性函数x2
总比没有 的效果好x1
。但第 3 行表明模型 3 比模型 2 更适合数据,因此 的平滑函数x2
优于 的线性函数x2
。这是对模型的顺序分析,而不是与最简单模型的一系列比较。
然而…
他们所展示的并不是最好的方法——最近的理论表明,输出summary(m3)
将具有最“正确”的覆盖属性。此外,要在模型之间进行选择,可能应该select = TRUE
在拟合完整模型(具有两个平滑的模型)时使用,这将允许收缩包含具有线性x2
甚至没有此变量影响的模型的项。它们也不适合使用 REML 或 ML 平滑度选择,我们许多mgcv用户会考虑默认选项(即使它不是 中的实际默认值gam()
)
我会做的是:
library("mgcv")
gam_data <- gamSim(eg=5)
m3 <- gam(y ~ x0 + s(x1) + s(x2), data = gam_data, select = TRUE,
method = "REML")
summary(m3)
最后一行产生以下内容:
> summary(m3)
Family: gaussian
Link function: identity
Formula:
y ~ x0 + s(x1) + s(x2)
Parametric coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 8.4097 0.2153 39.053 < 2e-16 ***
x02 1.9311 0.3073 6.284 8.93e-10 ***
x03 4.4241 0.3052 14.493 < 2e-16 ***
x04 5.7639 0.3042 18.948 < 2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
Approximate significance of smooth terms:
edf Ref.df F p-value
s(x1) 2.487 9 25.85 <2e-16 ***
s(x2) 7.627 9 76.03 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
R-sq.(adj) = 0.769 Deviance explained = 77.7%
-REML = 892.61 Scale est. = 4.5057 n = 400
我们可以看到,这两个平滑项都与空函数显着不同。
正在做select = TRUE
的是在惩罚的零空间上施加额外的惩罚(这是完全平滑的样条曲线部分)。如果你没有这个,平滑度选择只能惩罚平滑回到线性函数(因为进行平滑度选择的惩罚只适用于基础的非平滑(摆动)部分)。为了执行选择,我们还需要能够惩罚零空间(基础的平滑部分)。
select = TRUE
通过使用添加到模型中所有平滑项的第二个惩罚来实现这一点(Marra and Wood,2011)。这就像一种收缩,将所有平滑项拉向 0,但它会将多余的项更快地拉向 0,因此如果它们没有任何解释能力,则将它们从模型中选择出来。在评估平滑的重要性时,我们为此付出了代价;注意Ref.df
上面的列(9 来自 的默认值k = 10
,对于具有中心约束的薄板样条曲线意味着 9 个基函数),而不是为样条曲线支付 2.5 和 7.7 自由度,我们支付 9 度每个人的自由。这反映了我们已经完成选择的事实,我们不确定模型中应该包含哪些术语。
注意:重要的是不要anova(m1, m2, m3)
在使用select = TRUE
. 如 中所述?mgcv:::anova.gam
,所使用的近似值对于在其零空间上进行惩罚的平滑可能非常糟糕。
在评论中,@BillyJean 提到使用 AIC 进行选择。Simon Wood 及其同事 (Wood et al, 2016) 最近的工作推导出了一个 AIC,它解释了由于我们估计了模型中的平滑度参数而导致的额外不确定性。这个 AIC 工作得相当好,但是当 IIRC 平滑接近线性函数时,有一些关于 AIC 推导的行为的讨论。无论如何,AIC 会给我们:
m1 <- gam(y ~ x0 + s(x1), data = gam_data, method = "ML")
m2 <- gam(y ~ x0 + s(x1) + x2, data = gam_data, method = "ML")
m3 <- gam(y ~ x0 + s(x1) + s(x2), data = gam_data, method = "ML")
AIC(m1, m2, m3)
> AIC(m1, m2, m3)
df AIC
m1 7.307712 2149.046
m2 8.608444 2055.651
m3 16.589330 1756.890
请注意,我使用 ML 平滑度选择重新调整了所有这些,因为我不确定 AIC 何时会做什么,select = TRUE
并且您必须小心比较具有不同固定效果的模型,这些模型没有完全受到惩罚,使用 REML。
推论又是清楚的;与其他两个模型相比,具有平滑度的模型x1
具有明显更好的拟合度。x2
Marra, G. & Wood, SN 广义加法模型的实用变量选择。计算。统计。数据肛门。55, 2372–2387 (2011)。
Wood, SN, Pya, N. & Säfken, B. 一般平滑模型的平滑参数和模型选择。J.上午。统计。副教授。111, 1548–1563 (2016)。