首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R-局部线性回归()与局部聚()

问R-局部线性回归()与局部聚()
EN

Stack Overflow用户
提问于 2015-02-02 16:16:50
回答 2查看 11K关注 0票数 27

我试图理解这两个平滑函数在给定明显等价的输入时的不同行为。我的理解是,locpoly只是采用固定的带宽参数,而locfit也可以在其平滑参数中包含一个不同的部分(最近邻分数"nn")。我认为在locfit中将这个变化的部分设置为零应该使"h“组件的作用类似于locpoly中使用的固定带宽,但情况显然并非如此。

一个有用的例子:

代码语言:javascript
复制
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在这里有一个较小的“有效”带宽,尽管假定的带宽参数对每个参数都具有相同的值。

这些功能有什么不同?

EN

回答 2

Stack Overflow用户

发布于 2018-10-21 21:05:24

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

局部多面体的带宽参数与x轴的尺度有关。例如,如果将行x <- runif(n, 0, 1)更改为x <- runif(n, 0, 10),则会看到绿色的locpoly变得更加笨拙,尽管您仍然拥有相同的点数(100)。

局部拟合的平滑参数h与尺度无关,而是基于一定比例的数据。值0.05意味着最接近该位置的数据的5%用于拟合曲线。因此,改变规模不会改变这条线。

这也解释了注释中的观察,即将h的值更改为0.1,使两者看起来几乎相同。这是有意义的,因为如果我们有100点均匀分布在0到1之间,那么0.05的带宽将包含大约10%的数据。

我的消息来源包括locfit包的文档和locpoly的文档。

票数 2
EN

Stack Overflow用户

发布于 2021-02-03 05:55:08

我稍微修改了您的代码,这样我们就可以更清楚地看到实际的窗口宽度:

代码语言:javascript
复制
library(KernSmooth)
library(locfit)
x <- seq(.1, .9, length.out = 80)
y <- rep(0:1, each = 40)
plot(x, y)
lines(locpoly(x, y, bandwidth=0.1, degree=1), col=3)
lines(locfit(y ~ lp(x, nn=0, h=0.1, deg=1)), col=4)

​

​

来自h的参数locfit显示为半窗口宽度。locpoly的bandwidth显然在做其他的事情。

KernSmooth的文档非常模糊,但从源代码(这里和这里)来看,带宽似乎是正常密度函数的标准差。希望这在他们引用的内核平滑书中得到解释。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28286638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档