ANOVA 比较模型

机器算法验证 r 方差分析 广义加法模型 毫克CV
2022-03-02 15:05:53

我正在这个网站上寻找关于 R 中 GAM 的研讨会:http: //qcbs.ca/wiki/r_workshop8

在本节的最后,2. Multiple smooth terms他们展示了一个示例,anova用于比较三个不同的模型以确定最佳拟合模型。输出是

  Analysis of Deviance Table
  Model 1: y ~ x0 + s(x1)
  Model 2: y ~ x0 + s(x1) + x2
  Model 3: y ~ x0 + s(x1) + s(x2)
    Resid. Df Resid. Dev      Df Deviance  Pr(>Chi)    
  1    394.08     5231.6                               
  2    393.10     4051.3 0.97695   1180.2 < 2.2e-16 ***
  3    385.73     1839.5 7.37288   2211.8 < 2.2e-16 ***
  ---
  Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

基于此,他们得出结论,模型 3 是最好的。我的问题是他们怎么看?

我目前的理解是:Pr(>Chi)模型 2 和 3 的 -value 都很小,因此它们比模型 1 更好。但是,他们使用什么其他变量来确定 3 优于 2?

2个回答

输出anova()是一系列似然比检验。输出中的行是:

  1. 输出中的第一行对应于最简单的模型,只有一个平滑的x1(我忽略了这个因素x0,因为在你的例子中没有考虑到它)——这没有针对任何更简单的东西进行测试,因此最后几列条目是空的。
  2. 第二行是第 1 行中的模型和第 2 行中的模型之间的似然比检验。以0.97695额外的自由度为代价,剩余偏差减少了1180.2. x2如果 的真实效果为 0 ,则以 <1 自由度为代价的这种偏差减少(或相反地解释偏差增加)是极不可能的。

    为什么0.97695自由度会增加?好吧,线性函数x2将向模型添加 1 个 df,但更平滑的x1将比以前受到更多的惩罚,因此使用的有效自由度略少,因此整体自由度的变化 <1。

  3. 第三行与我上面描述的完全相同,但用于比较第二行中的模型和第三行中的模型:即第三行正在评估从建模x2为线性项到建模x2为平滑函数。同样,如果与 相关的额外参数都等于 0 ,则模型拟合的这种改进(偏差的变化现在以更多的自由度为2211.8代价)是不可能的。7.37288s(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)。

您可能想用 测试这两个模型lrest

lrtest(two_term_model, two_smooth_model)

Model 1: y ~ x0 + s(x1) + x2
Model 2: y ~ x0 + s(x1) + s(x2)
      #Df  LogLik    Df  Chisq Pr(>Chisq)    
1  8.1107 -995.22                            
2 15.0658 -848.95 6.955 292.55  < 2.2e-16 ***

虽然为这两个项添加平滑函数确实使模型复杂化,但对数似然的改进是显着的。这应该不足为奇,因为数据是由 GAM 模拟器生成的。

您可能还想打印出汇总统计信息:

Link function: identity 

Formula:
y ~ x0 + s(x1) + x2

Parametric coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  11.6234     0.3950  29.429  < 2e-16 ***
x02           2.1147     0.4180   5.059 6.48e-07 ***
x03           4.3813     0.4172  10.501  < 2e-16 ***
x04           6.2644     0.4173  15.010  < 2e-16 ***
x2           -6.4110     0.5212 -12.300  < 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.111  2.626 64.92  <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

R-sq.(adj) =  0.583   Deviance explained = 58.9%
GCV = 8.7944  Scale est. = 8.6381    n = 400

Family: gaussian 
Link function: identity 

Formula:
y ~ x0 + s(x1) + s(x2)

Parametric coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)   8.3328     0.2074  40.185  < 2e-16 ***
x02           2.1057     0.2955   7.125 5.15e-12 ***
x03           4.3715     0.2934  14.901  < 2e-16 ***
x04           6.1197     0.2935  20.853  < 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.691  3.343 95.00  <2e-16 ***
s(x2) 7.375  8.356 85.07  <2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

R-sq.(adj) =  0.796   Deviance explained = 80.2%
GCV = 4.3862  Scale est. = 4.232     n = 400

请注意解释的偏差差异(很大)。更复杂的模型也有更好的 R-sq.(adj)。第二个平滑项非常重要,并且与数据非常吻合。