Como interpretar e fazer previsões usando o pacote tsoutliers e o auto.arima

9

Eu tenho dados mensais de 1993 a 2015 e gostaria de fazer previsões sobre esses dados. Usei o pacote tsoutliers para detectar os outliers, mas não sei como continuo prevendo com meu conjunto de dados.

Este é o meu código:

product.outlier<-tso(product,types=c("AO","LS","TC"))
plot(product.outlier)

Esta é a minha saída do pacote tsoutliers

ARIMA(0,1,0)(0,0,1)[12]                    

Coefficients:
        sma1    LS46    LS51    LS61    TC133   LS181   AO183   AO184   LS185   TC186    TC193    TC200
      0.1700  0.4316  0.6166  0.5793  -0.5127  0.5422  0.5138  0.9264  3.0762  0.5688  -0.4775  -0.4386
s.e.  0.0768  0.1109  0.1105  0.1106   0.1021  0.1120  0.1119  0.1567  0.1918  0.1037   0.1033   0.1040
       LS207    AO237    TC248    AO260    AO266
      0.4228  -0.3815  -0.4082  -0.4830  -0.5183
s.e.  0.1129   0.0782   0.1030   0.0801   0.0805

sigma^2 estimated as 0.01258:  log likelihood=205.91
AIC=-375.83   AICc=-373.08   BIC=-311.19

 Outliers:
    type ind    time coefhat  tstat
1    LS  46 1996:10  0.4316  3.891
2    LS  51 1997:03  0.6166  5.579
3    LS  61 1998:01  0.5793  5.236
4    TC 133 2004:01 -0.5127 -5.019
5    LS 181 2008:01  0.5422  4.841 
6    AO 183 2008:03  0.5138  4.592
7    AO 184 2008:04  0.9264  5.911
8    LS 185 2008:05  3.0762 16.038
9    TC 186 2008:06  0.5688  5.483
10   TC 193 2009:01 -0.4775 -4.624
11   TC 200 2009:08 -0.4386 -4.217
12   LS 207 2010:03  0.4228  3.746
13   AO 237 2012:09 -0.3815 -4.877
14   TC 248 2013:08 -0.4082 -3.965
15   AO 260 2014:08 -0.4830 -6.027
16   AO 266 2015:02 -0.5183 -6.442

Este é o meu enredo

Eu tenho essas mensagens de aviso também.

