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 选择了哪些特定的节点集,以及它为这些节点处的样条曲线选择了哪些特定的基础。您应该能够查看其中任何一个的文档bs或gam在任何特定情况下确定此信息。