モデルはauto.arima()によって識別されていますか?


13

私はARIMAモデルを学び、適用しようとしています。私はPankratzによってARIMAに優れた文章を読んでてきた- 予測を単変量ボックスで-ジェンキンスモデル:概念と事例。本文では、著者は特にARIMAモデルを選択する際の節約の原則を強調しています。

Rパッケージ予測のauto.arima()関数で遊び始めました。これが私がやったことです。ARIMAをシミュレートしてから適用しました。以下に2つの例を示します。両方の例でわかるように、多くの人が非慈善的と考えるモデルを明確に特定しました。特に例2では、実際にはARIMA(1,0,1)で十分かつpar約であるにもかかわらず、ARIMA(3,0,3)が識別されています。auto.arima()auto.arima()auto.arima()

以下は私の質問です。提案や推奨事項に感謝します。

  1. 次のような自動アルゴリズムを使用して特定されたモデルをいつ使用/変更するかについてのガイダンスはありますauto.arima()か?
  2. auto.arima()モデルを識別するためにAIC(これが使用していると思う)を使用するだけで落とし穴はありますか?
  3. 節約的な自動アルゴリズムを構築できますか?

ちなみに、私はauto.arima()ちょうど例として使用しました。これは、自動アルゴリズムに適用されます。

以下は例1です。

set.seed(182)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)

auto.arima(y)

qa <- arima(y,order=c(1,0,1))
qa

以下はからの結果ですauto.arima()。すべての係数は重要ではないことに注意してください。すなわち、t値<2。

ARIMA(1,0,2) with non-zero mean 

Coefficients:
         ar1     ma1      ma2  intercept
      0.5395  0.2109  -0.3385    19.9850
s.e.  0.4062  0.4160   0.3049     0.0878

sigma^2 estimated as 1.076:  log likelihood=-728.14
AIC=1466.28   AICc=1466.41   BIC=1487.36

以下は、arima()注文ARIMA(1,0,1)で定期的に実行した結果です。

Series: y 
ARIMA(1,0,1) with non-zero mean 

Coefficients:
         ar1     ma1  intercept
      0.2398  0.6478    20.0323
s.e.  0.0531  0.0376     0.1002

sigma^2 estimated as 1.071:  log likelihood=-727.1
AIC=1462.2   AICc=1462.28   BIC=1479.06

例2:

set.seed(453)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)

auto.arima(y)

qa <- arima(y,order=c(1,0,1))
qa

以下はからの結果ですauto.arima()

ARIMA(3,0,3) with non-zero mean 

Coefficients:
         ar1      ar2     ar3     ma1     ma2     ma3  intercept
      0.7541  -1.0606  0.2072  0.1391  0.5912  0.5491    20.0326
s.e.  0.0811   0.0666  0.0647  0.0725  0.0598  0.0636     0.0939

sigma^2 estimated as 1.027:  log likelihood=-716.84
AIC=1449.67   AICc=1449.97   BIC=1483.39

以下は、arima()注文ARIMA(1,0,1)で定期的に実行される結果です。

Series: y 
ARIMA(1,0,1) with non-zero mean 

Coefficients:
         ar1     ma1  intercept
      0.2398  0.6478    20.0323
s.e.  0.0531  0.0376     0.1002

sigma^2 estimated as 1.071:  log likelihood=-727.1
AIC=1462.2   AICc=1462.28   BIC=1479.06

AIC手順が最も単純なモデルを誤認している可能性があるため、ここで何かに取り組んでいるように見えます。さらに、AIC基準では、パルスなし/レベルシフトなし/季節性パルスなし/ローカル時間の傾向なし/パラメーターの恒常性/エラー分散の恒常性を前提としています。
IrishStat

AICとBICは、推測されたモデルからの誤差の分散に比例します。私の経験におけるこのアプローチは、私がすでに提起した問題のいくつかと、ここで反転性の問題が提起されているため、単純なものです。不要なパラメータが残っておらず、残差に情報/構造が存在しない場合に終了する反復モデルを構築するインテリジェントな識別システムに代わるものはありません。要約すると、自動モデル識別は、すべての統計分析の場合のように、1ステップのプロセスではなく、反復プロセスです。
IrishStat

@Irishstat ma係数の符号は-0.1391 -0.5912 -0.5491と解釈されるべきですか?
予報官

Pankratz Textの面では..はい!。ma多項式の根を調べて、可逆性の要件を満たしているかどうかを確認できます。
IrishStat

したがって、上記のauto.arimaは可逆ではありません。つまり、-0.1391-0.5912-0.5491は<1なので、モデルは正常です。
予報官

回答:


17

