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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top