bs(x) 和 gam 结果的解释

机器算法验证 广义加法模型 样条
2022-04-04 23:55:48

这是一个两部分的问题。

1)我已经阅读了bsRsplines包中函数的描述,但我认为我并不完全理解以下结果:

x <- seq(0,2*pi,0.1)
y <- sin(x) + rnorm(length(x),sd=0.1)
bs(x)

的数学函数是bs(x)什么?请注意,我没有指定结、自由度等。

2)假设我获得以下gam模型(Rmgcv包):

yh <- gam(y~bs(x))

我想在 R 之外对这种模型进行预测。也就是说,我想执行,说:

predict(yh,newdata=data.frame(x=2))

使用不同的程序/语言。在这种情况下,回归函数的数学模型是什么?

谢谢你。

1个回答

bs代表基本样条一个完整的理解需要稍微偏离线性代数。

首先,自然三次样条曲线是一种非常特殊的、相当刚性的曲线。自然三次样条配备了一组节点,定义如下。x1,x2,,xn

  • 在节点序列的左侧,自然三次样条是一条线。
  • 在节点之间,自然三次样条是三次多项式曲线。因此名称中的立方
  • 节点处,曲线必须是连续的。 节点处,导数也必须是连续的(没有拐角)。 节点处,二阶导数必须是连续的。

这是一张自然三次样条的图片:

在此处输入图像描述

好的,现在这是第一个答案:在公式中包含 bs 适合您的数据的自然三次样条。它可以:

  • 将每个数据点用作潜在的结。
  • 用一些启发式的、诸如此类的分布的百分位数来确定一系列结。

第一个案例可能看起来很疯狂,而且会招来麻烦,但有充分的理论理由来证明它的合理性。如果您不直接指定自由度,则可以使用交叉验证策略确定“最佳”答案。留一法交叉验证对于样条曲线具有特别吸引人的形式(最佳值可以在线性时间内确定)。

拟合是如何发生的?好吧,事实证明,具有指定节点集的自然三次样条的集合是向量空间。也就是说,您可以将两条样条线相加,或缩放一条样条线,得到的是一条样条线。这个向量空间是有限维的(说服自己这是测试你理解的好方法)。因此,样条组有一个基础。这是带有结的样条空间基础的图片.1,.2,,.9

在此处输入图像描述

一旦有了基础si,任何其他特定样条都可以写成基础中样条的线性组合:

s=inαisi

因此,将样条拟合到数据从从样条集合中找到最佳近似曲线,到找到α当与固定基础结合使用时,会产生最接近您的数据的总和样条。

因此,当您bs在模型公式中包含以下内容时:

  • 根据您要拟合的模型和传递给 的参数bs,R 会选择一组节点,以及具有该节点集的样条集合的基础。
  • R 获取数据集中的所有点,并将它们输入到它选择的样条曲线的基础中。你可以看到这个model.matrix

    $ dd <- data.frame(x = c(0, 1, 2, 3, 4, 5))
$ model.matrix(~ bs(x, 2), data=dd)
       (Intercept) bs(x, 2)1 bs(x, 2)2 bs(x, 2)3
     1           1     0.000     0.000     0.000
     2           1     0.384     0.096     0.008
     3           1     0.432     0.288     0.064
     4           1     0.288     0.432     0.216
     5           1     0.096     0.384     0.512
     6           1     0.000     0.000     1.000
  • R 使用生成的向量作为模型中的预测变量。

因此,要使用模型进行预测,您需要知道 R 选择了哪些特定的节点集,以及它为这些节点处的样条曲线选择了哪些特定的基础。您应该能够查看其中任何一个的文档bsgam在任何特定情况下确定此信息。