如何在 R 中选择具有低 MAPE 的最佳 ARIMA 订单

机器算法验证 r 时间序列 预测
2022-04-05 13:14:33

我想要最好的 ARIMA 模型预测,它具有最低的 MAPE 或最低的 AIC/BIC。例如,我想用循环或其他方式自动更改 Arima 顺序,并想用所有可能的组合进行测试,如下所示

c(1,0,0)
c(1,1,0)
.
.
c(x,y,z)

下面是可重现的示例代码,但我不知道如何进行多订单执行和 MAPE/AIC/BIC 的比较。

set.seed(1)
tsdata <- ts(rnorm(50), start = c(1980,1), frequency = 12)
myts <- tsdata

fit <- Arima(myts,order=c(2,1,0))
forecast(fit, 3)
plot(forecast(fit, 3))
fit
accuracy(fit)

是否可以将所有准确度度量 ( MAPE, AIC, BIC) 保存在数据框或列表中,然后选择执行 Arima 模型的最佳顺序?我用auto.arima我的真实数据进行了测试,但它并没有给我最好的顺序。在此先感谢您的帮助 !

1个回答

这是第一个想到的,只是一个例子,但它很慢,应该按照您希望考虑的集成顺序执行一次。循环遍历前 10 个 AR 和 MA 订单(再次仅作为示例),将 MAPE 准确度度量保存在矩阵“x”中。然后确定矩阵中的最小值。你是不是有这样的想法?

    set.seed(1)
tsdata <- ts(rnorm(50), start = c(1980,1), frequency = 12)
myts <- tsdata

x <- matrix(data = NA, nrow=10, ncol=10)
for(i in 0:9){
  for(j in 0:9){
    fit <- arima(myts, order=c(i,1,j))
    acc <- accuracy(fit)
    x[i+1,j+1] <- acc[[5]] # Number 5 indicates the position of MAPE in the accuracy list
    print(i);print(j)
  }

}

which(x==min(x), arr.ind=T)
row col
[1,]   3   1

编辑:删除了不必要的代码。