Ich versuche, die Out-of-Sample-Prognose-Leistung verschiedener OLS-Modelle zu bewerten. Die einfachste Zeitreihenregression sieht wie folgt aus: Y_t = b0 + b1 * Y_t-30 + e_tEffiziente Methode zum Erstellen rekursiver Schätzungen außerhalb der Stichprobe zur Berechnung von RMSE in R
Die Armatur Zeitraum für das Modell ist, das 50 sagen lassen, dann lasse ich das Modell laufen mit dem dynlm Paket
dynlm(as.zoo(Y) ~ L(as.zoo(Y), 30), start = "1996-01-01", end = timelist[i])
In meinem aktuellen Code lasse ich einfach den Index laufen bis zum Ende und dann speichere ich den RMSE des entsprechenden Modells. Aber dieser RMSE ist nicht die Out-of-Sample-Vorhersage, und da mein aktueller Code schon ziemlich langsam ist und nicht einmal genau das tut, was ich will, wollte ich Sie fragen, ob Sie einen Vorschlag haben, der Paket, das ich verwenden sollte, um mein Ziel zu erreichen.
Um es zusammenzufassen, möchte ich folgendes tun: vor
1) führen eine rekursive Regression nach einer gewissen Passperiode (erweitert Fenster, NICHT Roll Fenster)
2) erstellen in einem Schritt out-of-Probe prognostiziert
3) berechnen die mittlere quadratische Fehler dieser Prognosen vs. tatsächlichen Beobachtungen das Modell Leistung zu bewerten
ich habe versucht, dies zu tun, so weit mit einem riesigen for-Schleife und der dynlm Paket , aber da ist Ults sind nicht wirklich befriedigend. Jeder Input wird sehr geschätzt, da ich seit einiger Zeit nach Lösungen suche. Ich werde meinen Beispielcode aktualisieren, sobald ich Fortschritte gemacht habe.
# minimal working example
require(xts)
require(zoo)
require(dynlm)
timelist <- seq.Date(from = as.Date("1996-01-01"), to = as.Date("1998-01-01"), by = "days")
set.seed(123)
Y <- xts(rnorm(n = length(timelist)), order.by = timelist)
X <- xts(rnorm(n = length(timelist), mean = 10), order.by = timelist)
# rmse container
rmse.container.full <- data.frame(matrix(NA, ncol = 3, nrow = length(index(timelist))))
colnames(rmse.container.full) <- c("Date", "i", "rmse.m1")
rmse.container.full$Date <- timelist
# fitting period
for(i in 50:length(timelist)) {
# m1
model1 <- dynlm(as.zoo(Y) ~ L(as.zoo(X), 30), start = "1996-01-01", end = timelist[i])
rmse.container.full[i, 2] <- i
rmse.container.full[i, 3] <- summary(model1)$sigma # RSME mod1 etc
print(i)
}
Willkommen bei Stackoverflow. Bitte werfen Sie einen Blick auf diese Tipps, wie Sie ein [minimales, vollständiges und überprüfbares Beispiel] (http://stackoverflow.com/help/mcve) erstellen können, sowie auf diesen Post zu [ein großartiges Beispiel in R erstellen] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). Vielleicht sind auch die folgenden Tipps zu [eine gute Frage stellen] (http://stackoverflow.com/help/how-to-ask) lohnenswert. – lmo
Warum genau sind die Ergebnisse nicht "sehr befriedigend"? Das ist kein spezifisches Problem, das wir angehen können. Wenn Sie Hilfe bei der statistischen Modellierung benötigen, sollten Sie Ihre Frage bei [stats.se] stellen, ansonsten machen Sie klar, was die Programmierfrage hier ist und fügen Sie ein [reproduzierbares Beispiel] ein (http://stackoverflow.com/questions/5963269/) how-to-make-a-great-r-reproduzierbares Beispiel) – MrFlick
Vielen Dank für Ihren Vorschlag @MrFlick, ich werde mir das jetzt ansehen: [link] (https://www.otexts.org/fpp) und überprüfen Sie auch Cross Validated. – tester