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
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:
Generieren Sie die Reihe von Daten (Format: YYYY-MM-DD)
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?
Ich denke das gleiche wird hier diskutiert: https://stackoverflow.com/questions/10302261/forecasting-time-series-data – Adam
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 –