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 .
Pakiet wykrywa 5 różnych typów wartości odstających iteracyjnie w danych szeregów czasowych:
- Dodatkowa wartość odstająca (AO)
- Granica innowacyjności (IO)
- Przesunięcie poziomu (LS)
- Tymczasowa zmiana (TC)
- 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:
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.
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
źródło
tsoutliers
zmieniono nazwę funkcji,tso
aby uniknąć konfliktu z funkcją o tej samej nazwie w pakiecieforecast
.clang
igcc
i ani prac. Myślę, że to niesamowity pakiet, ale instalacja naprawdę złamała mi serce.Odpowiedzi:
filter
W twoim przykładzie możesz użyć funkcji
outliers.effects
do przedstawienia efektów wykrytych wartości odstających na obserwowane serie: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
tsoutliers
nie 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.
źródło
forecast::auto.arima
ztsoutliers
tego 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ć przekazanytsoutliers
. 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.maxit.iloop
do 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ć,suppressWarnings
aby ich uniknąć.