明らかに同等の入力が与えられたときの、これら2つの平滑化関数の異なる動作を理解しようとしています。私の理解では、locpoly
は固定帯域幅の引数を取るだけですが、locfit
は平滑化パラメーターにさまざまな部分を含めることもできます(最近傍分数 "nn
") 。 locfit
でこの変動部分をゼロに設定すると、「h
」コンポーネントがlocpoly
で使用される固定帯域幅のように機能するはずだと思いましたが、明らかにそうではありません。
実例:
library(KernSmooth)
library(locfit)
set.seed(314)
n <- 100
x <- runif(n, 0, 1)
eps <- rnorm(n, 0, 1)
y <- sin(2 * pi * x) + eps
plot(x, y)
lines(locpoly(x, y, bandwidth=0.05, degree=1), col=3)
lines(locfit(y ~ lp(x, nn=0, h=0.05, deg=1)), col=4)
このプロットを作成します。
locpoly
は滑らかな緑色の線を示し、locfit
は波状の青い線を示します。明らかに、locfit
は、想定される帯域幅パラメーターがそれぞれ同じ値であっても、ここでは「有効な」帯域幅が小さくなっています。
これらの機能の違いは何ですか?
2つのパラメーターは両方とも平滑化を表しますが、2つの異なる方法で行います。
locpolyのbandwidthパラメーターは、ここでのx軸のスケールを基準にしています。たとえば、線x <- runif(n, 0, 1)
をx <- runif(n, 0, 10)
に変更した場合、同じ数のポイント(100)があるにもかかわらず、緑色のlocpoly線がはるかに波打つようになることがわかります。 )。
locfitのsmoothingパラメーターhは、スケールに依存せず、代わりにデータの比率に基づいています。値0.05は、その位置に最も近いデータの5%が曲線の近似に使用されることを意味します。したがって、スケールを変更しても線は変更されません。
これは、hの値を0.1に変更すると、2つがほぼ同じに見えるというコメントで行われた観察も説明しています。 100ポイントが0から1まで均一に分布している場合、0.05の帯域幅にはデータの約10%が含まれると予想できるため、これは理にかなっています。
私のソースには、 locfitパッケージのドキュメント と locpoly関数のドキュメント が含まれています。