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