如何在 R 中更新 ARIMA 预测?

机器算法验证 r 时间序列 预测 有马
2022-04-08 12:01:22

我有一个 30 年的时间序列数据,发现 ARIMA(0,1,1) 具有最好的模型。我使用了模拟.Arima(预测包)函数来模拟未来的系列。

library(forecast)

series <- ts(seq(25,55), start=c(1976,1))

arima_s <- Arima(series, c(0,1,1))

simulate(arima_s, nsim=50, future=TRUE)

后来,我找到了第一个预测年份的更新值(即系列[31] <- 65)。现在我想用这个更新的值来模拟这个系列。我想知道如何在 R 中做到这一点。

1个回答

更新:

事实证明,Arima函数有一个提供旧模型的参数:

adj_s <- Arima(series,model=arima_s)

两种方法的最终结果可能相同,但我建议使用第二种方法,因为它显然经过更彻底的测试。

**旧答案:**碰巧,我最近遇到了类似的问题。这是采用现有 arima 模型并将其应用于新数据的函数。

adjust.amodel <- function(object,extended) {
   km.mod <- makeARIMA(object$model$phi,object$model$theta,object$model$Delta)
   km.res <- KalmanRun(extended,km.mod)

   object$x <- extended
       object$residuals <- ts(km.res$resid,start=start(extended),end=end(extended),frequency=frequency(extended))
       object$model <- km.mod
   object
}

在您的情况下,您应该如何使用它:

series[31] <- 65
adj_arima_s <- adjust.amodel(arima_s,series)
simulate(adj_arima_s, nsim=50, future=TRUE)

但通常的警告适用。你需要有充分的理由这样做。如果数据发生变化,这意味着模型应该发生变化,所以你所做的就是忽略新信息并坚持旧模型,这可能是错误的。您可以将此与通过从蓝色空气中提取模型系数来生成模型拟合进行比较。尽管系数具有统计验证,但它来自旧数据,因此对结果的解释应考虑到这一点。