Próbuję wykryć anomalne wartości w szeregu czasowym danych klimatycznych z pewnymi brakującymi obserwacjami. Przeszukując sieć znalazłem wiele dostępnych podejść. Spośród nich rozkład stl wydaje się atrakcyjny w sensie usunięcia trendów i składników sezonowych i przestudiowania reszty. Czytając STL: sezonowy-Trend rozkładu procedury opartej na Lessów , stl
wydaje się być elastyczni w ustalaniu ustawień przypisując zmienności wpływu odstających i możliwych do zastosowania pomimo brakujących wartości. Jednak starając się to zastosować R
, z czterema latami obserwacji i zdefiniowaniem wszystkich parametrów zgodnie z http://stat.ethz.ch/R-manual/R-pched/library/stats/html/stl.html , napotykam błąd:
"time series contains internal NAs"
(kiedy na.action=na.omit
) i
"series is not periodic or has less than two periods"
(kiedy na.action=na.exclude
).
Dokładnie sprawdziłem, czy częstotliwość jest poprawnie zdefiniowana. Widziałem odpowiednie pytania na blogach, ale nie znalazłem żadnych sugestii, które mogłyby to rozwiązać. Czy nie można zastosować stl
w szeregu z brakującymi wartościami? Bardzo niechętnie je interpoluję, ponieważ nie chcę wprowadzać (a tym samym wykrywać ...) artefaktów. Z tego samego powodu nie wiem, jak wskazane byłoby użycie metod ARIMA zamiast tego (a jeśli brakujące wartości nadal byłyby problemem).
Proszę podzielić się, jeśli znasz sposób na zastosowanie stl
w serii z brakującymi wartościami lub jeśli uważasz, że moje wybory nie są metodologicznie uzasadnione, lub jeśli masz lepszą sugestię. Jestem całkiem nowy w tej dziedzinie i przytłoczony przez stosy (pozornie ...) istotnych informacji.
źródło
Odpowiedzi:
Modele ARIMA łatwo uwzględniają zmienne zastępcze, aby radzić sobie z brakującymi wartościami. Są to tak zwane Wskaźniki Pulsów. Metodologia jest prosta i udokumentowana w http://www.unc.edu/~jbhill/tsay.pdf . Zasadniczo metoda wyodrębnia aktualne informacje o szeregach rezydualnych dotyczące pulsów, przesunięć poziomów, sezonowych pulsów i lokalnych trendów czasowych.
źródło
Według @Julius w tym poście jest to możliwe do wykorzystania
stl
zna.approx
odzoo
pakietu, używającstl(x, na.action = na.approx, ...)
. To robi jakąś interpolację .źródło
Możesz również sprawdzić pakiet Hafena
stlplus
. Szczegóły znajdują się w jego pracy magisterskiej.Możesz zainstalować go z CRAN za pomocą
lub bezpośrednio z github za pomocą
źródło