Как конкретно проверить значение порядка AR или MA в ARIMA, используя функцию auto.arima для данных временных рядов, используя R - PullRequest
0 голосов
/ 14 марта 2020

Как проверить, какой порядок q из MA(q) или p из AR(p) или p только в ARIMA(p,d,q) или q в 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, чтобы я мог вызывать каждое из них для повторного использования?

1 Ответ

1 голос
/ 14 марта 2020

Я не уверен, что можно последовательно вернуть 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 s, чтобы варьировать результаты.

Объяснение порядка 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
...