6

使用 loess 拟合的结果如何loess重现lowess

黄土代码

> data = data.frame(x=c(1,0.5,3,4,5,5.5,6,7), y=c(10, 25, 38, 44.5, 500, 550, 600, 705))
> fit = loess("y ~ x", data=data)
> new_y = predict(fit, data$x)
> new_y
[1]   6.251022  28.272100  -2.840750 150.006042 481.927307 563.161187 640.825415 693.166150

低代码

> new_fit = lowess(data, f=0.8)
> new_fit
$x
[1] 0.5 1.0 3.0 4.0 5.0 5.5 6.0 7.0

$y
[1]  -4.330119  38.931265 255.000000 400.000000 500.000000 550.241949 601.519903 704.247275

结果非常不同。我正在尝试为y给定的值获取新的拟合值xloess

[1]   6.251022  28.272100  -2.840750 150.006042 481.927307 563.161187 640.825415 693.166150

虽然lowess给出:

[1]  -4.330119  38.931265 255.000000 400.000000 500.000000 550.241949 601.519903 704.247275

如何重写我的lowess调用以为新y值提供predictloessfit 和xvalues 非常相似的结果?谢谢。

4

3 回答 3

4

你为什么需要这个?

我不认为在一般情况下可以这样做。这是一个特定情况,它给出了几乎相同的结果,但由于某种原因,最后一个值仍然不同:

fit1 <- loess(y~x,data=data,span=0.8,degree=1)
predict(fit1)
#[1]  19.08622  12.55692  37.93642 188.35019 401.53528 506.87040 591.41854 740.71060

fit2 <- lowess(data$x,data$y,f=0.8,iter=0)
fit2

# $x
# [1] 0.5 1.0 3.0 4.0 5.0 5.5 6.0 7.0
# 
# $y
# [1]  12.55692  19.08622  37.93642 188.35019 401.53528 506.87040 591.41854 741.12187
#Note that lowess reorders by x.
于 2013-06-30T15:29:22.347 回答
3

显然无法完成的原因是这两个函数在后台使用了不同的算法,我能找到的唯一解释是 Brian Ripley 在这里:

http://www.mail-archive.com/r-help@stat.math.ethz.ch/msg63623.html

"It is not possible: the algorithms differ considerably in their details. 

...

In determining 'local' loess() uses a tricubic weighting, lowess() uses a 
uniform weighting (on reading the code)."

文档清楚地说明了如何选择与默认值相似的span/f参数,但由于使用了不同的平滑算法,所有其他参数在两个函数之间不可互译。

于 2013-07-01T00:41:38.613 回答
1
data = data.frame(x=c(1,0.5,3,4,5,5.5,6,7), y=c(10, 25, 38, 44.5, 500, 550, 600, 705))
 fit = loess("y ~ x", data=data)
 new_y = predict(fit, data$x)
 plot( data$x , new_y)
lines(lowess(data, f=0.8)$x, lowess(data, f=0.8)$y)
# Obviously lowess with f=0.8 is giving different smoothing

与较低的 f 值比较

lines(lowess(data, f=0.8)$x, lowess(data, f=0.5)$y, col="red") 

在此处输入图像描述

于 2013-06-30T23:03:18.630 回答