Ich habe eine Zooserie mit vielen fehlenden Werten. Ich habe gelesen, dass auto.arima
diese fehlenden Werte unterstellt werden können? Kann mir jemand beibringen, wie es geht? Danke vielmals!
Das habe ich versucht, aber ohne Erfolg:
fit <- auto.arima(tsx)
plot(forecast(fit))
Antworten:
forecast
Beachten Sie zunächst , dass Vorhersagen außerhalb der Stichprobe berechnet werden, Sie jedoch an Beobachtungen innerhalb der Stichprobe interessiert sind.Der Kalman-Filter verarbeitet fehlende Werte. Auf diese Weise können Sie die Zustandsraumform des ARIMA-Modells aus der von
forecast::auto.arima
oder zurückgegebenen Ausgabe übernehmenstats::arima
und an übergebenKalmanRun
.Bearbeiten (Korrektur im Code basierend auf der Antwort von stats0007)
In einer früheren Version habe ich die Spalte der gefilterten Zustände bezogen auf die beobachteten Reihen genommen, jedoch sollte ich die gesamte Matrix verwenden und die entsprechende Matrixoperation der Beobachtungsgleichung . (Danke an @ stats0007 für die Kommentare.) Unten aktualisiere ich den Code und zeichne entsprechend.yt= Z.αt
Ich verwende ein
ts
Objekt als Beispielserie anstelle vonzoo
, aber es sollte dasselbe sein:Sie können das Ergebnis darstellen (für die gesamte Serie und für das gesamte Jahr mit fehlenden Beobachtungen in der Mitte der Stichprobe):
Sie können dasselbe Beispiel mit dem Kalman-Glätter anstelle des Kalman-Filters wiederholen. Alles, was Sie ändern müssen, sind diese Zeilen:
Der Umgang mit fehlenden Beobachtungen mittels des Kalman-Filters wird manchmal als Extrapolation der Reihe interpretiert; Wenn der Kalman-Glätter verwendet wird, sollen fehlende Beobachtungen durch Interpolation in der beobachteten Reihe ausgefüllt werden.
quelle
makeARIMA
die Matrizen der Zustandsraumform definiert sind, und ich würde sagen, dass die von genommene Spalteid
korrekt ist. Der Vektor in der Beobachtungsgleichung ist definiertmakeARIMA
als:Z <- c(1, rep.int(0, r - 1L), Delta)
wobeiDelta
ein Vektor die Koeffizienten des Differenzierungsfilters enthält. Wenn es keinen Differenzierungsfilter gibt (dh ein ARMA-Modelllength(tmp)==1
),id
sollte 1 sein; Andernfalls bezieht sich die erste Spalte auf die differenzierte Reihe, während sich das nächste Element bei derZ
Übernahme des Werts 1 auf bezieht , den Index, der verwendet werden sollte.Hier wäre meine Lösung:
@ Javlacalle:
Danke für deinen Beitrag, sehr interessant!
Ich habe zwei Fragen zu Ihrer Lösung, hoffe, Sie können mir helfen:
Warum verwenden Sie KalmanRun anstelle von KalmanSmooth? Ich habe gelesen, KalmanRun wird als Extrapolation angesehen, während glatt Schätzung wäre.
Ich bekomme auch nicht Ihren Ausweis. Warum verwenden Sie nicht alle Komponenten in .Z? Ich meine zum Beispiel .Z gibt 1, 0,0,0,0,1, -1 -> 7 Werte. Dies würde bedeuten, dass .smooth (in Ihrem Fall für KalmanRun-Zustände) mir 7 Spalten gibt. Soweit ich weiß, gehen alle Spalten, die 1 oder -1 sind, in das Modell.
Angenommen, Zeile 5 fehlt in AirPass. Dann würde ich die Summe von Zeile 5 wie folgt nehmen: Ich würde Wert aus Spalte 1 hinzufügen (weil Z 1 ergab), ich würde Spalte 2-4 nicht hinzufügen (weil Z 0 sagt), ich würde Spalte 5 hinzufügen und ich würde addiere den negativen Wert von Spalte 7 (weil Z -1 sagt)
Ist meine Lösung falsch? Oder sind beide in Ordnung? Kannst du es mir vielleicht weiter erklären?
quelle