Wykrywanie wartości odstających w szeregach czasowych (LS / AO / TC) przy użyciu pakietu tsoutliers w R. Jak reprezentować wartości odstające w formacie równania?

35

Komentarz: Po pierwsze chciałbym powiedzieć wielkie dziękuję do autora nowego tsoutliers pakietu, który implementuje Chen i Liu wykrywania szeregi czasowe poboczna, które zostało opublikowane w Journal of American Statistical Association w 1993 roku w oprogramowanie open source .R

Pakiet wykrywa 5 różnych typów wartości odstających iteracyjnie w danych szeregów czasowych:

  1. Dodatkowa wartość odstająca (AO)
  2. Granica innowacyjności (IO)
  3. Przesunięcie poziomu (LS)
  4. Tymczasowa zmiana (TC)
  5. Sezonowa zmiana poziomu (SLS)

Co więcej, ten pakiet implementuje auto.arima z pakietu prognozy, dzięki czemu wykrywanie wartości odstających jest bezproblemowe. Pakiet tworzy również ładne wykresy dla lepszego zrozumienia danych szeregów czasowych.

Poniżej moje pytania:

Próbowałem uruchomić kilka przykładów przy użyciu tego pakietu i działało świetnie. Addytywne wartości odstające i zmiana poziomu są intuicyjne. Miałem jednak 2 pytania dotyczące przekazania wartości odstającej zmiany tymczasowej i wartości odstających innowacji, których nie rozumiem.

Przykład wartości odstającej zmiany tymczasowej:

Rozważ następujący przykład:

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

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

Program słusznie wykrywa zmianę poziomu i tymczasową zmianę w następującej lokalizacji.

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

Poniżej znajduje się fabuła i moje pytania.

  • Jak zapisać tymczasową zmianę w formacie równania? (Przesunięcie poziomu można łatwo zapisać jako zmienną binarną, w dowolnym momencie przed 1935 / Obs 12 wynosi 0, a za każdym razem po 1935 i po 1).

Równanie tymczasowej zmiany w podręczniku pakietu i artykule podano jako:

L.(b)=11-δb

gdzie wynosi 0,7. Po prostu staram się przetłumaczyć to na powyższy przykład.δ

  • Moje drugie pytanie dotyczy innowacyjnej wartości odstającej, nigdy nie spotkałem
    się z innowacyjną wartością odstającą w praktyce. każdy przykład liczbowy lub przykładowy byłby bardzo pomocny.

wartości odstające

