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 でのスプライン関数の値を計算するにはどうすればよいですか。私は予測を使用できることを知っていますが、実際に手動で値を計算したいと思います。
私の試みは、期待される結果を生成していない次の関数で説明されています。
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 によって出力されるパラメーターのデータ形式、数、および順序を完全には理解していません。
ありがとう