2017-10-13 1 views
0

Ich versuche, Holt-Winters mit der ETS anwenden. Ich lese die Daten aus einer Datenbank, da der Start-Zeitstempel wahrscheinlich für verschiedene Benutzer unterschiedlich ist (aber das Intervall bleibt bei 15 Minuten).Plotten Vorhersageausgabe mit ETS

Ich habe Probleme beim Plotten/Interpretieren der Prognoseergebnisse. Die x-Achse zeigt wahrscheinlich die Indexwerte der Zeitreihe an. Ich kann das Problem nicht identifizieren. Ein Beispieldaten unter:

> rawdata 
    date_time_start total_transmitted_mbps 
    25/04/2017 00:00 8091.22258 
    25/04/2017 00:15 8669.16705 
    25/04/2017 00:30 6742.03133 
    25/04/2017 00:45 7637.89432 
    25/04/2017 01:00 7190.45344 
    25/04/2017 01:15 9798.56278 
    25/04/2017 01:30 7136.48579 
    25/04/2017 01:45 6255.34125 
    25/04/2017 02:00 6315.19628 
    25/04/2017 02:15 6306.36521 
    25/04/2017 02:30 9749.50128 
    25/04/2017 02:45 8247.23815 
    25/04/2017 03:00 9629.79122 
    25/04/2017 03:15 9316.77885 
    25/04/2017 03:30 9877.06118 
    25/04/2017 03:45 8909.5684 
    25/04/2017 04:00 7853.76492 
    25/04/2017 04:15 8877.18781 
    25/04/2017 04:30 6856.83524 
    25/04/2017 04:45 9037.1283 

die Zeitreihe Formatierung des Eingabezeitformat zu behalten:

raw_data$date_time_start <- 
    as.POSIXct(strptime(paste(as.character(raw_data$date_time_start),":00",sep = ""), 
         format="%d/%m/%Y %H:%M:%S")) 
eventdata <- xts(raw_data$total_cir_transmitted_mbps, 
       order.by = raw_data$date_time_start) 
plot(eventdata) # plot is OK 

Die Handlung dieses Eingangs ist OK. enter image description here

Ich bin mit dem ets wie folgt:

fit2<-ets(eventdata, model="ZZZ", damped=TRUE, alpha=NULL, beta=NULL, gamma=NULL)  
fcast90 <- forecast(fit2, h=100) 
    plot(fcast100) # x-axis of plot is incorrect 

enter image description here

Ich stelle fest, dass, wenn ich fcast90$x ich bin in der Lage eine Ausgabe zu sehen. Die Zeitstempel für die nächsten 100 Perioden in der Prognose sind nicht in der Ausgabe enthalten?

> fcast90$x 
    Time Series: 
    Start = 1 
    End = 11521 
    Frequency = 0.0166666666666667 
     [1] 8091.223 8669.167 6742.031 7637.894 7190.453 9798.563 7136.486 6255.341 6315.196 
[10] 6306.365 9749.501 8247.238 9629.791 9316.779 9877.061 8909.568 7853.765 8877.188 

Wie kann ich die nächsten 100 Tage prognostizieren und anzeigen?

aktualisieren Basierend auf @ A5C1D2H2I1M1N2O1R2T1 und @joran Beiträge, habe ich versucht, zwei Dinge:

  1. Generieren Sie die Reihe von Daten (Format: YYYY-MM-DD)

  2. Set axes = FALSE in der Handlung und die Achsen selbst beschriften.

Ich bin nicht in der Lage, die # 2 Arbeits

Mit # 1, in meinen Daten zu erhalten, wird das Startdatum unter den Nutzern unterschiedlich sein. Um den Vorschlag von @ A5C1D2H2I1M1N2O1R2T1 zu testen, nahm ich an, dass das Startdatum fest ist. Ich lese im ersten Datum und zuletzt für diesen Benutzer, um die Häufigkeit zu erhalten.

aa <- raw_data[1,] # to obtain the start date 
bb <- raw_data[nrow(raw_data),] # to obtain the last date using the nrow 

Da die Start-/Endzeit für jeden Benutzer unterschiedlich sein kann, ich bin die Anzahl der Tage in der Zeitreihe zu berechnen. Die time_diff Tage sollten den Prognosedatenpunkten entsprechen.

fcast_days = 100 
startDate = as.POSIXct(strptime(paste(as.character(aa$date_time_start),":00",sep = ""), format="%d/%m/%Y %H:%M:%S")) 
endDate = as.POSIXct(strptime(paste(as.character(bb$date_time_start),":00",sep = ""), format="%d/%m/%Y %H:%M:%S")) 
time_diff = as.numeric(round(endDate - startDate)) # output=16 

eine Sequenz für den Plot generieren Etiketten

a = seq(as.Date(startDate), by="days", length=time_diff+fcast_days) #length = 116 

Aber ich traf ein Problem, wenn ich seq verwenden, da die niedrigste Granularität für seq in days ist. Meine Zeitreihe in 15 Minuten Intervall. Also bin ich gezwungen, die Daten einzulesen, anstatt sie zu generieren. Aus diesem Grund habe ich raw_data$date_time_start <- as.POSIXct(strptime(paste(as.character(raw_data$date_time_start),":00",sep = ""),format="%d/%m/%Y %H:%M:%S")) verwendet. Bitte informieren Sie, wenn das falsch ist.

Mit # 2 setze ich axes = FALSE, um nur das Datum zu drucken.Die Wiederverwendung von dem Code aus dem Link:

fcast90 <- forecast(fit2, fcast_days+time_diff) 
plot(fcast90, axes = FALSE) 
axis(1, at = a, labels = format(a, "%d %b %Y"), cex.axis=0.6) 
abline(v = decimal_date(a), col='grey', lwd=0.5) 
axis(2, cex.axis=0.6) 

denke ich, das Problem in der Handlung beruht auf die Fehlanpassung in der Anzahl der Tage in den seq, Datenpunkten in fcast90$x.

> length(fcast90$x) # represents data captured at 15 min interval 
[1] 1536 
> length(a) # repesents number of days 
[1] 116 

Für die Zeitreihe habe ich, sind meine Schritte richtig?

+0

Ich denke das gleiche wird hier diskutiert: https://stackoverflow.com/questions/10302261/forecasting-time-series-data – Adam

+0

Vielen Dank für den Hinweis auf den vorherigen Beitrag. Es ist bei meiner Suche früher nicht aufgetaucht. Ich habe meinen Beitrag basierend auf dem von Ihnen geteilten Link aktualisiert. Ich bin immer noch nicht in der Lage, die Ausgabe erfolgreich zu plotten –

Antwort

0

Überprüfen Sie forecast Dokumentation.

fcast90$mean, fcast90$lower oder fcast90$higher sollte Ihnen geben, was Sie suchen.

+0

In der Tat 'fcast90 $ x' zeigt output meine' Prognose (fit2, fcast_days + time_diff) '. Die Anzahl der Datenpunkte stimmt jedoch nicht mit der Anzahl der Tage überein, die ich zum Ändern der Diagrammachsen generiert hatte. –