0

fableパッケージを使用して時系列予測を実行できる機能を作成しました。この関数のアイデアは、特定の日付/イベントの後に観測された値と予測された値を分析することでした。日付の列を生成するモック データ フレームを次に示します。

set.seed(1)
df <- data.frame(Date = sort(sample(seq(as.Date('2018/01/01'), as.Date('2020/09/17'), by="day"),1368883, replace = T)))

そして、これが私が作成した関数です。データ、イベントの日付、予測期間 (日)、最後にグラフのタイトルを指定します。

event_analysis<-function(data,eventdate,period,title){
  require(dplyr)
  require(tsibble)
  require(fable)
  require(fabletools)
  require(imputeTS)
  require(ggplot2)
  data_count<-data%>%
    group_by(Date)%>%
    summarise(Count=n())
  
  data_count<-as_tsibble(data_count)
  data_count<-na_mean(data_count)
  
  
  train <- data_count %>%
    #sample_frac(0.8)
    filter(Date<=as.Date(eventdate))
  
  fit <- train %>%
    model(
      ets = ETS(Count),
      arima = ARIMA(Count),
      snaive = SNAIVE(Count)
    ) %>%
    mutate(mixed = (ets + arima + snaive) / 3)
  
  
  fc <- fit %>% forecast(h = period)
  
  forecastplot<-fc %>%
    autoplot(data_count, level = NULL)+ggtitle(title)+
    geom_vline(xintercept = as.Date(eventdate),linetype="dashed",color="red")+
    labs(caption = "Red dashed line = Event occurrence")
                                                                 
  
  fc_accuracy<-accuracy(fc,data_count)
  
  #obs<-data_count
  #colnames(obs)[2]<-"Observed"
  #obs_pred<-merge(data_count,fc_accuracy, by="Date")
  return(list(forecastplot,fc_accuracy,fc))
}

そして、1 回の実行でdf、イベントの日付、予測する日数 (3 週間)、次にタイトルを指定します。

event_analysis(df, "2020-01-01",21,"Event forecast")

この結果とプロットを出力します:-

ここに画像の説明を入力

ここに画像の説明を入力

私が作成したモック データが完全に理想的ではないことは認めますが、関数は実際のデータでうまく機能します。

これが私が達成したいことです。この出力が関数から出てくるようにしたいのですが、さらに、2 つの理由から、予測された期間を「ズームイン」する追加のグラフが必要です。

  1. 解釈を容易にするために
  2. イベント日の前の N 日間との N 日間 (N は予測期間、つまり 21 を表します)を表示できるようにしたいと考えています。

したがって、追加のグラフ (元の完全な予測と一緒に) は、おそらく 1 つの出力の「マルチプロット」スタイルで次のようになります:-

ここに画像の説明を入力

もう 1 つは、予測で使用されたモデルからの予測値に対して、テスト セットで観測された値を示す別の出力を出力することです。

これらは基本的に、関数に追加したい2つの追加事項ですが、これについてどうすればよいかわかりません。どんな助けでも大歓迎です:)。

4

1 に答える 1