2017-10-13 1 views
0

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 

enter image description here

は私が気付いている私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ポストに基づいて 、私は二つのことを試してみました:

  1. は、日付の順序(形式:YYYY-MM-DD)を生成

  2. セット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$xseq、データポイントの日数にミスマッチが原因だと思います。

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

私の時系列については、正しいのですか?

+0

私は同じことがここで議論されると思う:https://stackoverflow.com/questions/10302261/forecasting-time-series-data – Adam

+0

ありがとう、先ほどのポストを指摘していただきありがとうございます。以前の検索では表示されませんでした。あなたが共有したリンクに基づいて投稿を更新しました。私はまだ正常に出力をプロットすることができません –

答えて

0

forecastを参照してください。

fcast90$meanfcast90$lowerまたはfcast90$higherは、あなたが探しているものを提供します。

+0

確かに 'fcast90 $ x'は私の' forecast(fit2、fcast_days + time_diff) 'の出力を示します。しかし、データポイントの数は、プロット軸を変更するために生成した日数と一致しません。 –

関連する問題