Ich versuche, die Vorhersagemessungen für Roll-Forward-Prognosen für einen Tag voraus zu berechnen und die Ergebnisse zu plotten.Erstellen einer vorausschauenden Vorausschau-Vorhersage in R
hatte ich ein paar Fragen zu meinem Beispiel-Code unten:
- Was kann ich tun, der „Ersatz hat die Länge Null“ unter Fehlern zu lösen? Wie kann ich ein Array der Vorhersagewerte für ihre jeweiligen Daten ausgeben? Wie kann ich die Daten und die Vorhersagen in einem Diagramm plotten?
Dies ist der Fehler bei der Ausführung des Skripts erhalten:
Fehler bei Fehlern [j - fixed.nTrain + 1] < - valid.ts - naive.pred bedeutet $ [Stepsahead]: Ersatz hat Länge Null
Das reproduzierbare Beispiel ist wie folgt.
d <- structure(list(Date = structure(c(17349, 17350, 17351, 17352,
17353, 17354, 17355, 17356, 17357, 17358, 17359, 17360, 17361,
17362, 17363, 17364, 17365, 17366, 17367, 17368, 17369, 17370,
17371, 17372, 17373, 17374, 17375, 17376, 17377, 17378, 17379,
17380, 17381, 17382, 17383), class = "Date"), Ratio = c(67, 50,
67, 50, 100, 50, 33, 67, 0, 0, 0, 0, 100, 75, 0, 0, 75, 100,
67, 33, 33, 33, 50, 50, 67, 100, 67, 50, 25, 25, 33, 33, 100,
33, 0)), .Names = c("Date", "Ratio"), row.names = 183:217, class = "data.frame")
library(xts)
dates = as.Date(d$Date,"%Y-%m-%d")
xs = xts(d$Ratio,dates)
library("forecast")
fixed.nValid <- 6
fixed.nTrain <- length(xs) - fixed.nValid
stepsAhead <- 2
error <- rep(0, fixed.nValid - stepsAhead + 1)
percent.error <- rep(0, fixed.nValid - stepsAhead + 1)
predictions <-rep(0, fixed.nValid - stepsAhead + 1)
for (j in fixed.nTrain:(fixed.nTrain + fixed.nValid - stepsAhead)) {
train.ts <- window(xs, start = as.Date("2017-07-02"), end = as.Date("2017-07-02") + j)
valid.ts <- window(xs, start = as.Date("2017-07-02") + j + stepsAhead, end = as.Date("2017-07-02") + j + stepsAhead)
naive.pred <- naive(train.ts, h = stepsAhead)
error[j - fixed.nTrain + 1] <- valid.ts - naive.pred$mean[stepsAhead]
percent.error[j - fixed.nTrain + 1] <- error[j - fixed.nTrain + 1]/valid.ts
}
mean(abs(error))
sqrt(mean(error^2))
mean(abs(percent.error))
Dadurch wird die Ausgabe des Skripts oben ist:
Vielen Dank!
Hallo Robert, ja, ich erkannte, dass das Problem war und ich versuchte, "stepsAhead" zu verringern, aber es funktionierte immer noch nicht wie beabsichtigt. Weißt du, wie das Problem gelöst werden kann? – user1477388
Es scheint wie 'für (j in fixed.nTrain: (fixed.nTrain + fixed.nValid - SchritteAhead - 1))' funktioniert. – user1477388