Os modelos identificados pelo auto.arima () são parcimoniosos?


13

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.

  1. Há alguma orientação sobre quando usar / modificar os modelos identificados usando algoritmos automáticos, como auto.arima()?
  2. Existe algum problema em usar o AIC (que é o que eu acho que auto.arima()usa) para identificar modelos?
  3. 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.t

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

Você parece estar interessado em algo aqui, pois o procedimento AIC pode estar identificando incorretamente o modelo mais simples. Além disso, os critérios da AIC pressupõem que não há pulsos / sem alterações de nível / sem pulsos sazonais / sem tendências de horário local / constância de parâmetros / constância de variação de erro.
precisa saber é o seguinte

O AIC e o BIC são proporcionais à variação dos erros de um modelo calculado. Essa abordagem na minha experiência é simples, devido a alguns dos problemas que já levantei e os de invertibilidade aqui levantados. Não há substituto para um sistema de identificação inteligente que construa modelos iterativos concluindo quando nenhum parâmetro desnecessário permanece e nenhuma informação / estrutura é evidente nos resíduos. Em resumo, a identificação automática de modelo é um processo iterativo, não um processo de uma etapa, como em todas as análises estatísticas.
precisa saber é o seguinte

@Irishstat, qual é o sinal de um coeficiente de ma que deve ser interpretado como -0,1391 -0,5912 -0,5491?
forecaster

em termos do texto Pankratz .. sim! . Você pode verificar as raízes do polinômio ma para ver se elas atendem aos requisitos de inversibilidade.
precisa saber é o seguinte

portanto, a auto.arima acima não é invertível, ou seja, -0.1391-0.5912-0.5491 é <1, portanto o modelo está correto.
forecaster

Respostas:


17

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)approximationTRUE n=100n=500 approximation argumento, você correu auto.arima()com approximation = 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 ajustou arima().

Para o seu exemplo 1, deveríamos ter

> auto.arima(y, approximation = FALSE)
Series: y 
ARIMA(0,0,1) with non-zero mean 

Coefficients:
         ma1  intercept
      0.7166    19.9844
s.e.  0.0301     0.0797

sigma^2 estimated as 1.079:  log likelihood=-728.94
AIC=1463.87   AICc=1463.92   BIC=1476.52
> qa
Series: y 
ARIMA(1,0,1) with non-zero mean 

Coefficients:
         ar1     ma1  intercept
      0.0565  0.6890    19.9846
s.e.  0.0626  0.0456     0.0830

sigma^2 estimated as 1.078:  log likelihood=-728.53
AIC=1465.06   AICc=1465.14   BIC=1481.92

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.


Obrigado pela resposta detalhada. Usei sua abordagem para o segundo exemplo: set.seed (453) y <- arima.sim (n = 500, lista (ar = 0,2, ma = 0,6), média = 10) auto.arima (y, aproximação = FALSE) e é isso que eu recebo, está claramente ajustando os dados - ARIMA (2,0,4) com coeficientes médios diferentes de zero: ar1 ar2 ma1 ma2 ma3 ma4 interceptação 0,5369 -0,9627 0,3861 0,667 0,667 0,7065 0,1701 20,0329 se 0,0278 0,0499 0,0533 0,0630 0,0793 0,0574 0,0927 sigma ^ 2 estimado como 1,024: log verossimilhança = -716,17 AIC = 1448,33 AICc = 1448,63 BIC = 1482,05
forecaster

Ainda não li o capítulo que tem algo chamado "invertibilidade". O auto.arima no segundo caso viola a regra de "invertibilidade" no diagnóstico do modelo ?, posso estar desligado, você pode corrigir se estou errado?
forecaster

1
@forecaster Suponha que você não saiba a verdade, tudo que você tem é a amostra em mãos. Nessa circunstância, a AIC etc está fazendo o que você está pedindo que eles façam. Como eu disse acima, a série simulada pode não ser a que você solicitou ou pode não ser possível identificar com êxito a série verdadeira da pequena amostra que você tirou. Não há nada implícito aqui ou em outro lugar nas estatísticas que você obterá o modelo TRUE. Como estatístico, se você acha que a série está sobreajustada (digamos, de conhecimento anterior), coloque uma restrição na ordem dos termos pesquisados. Ou use o BIC como critério de parada.
Reinstate Monica - G. Simpson

Não sei muito bem o que é invertibilidade para poder responder a essa pergunta. Talvez faça isso como uma nova pergunta aqui?
Restabelecer Monica - G. Simpson

@forecaster (Motivo pelo qual digo BIC, é que isso impõe uma penalidade extra à complexidade. Nesse caso, o BIC do ARIMA (1, 0, 1) tem um BIC menor do que o modelo auto.arima()estabelecido, portanto, se esses eram os únicos dois modelos candidatos, o mais simples seria selecionado ...)
Restabelece Monica - G. Simpson

2

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.

###############
set.seed(453)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)

## Adequetly describes the unknown data
fit.aic <- auto.arima(y,ic = c("aic"))
fit.aic

## Selects the model that is parsimonious
fit.bic <- auto.arima(y,ic = c("bic"))
fit.bic

O BIC IC escolhe um modelo MA (2).

> fit.bic
Series: y 
ARIMA(0,0,2) with non-zero mean 

Coefficients:
         ma1     ma2  intercept
      0.9256  0.2335    20.0326
s.e.  0.0453  0.0444     0.0992

sigma^2 estimated as 1.059:  log likelihood=-724.19
AIC=1456.39   AICc=1456.47   BIC=1473.24

1

Levei os 500 valores para o AUTOBOX (um software comercial que ajudei a desenvolver) e recebi o seguinte comunicado insira a descrição da imagem aquicom 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 insira a descrição da imagem aquigráficos ACF muito diferentes insira a descrição da imagem aqui.

Retornando à análise: Aqui está o modelo que foi identificado para os últimos 246 valores insira a descrição da imagem aquie aqui insira a descrição da imagem aquicom as seguintes estatísticas insira a descrição da imagem aqui. O Real / Ajuste e Previsão está aquiinsira a descrição da imagem aqui com plotagem residual aqui insira a descrição da imagem aqui. O ACF dos resíduos sugere suficiênciainsira a descrição da imagem aqui. 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 !


0

 exp(UMAEuCmEun-UMAEuCEu)/2
"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 fornece

                                # relprob = exp( (AICmin - AIC) / 2 ) * 100
 ARIMA(0,1,0) with drift : 784.5    100
 ARIMA(0,1,1) with drift : 784.8     86
 ARIMA(1,1,0) with drift : 784.9     82
 ARIMA(0,1,0)            : 792.4      2
 ARIMA(2,1,2) with drift : Inf    0
 ARIMA(1,1,1) with drift : Inf    0

1
Esta é uma resposta ou uma pergunta?
Tim

@ Tim, estou tão hesitante porque não sei se esses probs relativos são "reais" ou pelo menos comuns.
denis
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.