当给定看似相等的输入时,我试图理解这两个平滑函数的不同行为。我的理解是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
的“有效”带宽也较小。这些功能有何不同之处?
最佳答案
这两个参数都表示平滑,但是它们以两种不同的方式表示。
locpoly的带宽参数相对于此处的x轴比例。例如,如果将x <- runif(n, 0, 1)
行更改为x <- runif(n, 0, 10)
,尽管您仍然拥有相同的点数(100),您将看到绿色的locpoly线变得更加弯曲。
locfit的平滑参数h与比例尺无关,而是基于一部分数据。值0.05表示最接近该位置的数据的5%用于拟合曲线。因此,更改比例不会改变线。
这也解释了评论中的观察结果,即将h的值更改为0.1会使两者看起来几乎相同。这是有道理的,因为如果我们有100个点从0到1均匀分布,那么我们可以预期0.05的带宽将包含大约10%的数据。
我的资料包括documentation for the locfit package和documentation for the locpoly function。
关于r - R中的局部线性回归— locfit()vs locpoly(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28286638/