2017-02-13 6 views
0

私はいくつかの(〜500)時系列で定常性をテストするためにADFテストを行っています。だから私はそれらのそれぞれのための遅れの正しい数を選択する定量的な方法が必要です。 1つの可能なアプローチは、テストのために私のサンプルの80%を使用し、その中の回帰のパラメータを取得し、ssr(二乗回帰の合計)を計算し、最小値を検索することです。しかし、これは過度のフィッティングにつながり、回避するために、この回帰を残りの20%に適用し、このサブサンプルのssrを計算することができます。この2番目のssrの最小値につながるラグの数は、正しいものでなければなりません。Pythonでstatsmodelsを拡張したDickey Fullerテスト

問題は、少なくとも私のような初心者のために、statsmodelsのドキュメントが不完全なものではないことです。例えば、線が与えられた場合、回帰係数はres [3] .resols.paramsに格納されますが、順序は不明です。私は誰かに、Rの時系列のテストを実行するよう依頼しなければなりませんでした。これは、使用された公式とこれに対応する係数を提供します。

)。

パラメータのPythonの順序は( 'ct'回帰の)遅れ1、遅れのdiff 1、遅れのdiff 2、...遅れのdiff N、切片、時間の傾向と思われる。私は、その後、次のコードを装着したシリーズを再構築:

xFit[0:max_lag_ + 1] = dUs[0:max_lag_ + 1] 
for i in range (max_lag_ + 1,xFit.size): 
    xFit[i] = xFit[i-1] + res[3].resols.params[0] * xFit[i-1] + res[3].resols.params[res[3].resols.params.size - 2] + res[3].resols.params[res[3].resols.params.size - 1] * t[i] 
    for j in range(1,max_lag_ +1): 
     xFit[i] = xFit[i] + res[3].resols.params[j] * lag[i-1-j] 

ラグ変数がこの

lag = dUs[1:]-dUs[:-1] 

ように私のDUS変数から構成され、注意事であるXFITシリーズとres [3] .resols.fittedvaluesは異なります!私はそれが最初のmax_lag_データポイントの初期化と関係していると思います(実際には、res [3] .resols.fittedvaluesは元のシリーズよりもmax_lag_ + 1短いことに注意してください):私はそれらを等しくなるように選択しました元のシリーズに。しかし、私は正確に何が起こっているのか把握することはできません。 xFitとres [3] .resols.paramsの違いは、巨大です: time-series-comparisonです。また、遅れの数を増やすと、フィッティングがより良い値になり、シリーズが爆発することにも注意してください。これは装着された値では起こりません!

最後のテストとして、xFitでADFテストを実行しました。私はこれが私が既に持っているres [3] .resols.paramsにつながるべきであることを理解する。ライン

res2 = ts.adfuller(xFit, maxlag=max_lag_, autolag=None, regression='ct', store=True, regresults=True) 

RES2の出力[3] .resols.paramsが

[-1.60231256e + 00 4.23814175e-02 -4.15837300e-02 4.99642618e-02 ある与えられ

-6.92483339e + 02 3.89141878e + 00]

[3] .resols.params RESは

である[-1.29269094e + 00 2.11857016e-02 -5.82679110e-02 -2.09614163e-02 -5.44413351e + 02 2.69502722e + 00]

多くの方がRに移行することをお勧めしますが、a)私はそれを使用したことはありません(私は学ぶことができましたが)。b)それは簡単ではなく、貴重な時間を私に取ることができます。

アイデア?私は何か間違いがありますか?(私は前にそれを投稿する時間を持っていなかったが!)事前に

おかげで、

C

答えて

0

は私が問題を解決しました。 事は、Pythonが時系列それ自体に適合する間、Rは差分シリーズに適合することです。それはエラー(xFitは時系列の再構成でdUと置き換えられるべきです!)と組み合わされて、上で説明したようにすべてが奇妙になりました。 正しいコードは

for i in range (max_lag_ + 1,xFit.size): 
    xFit[i] = res[3].resols.params[0] * dUs[i-1] + res[3].resols.params[res[3].resols.params.size - 1] 
for j in range(1,max_lag_ +1): 
    xFit[i] = xFit[i] + res[3].resols.params[j] * lag[i-1-j] 
です
関連する問題