回答:
以下に、レスフィットとスプラインフィットの適合を比較できるRコード/例を示します。
library(TeachingDemos)
library(splines)
tmpfun <- function(x,y,span=.75,df=3) {
plot(x,y)
fit1 <- lm(y ~ ns(x,df))
xx <- seq( min(x), max(x), length.out=250 )
yy <- predict(fit1, data.frame(x=xx))
lines(xx,yy, col='blue')
fit2 <- loess(y~x, span=span)
yy <- predict(fit2, data.frame(x=xx))
lines(xx,yy, col='green')
invisible(NULL)
}
tmplst <- list(
span=list('slider', from=0.1, to=1.5, resolution=0.05, init=0.75),
df=list('slider', from=3, to=25, resolution=1, init=3))
tkexamp( tmpfun(ethanol$E, ethanol$NOx), tmplst )
データで試してみて、コードを変更して他のタイプまたはオプションを試すことができます。loess.demo
黄土のアルゴリズムが何をするのかをよりよく理解するために、TeachingDemosパッケージの関数を参照することもできます。レスから表示されるものは、レスと2番目の補間スムージング(スプライン自体である場合もある)の組み合わせであることが多く、loess.demo
関数は実際にスムースレスフィットと生レスフィットの両方を示すことに注意してください。
理論的には、別の連続関数を必要に応じて近似するスプラインを常に見つけることができますが、任意のデータセットに当てはまるレスに近似を確実に与えるノットの単純な選択があることはほとんどありません。
スムージングスプラインまたは黄土の実際の結果は、かなり似たものになります。サポートの端で見た目が少し異なる場合がありますが、「自然な」スムージングスプラインであることを確認する限り、実際に似ています。
散布図に「スムーザー」を追加するために1つだけを使用している場合、一方を他方よりも優先する理由はありません。代わりに、新しいデータの予測を行いたい場合は、通常、平滑化スプラインを使用する方がはるかに簡単です。これは、平滑化スプラインが元のデータの直接基底拡張であるためです。100ノットを使用して作成した場合、元の変数から〜100個の新しい変数を作成したことになります。代わりに、Loessは、経験したすべての値(または大規模データの層別サブセット)で応答を推定します。
一般に、スプラインを平滑化するためのペナルティ値を最適化するための確立されたアルゴリズムがあります(Rのmgcvはおそらくこれが最善です)。黄土はそれほど明確ではありませんが、一般的にはどの実装からも妥当な出力が得られます。MGCVでは、同等の自由度を感じることができるため、データがどのように「非線形」であるかを感じることができます。
非常に大きなデータをモデル化する場合、より単純な自然スプラインは、平滑化スプラインまたは黄土と比較して、最小限の計算で同様の結果を提供することがよくあります。