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

时间:2020-03-14 13:36:52

标签: r arima

如何分别检查qMA(q)的{​​{1}}或p的{​​{1}}或AR(p)的顺序,或{ p。如果我用ARIMA(p,d,q)这样模拟时间序列数据。

ARIMA(p,d,q)

我想要一个像arima.simsim <- 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,...)这样的函数,该函数将为p打印1,为q打印1,为d打印0

如何分别保存q<-function(mis,...)的值,以便可以调用它们以进行重用?

1 个答案:

答案 0 :(得分:1)

由于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帮助页面的“值”部分获得,该页面指示解密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