毎日の時系列分析


24

私は時系列分析を行おうとしており、この分野は初めてです。2006年から2009年までのイベントを毎日数えており、時系列モデルをそれに合わせたいと考えています。これが私が達成した進歩です。

timeSeriesObj = ts(x,start=c(2006,1,1),frequency=365.25)
plot.ts(timeSeriesObj)

結果のプロットは次のとおりです。

時系列プロット

データに季節性と傾向があるかどうかを確認するには、この投稿に記載されている手順に従います。

ets(x)
fit <- tbats(x)
seasonal <- !is.null(fit$seasonal)
seasonal

そしてロブ・J・ハインドマンのブログで

library(fma)
fit1 <- ets(x)
fit2 <- ets(x,model="ANN")

deviance <- 2*c(logLik(fit1) - logLik(fit2))
df <- attributes(logLik(fit1))$df - attributes(logLik(fit2))$df 
#P value
1-pchisq(deviance,df)

どちらの場合も、季節性がないことを示しています。

シリーズのACFとPACFをプロットすると、次のようになります。

ACF PACF

私の質問は:

  1. これは、毎日の時系列データを処理する方法ですか?このページは、週ごとと年ごとのパターンを検討する必要があることを示唆していますが、そのアプローチは明確ではありません。

  2. ACFプロットとPACFプロットを取得した後、どのように進めるかわかりません。

  3. auto.arima関数を単純に使用できますか?

    fit <-arima(myts、order = c(p、d、q)

***** Auto.Arimaの結果を更新******

ここでRob Hyndmanのコメントに従ってデータの頻度を7に変更すると、auto.arimaは季節ARIMAモデルを選択して出力します。

Series: timeSeriesObj 
ARIMA(1,1,2)(1,0,1)[7]                    

Coefficients:
       ar1      ma1     ma2    sar1     sma1
      0.89  -1.7877  0.7892  0.9870  -0.9278
s.e.   NaN      NaN     NaN  0.0061   0.0162

sigma^2 estimated as 21.72:  log likelihood=-4319.23
AIC=8650.46   AICc=8650.52   BIC=8682.18 

******更新された季節性チェック******

頻度7で季節性をテストすると、Trueが出力されますが、季節性365.25では、falseが出力されます。これは、毎年の季節性の欠如を結論付けるのに十分ですか?

timeSeriesObj = ts(x,start=c(2006,1,1),frequency=7)
fit <- tbats(timeSeriesObj)
seasonal <- !is.null(fit$seasonal)
seasonal

戻り値:

True

ながら

timeSeriesObj = ts(x,start=c(2006,1,1),frequency=365.25)
fit <- tbats(timeSeriesObj)
seasonal <- !is.null(fit$seasonal)
seasonal

戻り値:

False

どのような出力がstr(x)得られますか?
S. Kolassa -復活モニカ

num [1:1460] 17 12 12 17 13 14 14 5 12 21
...-statBeginner

データを投稿できますか?
予報官

残念ながら、私はできません。
statBeginner

2
OK、季節性を検出するための統計的テストに加えて、目視検査とドメインの知識に依存します。arimaが複数の季節性を処理できるかどうかについての質問-確かにARIMAはあらゆるタイプの季節R性を処理しますが、 simpleにはそれを処理する機能がありません。予測しようとしている製品の在庫/製造コストが高い場合、商用ソリューションを探します。Rあなたのようなタスクの予測には厳しい制限があります。このサイトの他の場所では、毎日の予測に関する質問をご覧ください。
予報官

回答:


25

ACFとPACFは、少なくとも週ごとの季節性があることを示しています。これは、ラグ7、14、21などのピークで示されています。

時系列からは明らかではありませんが、年間の季節性もあります。

潜在的に複数の季節性がある場合の最善策は、tbats複数のタイプの季節性を明示的にモデル化するモデルかもしれません。forecastパッケージをロードします。

library(forecast)

からの出力str(x)は、x潜在的に複数の季節性があるという情報をまだ伝えていないことを示しています。を見て?tbats、の出力を比較しますstr(taylor)。季節性を割り当てます。

x.msts <- msts(x,seasonal.periods=c(7,365.25))

これで、tbatsモデルを近似できます。(しばらくお待ちください。)

model <- tbats(x.msts)

最後に、予測とプロットができます:

plot(forecast(model,h=100))

あなたは使うべきではありませんarima()auto.arima()。これらは唯一の季節のシングルタイプを処理することができるので、いずれかの毎週または毎年。auto.arima()あなたのデータをどうするかを聞かないでください。季節性のいずれかを選択する場合もあれば、完全に無視する場合もあります。


編集してコメントから追加の質問に答えます:

  1. データに年間の季節性があるかどうかを確認するにはどうすればよいですか?月ごとに別の一連のイベントの合計数を作成し、そのACFを使用してこれを決定できますか?

毎月のデータに基づいてモデルを計算する可能性があります。次に、たとえば、季節性のあるモデルとないモデルのAICを比較できます。

ただし、予測モデルを評価するには、ホールドアウトサンプルを使用します。最後の100個のデータポイントを保持します。年間でモデルフィットし、使用して、唯一の毎週の季節性とフィット1つ、例えば、その後、(上記のような)データの残りの部分に毎週の季節をauto.arima()ts付きfrequency=7。両方のモデルを使用したホールドアウト期間への予測。MAE、MSE、または損失関数に最も関連性の高いものを使用して、エラーの低いものを確認します。エラーにほとんど違いがない場合は、より単純なモデルを使用します。それ以外の場合は、エラーの少ない方を使用してください。

プリンの証拠は食事にあり、時系列モデルの証拠は予測にあります。

問題を改善するには、単一のホールドアウトサンプルを使用しないでください(シリーズの終わりの上昇を考えると誤解を招く可能性があります)が、「時系列相互検証」としても知られるローリングオリジン予測を使用します。(無料のオンライン予測テキストブック全体をお勧めします

  1. 季節性ARIMAモデルは通常、複数の季節性を処理できませんか?それはモデル自体のプロパティですか、それともRの関数の記述方法ですか?

標準のARIMAモデルは、季節差によって季節性を処理します。季節ごとの月次データの場合、生の時系列ではなく、2015年3月と2014年3月の間、2015年2月と2014年2月の間などの時系列の差をモデル化します。(元のスケールで予測を取得するには、当然、再び差異を解消する必要があります。)

この考えを複数の季節性に拡張する明白な方法はありません。

もちろん、ARIMAXを使用して何かを行うことができます。たとえば、月ごとのダミーを含めて年ごとの季節性をモデル化し、次に週ごとの季節ARIMAを使用して残差をモデル化します。Rでこれを行いたい場合は、を使用してts(x,frequency=7)、月間ダミーのマトリックスを作成し、それをのxregパラメーターにフィードしますauto.arima()

ARIMAを複数の季節性に具体的に拡張した出版物を思い出すことはありませんが、誰かが私の前の段落の行に沿って何かをしたと確信しています。


あなたの答えに基づいたいくつかの質問を次に示します。1.データに年間の季節性があるかどうかを確認するにはどうすればよいですか。月ごとに別の一連のイベントの合計数を作成し、そのacfを使用してこれを決定できますか?2.季節性ARIMAモデルは通常、複数の季節性を処理できませんか?それはモデル自体のプロパティですか、それともRの関数の記述方法ですか?
statBeginner

Auto.Arimaからの結果を週ごとの季節性で更新した投稿
statBeginner

1
@StephanKolassa、私はしばらく前にAT&Tからこの記事を見つけました。これは複数の季節のARIMAを使用しています。記事にあるようなモデルは、マルチシーズンARIMAを処理する機能がないRため、Rではできません。
予報官

2
@forecaster:クール、ありがとう!式3.1で二重差分を行うようです。そのようにして大量のデータを失うことを心配しています。残念ながら、彼らは結果を単純なベンチマーク、例えば先週の要求と比較しません。私が気に入っているのは、彼らがDSARIMAと-like tbatsモデルの予測の組み合わせをどのように調査するかです。
S. Kolassa -復活モニカ

2
@StephanKolassa同意します。私は、Armstrongによる予測の原則でサポートされているように、単純な予測をベンチマークとして使用することを強く支持しており、精度が向上する場合にのみ複雑さを追加します。私は、アンサンブルで素朴な方法を使用して、いくつかのkaggle大会で上位2パーセンタイルになりました。
予報官

3

既存のRパッケージを使用して季節データを分解する最良の方法は、Rlibeemdのceemdan()です。この手法は、複数の期間の季節性を抽出します。デフォルトはうまく機能します。フーリエ変換の代わりにヒルベルト-ファン変換を使用します。フーリエ変換には、関心のあるほとんどの系列がどちらでもない場合にのみ定常の線形データを処理できるという重大な欠点があります。たとえば、ランダムウォークy_t = y_ {t-1} + e_tは最も単純なランダムウォークであり、頻繁に発生します。他の方法では、季節変動が実際に頻繁に変動する場合、その振幅を固定します。


1
基本的なMathJaxのチュートリアルとリファレンス参照して、数学を答えに入れる方法を確認してください。また、「最高」の主張の正当化を提示してください(または、主張の修正を検討してください)-それは、それらのほとんどだけでなく、少なくとも他のすべてのオプションと同等でなければなりません。
-Glen_b

1
このパッケージがCRAN
Glen_b -Reinstate Monica

2

あなたが提起する質問は、R時系列予測:私の出力に関する質問で扱われています。私の詳細な回答と、元の質問へのコメントを含むディスカッション内のすべてのコメントを注意深く見てください。これらはあなたの問題に関連していると思います。投稿で提供されたデータを実際に取得し、それを自分の教育の瞬間として使用することができます。あなたがすべきことの入門書として議論全体を使用してください。


1
どうもありがとう!その投稿のデータを使用して、試してみます。
statBeginner
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.