web-dev-qa-db-ja.com

ts()オブジェクトを使用した週次データのR時系列モデリング

私は、以下のような毎週のデータに基づいて、Rを使用して時系列モデリングと予測を実行しようとしています。

_biz week     Amount        Count
2006-12-27   973710.7     816570
2007-01-03  4503493.2    3223259
2007-01-10  2593355.9    1659136
2007-01-17  2897670.9    2127792
2007-01-24  3590427.5    2919482
2007-01-31  3761025.7    2981363
2007-02-07  3550213.1    2773988
2007-02-14  3978005.1    3219907
2007-02-21  4020536.0    3027837
2007-02-28  4038007.9    3191570
2007-03-07  3504142.2    2816720
2007-03-14  3427323.1    2703761
...
2014-02-26  99999999.9   1234567
_

私のデータについて:上記のように、各週はその週の最初の日でラベル付けされています(私の週は水曜日に始まり、火曜日に終わります)。 tsオブジェクトを作成するときに、

_ts <- ts(df, frequency=52, start=c(2007,1))
_

私が持っている問題は:

1)ある年には53週間あるため、_frequency=52_はその年には機能しません。

2)開始週/開始日は2006-12-27です。開始パラメータはどのように設定すればよいですか? start=c(2006,52)またはstart=c(2007,1)は、2006年12月27日の週が実際に年の境界を超えているのですか?また、モデリングのために、完全な1年分のデータ(たとえば、2007年の場合、1年分のデータしか持っていない場合は開始年)を使用した方が良いでしょうか? 2014年はどうですか:まだ完全な年ではないので、モデリングに使用しているものを使用する必要がありますか?いずれにせよ、2006-12-27のような年の境界にそれらの週を含めるかどうかについては、まだ問題があります。 2007年または2006年の最後の週の_wk 1_として含める必要がありますか?

3)ts <- ts(df, frequency=52, start=c(2007,1))を使用して印刷すると、以下に示す結果が得られたので、2007.01、2007.02、2007.52 ...の代わりに、2007.000、2007.019、...を取得しました。 _1/52=0.019_。これは数学的には正しいですが、実際に解釈するのは簡単ではありません。データフレームのように日付自体または少なくとも_2007 wk1, 2007 wk2..._としてラベルを付ける方法はありますか

=========

_Time Series:
Start = c(2007, 1) 
End = c(2014, 11) 
Frequency = 52 
          Amount        Count
2007.000   645575.4     493717
2007.019  2185193.2    1659577
2007.038  1016711.8     860777
2007.058  1894056.4    1450101
2007.077  2317517.6    1757219
2007.096  2522955.8    1794512
2007.115  2266107.3    1723002 
_

4)私の目標は、この毎週のデータをモデル化し、それを分解して季節の要素を確認することです。 ts()関数を使用できるtsオブジェクトspに変換するには、decompose()関数を使用する必要があるようです。 xts()を試しましたが、_" time series has no or less than 2 periods"_を示すエラーが表示されました。これは、xts()が周波数を指定させないからだと思いますか?

_xts <- xts(df,order.by=businessWeekDate)
_

5)このフォーラムや他の場所でも答えを探しました。ほとんどの例は月単位であり、時系列の週ごとの質問がいくつかありますが、簡単な答えはありません。誰かが私の質問に答えてくれることを願っています。

27
user3281664

非整数の周波数を使用することは非常にうまく機能し、ほとんどのモデル(auto.arima、ets、...)と互換性があります。開始日には、lubridateの便利な関数を使用します。ここで重要なのは、開始日と終了日が異なる可能性のある複数の時系列で作業する場合に一貫性を保つことです。

library(lubridate)
ts(df$Amount, 
   freq=365.25/7, 
   start=decimal_date(ymd("2006-12-27")))
19
nassimhddd

最初に、データに年間52個のデータがあることを確認してください。これを行うには、53のデータで年を特定し、季節性パターンにとって重要度の低い年を削除します(たとえば、クリスマスセールの季節性を確認する場合は12月に週を削除しないでください(!)

Xtsは柔軟性が高いため、優れた形式ですが、サイクルごとに固定数のデータが必要なため、すべての分解および予測ツールは通常tsで機能します。

完全ではない年についてのあなたの質問に関して。それは問題ではないはずです。 Rはいつ1月か12月かを知らないため、1年はいつでも開始および終了できます。

2
RockScience

4番目の質問については、1つの期間データ(52週間)しかなく、2つの期間を完了するにはさらに52週間のデータが必要になる可能性があるためだと思います。

0
Ana A