web-dev-qa-db-ja.com

Rの局所線形回帰--locfit()とlocpoly()

明らかに同等の入力が与えられたときの、これら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)

このプロットを作成します。

plot of smoothers

locpolyは滑らかな緑色の線を示し、locfitは波状の青い線を示します。明らかに、locfitは、想定される帯域幅パラメーターがそれぞれ同じ値であっても、ここでは「有効な」帯域幅が小さくなっています。

これらの機能の違いは何ですか?

24
user1870614

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関数のドキュメント が含まれています。

2
znr