Edycja: @ Irishstat, funkcja tsoutliers wykonuje doskonałą robotę w identyfikowaniu wartości odstających i sugerowaniu odpowiedniego modelu ARIMA. Patrząc na zestaw danych Nilu, patrz poniżej zastosowanie auto.arima, a następnie zastosowanie tsoutliers (z wartościami domyślnymi, które obejmują 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

Po zastosowaniu funkcji tsoutliers identyfikuje wartość odstającą LS i wartość odstającą addytywną i zaleca zamówienie 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

wprowadź opis zdjęcia tutaj

wróżka
źródło
8
Cieszę się, że pakiet okazał się przydatny, dzięki! BTW Naprawiłem literówkę w funkcji, która wykreśla wyniki, aby w następnym wydaniu pakietu oś y obejmowała zakres zarówno oryginalnej, jak i dostosowanej serii.
javlacalle
2
W ostatniej wersji pakietu tsoutlierszmieniono nazwę funkcji, tsoaby uniknąć konfliktu z funkcją o tej samej nazwie w pakiecie forecast.
javlacalle
1
@ javlacalle Pobrałem najnowszy pakiet tsoutliers, który wciąż zawiera tsoutliers, a nie tso. Nie jestem pewien, kiedy pakiet zostanie zaktualizowany. Cieszę się, że mamy różne nazwy funkcji.
prezenter
Pośpieszyłem trochę z informacją o aktualizacji. Aktualizacja zajmie trochę czasu w CRAN. Właśnie widziałem, że najnowszą wersję 0.4 można pobrać z CRAN.
javlacalle
@javlacalle Znalazłem naprawdę trudny do zainstalowania tsoutliers na moim komputerze Mac. I piwny zainstalowany GSL, próbowałem kompilować za pomocą clangi gcci ani prac. Myślę, że to niesamowity pakiet, ale instalacja naprawdę złamała mi serce.
B.Mr.W.

Odpowiedzi:

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

drżenie zmiany

W twoim przykładzie możesz użyć funkcji outliers.effectsdo przedstawienia efektów wykrytych wartości odstających na obserwowane serie:

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

Innowacyjna wartość odstająca, IO, jest bardziej osobliwa. W przeciwieństwie do innych typów wartości odstających uwzględnionych w tsoutliers, wpływ IO zależy od wybranego modelu i oszacowań parametrów. Ten fakt może być kłopotliwy w szeregu z wieloma wartościami odstającymi. W pierwszych iteracjach algorytmu (w których efekt niektórych wartości odstających mógł nie zostać wykryty i skorygowany) jakość oszacowań modelu ARIMA może nie być wystarczająco dobra, aby dokładnie zdefiniować IO. Co więcej, w miarę postępu algorytmu można wybrać nowy model ARIMA. W ten sposób możliwe jest wykrycie IO na wstępnym etapie za pomocą modelu ARIMA, ale ostatecznie jego dynamika jest zdefiniowana przez inny model ARIMA wybrany w ostatnim etapie.

W tym dokumencie pokazano, że w niektórych okolicznościach wpływ IO może wzrosnąć, gdy data jego wystąpienia staje się bardziej odległa w przeszłość, co jest trudne do zinterpretowania lub założenia.

IO ma interesujący potencjał, ponieważ może uchwycić sezonowe wartości odstające. Inne typy wartości odstających uwzględnione w tsoutliersnie mogą uchwycić wzorców sezonowych. Niemniej jednak w niektórych przypadkach lepszym rozwiązaniem może być wyszukanie ewentualnych sezonowych zmian poziomu, SLS, zamiast IO (jak pokazano we wspomnianym dokumencie).

IO ma atrakcyjną interpretację. Czasami jest to rozumiane jako dodatkowa wartość odstająca, która wpływa na termin zakłócenia, a następnie rozprzestrzenia się w szeregu zgodnie z dynamiką modelu ARIMA. W tym sensie IO jest jak wartość odstająca addytywna, oba wpływają na pojedynczą obserwację, ale IO jest impulsem w zakresie zakłóceń, podczas gdy AO jest impulsem dodawanym bezpośrednio do wartości generowanych przez model ARIMA lub proces generowania danych . To, czy wartości odstające wpływają na innowacje, czy też wykraczają poza okres zakłóceń, może być przedmiotem dyskusji.

W poprzednim odnośniku możesz znaleźć przykłady prawdziwych danych, w których wykryto IO.

javlacalle
źródło
Dziękuję za szczegółową odpowiedź. Bardzo to doceniam. Mam kilka dodatkowych pytań. Czy są jakieś zalety używania auto.arima, zidentyfikowania p, d, q, a następnie użycia tsoutliers przy użyciu arima jako tsmethod?
prezenter
1
Główną zaletą korzystania forecast::auto.arimaz tsoutlierstego jest to, że wszystko jest zautomatyzowane. Wskazane jest jednak uruchomienie automatycznych procedur z alternatywnymi opcjami. Najpierw możesz na przykład spojrzeć na testy ACF lub jednostki root, a następnie wybrać model ARIMA, który ma zostać przekazany tsoutliers. Jeśli dla proponowanego modelu zostaną znalezione jakieś wartości odstające, możesz powtórzyć analizę dla skorygowanych serii. Jest to proces iteracyjny. Procedura automatyczna stanowi pomocny przewodnik, ale niekoniecznie daje najlepsze lub unikalne rozwiązanie.
javlacalle
1
Procedura lokalizowania wartości odstających jest iteracyjna. Dla bezpieczeństwa ustalono limit liczby dozwolonych iteracji. Gdy zobaczysz ostrzeżenie, możesz spróbować uruchomić algorytm zwiększając argument maxit.iloopdo 5-6 i sprawdzając, czy wyniki się zmienią. Jeśli ostrzeżenie zostanie zwrócone z dużą maxit.iloop(np. 20 lub więcej), może to oznaczać, że coś nie jest odpowiednio modelowane. Usunięcie IO z typów wartości odstających, które należy rozważyć, może być dobrym rozwiązaniem w niektórych przypadkach. W większości przypadków możesz zignorować ostrzeżenie. Możesz ich użyć, suppressWarningsaby ich uniknąć.
javlacalle
2
@mugen Nie znam podręcznika opisującego dokładnie ten problem. Ponieważ podejście omówione w tym poście dotyczy analizy interwencji, każdy podręcznik (o ekonometrii lub szeregach czasowych) z rozdziałem na ten temat byłby pomocny; na przykład Analiza szeregów czasowych. W przypadku aplikacji w dziedzinie badań . Aby uzyskać szczegółowe informacje, powinieneś przejrzeć niektóre z wielu artykułów w czasopismach dotyczących tego problemu, na przykład Chen i Liu (1993) oraz odnośniki do nich.
javlacalle,
2
@mugen, chciałbym również sprawdzić artykuł Tsay . Ponadto sprawdziłbym klasyczną książkę Pankratza, która ma dobre relacje na temat wartości odstających.
prezenter