Jak korzystać z DLM z filtrowaniem Kalmana do prognozowania

19

Czy ktoś mógłby poprowadzić mnie przez przykład użycia filtrowania DLM Kalmana w R w szeregach czasowych. Powiedzmy, że mam te wartości (wartości kwartalne z roczną sezonowością); jak użyłbyś DLM do przewidywania kolejnych wartości? A tak przy okazji, czy mam wystarczającą ilość danych historycznych (co jest minimum)?

89  2009Q1  
82  2009Q2  
89  2009Q3  
131 2009Q4  
97  2010Q1  
94  2010Q2  
101 2010Q3  
151 2010Q4  
100 2011Q1  
?   2011Q2

Poszukuję krok po kroku odpowiedzi typu książka kucharska w stylu R-code. Dokładność przewidywania nie jest moim głównym celem, chcę tylko nauczyć się sekwencji kodu, która daje mi liczbę na 2011Q2, nawet jeśli nie mam wystarczającej ilości danych.

datayoda
źródło
3
To może uzyskać lepsze odpowiedzi na stats.stackexchange.com
Joshua Ulrich
Bump ... Nadal nie rozumiem, jak to zrobić. Czy ktoś chce odpowiedzieć na oryginalny post?
datayoda
2
Z DLM nie jest tak stylowy jak książka kucharska, jak byś chciał. Wziąłbym odpowiedź RockScience (winieta DLM) i przejrzałem ją. DLM bardziej przypomina projektowanie programu niż inne techniki, które wymagają jedynie podłączenia niektórych danych i poprawienia niektórych parametrów. Ostatecznie projektujesz zestaw tablic, które implementują coś w rodzaju ukrytego modelu Markowa, a dlmpakiet sprawia, że ​​jest to tak proste, jak to możliwe.
Wayne,
Czy masz rozwiązanie swojego problemu? Szukam rozwiązania problemu podobnego typu szeregów czasowych, ale nie mogę znaleźć rozwiązania.
Czy przeczytałeś artykuł sugerowany przez @RockScience? Czy spojrzałeś na dlmpaczkę? Jak powiedziałem w mojej odpowiedzi, DLM bardziej przypominają tworzenie programu niż podłączanie niektórych zmiennych do wywołania funkcji. datayoda nigdy nie przyjęła odpowiedzi, więc nie jestem pewien, czy przeszli przez tę obserwację.
Wayne

Odpowiedzi:

16

Artykuł na JSS 39-02 porównuje 5 różnych pakietów R filtrujących Kalmana i podaje przykładowy kod.

G. Grothendieck
źródło
16

DLM są fajne, ale nie są tak proste jak, powiedzmy, ARIMA lub inne metody. W innych metodach podłączasz swoje dane, a następnie poprawiasz niektóre parametry algorytmu, być może odwołując się do różnych metod diagnostycznych, aby poprowadzić twoje ustawienia.

Za pomocą DLM tworzysz maszynę w przestrzeni stanów, która składa się z kilku macierzy, które w zasadzie implementują coś w rodzaju ukrytego modelu Markowa. Niektóre pakiety ( sspirmyślę między innymi) oczekują, że rozumiesz pojęcie i to, co robią macierze. Gorąco polecam zacząć oddlm pakietu, a jak zaleca @RockScience, przejdź przez winietę.

Ze dlmmasz zamiar po prostu wykonać kilka kroków:

  1. Jakie elementy opisują moją serię? Trend? Sezonowość? Zmienne egzogeniczne? Użyjesz dlmnarzędzi takich jak dlmModPolyimplementacja tych komponentów, używając +operatora do połączenia ich w jeden model.

  2. Utwórz podprogram R, który pobiera jednak wiele parametrów wymaganych przez ten model, tworzy komponenty z tymi parametrami, a następnie dodaje je razem i zwraca model wynikowy.

  3. Służy dlmMLEdo wyszukiwania / optymalizacji w celu znalezienia odpowiednich parametrów (za pomocą MLE, która jest w zasadzie optymalizacją, z pułapkami, które mogą wystąpić podczas optymalizacji). dlmMLEwielokrotnie wywołuje podprogram R z parametrami kandydującymi do tworzenia modeli, a następnie je testuje.

  4. Utwórz swój ostateczny model, korzystając z utworzonego podprogramu R i parametrów znalezionych w kroku 3.

  5. Filtruj swoje dane za pomocą dlmFilter, a następnie może za pomocą dlmSmooth.

  6. Jeśli używasz dlmModReglub robisz coś, co powoduje, że model ma parametry zmienne w czasie, nie możesz użyć dlmForecastdo prognozowania swojej serii. Jeśli skończysz na modelu zmiennym w czasie, będziesz chciał wypełnić swoje dane wejściowe NA i pozwolić na dlmFilterwypełnienie NA dla ciebie (prognoza biedaka), ponieważ dlmForecastnie działa z parametrami zmieniającymi się w czasie.

  7. Jeśli chcesz zbadać komponenty indywidualnie (powiedz trend, niezależnie od sezonu), musisz zrozumieć macierze i to, co jest w każdej kolumnie, a także zrozumieć, w jaki sposób dlmje łączy (kolejność ma znaczenie!).

Jest inny pakiet, którego nazwa ucieka mi, który próbuje stworzyć interfejs, który może korzystać z kilku z tych pakietów (w tym dlm jako zaplecza). Niestety, nigdy nie udało mi się, aby działał dobrze, ale to może być tylko ja.

Naprawdę polecam kupienie książki o DLM. Mam ich kilka i dużo grałem, dlmaby dotrzeć do tego, gdzie jestem, i pod żadnym względem nie jestem ekspertem.

Wayne
źródło
Dzięki Wayne, myślę, że moja sprawa jest dość prosta w taki sposób, że nie dostrzegłem żadnych wyraźnych trendów ani sezonowości w kontroli wizualnej. (Jeśli jednak znasz jakieś testy w języku R, daj mi znać, spróbuję je uruchomić). Mój problem polega na tym, że nie wiem, jak wypełnić argumenty takie jak (FF, V, GG, W, m0, C0, dV itp.) W funkcjach dlm dla moich danych? To dla mnie główny problem. Jeśli mam dane szeregów dwuwymiarowych (y = X1 + X2) np. (Cena = popyt + podaż), to jak mogę zacząć obliczać te argumenty dla moich danych? FF, V, GG, W, m0, C0, dV itp., Które są wymagane w funkcjach
dlm
1
@nclfinance Przeczytaj FAQ i nie traktuj tego miejsca jako forum.
@nclfinance: Przejrzyj dlmwinietę pakietu. Dowiesz się, co musisz wiedzieć. Dlatego polecam dlm, ponieważ sam nie tworzysz FF itp.
Wayne