0

ETS を使用して Holt-Winters を適用しようとしています。ユーザーごとに開始タイムスタンプが異なる可能性があるため (ただし、間隔は 15 分のままです)、DB からデータを読み取っています。

予測結果のプロット/解釈に問題があります。X 軸は、おそらく時系列のインデックス値を表示します。問題を特定できません。サンプル データは次のとおりです。

> 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

入力時間形式を保持するための時系列のフォーマット:

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

この入力のプロットは問題ありません。ここに画像の説明を入力

私は次のように使用して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 の投稿に基づいて、2 つのことを試しました。

  1. 一連の日付を生成します (形式: YYYY-MM-DD)

  2. プロットに設定axes = FALSEし、独自に軸にラベルを付けます。

#2を機能させることができません

#1で、私のデータでは、開始日はユーザー間で異なります。@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、最小の粒度が にあるため、使用すると問題が発生seqしましたdays。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)

seqプロットの問題は、 のデータ ポイントの日数のミスマッチによるものだと思いますfcast90$x

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

私が持っている時系列について、私の手順は正しいですか?

4

1 に答える 1