使用 ARIMA 模型估算缺失值

Imputing missing values using ARIMA model

我正在尝试使用 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")

拟合模型未估算缺失值。关于如何完成的任何想法?

fitted 给出样本内一步预测。 "right" 做你想做的事情的方法是通过卡尔曼平滑器。使用缺失部分的前向和后向预测的平均值可以获得对大多数目的来说足够好的粗略近似值。像这样:

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")

正如 Rob 所说,使用卡尔曼平滑器通常是 "better" 解决方案。

例如,这可以通过 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 包在内部对状态执行 KalmanSmoothing Space auto.arima 获得的 ARIMA 模型的表示。

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