R - loess 预测返回 NA

Posted

技术标签:

【中文标题】R - loess 预测返回 NA【英文标题】:R - loess prediction returns NA 【发布时间】:2015-03-03 23:38:05 【问题描述】:

我正在努力使用loess 进行“样本外”预测。我得到 NA 原始样本之外的新 x 值。我能得到这些预测吗?

x <- c(24,36,48,60,84,120,180)
y <- c(3.94,4.03,4.29,4.30,4.63,4.86,5.02)
lo <- loess(y~x)
x.all <- seq(3, 200, 3)
predict(object = lo, newdata = x.all)

我需要模拟完整的收益率曲线,即不同期限的利率。

【问题讨论】:

【参考方案1】:

除了 nico 的回答:我建议改用 gam(它使用惩罚回归样条)。但是,如果您没有基于科学的模型,则不建议进行外推。

x <- c(24,36,48,60,84,120,180)
y <- c(3.94,4.03,4.29,4.30,4.63,4.86,5.02)
lo <- loess(y~x, control=loess.control(surface = "direct"))
plot(x.all <- seq(3,200,3),
     predict(object = lo,newdata = x.all),
     type="l", col="blue")
points(x, y)

library(mgcv)
fit <- gam(y ~ s(x, bs="cr", k=7, fx =FALSE), data = data.frame(x, y))
summary(fit)

lines(x.all, predict(fit, newdata = data.frame(x = x.all)), col="green")

【讨论】:

【参考方案2】:

来自predict.loess的手册页:

当使用 surface = "interpolate"(默认值)进行拟合时,predict.loess 不会外推 - 因此包含原始数据的轴对齐超立方体之外的点将缺少 (NA) 预测和标准误差

如果将表面参数更改为“直接”,则可以推断值。

例如,这将起作用(附带说明:在绘制预测之后,我的感觉是您应该稍微增加loess 调用中的span 参数):

lo <- loess(y~x, control=loess.control(surface="direct"))
predict(lo, newdata=x.all)

【讨论】:

以上是关于R - loess 预测返回 NA的主要内容,如果未能解决你的问题,请参考以下文章

将 %B.%Y 转换为日期在 R 中返回 NA [重复]

如何使用 R 模型为谷歌表格中的单元格供电?

MySQL 表中带有重音符号的字符串在 R (RODBC) 中返回为 NA

R语言lowess函数数据平滑实战(Locally Weighted Regression, Loess)

r LOESS校正代谢组学数据

从 R 将预测结果返回到 SQL Server