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.