2017-08-27 1 views
0

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:

enter image description here

Vielen Dank!

Antwort

2

Das Problem ist, dass, wenn j = 33 in der for-Schleife, der Wert von

as.Date("2017-07-02") + j + stepsAhead 

ist "2017-08-06", die in xs später als den letzten Termin ist. Dies führt dazu, dass valid.ts die Länge null hat, was den angezeigten Fehler verursacht.

+0

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

+0

Es scheint wie 'für (j in fixed.nTrain: (fixed.nTrain + fixed.nValid - SchritteAhead - 1))' funktioniert. – user1477388

Verwandte Themen