Es gibt wahrscheinlich mehr als ein schwerwiegendes Missverständnis in dieser Frage, aber es ist nicht dazu gedacht, die Berechnungen richtig zu machen, sondern das Lernen von Zeitreihen mit einem gewissen Fokus zu motivieren.
Beim Versuch, die Anwendung von Zeitreihen zu verstehen, scheint es, als würde eine Vorhersage der Daten die Vorhersage zukünftiger Werte unplausibel machen. Die gtemp
Zeitreihen aus dem astsa
Paket sehen beispielsweise folgendermaßen aus:
Der Aufwärtstrend der letzten Jahrzehnte muss bei der Darstellung der prognostizierten zukünftigen Werte berücksichtigt werden.
Um die Zeitreihenschwankungen zu bewerten, müssen die Daten jedoch in eine stationäre Zeitreihe umgewandelt werden. Wenn ich es als ARIMA Prozess - Modell mit differenzier (Ich denke , dies ist wegen der Mitte durchgeführt 1
in order = c(-, 1, -)
) , wie in:
require(tseries); require(astsa)
fit = arima(gtemp, order = c(4, 1, 1))
und dann versuche zukünftige Werte ( Jahre) vorherzusagen , ich vermisse die Aufwärtstrendkomponente:
pred = predict(fit, n.ahead = 50)
ts.plot(gtemp, pred$pred, lty = c(1,3), col=c(5,2))
Wie kann ich den Aufwärtstrend im vorhergesagten Teil des Diagramms wiederherstellen, ohne unbedingt die tatsächliche Optimierung der einzelnen ARIMA-Parameter zu berühren ?
Ich vermute, dass irgendwo ein OLS "versteckt" ist, was diese Nichtstationarität erklären würde?
Ich bin auf das Konzept gestoßen drift
, das in die Arima()
Funktion des forecast
Pakets integriert werden kann und eine plausible Handlung ergibt :
par(mfrow = c(1,2))
fit1 = Arima(gtemp, order = c(4,1,1),
include.drift = T)
future = forecast(fit1, h = 50)
plot(future)
fit2 = Arima(gtemp, order = c(4,1,1),
include.drift = F)
future2 = forecast(fit2, h = 50)
plot(future2)
das ist undurchsichtiger in Bezug auf seinen Rechenprozess. Ich möchte verstehen, wie der Trend in die Plotberechnungen einbezogen wird. Ist eines der Probleme , dass es keine drift
in arima()
(Kleinbuchstaben)?
Im Vergleich dazu wird unter Verwendung des Datensatzes AirPassengers
die vorhergesagte Anzahl von Passagieren jenseits des Endpunkts des Datensatzes aufgezeichnet, wobei dieser Aufwärtstrend berücksichtigt wird:
Der Code lautet:
fit = arima(log(AirPassengers), c(0, 1, 1), seasonal = list(order = c(0, 1, 1), period = 12))
pred <- predict(fit, n.ahead = 10*12)
ts.plot(AirPassengers,exp(pred$pred), log = "y", lty = c(1,3))
eine Handlung rendern, die Sinn macht.
quelle
Antworten:
Aus diesem Grund sollten Sie ARIMA oder andere nicht stationäre Daten nicht ausführen.
Die Antwort auf eine Frage, warum die ARIMA-Prognose flach wird, ist nach Betrachtung der ARIMA-Gleichung und einer der Annahmen ziemlich offensichtlich. Dies ist eine vereinfachte Erklärung. Behandeln Sie sie nicht als mathematischen Beweis.
Betrachten wir das AR (1) -Modell, aber das gilt für jedes ARIMA (p, d, q).
Die Gleichung von AR (1) lautet: und die Annahme über ist, dass . Mit einem solchen β ist jeder nächste Punkt näher an 0 als der vorherige, bis und .
Wie gehe ich in diesem Fall mit solchen Daten um? Sie müssen es durch Differenzierung ( ) oder Berechnung der Änderung ( ) stationär machen . Sie modellieren Unterschiede, keine Daten selbst. Die Unterschiede werden mit der Zeit konstant, das ist Ihr Trend.new.data=yt−yt−1 new.data=yt/yt−1−1
quelle
AR1 = 0.257; MA = - 0.7854
in der ARIMA-Modellgleichung befinden , einbeziehen, um den Erzeugungsprozess der projizierten oder vorhergesagten geneigten Schwanzlinie am Ende Ihres Diagramms vollständig zu erfassen?