Mam serię zoo z wieloma brakującymi wartościami. Czytałem, że auto.arima
można przypisać te brakujące wartości? Czy ktoś może mnie nauczyć, jak to zrobić? wielkie dzięki!
Próbowałem tego, ale bez powodzenia:
fit <- auto.arima(tsx)
plot(forecast(fit))
Odpowiedzi:
Po pierwsze, pamiętaj, że
forecast
oblicza prognozy poza próbą, ale jesteś zainteresowany obserwacjami w próbie.Filtr Kalmana obsługuje brakujące wartości. W ten sposób możesz pobrać formę przestrzeni stanów modelu ARIMA z danych wyjściowych zwróconych przez
forecast::auto.arima
lubstats::arima
i przekazać je doKalmanRun
.Edycja (poprawka w kodzie na podstawie odpowiedzi stats0007)
W poprzedniej wersji wziąłem kolumnę stanów filtrowanych związanych z obserwowanymi szeregami, jednak powinienem użyć całej macierzy i wykonać odpowiednią operację macierzową równania obserwacyjnego,yt= Zαt . (Dzięki @ stats0007 za komentarze.) Poniżej aktualizuję kod i odpowiednio kreślę.
ts
Zamiast tego używam obiektu jako przykładowej seriizoo
, ale powinien on być taki sam:Możesz wykreślić wynik (dla całej serii i całego roku z brakującymi obserwacjami w środku próby):
Możesz powtórzyć ten sam przykład za pomocą wygładzacza Kalmana zamiast filtra Kalmana. Wszystko, co musisz zmienić, to te linie:
Radzenie sobie z brakującymi obserwacjami za pomocą filtra Kalmana jest czasem interpretowane jako ekstrapolacja serii; gdy stosuje się wygładzacz Kalmana, mówi się, że brakujące obserwacje są wypełniane przez interpolację w obserwowanych szeregach.
źródło
makeARIMA
definiuje macierze formy przestrzeni stanu i powiedziałbym, że przyjęta kolumnaid
jest poprawna. Wektor w równaniu obserwacyjnym jest zdefiniowanymakeARIMA
jako:,Z <- c(1, rep.int(0, r - 1L), Delta)
gdzieDelta
jest wektorem zawierającym współczynniki filtra różnicującego. Jeśli nie ma filtra różnicującego (tj. Modelu ARMAlength(tmp)==1
),id
powinien wynosić 1; w przeciwnym razie pierwsza kolumna jest związana z szeregiem różnicowym, a następny element związany zZ
przyjmowaniem wartości 1 jest związanyOto moje rozwiązanie:
@ Javlacalle:
Dzięki za Twój post, bardzo interesujące!
Mam dwa pytania do twojego rozwiązania, mam nadzieję, że możesz mi pomóc:
Dlaczego korzystasz z KalmanRun zamiast KalmanSmooth? Czytam, że KalmanRun jest uważany za ekstrapolację, podczas gdy gładkość byłaby szacunkiem.
Nie dostaję także twojej części identyfikacyjnej. Dlaczego nie używasz wszystkich komponentów w .Z? To znaczy, na przykład .Z daje 1, 0,0,0,0,1, -1 -> 7 wartości. Oznaczałoby to, że .smooth (w twoim przypadku dla stanów KalmanRun) daje mi 7 kolumn. Jak rozumiem, wszystkie kolumny, które są 1 lub -1, wchodzą do modelu.
Załóżmy, że w AirPass brakuje wiersza nr 5. Następnie wziąłbym sumę wiersza 5 w ten sposób: dodałbym wartość z kolumny 1 (ponieważ Z dał 1), nie dodałbym kolumny 2-4 (ponieważ Z mówi 0), dodałbym kolumnę 5 i dodałbym dodaj ujemną wartość z kolumny 7 (ponieważ Z mówi -1)
Czy moje rozwiązanie jest złe? A może oba są w porządku? Czy możesz mi wyjaśnić dalej?
źródło