R - 黄土预测 returns NA
R - loess prediction returns NA
我正在努力使用 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)
我需要为完整的收益率曲线建模,即不同期限的利率。
来自 predict.loess
的手册页:
When the fit was made using surface = "interpolate" (the default), predict.loess will not extrapolate – so points outside an axis-aligned hypercube enclosing the original data will have missing (NA) predictions and standard errors
如果将表面参数更改为 "direct",则可以外推值。
例如,这会起作用(旁注:绘制预测后,我的感觉是您应该稍微增加 loess
调用中的 span
参数):
lo <- loess(y~x, control=loess.control(surface="direct"))
predict(lo, newdata=x.all)
除了 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")
我正在努力使用 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)
我需要为完整的收益率曲线建模,即不同期限的利率。
来自 predict.loess
的手册页:
When the fit was made using surface = "interpolate" (the default), predict.loess will not extrapolate – so points outside an axis-aligned hypercube enclosing the original data will have missing (NA) predictions and standard errors
如果将表面参数更改为 "direct",则可以外推值。
例如,这会起作用(旁注:绘制预测后,我的感觉是您应该稍微增加 loess
调用中的 span
参数):
lo <- loess(y~x, control=loess.control(surface="direct"))
predict(lo, newdata=x.all)
除了 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")