R 中的 gam():它是具有自动节点选择功能的样条模型吗?

gam() in R: Is it a spline model with automated knots selection?

我 运行 我需要绘制两个变量之间的非线性关系的分析。我读到了样条回归,其中一个挑战是找到节点的数量和位置。所以我很高兴在 this book 中读到广义加性模型 (GAM) 适合“ 具有自动选择节点的样条模型 ”。因此,我开始阅读如何在 R 中进行 GAM 分析,我惊讶地发现 gam() 函数有一个 knots 参数。

现在我很困惑。 R 运行 中的 gam() 函数是否是自动找到最佳节点的 GAM?如果是这样,我们为什么要提供结论点?此外,documentation 表示 "If they are not supplied then the knots of the spline are placed evenly throughout the covariate values to which the term refers. For example, if fitting 101 data with an 11 knot spline of x then there would be a knot at every 10th (ordered) x value"。这听起来不像是一个非常复杂的节点选择算法。

我找不到其他来源来验证 GAM 是具有自动节点选择功能的样条模型这一说法。 gam() 函数是否与 pspline() 相同,其中度数为 3(立方),不同之处在于 gam()df 参数设置了一些默认值?

术语 GAM 涵盖了解决平滑度选择问题的大量模型和方法。

mgcv 使用惩罚回归样条基,通过摆动惩罚来选择拟合平滑的复杂性。因此,它不会选择结数作为平滑度选择的一部分。

基本上,您作为用户选择每个平滑函数使用多大的基础(通过在 s()te() 等函数中设置参数 k模型公式)。 k 的值设置了 上限 平滑函数摆动的限制。惩罚衡量函数的摆动性(它通常是协变量范围内平滑求和的二阶导数的平方)。然后,模型估计表示每个平滑度的基函数的系数值,并通过最大化惩罚对数似然准则来选择平滑度参数。惩罚对数似然是对数似然加上每个平滑的摆动惩罚。

基本上,您为每个平滑设置预期复杂度(摆动)的上限,当模型拟合时,惩罚会缩小每个平滑后面的系数,以便从拟合中去除多余的摆动。

通过这种方式,平滑度参数控制发生了多少收缩,因此控制了每个拟合平滑度的复杂程度(摆动)。

这种方法避免了选择打结位置的问题。

这并不意味着用于表示平滑的碱基没有结。在你提到的三次回归样条基础中,你给 k 的值设置了基础的维数,这意味着一定数量的结。这些结被放置在平滑中涉及的协变量的边界处,然后均匀地分布在协变量的范围内,除非用户提供一组不同的结位置。然而,一旦设置了结的数量和它们的位置,从而形成了基础,它们就是固定的,平滑的摆动由摆动惩罚控制,而不是通过改变结数来控制。

您必须 非常 小心使用 R,因为有两个软件包提供 gam() 功能。原始的 gam 软件包提供了 R 版本的软件和方法,该软件和方法在 Hastie 和 Tibshirani 的原始 GAM 书中进行了描述。这个包不适合使用我上面描述的惩罚回归样条的 GAM。

R 附带 mgcv 包,它适合使用我上面概述的惩罚回归样条的 GAM。您可以使用参数 k 控制每个平滑的基础的大小(维度)。没有参数 df.

就像我说的,GAM 是一个广泛的教会,有很多方法可以适应他们。重要的是要知道您使用的是什么软件以及该软件使用什么方法来估算 GAM。一旦掌握了这些信息,您就可以针对特定的 material 方法来估算 GAM。在这种情况下,你应该看看 Simon Wood 的书 GAMs: an introduction with R 因为它描述了 mgcv 包并且是由mgcv 包。