当给定看似相等的输入时,我试图理解这两个平滑函数的不同行为。我的理解是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 packagedocumentation for the locpoly function

关于r - R中的局部线性回归— locfit()vs locpoly(),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28286638/

10-11 08:53