在R中,我使用smooth.spline {stats}函数通过一些函数值拟合样条曲线。
x=seq(0, 1,0.01)
y=sin(x*23) - 0.6*cos(x*7)
plot(x,y)
ss= smooth.spline(x=x, y=y, df=35)
plot(ss)
现在ss对象包含在任何给定点绘制和评估样条曲线所需的拟合样条曲线的所有值。
ss$fit
$knot
[1] 0.0000000 0.0000000 0.0000000 0.0000000 0.3333333 0.6666667 1.0000000 1.0000000 1.0000000 1.0000000
$nk
[1] 6
$min
[1] 1
$range
[1] 3
$coef
[1] 0.5549946 0.4366268 0.1988102 1.1388495 0.7444880 0.5479000
attr(,"class")
[1] "smooth.spline.fit"
如何使用ss$fit对象中的系数和节点来计算样条函数在点 xa 处的值。我知道我可以使用 predict 但我想实际手动计算该值。
我的尝试在以下未产生预期结果的函数中进行了描述:
estimateSpline <- function(xv, fit){
knots = unique(fit$knot)
knots = knots[ 2 : (length(knots)-1) ]
len = length(knots)
xv = (xv - fit$min) / fit$range
Gbase = rep(xv, len )
Gbase = Gbase - knots
Gbase[Gbase < 0] = 0
Gbase = c(rep(xv,4), Gbase)
Gpow = c(seq(0, 3, 1), rep (3, len))
Gvec = Gbase ^ Gpow
res = fit$coef %*% Gvec
return (res)
}
我了解样条曲线背后的理论,并且阅读了很多关于其背后数学的文档。
谁能帮我评估拟合样条函数在任意点xv的值?
我不完全理解 smooth.spline 输出的参数的数据格式、数量和顺序,因此我无法重建预测函数的结果。
谢谢