2017-09-18 3 views
0
?

Wie rufe ich die posterioren (verfeinerten) Zustandsschätzungen aus einer Kalman-Filter-Simulation in R mit dem DSE-Paket?Wie simuliert man die nachgeschalteten gefilterten Schätzungen eines Kalman-Filters mit dem DSE-Paket in R

Ich habe ein Beispiel unten hinzugefügt. Angenommen, ich habe einen einfachen Random-Walk-State-Space erstellt, wobei der Fehler eine Standardnormalverteilung ist. Das Modell wird unter Verwendung der SS-Funktion mit initialisierten Zustands- und Kovarianzschätzungen von Null erstellt. Die theoretische Modellform ist somit: X (t) = X (t-1) + e (t) ~ N (0,1) für die Zustandsentwicklung Y (t) = X (t) + w (t) ~ N (0,1)

Wir implementieren dies nun in R, indem wir die Anweisungen auf Seite 6 und 7 des Artikels "Kalman Filtering in R" im Journal of Statistical Software befolgen. Zuerst erstellen wir das Zustandsraummodell der SS() Funktion und speichern sie in der Variable namens kalman.filter mit:

kalman.filter=dse::SS(F = matrix(1,1,1), 
        Q = matrix(1,1,1), 
        H = matrix(1,1,1), 
        R = matrix(1,1,1), 
        z0 = matrix(0,1,1), 
        P0 = matrix(0,1,1) 
       ) 

Dann simulieren wir eine 100 Beobachtungen aus der Modellform simulieren() verwenden und sie in einem setzen Variable namens simulate.kalman.filter:

simulate.kalman.filter=simulate(kalman.filter, start = 1, freq = 1, sampleT = 100) 

Dann führen wir die Kalman-Filter gegen die Messungen l() verwendet und speichern sie unter der Variable namens Test:

test=l(kalman.filter, simulate.kalman.filter) 

Von welchen Ausgaben sind meine gefilterten Schätzungen?

Antwort

0

Ich habe die Antwort auf diese Frage gefunden.

Erstens sind die gefilterten Schätzungen des Modells in der Funktion l() nicht angegeben. Diese Funktion gibt nur Vorhersagen mit einem Schritt voraus. Die obige Gestaltung meines Problems war codiert als:

kalman.filter=dse::SS(F = matrix(1,1,1), 
       Q = matrix(1,1,1), 
       H = matrix(1,1,1), 
       R = matrix(1,1,1), 
       z0 = matrix(0,1,1), 
       P0 = matrix(0,1,1) 
      ) 
simulate.kalman.filter=simulate(kalman.filter, start = 1, freq = 1, sampleT = 100) 
test=l(kalman.filter, simulate.kalman.filter) 

Die einen Schritt voraus Prognosen gegeben werden durch:

predictions = test$estimates$pred 

Eine schnelle Möglichkeit, dies zu visualisieren, ist gegeben durch:

tfplot(test) 

Auf diese Weise können Sie Ihre Vorhersagen mit einem Schritt schneller mit den tatsächlichen Daten vergleichen. Um Ihre gefilterten Schätzungen zu erhalten, müssen Sie die Funktion smoother() im selben dse-Paket verwenden. Es gibt sowohl das Zustandsmodell als auch die Daten ein, in diesem Fall ist es kalman.filter und simulate.kalman.filter. Die Ausgabe ist geglättete Schätzungen für alle Zeitpunkte. Beachten Sie jedoch, dass dies nach Berücksichtigung des gesamten Datensatzes erfolgt, so dass dies nicht bei jeder Beobachtung geschieht. Siehe Code unten. Die erste Zeile des Codes gibt Ihnen Ihre geglätteten Schätzungen die folgenden Zeilen am Beispiel Grundstück:

smooth = smoother(test, simulate.kalman.filter) 
plot(test$estimates$pred, ylim=c(max(test$estimates$pred,smooth$filter$track,simulate.kalman.filter$outpu), min(test$estimates$pred,smooth$filter$track,simulate.kalman.filter$output))) 
points(smooth$smooth$state, col = 3) 
points(simulate.kalman.filter$output, col = 4) 

Die obige Plot plottet alle aktuellen Daten, Modellschätzungen und geglättete Schätzungen gegeneinander.

Verwandte Themen