是否可以控制 GAM 中平滑函数的自由度适合 R,如果可以,如何控制?

Is it possible to control the degrees of freedom for the smooth functions in a GAM fit in R, and if so, how?

我正在使用 R 中的 mgcv 包来使 GAM 适合某些水文数据,如下所示:

d <- GAM_example_data[,1:4]
colnames(d) <- c("month","rain","pump","GWL")             
fitted_GAM <- gam(GWL~s(month) + s(rain) + s(pump), data = d)
plot.gam(fitted_GAM)

当我得到从 plot.gam 输出的图时,它在 y 轴上告诉我每个平滑函数的自由度,这些通常是非整数值。 我希望能够控制所使用的每个平滑函数的自由度,有没有办法做到这一点?

我看到了指定 "knots" 并因此控制配合的参考资料,但我对 GAM 的概念还很陌生,而且我还没有找到任何明确的资源来解释这些是什么(如果它们甚至与我的问题完全相关。

gam 文档中有很多参数可以帮助您理解。

我认为对你的情况最有用的参数是 k 基础维度 。本质上,它使用 s 设置平滑自由度的上限。 Here is some documentation.

所以你可能 运行,例如:

gam(GWL ~ s(month, k = 4) + ...)

然后使用 plot.gamgam.check 检查您的模型。如果诊断看起来不太好,您可以向上或向下调整 k 直到它们得到改善。

编辑:根据this answers()fx = TRUE 参数将拟合具有固定自由度的回归样条。 k 将等于总 df 并且 k-1 = edf.

我一直在密切关注您对其他答案的回应。从你的回复看来,对GAM的几个概念都比较了解,那我就简答一下吧。

不幸的是,没有。 mgcv GAM 不是使用backfitting 进行估计,而是通过GCV 或REML 对平滑参数进行联合估计。因此,与可以为每个样条项指定 df 的旧版 gam 包不同,您无法在 mgcv.

中实现此目的

惩罚回归设置中控制平滑度的唯一方法是设置平滑参数sp,但它与自由度的关系不是封闭形式,你无法预见。

另一个答案是建议你做一个没有惩罚的纯回归样条。通过设置等级 k 并发出信号 fx = TRUE,您的自由度始终等于等级减一(由于居中约束),这是一个整数。


以下是我在平滑方面所做的一些其他回答。

解释了设置 dfsmooth.spline 中的工作原理。注意这是backfitting GAM的基础

解释了纯回归样条的基础。当然,mgcv 提供了很多样条基 class,而不仅仅是 splines::bs.

使用的 B 样条