simple numerical examples of ADF test

時系列分析では平均や分散が時間とともに一定といった定常過程であることが重要となる。平均や分散が時間とともに変化する場合は非定常過程と言われるが、そのようなデータを分析して何か発見しても、特定の時期における個別的な特殊事例とされ、一般理論化したり予測に使うことは難しいだろう。しかし、現実の経済データは非定常過程に従うことが多く、対数変換したり差分を計算したりして定常過程に変換されることが多い。いずれにしても分析対象のデータの定常性の検討は重要となる。

単純なランダムウォークモデル

t時点での確率変数をY(t)、u(t)をホワイトノイズとするとドリフト無しのランダムウォークは

Y(t)=Y(t-1)+u(t)  で表せる。

ランダムウォークは非定常であるので、このモデルを回帰分析してY(t-1)の回帰係数が1と推定できればデータは非定常と考えられる。

Y(t)=pY(t-1)+u(t)   |p|<1     (式1)

式1 の両辺からY(t-1)を差し引くと

Y(t)-Y(t-1)=pY(t-1)-Y(t-1)+u(t)

ここでY(t)-Y(t-1)=△Y(t) とすると

△Y(t) =(p-1)Y(t-1)+u(t)

(p-1)=γ で置きかえると、最終的には式1は

△Y(t) =γY(t-1)+u(t) となる。この式について回帰分析を行い γ がゼロであれば (p-1)=0 から p=1 つまり、単位根あり、従って非定常過程と推定できる。このように単位根検定(ADFテスト)ではY(t-1)の係数の推定値とその信頼性が重要となる。ADFテストでは自己回帰過程が1次だけでなくn次まで拡張した回帰モデルが使われるが基本的な考え方は変わらない。万一に、γ> 0 ゼロ となれば p > 1 を意味し、指数関数的に拡散するモデルになるのでデータを見直して、その差分を使うなど工夫して |p|<1  を満たすようにする必要がある。
残念ながら単位根検定に万能薬的な方法はまだ見付かっていないが、一般的にADF検定がよく知られ使われている。ADF検定でRの時系列分析のパッケージの出力結果を見るときにはY(t-1)の係数に注目する必要がある。通常の回帰分析では回帰係数とt値を求めてt分布表を使って検定を行うが、もし非定常過程の場合には通常のt分布に従わないので標準のt分布表は使えず、その代わりにでディッキーフラー分布を使って単位根検定を行う。

dynlmによる時系列回帰分析

時系列データの回帰分析では説明変数にラグや差分の操作をしたデータを頻繁に使う。通常のlm()でも時系列の回帰分析はできるが時差データ等を別途に作る必要があり大変に手間がかかる。しかし、パッケージのdynlmを使うとy(t-1)をL(y(t))のような関数で説明変数に使えるので便利である。しかも説明変数に使われた加工済データも抽出できるので、データ変換器としても利用できる。このパッケージを使う場合には事前にデータが時系列データの属性を持つtsに変換しておく必要がある。

簡単な使い方を示すために10個の少ないデータで計算実験をしてみる。

まず仮想の時系列データ10個を用意する

y<-ts(c(5,3,2,7,4,6,8,2,3,7))

パッケージのdynlmを使って
△Y(t) =γY(t-1)+△Y(t-1)

の回帰モデルを適用してγを推定してみる。dynlmだと下記のように簡単な関数表示で回帰モデルを指定できる。ラグ次数1の拡張ADF検定にあわせたモデルにしてある。

output1<-dynlm(d(y) ~ L(y) +L(d(y)))

summary(output1)

で出力の一部を見ると

            Estimate Std. Error t value Pr(>|t|)  
(Intercept)   8.4577     2.8814   2.935   0.0324 *
L(y)         -1.7891     0.6104  -2.931   0.0326 *
L(d(y))       0.5208     0.4111   1.267   0.2610  
 

これはデータにドリフト付きランダムウォークモデルをラグlagを1として推定した結果である。

ここで注目すべき個所はy(t-1)の回帰係数の推定値である。 回帰分析の結果を見るとL(y)の係数の推定値は

-1.7894 なので、 これから単位根pを計算すると

 γ=-1.7891 =p-1

 p=-0.7891  |p|<1  は満たしている。

L(y)のt値は-2.931 通常の回帰分析であれば-2.931を使ってt検定が可能であるり、p値も0.0326なので有意水準5%ではγがゼロ、つまり単位根ありの帰無仮説を棄却できる。しかし、単位根がもし存在する場合には通常のt分布に従わずマイナス方向に歪んだディッキーフラー分布 に従うので別途にADF検定が必要となってくる。

 ついでにパッケージdynlmのモデルの結果からデータを抽出してみる。

dyy<-output1$model$"d(y)"
ylag1<-output1$model$"L(y)"
ydfilag1<-output1$model$"L(d(y)"

length(dyy) 
でデータ数を求めると8になっている、10個のデータから1次差分や1次ラグの操作をした結果、回帰分析に使えるデータ数は8個に変わっていることが分かる。ラグとか差分に関する面倒な作業をdynlmがやってくれたことがわかる。

このデータを使って通常のlm()を使った回帰分析をすると

lmout1<-lm(dyy ~ ylag1 +ydfilag1)
summary(lmout1)

 当然ながら以下のようにdynlmの時と同じ結果を得る。

            Estimate Std. Error t value Pr(>|t|)  
