我在尝试使用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")
拟合的模型并未对缺失值进行插补。有什么建议吗?
我在尝试使用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
可以提供样本内的一步预测。你想要的“正确”方法是通过卡尔曼平滑器实现的。对于大多数情况来说,使用前向和后向预测的平均值可以得到足够粗略的近似值来填补缺失的部分。像这样:
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")
library("imputeTS")
x <- AirPassengers
x[90:100] <- NA
x <- na.kalman(x, model = "auto.arima")
在内部,imputeTS包对由auto.arima获得的ARIMA模型的状态空间表示执行Kalman平滑。
即使理论背景不易理解,它通常会产生非常好的结果 :)