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
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:
- 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?
- 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.
- 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?
- 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?
- 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?
- Como continuo fazendo minhas previsões com esses dados depois de identificar esses valores discrepantes?
- 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?
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:
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.iloop
na funçãotso
. É 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::arima
eforecast: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 .
fonte