【问题标题】:Determine best Arima model based on AIC基于AIC确定最佳Arima模型
【发布时间】:2016-05-28 15:56:12
【问题描述】:

我正在尝试拟合 Arima 模型并查看基于 AIC 的最佳顺序 我有以下for语句,我的问题是如何显示模型的顺序,因为它只是给我AIC值并且无法确定哪个模型,, mid.ts 是 xts 创建的时间序列 数据如下:

 mid.ts= 
              deltao
   Jan 1751  -41.23
    Jan 1754 -41.10
    Jan 1756  -40.25
    Jan 1759  -43.61
    Jan 1761  -41.54
    Jan 1764  -39.79
    Jan 1766   -39.63
    Jan 1769  -40.74
    Jan 1771  -42.63
    Jan 1774  -39.47
    Jan 1776  -40.30
    Jan 1778  -40.30
    Jan 1781  -41.56

library(forecast)

for(d in 0:1){
    for(p in 0:9){
      for(q in 0:9){

 fit=Arima(mid.ts,order=c(p,d,q))
  print(AIC(fit))

      }
    }
  }

【问题讨论】:

  • 为什么不使用auto.arima
  • 我试过了,但它没有给我最低的 AIC
  • 谢谢,但我正在尝试查看哪个组合使用循环提供的 AIC 最低,以及它是否与 auto.arima 中的组合匹配
  • 请将您的问题转化为可重现的问题。/

标签: r time-series model-comparison


【解决方案1】:

您可以通过以下两种方式进行:

  1. 基于与 AIC 一起打印的参数。在这里,您必须目视检查哪种模型最好,这既费时又不是好方法。

    library(forecast)
    
    for(d in 0:1){
      for(p in 0:9){
        for(q in 0:9){
    
          fit=Arima(mid.ts,order=c(p,d,q))
          print(paste0("AIC is ", AIC(fit), " for d = ", d, ", p = ", p, " and q = ", q))
    
        }
      }
    }
    
  2. 将模型参数保存在数据框中,然后使用代码找到最佳参数。我会赞成这种方法,因为它涉及的工作量更少。

    library(forecast)
    modelAIC <- data.frame()
    for(d in 0:1){
      for(p in 0:9){
        for(q in 0:9){
    
          fit=Arima(mid.ts,order=c(p,d,q))
          modelAIC <- rbind(modelAIC, c(d,p,q,AIC(fit))) #
        }
      }
    }
    names(modelAIC) <- c("d", "p", "q",  "AIC")
    rowNum <- which(modelAIC$AIC==max(modelAIC$AIC))
    modelAIC[rowNum,]#Required model parameters
    

【讨论】:

  • 能否将代码放在函数中或{}之间,以便我阅读
  • 感谢 Pascal 和 Kumar :)
猜你喜欢
  • 2020-09-27
  • 2016-11-15
  • 2019-09-08
  • 2021-12-28
  • 1970-01-01
  • 2020-11-18
  • 1970-01-01
  • 2016-10-26
  • 2020-05-18
相关资源
最近更新 更多