ARIMA, ARMA e AICs?
-
12-09-2019 - |
Pergunta
data <-c(88, 84, 85, 85, 84, 85, 83, 85, 88, 89, 91, 99, 104, 112, 126, 138, 146,151, 150, 148, 147, 149, 143, 132, 131, 139, 147, 150, 148, 145, 140, 134, 131, 131, 129, 126, 126, 132, 137, 140, 142, 150, 159, 167, 170, 171, 172, 172, 174, 175, 172, 172, 174, 174, 169, 165, 156, 142, 131, 121, 112, 104, 102, 99, 99, 95, 88, 84, 84, 87, 89, 88, 85, 86, 89, 91, 91, 94, 101, 110, 121, 135, 145, 149, 156, 165, 171, 175, 177, 182, 193, 204, 208, 210, 215, 222, 228, 226, 222, 220)
Por que os modelos ARMA que actuam sobre as primeiras diferenças dos dados diferem dos modelos ARIMA correspondentes?
for (p in 0:5)
{
for (q in 0:5)
{
#data.arma = arima(diff(data), order = c(p, 0, q));cat("p =", p, ", q =", q, "AIC =", data.arma$aic, "\n");
data.arma = arima(data, order = c(p, 1, q));cat("p =", p, ", q =", q, "AIC =", data.arma$aic, "\n");
}
}
Mesmo com Arima(data,c(5,1,4))
e Arima(diff(data),c(5,0,4))
no pacote de previsão. Posso obter a consistência desejada com
auto.arima(diff(data),max.p=5,max.q=5,d=0,approximation=FALSE, stepwise=FALSE, ic ="aic", trace=TRUE);
auto.arima(data,max.p=5,max.q=5,d=1,approximation=FALSE, stepwise=FALSE, ic ="aic", trace=TRUE);
mas parece que o titular da estimativa mínima AIC para estes dados não foram considerados pelo algoritmo por trás auto.arima; portanto, a escolha sub-tima de ARMA (3,0) em vez de ARMA (5,4), que actua sobre as primeiras diferenças. Uma pergunta relacionada é o quanto as duas estimativas da AIC deve diferir antes se considera um modelo melhor do que o outro tem pouco a ver programação wuth - titular o menor AIC deve pelo menos ser considerado / relatado, apesar de 9 coeficientes pode ser um pouco demais para uma previsão de 100 observações.
As minhas R perguntas são:
1) versão Vectorised do loop duplo por isso é mais rápido?
2) Por que arima(5,1,4)
agir sobre os dados diferem de arma(5,4)
agindo sobre as primeiras diferenças dos dados? Qual deles deve ser relatado?
3) Como faço para ordenar a saída AICs para que o menor vir primeiro?
Graças.
Solução
Há uma série de perguntas e questões levantadas aqui. Vou tentar responder a cada um deles.
Arima()
é apenas um wrapper para arima()
, por isso vai dar o mesmo modelo.
Arima () lida com um modelo com diferenciação por meio de um difuso antes. Isso não é o mesmo que apenas diferenciação dos dados antes de instalar o modelo. Conseqüentemente, você vai ter resultados ligeiramente diferentes de arima(x,order=c(p,1,q))
e arima(diff(x),order=c(p,0,q))
.
alças auto.arima()
diferenciação diretamente e não usar uma difusa antes na montagem. Então você vai obter os mesmos resultados de auto.arima(x,d=1,...)
e auto.arima(diff(x),d=0,...)
auto.arima()
tem uma max.order
argumento que especifica o máximo de p + q. Por padrão, max.order=5
, para que o seu arima(5,1,4)
não seriam considerados. Aumentar max.order
se você considerar esses modelos grandes (embora eu não recomendo).
Você não pode vetorizar um loop envolvendo otimização não-linear em cada iteração.
Se você quiser ordenar a sua saída, você precisa salvá-lo para um data.frame e depois de ordenação na coluna relevante. O código atualmente apenas cospe os resultados como ele vai e nada é salvo exceto para o modelo mais recente equipado.