Warning messages:
1: In locate.outliers.iloop(resid = resid, pars = pars, cval = cval,  :
  stopped when maxit was reached
2: In locate.outliers.iloop(resid = resid, pars = pars, cval = cval,  :
  stopped when maxit was reached
3: In locate.outliers.oloop(y = y, fit = fit, types = types, cval = cval,  :
  stopped when maxit was reached
4: In arima(x, order = c(1, d, 0), xreg = xreg) :
  possible convergence problem: optim gave code = 1
5: In auto.arima(x = c(5.77, 5.79, 5.79, 5.79, 5.79, 5.79, 5.78, 5.78,  :
  Unable to fit final model using maximum likelihood. AIC value approximated

Dúvidas:

  1. Se não estou errado, o pacote tsoutliers removerá os valores discrepantes que detectar e, através do uso do conjunto de dados com os valores discrepantes removidos, fornecerá o melhor modelo de arima adequado para o conjunto de dados, está correto?
  2. O conjunto de dados da série de ajuste está sendo muito reduzido devido à remoção da mudança de nível, etc. Isso não significa que, se a previsão for feita na série ajustada, a saída da previsão será muito imprecisa, pois os dados mais recentes já são maiores que 12, enquanto os dados ajustados mudam para 7-8.
  3. O que significam as mensagens de aviso 4 e 5? Isso significa que ele não pode executar auto.arima usando a série ajustada?
  4. O que significa [12] em ARIMA (0,1,0) (0,0,1) [12]? É apenas a minha frequência / periodicidade do meu conjunto de dados, que eu o defino mensalmente? E isso também significa que minhas séries de dados também são sazonais?
  5. Como detecto a sazonalidade no meu conjunto de dados? Desde a visualização do gráfico de séries temporais, não vejo nenhuma tendência óbvia e, se eu usar a função decompor, ela assumirá que existe uma tendência sazonal? Então, eu apenas acredito no que os tsoutliers me dizem, onde há tendência sazonal, já que há MA de ordem 1?
  6. Como continuo fazendo minhas previsões com esses dados depois de identificar esses valores discrepantes?
  7. Como incorporar esses valores discrepantes a outros modelos de previsão - Suavização exponencial, ARIMA, Modelo estrutural, Passeio aleatório, teta? Tenho certeza de que não consigo remover os valores discrepantes, pois há uma mudança de nível e, se eu pegar apenas os dados das séries ajustadas, os valores serão muito pequenos, então o que devo fazer?

Preciso adicionar esses valores discrepantes como regressor no auto.arima para previsão? Como isso funciona então?

Ted
fonte

Respostas:

5

Esses comentários são muito longos ... portanto, uma "RESPOSTA"

  1. Você está errado: ele não se ajusta e, em seguida, identifica o ARIMA (como a AUTOBOX). Presumivelmente, não assume nenhum ajuste de intervenção e depois corre para identificar um modelo ARIMA potencialmente impactado pelo não tratamento de anomalias. Muitas vezes, é necessário ajustar as séries causais especificadas pelo usuário e / ou a estrutura determinística não especificada (outliers / mudanças de nível, pulsos sazonais, tendências da hora local) antes de identificar a estrutura ARIMA. Veja este exemplo de uma dignose ruim que comete o erro de diferenciar desnecessariamente a série original, enquanto o estado natural / verdadeiro da natureza não precisa de diferenciação. A não estacionariedade não implica necessariamente a necessidade de diferenciar, mas muitas vezes pode sugerir a designificação do ajuste para uma mudança no nível / média

  2. A previsão correta é sempre feita a partir da série original, portanto, a previsão deve ser crível, considerando o histórico.

  3. Não faço ideia, pois não uso ativamente esse procedimento. Eu o recomendei porque você solicitou soluções gratuitas baseadas em r, NÃO porque eu pensei que era bom ou suficiente, pois a modelagem ARIMA é um processo de autoverificação iterativa (de vários estágios).

  4. o modelo sugere que ele acha que os dados têm um componente sazonal principal (12), MAS isso pode refletir simplesmente a necessidade de um pulso sazonal.

  5. o conceito de tendência sazonal é, na melhor das hipóteses, vago.

  6. Minha resposta seria muito óbvia e modesta

IrishStat
fonte
11
tu muito @ricardo
IrishStat
4

O pacote 'tsoutliers' implementa o procedimento descrito por Chen e Liu (1993) [1]. Uma descrição do pacote e do procedimento também é fornecida neste documento .

Resumidamente, o procedimento consiste em duas etapas principais:

  1. Detecção de outliers em um modelo ARIMA escolhido.
  2. Escolha e / ou reinstale o modelo ARIMA, incluindo os outliers detectados na etapa anterior e remova os outliers que não são significativos no novo ajuste.

A série é então ajustada para os outliers detectados e os estágios (1) e (2) são repetidos até que não sejam detectados mais outliers ou até que um número máximo de iterações seja alcançado.


A primeira etapa (detecção de outliers) também é um processo iterativo. No final de cada iteração, os resíduos do modelo ARIMA são ajustados para os valores discrepantes detectados nesse estágio. O processo é repetido até que não sejam encontrados mais outliers ou até que um número máximo de iterações seja alcançado (por padrão, 4 iterações). Os três primeiros avisos que você recebe estão relacionados a esse loop interno, ou seja, o estágio é encerrado após quatro iterações.

Você pode aumentar este número máximo de iterações através do argumento maxit.iloopna função tso. É aconselhável não definir um número alto de iterações no primeiro estágio e deixar o processo passar para o segundo estágio em que o modelo ARIMA é reformado ou escolhido novamente.


Os avisos 4 e 5 estão relacionados ao processo de ajuste do modelo ARIMA e a escolha do modelo, respectivamente para funções stats::arimae forecast:auto.arima. O algoritmo que maximiza a função de probabilidade nem sempre converge para uma solução. Você pode encontrar alguns detalhes relacionados a esses problemas, por exemplo, nesta postagem e nesta postagem


[1] Chung Chen e Lon-Mu Liu (1993) "Estimativa Conjunta de Parâmetros do Modelo e Efeitos Externos em Séries Temporais", Jornal da Associação Estatística Americana , 88 (421), pp. 284-297. DOI: 10.1080 / 01621459.1993.10594321 .

javlacalle
fonte
quanto tempo levará para executar tso ()?
AnoToffy
@AnoopToffy depende do tamanho dos dados, periodicidade, etc. Para dados anuais, mensais e trimestrais, um tamanho de amostra de cerca de 120 observações e uma dinâmica que pode ser capturada razoavelmente por um modelo ARIMA, o algoritmo será executado no máximo cerca de 10 segundos (normalmente muito menos).
Javlacalle