如何使用 auto.arima 函数针对使用 R 的时间序列数据专门检查 ARIMA 中 AR 或 MA 的阶数值

How to specifically check value of order of AR or MA in ARIMA using auto.arima function for time series data using R

如何检查 q of MA(q) or p of AR(p) or p 单独在 ARIMA(p,d,q) or ARIMA(p,d,q) 中的问号。如果我像这样用 arima.sim 模拟时间序列数据。

sim <- arima.sim(n=100, list(order = c(1, 0, 1), ar=0.7, ma=-0.3), sd=sqrt(1))

mis <- auto.arima(sim)

我想要一个类似 p<-function(mis,...)q<-function(mis,...)d<-function(mis,...) 的函数,它将打印出 1 代表 p 或 1 代表 q 和 0 代表 d

如何单独保存 p,q,d 的值以便调用每个值以供重用?

我不确定是否可以一致地恢复模拟的 order=,因为 auto.arima 的结果可能不同。但是 auto.arima 结果存储在 mis$arma.

set.seed(42)
sim <- arima.sim(list(order=c(1, 0, 1), ar=0.7, ma=-0.3), sd=sqrt(1), n=100)
mis <- auto.arima(sim)
mis
# Series: sim 
# ARIMA(1,0,0) with zero mean 
# 
# Coefficients:
#   ar1
# 0.4188
# s.e.  0.0903
# 
# sigma^2 estimated as 0.9638:  log likelihood=-139.65
# AIC=283.29   AICc=283.41   BIC=288.5
fun <- function(x) setNames(x$arma[c(1, 6, 2)], c("p", "d", "q"))
fun(mis)
# p d q 
# 1 0 0

函数可以扩展到switch之间的order=个元素:

fun2 <- function(x, v) {
  if (!v %in% c("p", "d", "q"))
  stop('v has to be in c("p", "d", "q")')
  r <- x$arma
  setNames(switch(v, p=r[1], d=r[6], q=r[2]), v)
}
fun2(mis, "p")
# p 
# 1 

您也可以使用:

fun2(mis, "d")
fun2(mis, "q")

你看,函数的结果至少对应auto.arima的输出。您可以将此与其他 set.seed 核对以改变结果。

c(1, 6, 2)命令的解释可以从?arima帮助页面的"Value"部分导出,其中指示解密mis$arma如下:

setNames(mis$arma,
         c("AR", "MA", "seas.AR", "seas.MA", 
           "period", "n.seas.dif", "seas.dif"))
# AR         MA    seas.AR    seas.MA     period n.seas.dif   seas.dif 
# 1          0          0          0          1          0          0