使用ARIMA模型输入缺失值

时间:2015-06-01 22:33:10

标签: r time-series missing-data

我试图用R中的ARIMA模型计算时间序列中的缺失值。我尝试了这段代码,但没有成功。

x <- AirPassengers
x[90:100] <- NA
fit <- auto.arima(x)
fitted(fit)[90:100]  ## this is giving me NAs
plot(x)
lines(fitted(fit), col="red")

拟合模型不会影响缺失值。有关如何做到这一点的任何想法?

2 个答案:

答案 0 :(得分:5)

fitted提供样本内一步预测。 &#34;权利&#34;通过卡尔曼更顺畅的方式做你想做的事。使用缺失部分的前向和后向预测的平均值,可以获得对于大多数目的而言足够好的粗略近似。像这样:

x <- AirPassengers
x[90:100] <- NA
fit <- auto.arima(x)
fit1 <- forecast(Arima(AirPassengers[1:89],model=fit),h=10)
fit2 <- forecast(Arima(rev(AirPassengers[101:144]), model=fit), h=10)

plot(x)
lines(ts(0.5*c(fit1$mean+rev(fit2$mean)), 
  start=time(AirPassengers)[90],freq=12), col="red")

enter image description here

答案 1 :(得分:1)

正如Rob所说,使用卡尔曼平滑器通常是“更好”的解决方案。

这可以通过imputeTS包完成(免责声明:我维护包)。 (https://cran.r-project.org/web/packages/imputeTS/index.html

library("imputeTS")
x <- AirPassengers
x[90:100] <- NA
x <- na.kalman(x, model = "auto.arima")

imputeTS包内部对auto.arima获得的ARIMA模型的State Space Representation执行KalmanSmoothing。

即使理论背景不易理解, 它通常会产生非常好的结果:)