Comentários: Em primeiro lugar gostaria de dizer um grande obrigado ao autor do novo tsoutliers pacote que implementos de Chen e Liu detecção de séries temporais outlier, que foi publicado no Jornal da Associação Americana de Estatística em 1993 em software Open Source .
O pacote detecta iterativamente 5 tipos diferentes de outliers em dados de séries temporais:
- Outlier aditivo (AO)
- Outlier de inovação (IO)
- Mudança de nível (LS)
- Mudança temporária (CT)
- Mudança de nível sazonal (SLS)
O que é ainda mais importante é que este pacote implementa o auto.arima a partir do pacote de previsão para que a detecção de outliers seja perfeita. Além disso, o pacote produz gráficos agradáveis para melhor compreensão dos dados das séries temporais.
Abaixo estão minhas perguntas:
Tentei executar alguns exemplos usando este pacote e ele funcionou muito bem. Outliers aditivos e mudança de nível são intuitivos. No entanto, eu tinha duas perguntas com relação à entrega de valores discrepantes de Mudanças Temporárias e de inovações que não consigo entender.
Exemplo externo de alteração temporária:
Considere o seguinte exemplo:
library(tsoutliers)
library(expsmooth)
library(fma)
outlier.chicken <- tsoutliers::tso(chicken,types = c("AO","LS","TC"),maxit.iloop=10)
outlier.chicken
plot(outlier.chicken)
O programa detecta corretamente uma mudança de nível e uma mudança temporária no seguinte local.
Outliers:
type ind time coefhat tstat
1 LS 12 1935 37.14 3.153
2 TC 20 1943 36.38 3.350
Abaixo está o enredo e minhas perguntas.
- Como escrever a mudança temporária em um formato de equação? (A mudança de nível pode ser facilmente escrita como uma variável binária, a qualquer momento antes de 1935 / Obs 12 é 0 e depois de 1935 e depois é 1.)
A equação para mudança temporária no manual do pacote e no artigo é apresentada como:
- Minha segunda pergunta é sobre outlier inovador, nunca
encontrei um outlier inovador na prática. qualquer exemplo numérico ou exemplo de caso seria muito útil.
Edit: @Irishstat, a função tsoutliers faz um excelente trabalho na identificação de outliers e na sugestão de um modelo ARIMA apropriado. Observando o conjunto de dados do Nilo, veja abaixo a aplicação de auto.arima e, em seguida, aplicando tsoutliers (com os padrões que incluem auto.arima):
auto.arima(Nile)
Series: Nile
ARIMA(1,1,1)
Coefficients:
ar1 ma1
0.2544 -0.8741
s.e. 0.1194 0.0605
sigma^2 estimated as 19769: log likelihood=-630.63
AIC=1267.25 AICc=1267.51 BIC=1275.04
Após aplicar a função tsoutliers, ele identifica um outlier LS e um outlier aditivo e recomenda uma ordem ARIMA (0,0,0).
nile.outliers <- tso(Nile,types = c("AO","LS","TC"))
nile.outliers
Series: Nile
ARIMA(0,0,0) with non-zero mean
Coefficients:
intercept LS29 AO43
1097.7500 -242.2289 -399.5211
s.e. 22.6783 26.7793 120.8446
sigma^2 estimated as 14401: log likelihood=-620.65
AIC=1249.29 AICc=1249.71 BIC=1259.71
Outliers:
type ind time coefhat tstat
1 LS 29 1899 -242.2 -9.045
2 AO 43 1913 -399.5 -3.306
fonte
tsoutliers
foi renomeadatso
para evitar conflitos com uma função com o mesmo nome no pacoteforecast
.clang
egcc
e nem obras. Eu acho que é um pacote incrível, mas a instalação realmente quebrou meu coração.Respostas:
filter
No seu exemplo, você pode usar a função
outliers.effects
para representar os efeitos dos valores discrepantes detectados nas séries observadas:O outlier inovador, IO, é mais peculiar. Ao contrário dos outros tipos de discrepantes considerados
tsoutliers
, o efeito da IO depende do modelo selecionado e das estimativas de parâmetros. Esse fato pode ser problemático em série, com muitos discrepantes. Nas primeiras iterações do algoritmo (onde o efeito de alguns dos outliers pode não ter sido detectado e ajustado), a qualidade das estimativas do modelo ARIMA pode não ser boa o suficiente para definir com precisão a IO. Além disso, conforme o algoritmo avança, um novo modelo ARIMA pode ser selecionado. Assim, é possível detectar uma IO em um estágio preliminar com um modelo ARIMA, mas, eventualmente, sua dinâmica é definida por outro modelo ARIMA escolhido no último estágio.No presente documento é mostrado que, em algumas circunstâncias, a influência de um IO pode aumentar à medida que a data de sua ocorrência se torna mais distante no passado, que é algo difícil de interpretar ou assumir.
O IO tem um potencial interessante, pois pode capturar valores extremos sazonais. Os outros tipos de outliers considerados em
tsoutliers
não podem capturar padrões sazonais. No entanto, em alguns casos, pode ser melhor procurar uma possível mudança de nível sazonal, SLS, em vez de E / S (como mostrado no documento mencionado anteriormente).O pedido de informação tem uma interpretação atraente. Às vezes, é entendido como um outlier aditivo que afeta o termo de perturbação e depois se propaga na série de acordo com a dinâmica do modelo ARIMA. Nesse sentido, o IO é como um aditivo outlier, ambos afetam uma única observação, mas o IO é um impulso no termo de perturbação, enquanto o AO é um impulso adicionado diretamente aos valores gerados pelo modelo ARIMA ou pelo processo de geração de dados . Se os valores extremos afetam as inovações ou estão fora do termo de perturbação podem ser uma questão de discussão.
Na referência anterior, você pode encontrar alguns exemplos de dados reais nos quais as E / S são detectadas.
fonte
forecast::auto.arima
juntotsoutliers
é que tudo é automatizado. No entanto, é aconselhável executar os procedimentos automáticos com opções alternativas. Você pode, por exemplo, examinar os testes de raiz unitária ou ACF e, em seguida, escolher um modelo ARIMA a ser passadotsoutliers
. Se forem encontrados outliers para o modelo proposto, você poderá repetir novamente a análise para a série ajustada. É um processo iterativo. O procedimento automático fornece um guia útil, mas pode não fornecer necessariamente a solução definitiva ou única.maxit.iloop
para 5-6 e ver se os resultados mudam. Se o aviso for retornado com um tamanho grandemaxit.iloop
(por exemplo, 20 ou mais), pode ser um sinal de que algo não está sendo modelado corretamente. Remover E / S dos tipos de outliers a serem considerados pode ser uma boa opção em alguns casos. Na maioria dos casos, você pode ignorar o aviso. Você pode usarsuppressWarnings
para evitá-los.