【发布时间】:2021-12-08 21:53:19
【问题描述】:
我使用了 stats::smooth.spline 函数来拟合 60 (x, y) 对的数据集,现在我需要访问可以为我生成预测的公式,同时我可以访问模型。不幸的是,文档 here 并没有帮助我解决这个问题(而且看起来也有点过时了)。
我的理解是smooth.spline 提供了一个函数g: Reals -> Reals,其中g 是满足g = argmin(g) spar * SUM(MSE) + lambda * Integral [g''(x)]^2 dx 的三次多项式。如果是这种情况,我希望看到 g(x) = x^3 + 5x^2 + 10x + 15 的输出(尽管生成的对象似乎只包含 spar 和 lambda)。
smooth.spline 也有可能沿着数据的不同部分形成多个样条,在这种情况下,我想要的输出类似于:
- 在 x=0 到 x=2 上,预测 y = 3x^3 + 2x^2 + x
- 在 x=2 到 x=3.5 上,预测 y = x^3 + 2x^2 + 3x + 12
- ......
下面是一些示例代码:
dataset <- data.frame(x = c(1,2,3,4,5,6,7), y = c(10,8,4,6,8,11,15))
spline_result <- smooth.spline(dataset$x, y = dataset$y)
# Plotting the spline looks like a parabola centered near x=3.5 y=5
# so I'd expect something like g(x) = k *(x - 3.5) ^ 2 + 5
# where k is some constant
附加信息:我正在运行 R 版本 4.1.2 2021-11-01 Bird Hippie with packageVersion("stats") 4.1.2
感谢您的帮助!
【问题讨论】:
-
smooth.spline在每个唯一的 x 值之间使用不同的三次多项式,并且在 x 值的范围之外是线性的。要找到系数,您可以对每个区间进行 4 次预测并使用多项式回归来拟合值,但这不太可能是一个有用的练习。
标签: r spline cubic-spline