我试图用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")
拟合模型不会影响缺失值。有关如何做到这一点的任何想法?
答案 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")
答案 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。
即使理论背景不易理解, 它通常会产生非常好的结果:)