ここにはいくつかの問題があります。まず、シミュレートされたARIMAが本当に指定した順序であると想定しないでください。指定されたモデルからサンプルを取得しているため、ランダム性のため、描画された特定のサンプルに最適なモデルは、シミュレーションの描画元のモデルではない場合があります。

これは、2番目のより重要な問題のために言及しauto.arima()ます。関数は、条件付き平方和を使用して、より効率的な近似アルゴリズムを介してモデルを推定し、長いシリーズまたは複雑な季節モデルの過剰な計算時間を回避できます。この推定プロセスが使用されている場合、モデルの情報基準をauto.arima() 近似します(モデルの対数尤度が計算されていないため)。ユーザーがどのアプローチを使用する必要があるかを示していない場合、単純なヒューリスティックを使用して、条件付き平方和の推定がアクティブかどうかを判断します

approximation(length(x)>100 | frequency(x)>12)approximationTRUE n=100n=500 approximationauto.arima()approximation = TRUEarima()

例1では、

> auto.arima(y, approximation = FALSE)
Series: y 
ARIMA(0,0,1) with non-zero mean 

Coefficients:
         ma1  intercept
      0.7166    19.9844
s.e.  0.0301     0.0797

sigma^2 estimated as 1.079:  log likelihood=-728.94
AIC=1463.87   AICc=1463.92   BIC=1476.52
> qa
Series: y 
ARIMA(1,0,1) with non-zero mean 

Coefficients:
         ar1     ma1  intercept
      0.0565  0.6890    19.9846
s.e.  0.0626  0.0456     0.0830

sigma^2 estimated as 1.078:  log likelihood=-728.53
AIC=1465.06   AICc=1465.14   BIC=1481.92

したがってauto.arima()、真のモデルよりもpar約的なモデルを選択しました。ARIMA(0、0、1)が選択されます。しかし、これは情報の基準に基づいており、現在では一致しています。選択したモデルのAIC、AICc、およびBICは低くなりますが、AICとAICcの違いはわずかです。少なくとも今では、選択は情報基準に基づいてモデルを選択するための規範と一致しています。

MA(1)が選ばれた理由は、私が言及した最初の問題に関連していると思います。つまり、指定されたARIMA(p、d、q)から描画されたサンプルに最適なモデルは、真のモデルと同じ次数ではない場合があります。これはランダムサンプリングによるものです。長いシリーズまたは長いバーンイン期間をとることは、真のモデルが選択される可能性を高めるのに役立つかもしれませんが、それに頼らないでください。

とにかく、ここでの教訓は、あなたの質問のように何かが明らかに間違っているように見える場合、関連するマニュアルページまたはドキュメントを読んで、ソフトウェアの仕組みを理解していることを確認することです。


詳細な対応に感謝します。2番目の例にあなたのアプローチを使用しました:set.seed(453)y <-arima.sim(n = 500、list(ar = 0.2、ma = 0.6)、mean = 10)auto.arima(y、approximation = FALSE)これは私が得るものであり、明らかにデータを過剰適合しています-ARIMA(2,0,4)ゼロ以外の平均係数:ar1 ar2 ma1 ma2 ma3 ma4 intercept 0.5369 -0.9627 0.3681 0.6799 0.7065 0.1701 20.0329 se 0.0278 0.0499 0.0533 0.0630 0.0793 0.0574 0.0927 sigma ^ 2 1.024と推定:対数尤度= -716.17 AIC = 1448.33 AICc = 1448.63 BIC = 1482.05-
予測者

「非可逆性」と呼ばれるものがある章をまだ読んでいません。2番目のケースのauto.arimaは、モデル診断の「可逆性」ルールに違反しますか?
予報官

1
@forecasterあなたが真実を知らないと仮定すると、あなたが持っているのは手元にあるサンプルだけです。そのような状況で、AICなどはあなたが彼らに求めていることをしています。上で言ったように、シミュレートされたシリーズはあなたが求めたものではないかもしれません。あるいは、あなたが取った小さなサンプルから真のシリーズをうまく識別することができないかもしれません。統計には、ここでも他の場所でも、1つのTRUEモデルを取得するという意味はありません。統計学者として、(事前知識などから)シリーズが過剰適合していると思われる場合は、検索される用語の順序に制限を設けます。または、停止基準としてBICを使用します。
モニカの復職-G.シンプソン

私は、その質問に答えることができる可逆性が何であるかを十分に知りません。おそらくこれを新しい質問としてここに尋ねますか?
モニカの復職-G.シンプソン

@forecaster(私がBICと言う理由は、複雑さに追加のペナルティを課すことです。この場合、ARIMA(1、0、1)のBICは、auto.arima()設定されたモデルよりも低いBICを持っているため、それらが2つだけの場合候補モデル、より単純なモデルが選択されていたでしょう...)
モニカの復職-G.シンプソン