(Intercept)   8.4577     2.8814   2.935   0.0324 *
ylag1        -1.7891     0.6104  -2.931   0.0326 *
ydfilag1      0.5208     0.4111   1.267   0.2610 

 

ADF検定 パッケージurcaを利用

単位根検定には様々な手法が研究されていろが、一般的によく知られている方法としてADF検定がある。一つの計算例としてADFテストをパッケージurca の ur.df() を使って同じ条件(ドリフトあり、トレンドなし、ラグ=1)で検定を行ってみる。


adftestur<-ur.df(y,type=c("drift"),lags=1)
summary(adftestur)

詳細な計算結果が出力されるが、その一部を見てみると

Coefficients:
            Estimate Std. Error t value Pr(>|t|)  
(Intercept)   8.4577     2.8814   2.935   0.0324 *
z.lag.1      -1.7891     0.6104  -2.931   0.0326 *
z.diff.lag    0.5208     0.4111   1.267   0.2610 

 

ここの部分はdynlm を使った回帰分析の結果と同じである。y(t-1)の係数の推定値は-1.7891、t値は-2.931と前述の回帰分析の結果と一致している。最後部の

Value of test-statistic is: -2.9313 4.4038 

Critical values for test statistics: 
      1pct  5pct 10pct
tau2 -3.75 -3.00 -2.63

に着目する。
Value of test-statistic is: -2.9313 4.4038

この左端の数値がlag1の係数のt値(DF検定ではtau値とも呼ぶ) が示されており、前述の回帰係数のt値-2.931と同じである しかし通常のt分布に従わずマイナス方向(左側テール)に歪んだディッキーフラー分布に従うのでtauタウのDF分布の棄却域で判定する。確率分布のイメーとしては左側テール部分に棄却域が設けられるので,tau(タウ)値が大きなマイナスの数値であればあるほど棄却される可能性は高くなる。逆にマイナスの数値が小さいほど棄却されにくくなる。

      1pct  5pct 10pct
tau2 -3.75 -3.00 -2.63

上記の棄却域にあてはめるとDF分布では有意水準10%では -2.9313 < -2.63 で棄却域に入っており 帰無仮説(単位根あり、つまり非定常過程)を棄却できる。有意水準を5%に設定すると -3.00 < -2.9313 で棄却域に入らないので棄却できない。ADF検定は万能薬ではないので実際にはラグの次数を変えたり、あるいは他の検定法をためすなど試行錯誤を繰り返すことになるだろう。

 

 詳細は参考文献のEndersの訳書に解説されているが、ADFテストを実行するとphi、φが計算される。例えばパッケージurcaではphiが出力される。これは、通常の回帰分析でモデルの適合度を検定するために使われるF値に相当する。ディッキーフラーによれば単位根が存在する場合は通常のF分布に従わず歪んだ分布となるのでDF分布を使って検定する。このDF分布ではイメージとして右側テール部分に棄却域が設定され片側検定を行うのでphiの数値が大きければ大きいほど棄却される可能性が高くなる。t値(タウ値)の棄却域は左側テール部分に設定されるのでより小さな数字が出れば出るほど棄却される可能性が高くなる。tauとphiでは棄却域の方向が真逆なので注意を要する。例えば
adftestur<-ur.df(y,type=c("drift"),lags=1)
 

では

Value of test-statistic is: -2.9313 4.4038

phi1=4.4038 となっている。

Critical values for test statistics: 
      1pct  5pct 10pct
tau2 -3.75 -3.00 -2.63
phi1  7.88  5.18  4.12

上記のphi1の棄却域に照してみると、10%の有意水準では 4.12 < 4.40 となり棄却域に入るので帰無仮説(回帰モデルの係数全てがゼロ)を棄却できる。しかし有意水準5%では5.18 > 4.40 で棄却域に入らず棄却できない。有意水準10%ではドリフト付きランダムウォークモデルは適合しており意味のある回帰モデルと判断することになる。

 実際のデータを使った単位根検定では様々な問題が出て来るので試行錯誤が必要となるだろう。この点については末尾に掲げてある参考文献で詳しく解説されている。

 

 

 

文中のRコードは以下のとおり。

library(urca)
library(dynlm)
y<-ts(c(5,3,2,7,4,6,8,2,3,7))
length(y)
plot.ts(y)
output1<-dynlm(d(y) ~ L(y) +L(d(y)))
output11<-dynlm(d(y,1) ~ L(y,1) +L(d(y,1),1))
# L(x, k) , d(x, k) kはラグ次数 デフォルトは1
summary(output1)
summary(output11)
dyy<-output1$model$"d(y)"
ylag1<-output1$model$"L(y)"
ydfilag1<-output1$model$"L(d(y)"
length(dyy)

lmout1<-lm(dyy ~ ylag1 +ydfilag1)
summary(lmout1)


adftestur<-ur.df(y,type=c("drift"),lags=1)
summary(adftestur)

#######
# output11<-dynlm(d(y,1) ~ L(y,1) +L(d(y,1),1))
# も同じ結果を得る。
# L(x, k) d(x, k) kはラグ次数,デフォルトはk=1
# 詳細は  ?dynlm と打ち込んでマニュアル参照

参考文献
ウォルター・エンダース著 新谷元嗣、藪友良 訳
(2019)実証のための計量時系列分析 有斐閣
(Walter Enders Applied Econometric time series Wiley & Sons Inc)

GSマダラ著 和合肇訳(1996) 計量経済分析の方法 シーエーピー出版株式会社 

 

 

金融工学を初等数学で 目次