ETSを使用してHolt-Wintersを適用しようとしています。私は開始タイムスタンプが異なる可能性がある(しかし、間隔は15分にとどまる)ので、DBからデータを読み取っています。ETSを使用して予測出力をプロットする
予測結果のプロット/解釈に問題があります。 X軸におそらく時系列のインデックス値が表示されます。私は問題を特定できません。サンプルデータは、以下である:
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
この入力のプロットはOKです:
> 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
入力時刻形式を保持する時系列をフォーマットします。次のようにenter image description here
私はets
を使用しています:
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
は私が気付いている私fcast90$x
私は出力を見ることができていたとき。予測の次の100期間のタイムスタンプは出力に含まれていませんか?
> 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
次の100日間を予測して表示するにはどうすればよいですか?
更新 @のA5C1D2H2I1M1N2O1R2T1と@joranポストに基づいて 、私は二つのことを試してみました:
は、日付の順序(形式:YYYY-MM-DD)を生成
セット
axes = FALSE
プロットでは、私たち自身の上に軸をラベリングします。
私は私のデータでは、開始日がユーザーの間で異なるものでなければならない、#1では
を作業#2を取得することができません。 @ A5C1D2H2I1M1N2O1R2T1による提案を試すために、私は開始日が固定であると仮定しました。そのユーザーの最初の日付と最後の値を読み取って頻度を取得します。
aa <- raw_data[1,] # to obtain the start date
bb <- raw_data[nrow(raw_data),] # to obtain the last date using the nrow
各ユーザーの開始/終了時刻が異なる可能性があるため、時系列の日数を計算しています。 time_diff
日は予測データポイントfcast90 <- forecast(fit2, fcast_days+time_diff)
と等しいはずです。プロットのためのシーケンスを生成
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
は
a = seq(as.Date(startDate), by="days", length=time_diff+fcast_days) #length = 116
をラベルしかしseq
の最安粒度はdays
であるので、私はseq
を使用するとき、私はこの問題をヒット。 15分間隔で私の時系列。だから私はそれを生成するのとは対照的に、データを読み込まなければならない。このため、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"))
を使用しました。これが間違っている場合はお知らせください。
#2の場合、axes = FALSE
に日付のみを印刷します。再使用してリンクからコード:
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)
を私はプロットの問題がfcast90$x
でseq
、データポイントの日数にミスマッチが原因だと思います。
> length(fcast90$x) # represents data captured at 15 min interval
[1] 1536
> length(a) # repesents number of days
[1] 116
私の時系列については、正しいのですか?
私は同じことがここで議論されると思う:https://stackoverflow.com/questions/10302261/forecasting-time-series-data – Adam
ありがとう、先ほどのポストを指摘していただきありがとうございます。以前の検索では表示されませんでした。あなたが共有したリンクに基づいて投稿を更新しました。私はまだ正常に出力をプロットすることができません –