2

私の質問に回答してくれた@ Gavin、@ Irishstat、@ Robに感謝します。auto.arimaのような自動アルゴリズムのpar約モデルが必要な場合は、特にこの投稿 と@Gavinの投稿を確認した後、AICではなくBIC情報基準を使用する必要があることは明らかです。

また、IC基準に基づいてモデルを選択すると、外れ値やレベルシフトのあるデータに適合するより良いモデルを選択しないという制限があるという@Irishstatに非常に同意します。私の意見では、外れ値+レベルシフト+乱雑なデータ=実際のビジネスデータ、その他は教科書のデータセットです。私の意見では、外れ値とレベルシフトを考慮しない自動モデルは注意して使用する必要があります。

コードについて-auto.arimaには、AICまたはBICを選択するオプションがあります。以下のコードは、上記の質問から変更されています。

相互検証コミュニティに感謝します。私は毎日新しくて興味をそそられるものを学びます。

###############
set.seed(453)
y <- arima.sim(n=500,list(ar=0.2,ma=0.6),mean = 10)

## Adequetly describes the unknown data
fit.aic <- auto.arima(y,ic = c("aic"))
fit.aic

## Selects the model that is parsimonious
fit.bic <- auto.arima(y,ic = c("bic"))
fit.bic

BIC ICはMA(2)モデルを選択します。

> fit.bic
Series: y 
ARIMA(0,0,2) with non-zero mean 

Coefficients:
         ma1     ma2  intercept
      0.9256  0.2335    20.0326
s.e.  0.0453  0.0444     0.0992

sigma^2 estimated as 1.059:  log likelihood=-724.19
AIC=1456.39   AICc=1456.47   BIC=1473.24

1

500個の値をAUTOBOX(開発に役立てた商用ソフトウェア)に取り込みここに画像の説明を入力してください、パラメーターの恒常性に関するChowテストに基づいた以下のアドバイザリーを受け取りました。時系列の研究で行われる非常に基本的な間違いは、データが一定のパラメーターを持つ特定のモデルによって駆動されると仮定することです。AUTOBOXは、期間246でブレークポイントを検出しました。これは、「ウォームアップ」されていないシミュレーションを反映している可能性があります。データをシミュレートする場合、最初の「n」値を削除してから残りの値を調べることをお勧めします。データを取得し、2つのセクションに分割しました。最初の245と残りの255。以下は、ここに画像の説明を入力してください非常に異なる2つのacfプロットここに画像の説明を入力してくださいです。

分析に戻る:ここでは、最後の246個の値のために同定されたモデルでありここに画像の説明を入力してください、ここでここに画像の説明を入力してください以下の統計を持ちますここに画像の説明を入力してください。Actual / Fit and Forecastはここここに画像の説明を入力してくださいに残差プロットがありますここに画像の説明を入力してください。残差のACFは十分であることを示唆していますここに画像の説明を入力してください。識別された5つのパルスの効果は非常に小さく、簡単に無視できることに注意してください(この場合!)。要約すると、ここで学んだ教訓は、データが多すぎる場合があり、時間変化係数を考慮する必要があるということです。この場合、結果のモデル/パラメーターに(明らかに)大きな影響を与えないパラメーターの変更を特定していますが、時系列分析で一般的に必要なプロセスの改善を指摘しています。auto.arimaでの私の経験は、ガウス違反を明示的に処理/修復しないため、データから構造を抽出するのではなく、履歴値に頼りすぎてモデルをオーバーする傾向があることを示唆しています。この場合、ガウス違反のない厳密に制御されたシミュレーションだったので機能しましたが、ARIMAモデルの識別に対するこのような帯域幅が制限された単一ステップのアプローチが一般的に疑われます。信頼するが検証する!


0

 expACmnAC/2

そうであれば、ユーザーはこれらの相対的な確率をからのAIC(?)と一緒に見ることができますauto.arima( ... trace=TRUE )。例えば、卵データは、のように実行し 、この質問 できます

                                # relprob = exp( (AICmin - AIC) / 2 ) * 100
 ARIMA(0,1,0) with drift : 784.5    100
 ARIMA(0,1,1) with drift : 784.8     86
 ARIMA(1,1,0) with drift : 784.9     82
 ARIMA(0,1,0)            : 792.4      2
 ARIMA(2,1,2) with drift : Inf    0
 ARIMA(1,1,1) with drift : Inf    0

1
これは答えですか、質問ですか?
ティム

@Tim、これらの相対的な問題が「実際の」ものであるか、少なくとも一般的なものであるかはわかりません。
デニス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.