在R中使用lowess函数进行新值的预测

4

我正在使用lowess函数拟合两个变量xy之间的回归关系。现在,我想知道在一个新的x值处的拟合值。例如,在下面的例子中,如何找到x=2.5时的拟合值。我知道loess可以做到这一点,但我想重现别人的图表,而他使用了lowess

set.seed(1)
x <- 1:10
y <- x + rnorm(x)
fit <- lowess(x, y)
plot(x, y)
lines(fit)

enter image description here

1个回答

3
本地回归(lowess)是一种非参数统计方法,与线性回归不同,您不能直接使用模型来估计新值。您需要从函数中获取值(这就是为什么它只向您返回列表),并选择自己的插值方案。使用该方案预测新点。常见技术是样条插值(但还有其他技术)。

https://www.r-bloggers.com/interpolation-and-smoothing-functions-in-base-r/

编辑: 我相信predict函数会为您进行插值。我也找不到有关predict使用的详细信息,所以我尝试追踪源代码。

https://github.com/wch/r-source/blob/af7f52f70101960861e5d995d3a4bec010bc89e6/src/library/stats/R/loess.R

else { ## interpolate
## need to eliminate points outside original range - not in pred_

我确定 R 代码调用了底层的 C 实现,但是它的文档不够完善,所以我不知道它使用了哪个算法。
我的建议是:要么相信 predict 函数,要么自己编写插值算法。

谢谢。在loess中,您可以使用cars.lo <- loess(dist ~ speed, cars); predict(cars.lo, data.frame(speed = seq(5, 30, 1)), se = TRUE)来获取新值x的预测值。您知道这里使用了什么插值方法吗?我在它的帮助文件中找不到。 - JACKY88
@PatrickLi 正如我所解释的那样,该函数会为您执行插值。我正在查找它使用的方案,一旦找到,我会更新答案。 - ABCD
@PatrickLi 我试图追踪它,但并不完全成功。请看我的编辑。 - ABCD
非参数局部加权回归是一种完全有效的统计模型,就像参数回归一样。给定一组值 {y_i, X_i},您可以为任何新值的 X 获得 y 的估计值。只是编码需要更多的工作。 - Hong Ooi
这里有一个替代方案:https://stats.stackexchange.com/questions/126699/residuals-from-lowess-curve - x2yline

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接