Verwendung von DLM mit Kalman-Filter für Prognosen

19

Könnte mir jemand ein Beispiel zur Verwendung der DLM-Kalman-Filterung in R für eine Zeitreihe zeigen? Angenommen, ich habe diese Werte (vierteljährliche Werte mit jährlicher Saisonabhängigkeit). Wie würden Sie DLM verwenden, um die nächsten Werte vorherzusagen? Und übrigens, habe ich genug historische Daten (was ist das Minimum)?

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

Ich bin auf der Suche nach einer Art R-Code-Kochbuch, wie man Schritt für Schritt antwortet. Die Genauigkeit der Vorhersage ist nicht mein Hauptziel, ich möchte nur die Sequenz des Codes kennen lernen, die mir eine Nummer für 2011Q2 gibt, auch wenn ich nicht genügend Daten habe.

datayoda
quelle
3
Dies kann bessere Antworten auf stats.stackexchange.com bekommen
Joshua Ulrich
Bump ... Ich kann immer noch nicht verstehen, wie das geht. Gibt es Abnehmer für die Beantwortung des ursprünglichen Beitrags?
datayoda
2
Mit einem DLM ist es nicht so kochbuchartig, wie Sie vielleicht möchten. Ich würde die Antwort von RockScience (die DLM-Vignette) nehmen und durchgehen. Ein DLM ähnelt eher dem Entwerfen eines Programms als anderen Techniken, bei denen lediglich einige Daten eingegeben und einige Parameter angepasst werden müssen. Letztendlich entwerfen Sie eine Reihe von Arrays, die so etwas wie ein Hidden-Markov-Modell implementieren, und das dlmPaket macht dies so einfach wie möglich.
Wayne
Haben Sie eine Lösung für Ihr Problem? Ich suche nach einer Lösung für ähnliche Zeitreihenprobleme, kann aber keine Lösung finden.
Haben Sie das von @RockScience vorgeschlagene Papier durchgearbeitet? Hast du dir das dlmPaket angesehen? Wie ich in meiner Antwort sagte, ähneln DLMs viel eher dem Erstellen eines Programms als dem Einfügen einiger Variablen in einen Funktionsaufruf. datayoda hat keine Antwort akzeptiert, daher bin ich mir nicht sicher, ob sie diese Beobachtung überstanden haben.
Wayne

Antworten:

16

Der Artikel in JSS 39-02 vergleicht 5 verschiedene Kalman-Filter-R-Pakete und gibt einen Beispielcode.

G. Grothendieck
quelle
16

DLMs sind cool, aber nicht so einfach wie beispielsweise ARIMA oder andere Methoden. Bei anderen Methoden fügen Sie Ihre Daten ein und optimieren dann einige Parameter des Algorithmus, wobei Sie sich möglicherweise auf verschiedene Diagnosen beziehen, um Ihre Einstellungen zu steuern.

Mit einem DLM erstellen Sie eine State-Space-Maschine, die aus mehreren Matrizen besteht, die im Grunde so etwas wie ein Hidden-Markov-Modell implementieren. Einige Pakete ( sspirich denke unter anderem) setzen voraus, dass Sie das Konzept verstehen und wissen, was die Matrizen tun. Ich würde Ihnen dlmwärmstens empfehlen, mit dem Paket zu beginnen und, wie von @RockScience empfohlen, durch die Vignette zu gehen.

Mit werden dlmSie im Grunde genommen mehrere Schritte unternehmen:

  1. Welche Komponenten beschreiben meine Serie? Ein Trend? Saisonalität? Exogene Variablen? Sie werden dlmTools verwenden dlmModPoly, um diese Komponenten zu implementieren, und den +Operator verwenden, um sie zu einem Modell zusammenzufügen.

  2. Erstellen Sie eine R-Unterroutine, die so viele Parameter verwendet, wie für dieses Modell erforderlich sind, erstellen Sie die Komponenten mit diesen Parametern, addieren Sie sie und geben Sie das resultierende Modell zurück.

  3. Verwenden Sie dlmMLEdiese Option , um eine Suche / Optimierung durchzuführen, um die entsprechenden Parameter zu finden (mithilfe von MLE, im Grunde genommen Optimierung, mit den Fallstricken, die bei der Optimierung auftreten können). dlmMLERuft Ihr R-Unterprogramm wiederholt mit Kandidatenparametern auf, um Modelle zu erstellen, und testet sie dann.

  4. Erstellen Sie Ihr endgültiges Modell mit der von Ihnen erstellten R-Unterroutine und den Parametern, die Sie in Schritt 3 gefunden haben.

  5. Filtern Sie Ihre Daten mit dlmFilter, dann vielleicht glatt mit dlmSmooth.

  6. Wenn Sie etwas verwenden dlmModRegoder ausführen, das dazu führt, dass das Modell zeitvariable Parameter aufweist, können Sie dlmForecastIhre Reihen nicht damit prognostizieren. Wenn Sie am Ende ein zeitvariantes Modell haben, möchten Sie Ihre Eingabedaten mit NAs dlmFilterausfüllen und die NAs für Sie ausfüllen lassen (Prognose eines armen Mannes), da dlmForecastdies nicht mit zeitvariablen Parametern funktioniert.

  7. Wenn Sie die Komponenten einzeln untersuchen möchten (sagen Sie den Trend, getrennt von der Saison), müssen Sie die Matrizen und die einzelnen Spalten sowie deren Zusammenstellung verstehen dlm(Reihenfolge ist wichtig!).

Es gibt ein anderes Paket, dessen Name mir entgeht, das versucht, ein Front-End zu erstellen, das mehrere dieser Pakete verwenden kann (auch dlmals Back-End). Leider habe ich es nie geschafft, gut zu funktionieren, aber das könnte nur ich sein.

Ich würde wirklich empfehlen, ein Buch über DLMs zu bekommen. Ich habe ein paar von ihnen und habe viel damit gespielt, dlmum dorthin zu gelangen, wo ich bin, und ich bin keineswegs der Experte.

Wayne
quelle
Vielen Dank Wayne, ich denke, mein Fall ist so einfach, dass ich bei der visuellen Inspektion keine klaren Trends oder Saisonalitäten festgestellt habe. (Wenn Ihnen jedoch Tests in R bekannt sind, lassen Sie es mich bitte wissen, ich werde versuchen, sie auszuführen.) Mein Problem ist, dass ich nicht weiß, wie ich die Argumente (FF, V, GG, W, m0, C0, dV usw.) in die DLM-Funktionen für meine Daten eintragen soll. Dies ist das Hauptproblem für mich. Wenn ich bivariate Seriendaten habe (y = X1 + X2), z. B. (Preis = Nachfrage + Angebot), wie könnte ich dann vorgehen, um diese Argumente für meine Daten zu berechnen? FF, V, GG, W, m0, C0, dV usw., die in den DLM-Funktionen erforderlich sind
nclfinance
1
@nclfinance Bitte lesen Sie die FAQ und behandeln Sie diesen Ort nicht als Forum.
@nclfinance: Bearbeiten Sie dlmdie Vignette des Pakets. Sie werden lernen, was Sie wissen müssen. Deshalb empfehle ich dlm, weil Sie FF usw. nicht selbst erstellen.
Wayne