定常過程かどうかのチェック(ADF検定)

概要

・ADF検定の計算の確認。結局は単回帰係数が有意かどうかを検定している。ただし収束する分布が異なる。
・tserisパッケージのadf.test()関数の他に、CADFtestパッケージのCADFtest()関数の確認
・CADFtestの方がモデル(定数、トレンドを含むかどうか)を指定できたり、AIC基準でラグを設定できたりと柔軟。

tseriesパッケージのadf.test()

普通に使う分には全く問題ないと思うのですが、以下の2つが設定できない点で玉に瑕
1. モデルの指定(H0, H1の設定)
2. ラグの指定

以下がマニュアルの抜粋なのですが、adf.test関数は定数項とトレンド項を含んだ場合を想定しています。

The general regression equation which incorporates a constant and a linear trend is used and the t-statistic for a first order autoregressive coefficient equals one is computed. The number of lags used in the regression is k.

通常は両者とも含めた上で検定すれば良い場合が多いかと思いますが、何らかの想定や大人の事情により両者とも含めない場合で検定したい場合などには少し使いづらい。

また、検定に使うラグに関しても k = trunc((length(x)-1)^(1/3)) というような形で与えられています。
普通ならAIC基準などでラグを設定したいので、adf.testを使う場合にはAICを自分で計算しなければなりません。

CADFtestパッケージのCADFtest()

そういうかゆいところに手が届く関数がこちら。定数項とトレンド項を含むかどうかの設定、ラグを決める情報量基準もAICの他にBIC, HQC, MAICに対応しています(AIC, BIC以外は良く知りませんが)

簡単なテスト

ということでコードを丸投げ。
CADFtest関数においてモデルの指定はtypeにて設定できます。type=c(“trend”, “drift”, “none”)の3タイプから指定でき、デフォルトはtrend(つまりtseriesと同じ)
また、今回のコードでは触れていませんが、検定に含めるラグに関してはcriterion=c(“none”, “BIC”, “AIC”, “HQC”,”MAIC”)で決定させることが出来ます。

1つめの部分がシンプルなDF検定。
adf.test関数、CADFtest関数共に、ADF 値を出してきます。これが単純な自己回帰係数のt値と一致していることを確認。ただし収束する分布が異なるので有意かどうかを判定するラインが異なります。

ということで3つの方法でそれぞれ同じ値を計算していることが分かります。
後の結果に関しては省略。