Detectando Outliers em Séries Temporais (LS / AO / TC) usando o pacote tsoutliers em R. Como representar outliers no formato de equações?

35

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 .R

O pacote detecta iterativamente 5 tipos diferentes de outliers em dados de séries temporais:

  1. Outlier aditivo (AO)
  2. Outlier de inovação (IO)
  3. Mudança de nível (LS)
  4. Mudança temporária (CT)
  5. 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:

eu(B)=1 11 1-δB

δ

  • 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.

outliers

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

insira a descrição da imagem aqui

previsor
fonte
8
Fico feliz em ver que você achou o pacote útil, obrigado! BTW Corrigi um erro de digitação na função que plota os resultados para que, na próxima versão do pacote, o eixo y cubra o intervalo das séries original e ajustada.
Javlacalle
2
Na última versão do pacote, a função tsoutliersfoi renomeada tsopara evitar conflitos com uma função com o mesmo nome no pacote forecast.
Javlacalle
11
@ javlacalle Eu baixei o pacote tsoutliers mais recente, ele ainda tem tsoutliers e não tso. Não tenho certeza de quando o pacote será atualizado. Fico feliz que tenhamos nomes de funções diferentes.
forecaster
Corri um pouco informando sobre a atualização. Demora algum tempo até que seja atualizado no CRAN. Acabei de ver que a versão mais recente 0.4 pode ser baixada do CRAN.
Javlacalle
@javlacalle Eu achei tsoutliers realmente difíceis de instalar no meu mac. Eu tomo instalado GSL, eu tentei compilar usando clange gcce nem obras. Eu acho que é um pacote incrível, mas a instalação realmente quebrou meu coração.
B.Mr.W.

Respostas:

19

filterδ=0 0δ=1 1

tc <- rep(0, 50)
tc[20] <- 1
tc1 <- filter(tc, filter = 0, method = "recursive")
tc2 <- filter(tc, filter = 0.3, method = "recursive")
tc3 <- filter(tc, filter = 0.7, method = "recursive")
tc4 <- filter(tc, filter = 1, method = "recursive")
par(mfrow = c(2,2))
plot(tc1, main = "TC delta = 0")
plot(tc2, main = "TC delta = 0.3")
plot(tc3, main = "TC delta = 0.7")
plot(tc4, main = "TC delta = 1", type = "s")

mudança temporária

No seu exemplo, você pode usar a função outliers.effectspara representar os efeitos dos valores discrepantes detectados nas séries observadas:

# unit impulse
m1 <- ts(outliers.effects(outlier.chicken$outliers, n = length(chicken), weights = FALSE))
tsp(m1) <- tsp(chicken)
# weighted by the estimated coefficients
m2 <- ts(outliers.effects(outlier.chicken$outliers, n = length(chicken), weights = TRUE))
tsp(m2) <- tsp(chicken)

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 tsoutliersnã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.

javlacalle
fonte
Obrigado pela resposta detalhada. Eu realmente gostei disso. Eu tenho algumas perguntas adicionais. Existem vantagens em usar o auto.arima, identificar p, d, q e usar tsoutliers usando arima como o tsmethod?
forecaster
11
A principal vantagem de usar forecast::auto.arimajunto tsoutliersé 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 passado tsoutliers. 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.
Javlacalle
11
O procedimento para localizar discrepantes é iterativo. Por segurança, um limite é definido no número de iterações permitidas. Ao observar o aviso, você pode tentar executar o algoritmo aumentando o argumento maxit.ilooppara 5-6 e ver se os resultados mudam. Se o aviso for retornado com um tamanho grande maxit.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 usar suppressWarningspara evitá-los.
Javlacalle
2
@mugen Não conheço um livro que cubra esta questão completamente. Como a abordagem discutida neste post está relacionada à análise da intervenção, qualquer livro (sobre Econometria ou Séries Temporais) com um capítulo sobre esse assunto seria útil; por exemplo, Análise de séries temporais. Com aplicações em R . Para detalhes, você deve revisar alguns dos muitos artigos de periódicos que lidam com esse problema, começando por exemplo por Chen e Liu (1993) e suas referências.
Javlacalle
2
@mugen, eu também verificaria o artigo de Tsay . Além disso, eu verificaria o livro clássico de Pankratz, que tem uma boa cobertura de valores extremos.
forecaster