Rilevamento di valori anomali nelle serie temporali (LS / AO / TC) utilizzando il pacchetto tsoutliers in R. Come rappresentare i valori anomali in formato equazione?


35

Commenti: Prima di tutto vorrei dire un grande grazie al autore del nuovo tsoutliers pacchetto che implementa Chen e Liu di rilevazione delle serie storiche dei valori anomali che è stato pubblicato sul Journal of American Statistical Association nel 1993 in Open Source software .R

Il pacchetto rileva 5 diversi tipi di valori anomali in modo iterativo nei dati delle serie temporali:

  1. Additivo anomalo (AO)
  2. Innovation Outlier (IO)
  3. Level Shift (LS)
  4. Modifica temporanea (TC)
  5. Cambio di livello stagionale (SLS)

Ciò che è ancora più bello è che questo pacchetto implementa auto.arima dal pacchetto di previsione, quindi il rilevamento dei valori anomali è semplice. Inoltre, il pacchetto produce grafici utili per una migliore comprensione dei dati delle serie temporali.

Di seguito sono le mie domande:

Ho provato a fare alcuni esempi usando questo pacchetto e ha funzionato benissimo. Gli outlier additivi e il cambio di livello sono intuitivi. Tuttavia, ho avuto 2 domande in merito alla consegna di valori anomali di modifica temporanea e valori anomali innovativi che non sono in grado di comprendere.

Esempio di valore anomalo di modifica temporanea:

Considera il seguente esempio:

library(tsoutliers)
library(expsmooth)
library(fma)

outlier.chicken <- tsoutliers::tso(chicken,types = c("AO","LS","TC"),maxit.iloop=10)
outlier.chicken
plot(outlier.chicken)

Il programma rileva giustamente uno spostamento di livello e un cambio temporaneo nella seguente posizione.

Outliers:
  type ind time coefhat tstat
1   LS  12 1935   37.14 3.153
2   TC  20 1943   36.38 3.350

Di seguito è riportata la trama e le mie domande.

  • Come scrivere la modifica temporanea in un formato di equazione? (Il cambio di livello può essere facilmente scritto come una variabile binaria, in qualsiasi momento prima del 1935 / Obs 12 è 0 e in qualsiasi momento dopo il 1935 e dopo è 1)

L'equazione per la modifica temporanea nel manuale del pacchetto e nell'articolo è data come:

L(B)=11-δB

dove è 0,7. Sto solo lottando per tradurre questo nell'esempio sopra.δ

  • La mia seconda domanda riguarda gli outlier innovativi,
    in pratica non mi sono mai imbattuto in un outlier innovativo. qualsiasi esempio numerico o esempio di caso sarebbe molto utile.

valori anomali

Modifica: @Irishstat, la funzione tsoutliers fa un ottimo lavoro nell'identificare i valori anomali e nel suggerire un modello ARIMA appropriato. Osservando il set di dati del Nilo, vedere di seguito l'applicazione di auto.arima e quindi l'applicazione di tsoutliers (con impostazioni predefinite che include 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

Dopo aver applicato la funzione tsoutliers, identifica un outlier LS e un outlier additivo e raccomanda un ordine 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

inserisci qui la descrizione dell'immagine


8
Sono felice di vedere che hai trovato utile il pacchetto, grazie! A proposito ho risolto un errore di battitura nella funzione che traccia i risultati in modo che nella prossima versione del pacchetto l'asse y coprirà il range sia della serie originale che di quella modificata.
javlacalle,

2
Nell'ultima versione del pacchetto, la funzione tsoutliersè stata rinominata in modo tsoda evitare conflitti con una funzione con lo stesso nome nel pacchetto forecast.
javlacalle,

1
@javlacalle Ho scaricato l'ultimo pacchetto tsoutliers che ha ancora tsoutliers non tso. Non sono sicuro quando il pacchetto verrà aggiornato. Sono contento che abbiamo nomi di funzioni diversi.
previsioni

Mi sono precipitato un po 'a informare dell'aggiornamento. Ci vuole del tempo prima che venga aggiornato su CRAN. Ho appena visto che l'ultima versione 0.4 può essere scaricata da CRAN.
javlacalle,

@javlacalle Ho trovato i tsoutlier davvero difficili da installare sul mio mac. Ho installato gsl, ho provato a compilare usando clange gcce nessuno dei due funziona. Penso che sia un pacchetto fantastico ma l'installazione mi ha davvero spezzato il cuore.
B.Mr.W.

Risposte:


19

filterδ=0δ=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")

cambiamento tremendo

