0

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 によって出力されるパラメーターのデータ形式、数、および順序を完全には理解していません。

ありがとう

4

0 に答える 0