R - locfit()与locpoly()的局部线性回归

use*_*614 22 regression r smoothing

在给出明显等效的输入时,我试图理解这两个平滑函数的不同行为.我的理解是,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)
Run Code Online (Sandbox Code Playgroud)

产生这个情节:

平滑的情节

locpoly给出平滑的绿线,并locfit给出摇摆的蓝线.显然,这里locfit具有较小的"有效"带宽,即使假定的带宽参数对于每个具有相同的值.

这些功能有何不同?

小智 2

这两个参数都代表平滑,但它们以两种不同的方式实现。

这里locpoly的带宽参数是相对于x轴的比例的。例如,如果您将线更改x <- runif(n, 0, 1)x <- runif(n, 0, 10),您将看到绿色 locpoly 线变得更加弯曲,尽管您仍然拥有相同数量的点 (100)。

locfit 的平滑参数 h 与尺度无关,而是基于数据的比例。值 0.05 表示使用最接近该位置的 5% 的数据来拟合曲线。所以改变比例不会改变这条线。

这也解释了评论中的观察结果:将 h 的值更改为 0.1 会使两者看起来几乎相同。这是有道理的,因为如果我们有 100 个从 0 到 1 均匀分布的点,我们可以预期 0.05 的带宽将包含大约 10% 的数据。

我的资料来源包括locfit 包的文档locpoly 函数的文档