複数の時系列にわたる同じモデルの推定


26

私は時系列の初心者の経験があり(いくつかのARIMA推定/予測)、完全には理解できない問題に直面しています。どんな助けも大歓迎です。

私はすべて同じ時間間隔と同じ頻度で複数の時系列を分析しています。すべて同じタイプのデータを記述しています。各シリーズは1つの変数に過ぎず、私が見ている他の対応する予測変数はありません。

すべてのシリーズを記述する単一のモデルを推定するように依頼されました。たとえば、すべてのシリーズに適合する同じ次数、係数などを持つ1つのARIMA(p、d、q)を見つけることができると想像してください。私のスーパーバイザーは、各シリーズを個別に推定することを望んでおらず、シリーズ間の依存関係を伴うある種のVARモデルを実行することも望んでいません。

私の質問は次のとおりです。このようなモデルを何と呼びますか。それをどのように推定/予測しますか?コード例を使用する方が簡単な場合は、SASとRの両方を話します。

回答:


8

グリッド検索を行うことができます:ARIMA(1,0,0)から始めて、ARIMA(5,2,5)または何かまでのすべての可能性を試します。モデルを各シリーズに適合させ、MAPEやMASEなどのスケールに依存しない誤差測定値を推定します(おそらくMASEの方が良いでしょう)。すべてのモデルで平均MASEが最も低いARIMAモデルを選択します。

各シリーズのエラー測定値を相互検証し、結果を単純な予測と比較することにより、この手順を改善できます。

すべてのシリーズを説明するために単一のモデルを探している理由を尋ねるのは良い考えかもしれません。同じプロセスで生成されない限り、これは良いアイデアのようには見えません。


2
ありがとう-これを試してみます。これが最良のアイデアのように思えないことに同意します。私が得た論点は、各シリーズには十分な観測値(〜28)がなく、良好な推定値が得られず、すべてのシリーズで推定する方がより堅牢であるというものでした。私はその議論に同意するかどうかわかりません。
sparc_spread

21

そのための1つの方法は、すべてのデータを使用して長い時系列を構築し、系列間の欠損値のシーケンスを使用してそれらを分離することです。たとえば、Rで、それぞれ長さ100および頻度12の3つのシリーズ(xyおよびz)がある場合、次のようにそれらを結合できます。

combined <- ts(c(x,rep(NA,56),y,rep(NA,56),z,rep(NA,56)),frequency=12)

欠損値の数は、季節期間が保持されるように選択されていることに注意してください。最終年に8つの欠損値を埋め込み、次のシリーズの前に4つの欠損年(48値)を追加しました。これは、シリーズ間でシリアル相関が洗い落とされることを保証するのに十分なはずです。

その後auto.arima()、最適なモデルを見つけるために使用できます。

library(forecast)
fit <- auto.arima(combined)

最後に、予測を取得するために、結合されたモデルを各シリーズに個別に適用できます。

fit.x <- Arima(x,model=fit)
fit.y <- Arima(y,model=fit)
fit.z <- Arima(z,model=fit)

5
+1、きちんとしたトリック。OPの別の回答に対するコメントから判断すると、何らかのパネルデータモデルを提案するつもりでしたが、これははるかに優れています。
mpiktas

これは非常に助かります。さらに説明してください: 欠損値の数は、季節期間が保持されるように選択されていますか?すみません、完全にフォローできませんでした-ありがとう。
sparc_spread

1
データに季節性がある場合(毎月の観測でよく見られるように)、長いシリーズでは1月の間隔を12の倍数、2月の間隔を12の倍数、というように設定します。次に、モデルを選択するときに、季節性を適切にモデル化できます。
ロブハインドマン

3
このトリックに追加するには、カテゴリメンバーシップを示す外部リグレッサー(xreg)を追加します。これは、他の係数を共通に保ちながら、異なるシリーズの個別の手段を説明します。
ジェームソンクイン14

6

複数の時系列に対する単一モデルの推定は、パネルデータの計量経済学の領域です。ただし、説明変数がない場合は、@ Rob Hyndmanの回答がおそらく最適です。ただし、時系列の平均が異なることが判明した場合(この場合、@ Rob Hyndmanのメソッドは失敗するはずなのでテストしてください!)、ARMA構造は同じである場合、Arellano-Bondを使用する必要がありますその上にページがないので、グーグルで検索してください)タイプ推定器。その場合のモデルは次のとおりです。

yt=α+ρ1yt1++ρpytp+εt

εt


1
あなたのソリューションと他のソリューションにも感謝します。あなたはそれについて言及します: しかし、時系列の平均が異なることが判明した場合(この場合@Rob Hyndmanの方法は失敗するはずなので、テストしてください!) これがなぜであるかについて詳しく説明できますか?ありがとう。
sparc_spread

2
@sparc_spread、たった2つのシリーズであるとします。1つは分散1で約0に中心があり、もう1つは分散1で1000に中心があります。その後、両方の系列が同じ係数を使用して適合している場合、alpha_1 = alpha_2を制約しているため、両方の系列の予測は約500、恐ろしくオフ。基本的に、すべてのシリーズを同じモデルに属するものとして扱うには、ジョイントモデルをあてはめる前に再センタリング/正規化が必要になる場合があります。
-zkurtz

4

単一のデータシリーズを作成するためのRob Hyndmanのアプローチの代替方法は、データをマージすることです。これは、複数の時系列が同じイベントを記録している一連のマシンからのノイズの多い読み取り値を表す場合に適切です。(各時系列のスケールが異なる場合、最初にデータを正規化する必要があります。)

注:ノイズが少なくなるため、まだ28の測定値しか得られないため、これは状況に適さない場合があります。

t1=xts(jitter(sin(1:28/10),amount=0.2),as.Date("2012-01-01")+1:28)
t2=xts(jitter(sin(1:28/10),amount=0.2),as.Date("2012-01-01")+1:28)
t3=(t1+t2)/2

ここに画像の説明を入力してください


これは、すべての信号の性質が類似している場合(周期的など)がすべて同相の場合にのみ機能します。例では、2つの正弦波の位相が180度ずれていれば、完全にキャンセルされます。
tdc

3
はい、データの平均化は、各日付系列が同じデータを表すことになっている場合にのみ適切であり、(あなたはそれを想定して喜んでいます)それぞれが異なるノイズを持っているという点でのみ異なります。
ダレン・クック

1

隠れマルコフモデルと動的ベイジアンネットワークを見てみます。時系列データをモデル化します。また、複数の時系列インスタンスを使用してトレーニングされます。たとえば、さまざまな個人からの複数の血圧時系列です。これらをビルドするには、PythonとRのパッケージを見つける必要があります。これらのモデルの構造を定義する必要がある場合があります。


0

私は同じことをしようとしています。どうやら、そこには「多変量自己回帰」モデルと呼ばれるものがあります。私はそれへの参照を見つけましたが、それを使用する方法ではありません。リンクされた論文に基づいて、私はそれがRで実装されたと推測します。

http://journal.r-project.org/archive/2012-1/RJournal_2012-1_Holmes~et~al.pdf


標準的なアプローチはベクトル自己回帰であり、varと呼ばれるRパッケージがあります。
西安14

ベクトルの自己回帰は、パネルデータの自己回帰とは異なりますか?それとも、異なるフィールド、異なる名前の問題ですか?plmパッケージは、パネルデータ用に提案されました。cran.r-project.org/web/packages/plm/vignettes/plm.pdf clidyn.ethz.ch/papers/arfit.pdf
Mox
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.