Nel tuo esempio, puoi usare la funzione outliers.effectsper rappresentare gli effetti degli outlier rilevati sulle serie osservate:

# 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)

Il valore anomalo innovativo, IO, è più peculiare. Contrariamente agli altri tipi di valori anomali considerati in tsoutliers, l'effetto dell'IO dipende dal modello selezionato e dalle stime dei parametri. Questo fatto può essere problematico in serie con molti valori anomali. Nelle prime iterazioni dell'algoritmo (in cui l'effetto di alcuni dei valori anomali potrebbero non essere stati rilevati e modificati) la qualità delle stime del modello ARIMA potrebbe non essere abbastanza buona da definire con precisione l'IO. Inoltre, man mano che l'algoritmo progredisce, è possibile selezionare un nuovo modello ARIMA. Pertanto, è possibile rilevare un IO in una fase preliminare con un modello ARIMA, ma alla fine la sua dinamica è definita da un altro modello ARIMA scelto nell'ultima fase.

In questo documento viene mostrato che, in alcune circostanze, l'influenza di un IO può aumentare man mano che la data della sua occorrenza diventa più distante dal passato, il che è qualcosa di difficile da interpretare o assumere.

L'IO ha un potenziale interessante poiché può acquisire valori anomali stagionali. Gli altri tipi di valori erratici considerati tsoutliersnon possono acquisire modelli stagionali. Tuttavia, in alcuni casi potrebbe essere meglio cercare un possibile cambio di livello stagionale, SLS, anziché IO ​​(come mostrato nel documento menzionato in precedenza).

L'IO ha un'interpretazione accattivante. A volte viene inteso come un valore anomalo additivo che influenza il termine di disturbo e quindi si propaga nelle serie secondo la dinamica del modello ARIMA. In questo senso, l'IO è come un valore anomalo additivo, entrambi influiscono su una singola osservazione ma l'IO è un impulso nel termine del disturbo mentre l'AO è un impulso aggiunto direttamente ai valori generati dal modello ARIMA o dal processo di generazione dei dati . Se i valori anomali influenzano le innovazioni o sono al di fuori del termine di disturbo può essere una questione di discussione.

Nel riferimento precedente è possibile trovare alcuni esempi di dati reali in cui vengono rilevati IO.


Grazie per la risposta dettagliata. Lo apprezzo molto. Ho qualche domanda aggiuntiva. Ci sono dei vantaggi nell'usare auto.arima, identificare p, d, q e quindi usare i tsoutlier usando arima come tsmethod?
previsioni

1
Il vantaggio principale dell'utilizzo forecast::auto.arimainsieme tsoutliersè che tutto viene automatizzato. Tuttavia, è consigliabile eseguire le procedure automatiche con opzioni alternative. Ad esempio, è possibile esaminare prima i test ACF o unità radice e quindi scegliere un modello ARIMA a cui passare tsoutliers. Se vengono trovati valori anomali per il modello proposto, è possibile ripetere nuovamente l'analisi per le serie modificate. È un processo iterativo. La procedura automatica fornisce una guida utile ma potrebbe non fornire necessariamente la soluzione definitiva o unica.
javlacalle,

1
La procedura per individuare i valori anomali è iterativa. Per motivi di sicurezza viene fissato un limite al numero di iterazioni consentite. Quando si osserva l'avvertimento, è possibile provare a eseguire l'algoritmo aumentando l'argomento maxit.iloopa 5-6 e vedere se i risultati cambiano. Se l'avviso viene restituito con un grande maxit.iloop(ad es. 20 o più), potrebbe essere un segno che qualcosa non viene modellato correttamente. La rimozione di IO dai tipi di valori anomali da considerare può essere una buona opzione in alcuni casi. Nella maggior parte dei casi è possibile ignorare l'avviso. Puoi usarlo suppressWarningsper evitarli.
javlacalle,

2
@mugen Non conosco un libro di testo che tratti questo problema in modo esauriente. Poiché l'approccio discusso in questo post è correlato all'analisi degli interventi, qualsiasi libro di testo (su Econometria o Serie storiche) con un capitolo su questo argomento sarebbe utile; ad esempio, Analisi delle serie storiche. Con applicazioni in R . Per i dettagli, è necessario rivedere alcuni dei numerosi articoli di riviste che trattano questo problema, iniziando ad esempio da Chen e Liu (1993) e dai relativi riferimenti.
javlacalle,

2
@mugen, darei un'occhiata anche all'articolo di Tsay . Inoltre, vorrei controllare il libro classico di Pankratz che ha una buona copertura sugli outlier.
previsioni
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.