Eu tenho tentado aprender e aplicar modelos ARIMA. Tenho lido um excelente texto sobre o ARIMA da Pankratz - Forecasting with Univariate Box - Jenkins Models: Concepts and Cases . No texto, o autor enfatiza especialmente o princípio da parcimônia na escolha dos modelos ARIMA.
Comecei a jogar com auto.arima()
função em R pacote de previsão . Aqui está o que eu fiz, simulei o ARIMA e apliquei auto.arima()
. Abaixo estão 2 exemplos. Como você pode ver nos dois exemplos auto.arima()
, identificou claramente um modelo que muitos considerariam não parcimonioso. Especialmente no exemplo 2, onde auto.arima()
ARIMA identificado (3,0,3) quando realmente ARIMA (1,0,1) seria suficiente e parcimonioso.
Abaixo estão minhas perguntas. Gostaria muito de receber sugestões e recomendações.
- Há alguma orientação sobre quando usar / modificar os modelos identificados usando algoritmos automáticos, como
auto.arima()
? - Existe algum problema em usar o AIC (que é o que eu acho que
auto.arima()
usa) para identificar modelos? - Pode ser construído um algoritmo automático parcimonioso?
A propósito, eu usei auto.arima()
apenas como exemplo. Isso se aplica a qualquer algoritmo automático.
Abaixo está o Exemplo 1:
set.seed(182)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)
auto.arima(y)
qa <- arima(y,order=c(1,0,1))
qa
Abaixo estão os resultados de auto.arima()
. Observe que todos os coeficientes são insignificantes. ou seja, valor <2.
ARIMA(1,0,2) with non-zero mean
Coefficients:
ar1 ma1 ma2 intercept
0.5395 0.2109 -0.3385 19.9850
s.e. 0.4062 0.4160 0.3049 0.0878
sigma^2 estimated as 1.076: log likelihood=-728.14
AIC=1466.28 AICc=1466.41 BIC=1487.36
Abaixo estão os resultados da execução regular arima()
com o pedido ARIMA (1,0,1)
Series: y
ARIMA(1,0,1) with non-zero mean
Coefficients:
ar1 ma1 intercept
0.2398 0.6478 20.0323
s.e. 0.0531 0.0376 0.1002
sigma^2 estimated as 1.071: log likelihood=-727.1
AIC=1462.2 AICc=1462.28 BIC=1479.06
Exemplo 2:
set.seed(453)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)
auto.arima(y)
qa <- arima(y,order=c(1,0,1))
qa
Abaixo estão os resultados de auto.arima()
:
ARIMA(3,0,3) with non-zero mean
Coefficients:
ar1 ar2 ar3 ma1 ma2 ma3 intercept
0.7541 -1.0606 0.2072 0.1391 0.5912 0.5491 20.0326
s.e. 0.0811 0.0666 0.0647 0.0725 0.0598 0.0636 0.0939
sigma^2 estimated as 1.027: log likelihood=-716.84
AIC=1449.67 AICc=1449.97 BIC=1483.39
Abaixo estão os resultados regulares arima()
com o pedido ARIMA (1,0,1)
Series: y
ARIMA(1,0,1) with non-zero mean
Coefficients:
ar1 ma1 intercept
0.2398 0.6478 20.0323
s.e. 0.0531 0.0376 0.1002
sigma^2 estimated as 1.071: log likelihood=-727.1
AIC=1462.2 AICc=1462.28 BIC=1479.06
fonte
Respostas:
Existem alguns problemas aqui. Primeiro, não presuma que o ARIMA simulado é realmente da ordem que você especificar; você está colhendo uma amostra do modelo especificado e, devido à aleatoriedade, o modelo de melhor ajuste para a amostra específica extraída pode não ser aquele a partir do qual as simulações foram extraídas.
Menciono isso por causa da segunda e mais importante questão: a
auto.arima()
função pode estimar modelos por meio de um algoritmo de ajuste mais eficiente, usando somas condicionais de quadrados, para evitar tempo computacional excessivo para séries longas ou para modelos sazonais complexos. Quando esse processo de estimativa está em uso,auto.arima()
aproxima os critérios de informação de um modelo (porque a probabilidade de log do modelo não foi calculada). Uma heurística simples é usada para determinar se a estimativa da soma dos quadrados condicionais está ativa, se o usuário não indicar qual abordagem deve ser usada .approximation
(length(x)>100 | frequency(x)>12)
approximation
TRUE
approximation
argumento, você correuauto.arima()
comapproximation = TRUE
. Isso explica a seleção aparentemente errônea de um modelo com AIC, AICc e BIC maiores do que o modelo mais simples com o qual você se ajustouarima()
.Para o seu exemplo 1, deveríamos ter
Por isso
auto.arima()
, selecionou um modelo mais parcimonioso do que o verdadeiro modelo; um ARIMA (0, 0, 1) é escolhido. Mas isso é baseado nos critérios de informação e agora eles estão de acordo; o modelo selecionado possui AIC, AICc e BIC mais baixos, embora as diferenças para AIC e AICc sejam pequenas. Pelo menos agora a seleção é consistente com as normas para a escolha de modelos com base em critérios de informação.A razão pela qual a AG (1) foi escolhida, acredito, está relacionada à primeira questão que mencionei; ou seja, que o modelo de melhor ajuste para uma amostra extraída de um ARIMA declarado (p, d, q) pode não ser da mesma ordem que o modelo verdadeiro. Isto é devido à amostragem aleatória. Fazer uma série mais longa ou uma gravação mais longa no período pode ajudar a aumentar a chance de o modelo verdadeiro ser selecionado, mas não o faça.
Independentemente disso, a moral aqui é que, quando algo parece obviamente errado, como na sua pergunta, leia a página de manual ou a documentação associada para garantir que você entenda como o software funciona.
fonte
auto.arima()
estabelecido, portanto, se esses eram os únicos dois modelos candidatos, o mais simples seria selecionado ...)Muito obrigado, @ Gavin, @Irishstat e @Rob por responderem à minha pergunta. É claro que se eu precisar de um modelo parcimonioso a partir de algoritmos automáticos, como o critério de informação auto.arima BIC, deve ser usado em oposição ao AIC, especialmente depois de consultar este post e o post de @ Gavin acima.
Também concordo muito com o @Irishstat que a escolha de um modelo com base no critério de IC tem limitações, pois não escolhe um modelo melhor para ajustar os dados a outliers e mudanças de nível. Na minha opinião, valores extremos + mudanças de nível + dados confusos = dados comerciais de palavras reais , qualquer outra coisa são conjuntos de dados de livros didáticos. Qualquer modelo automático que não considere discrepâncias + mudanças de nível, novamente na minha opinião deve ser usado com cautela.
Chegando ao código - auto.arima tem uma opção para escolher entre o AIC ou o BIC. Veja abaixo o código foi modificado a partir das perguntas acima.
Muito obrigado comunidade com validação cruzada. Aprendo coisas novas e interessantes todos os dias.
O BIC IC escolhe um modelo MA (2).
fonte
Levei os 500 valores para o AUTOBOX (um software comercial que ajudei a desenvolver) e recebi o seguinte comunicado com base no Teste de Chow para constância de parâmetros. Um erro muito básico cometido no estudo de uma série temporal é supor que os dados sejam conduzidos por um modelo específico com parâmetros constantes. A AUTOBOX detectou um ponto de interrupção no período 246 que pode refletir uma simulação que não foi "aquecida". Ao simular dados, a boa prática é excluir os primeiros valores "n" e depois estudar os demais. Peguei os dados e os segmentei em duas seções; os primeiros 245 e os 255 restantes. Aqui estão os dois gráficos ACF muito diferentes .
Retornando à análise: Aqui está o modelo que foi identificado para os últimos 246 valores e aqui com as seguintes estatísticas . O Real / Ajuste e Previsão está aqui com plotagem residual aqui . O ACF dos resíduos sugere suficiência. Observe que os 5 pulsos identificados tiveram um efeito muito pequeno e podem ser facilmente desconsiderados (neste caso!). Em resumo, a lição aprendida aqui é que às vezes temos muitos dados e precisamos considerar os coeficientes de mudança de horário. Nesse caso, estamos identificando uma alteração nos parâmetros que (aparentemente) não tem um grande impacto no modelo / parâmetros resultantes, mas aponta uma melhoria de processo geralmente necessária na análise de séries temporais. Minha experiência com o auto.arima sugere que, uma vez que explicitamente não trata / corrige violações gaussianas, ele tende a modelar demais, apoiando-se demais em valores históricos, em vez de extrair a estrutura dos dados. Nesse caso, uma vez que era uma simulação rigidamente controlada sem violações gaussianas, funcionou, mas eu seria geralmente suspeito de uma abordagem de etapa limitada e com uma única largura de banda para a identificação do modelo ARIMA. Confie mas verifique !
fonte
"pode ser interpretado como a probabilidade relativa de que o modelo de ordem i minimiza a perda (estimada) informações".
Se assim for, ajudaria os usuários a ver essas probabilidades relativas, juntamente com os AICs (?) De
auto.arima( ... trace=TRUE )
. Por exemplo, os dados dos ovos são executados como nesta pergunta fornecefonte