如何选择 GAM 参数的类型

机器算法验证 r 回归 机器学习 广义加法模型 毫克CV
2022-03-09 07:46:24

我已经开始在 R 中使用 GAM,并且获得了 Simon Wood关于该主题的优秀书籍“Generalized Additive Models An Introduction with R”)。根据他的一个例子,我正在研究以下内容:

library(mgcv)
data(trees)
ct1<-gam(log(Volume) ~ Height + s(Girth), data=trees)

我对这个例子有两个一般性问题:

  1. 如何决定模型估计中的变量何时应该是参数化的(例如高度)或何时应该是平滑的(例如周长)?一个比另一个有优势吗?有没有办法确定变量的最佳类型是什么?如果有人有关于这个主题的任何文献,我很乐意知道。

  2. 假设我想仔细查看 : 的权ct1ct1$coefficients我可以将它们用作gam-procedure 输出它们,还是我必须在分析它们之前转换它们,因为我适合log(Volume)在后者的情况下,我想我将不得不使用exp (ct1$coefficients)

1个回答

我假设这在西蒙的书的第二版中得到了更好的解释(应该会在几天内出版),因为他和他的学生在西蒙写完他的书之后的几年里才研究出了一些理论。

Marra & Wood (2011) 表明,如果我们想对具有平滑项的模型进行选择,那么一种非常好的方法是对所有平滑项添加额外的惩罚。这个额外的惩罚与该术语的平滑度惩罚一起工作,以控制该术语的摆动以及一个术语是否应该在模型中。

因此,除非您有任何好的理论来假设协变量的平滑或线性/参数形式/效果,否则您可以在所有模型(由基函数的线性组合的加法组合表示)之间进行选择来解决这个问题每个协变量的平滑一直到只包含一个截距的模型。

例如:

library(mgcv)
data(trees)
ct1 <- gam(log(Volume) ~ s(Height) + s(Girth), data=trees, method = "REML", select = TRUE)

> summary(ct1)

Family: gaussian 
Link function: identity 

Formula:
log(Volume) ~ s(Height) + s(Girth)

Parametric coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept)  3.27273    0.01492   219.3   <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(Height) 0.967      9  3.249 3.51e-06 ***
s(Girth)  2.725      9 75.470  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

R-sq.(adj) =  0.975   Deviance explained = 97.8%
-REML = -23.681  Scale est. = 0.0069012  n = 31

查看输出(特别是在参数系数部分),我们注意到这两项都非常重要。但请注意 的平滑的有效自由度值Height它是〜1。Wood (2013) 中解释了这些测试的作用。

这向我建议Height应该作为线性参数项进入模型。我们可以通过绘制拟合平滑来评估这一点:

> plot(ct1, select = 1, shade = TRUE, scale = 0, seWithMean = TRUE)

这使:

高度贴合平滑

这清楚地表明,所选形式的效果Height是线性的。

但是,如果您事先不知道这一点(并且您不知道,因为否则您就不会问这个问题),您现在无法仅使用线性项将模型重新拟合到这些数据Height这会导致你在推理方面遇到真正的问题。中的输出summary()说明了您进行此选择的事实。如果您使用 的线性参数效应重新拟合模型Height,则输出不会知道这一点,并且您会得到过于乐观的 p 值。

至于问题 2,正如评论中已经提到的,不,不要对该模型的系数求幂。此外,不要深入研究拟合模型,因为这些组件的内容并不总是您所期望的。改用提取函数;在这种情况下coef()

在本书后面,当西蒙谈到 GLM 和 GAM 时,你会看到他通过 Gamma GLM 对这些数据进行建模:

ct1 <- gam(Volume ~ Height + s(Girth), data=trees, method = "REML",
           family = Gamma(link = "log"))

在该模型中,因为拟合是在线性预测器的尺度上进行的(在对数尺度上),所以可以对系数取幂以获得一些部分效果,但最好使用predict(ct1, ...., type = "response")它来取回拟合值/预测响应的规模(以 m^3 为单位)。


Marra, G. & Wood, SN 广义加法模型的实用变量选择。计算。统计。数据肛门。55, 2372–2387 (2011)。

Wood, SN 关于扩展广义加法模型平滑分量的 p 值。Biometrika 100, 221–228 (2013)。