Rで時系列分析:ヨハンセン検定

Rでデータサイエンス

検定用回帰モデル

\[\Delta\textbf{y}_t=\pmb{\Pi}\textbf{y}_{t-1}+\displaystyle{\sum_{i=1}^{p-1}} \pmb{\Gamma}_i\Delta\textbf{y}_{t-i}+\textbf{B}_z\textbf{z}_t+\textbf{u}_t\] ここで、 \[\textbf{y}_t=\textbf{B}_1\textbf{y}_{t-1}+\textbf{B}_2\textbf{y}_{t-2}+\cdots+\textbf{B}_p\textbf{y}_{t-p}+\textbf{B}_z\textbf{z}_{t}+\textbf{u}_t\] \[\pmb{\Pi}=-\textbf{I}_K+\textbf{B}_1+\cdots+\textbf{B}_p,\quad\pmb{\Gamma}_i=-\left(\textbf{B}_{i+1}+\textbf{B}_{i+2}+\cdots+\textbf{B}_{p}\right),\quad i=1,2,\cdots,p-1\]であり、\(\,K\,\)は内生変数の数(ベクトル過程\(\,\textbf{y}_t\,\)の要素数)。

また、ベクトル過程\(\,\textbf{y}_t\,\)の要素はいずれも内生変数かつ1次の和分過程\(\,\textrm{I}(1)\,\)である。

なお、同モデルはベクトル誤差修正モデルそのものである。

\(\,\pmb{\Pi}\,\)\(\,K\times K\,\)の係数行列であり、\(\,K\,\)は前述の通り検定対象の要素数。よって、

\(\,K=\,\)ベクトル過程の要素数(内生変数の個数)

である必要はない。

係数行列\(\,\pmb{\Pi}\,\)のランクによって以下の3ケースが考えられる。

\(\textbf{1}\quad\) \(\textrm{rank}\left(\Pi\right)=K\)

\(\Pi\,\)がフルランクの場合である。

\(\pmb{\Pi}\,\)\(\,\pmb{\Pi}\textbf{y}_{t-1}\,\)を定常過程\(\,\textrm{I}(0)\,\)とするための係数行列であるが、係数行列がフルランク、つまり\(\,K\,\)個の要素すべての線形結合が定常過程\(\,\textrm{I}(0)\,\)であるならば、そもそもベクトル過程\(\,\textbf{y}_t\,\)の要素が全て\(\,\textrm{I}(0)\,\)であることになり、レベルVARを構築するケースとなる。

\(\textbf{2}\quad\) \(\textrm{rank}\left(\Pi\right)=0\)

\(\Pi\,\)がゼロランクの場合である。

ゼロランクの係数行列とは零行列であり、\(\,\pmb{\Pi}\textbf{y}_{t-1}\,\)を定常過程と出来ない、つまりベクトル過程の要素が全て\(\,\textrm{I}(1)\,\)かつ要素間に共和分が成立しないことになり、要素全ての階差をとって階差VARを構築するケースとなる。

\(\textbf{3}\quad\) \(\textrm{rank}\left(\Pi\right)=r,\quad 0<r<k\)

\(K\,\)個の要素(内生変数)に対し\(\,r\,\)\((\,0<r<k\,)\)の共和分ベクトル(共和分ランク)が存在することを意味する。この場合はベクトル誤差修正モデルを構築するケースとなる。

但し、\(\,K\,\)個の内生変数の中に含まれる\(\,\textrm{I}(0)\,\)過程の数だけ共和分ランクが増える事になるため、共和分ランク\(\,r\,\)から\(\,\textrm{I}(0)\,\)過程の内生変数の個数を減じた数値が\(\,\textrm{I}(1)\,\)の間の本来の共和分となる。

よってベクトル過程\(\,\textbf{y}_t\,\)に入れる内生変数は全て\(\,\textrm{I}(1)\,\)とするのが良い。

トレース検定

\(\textrm{H}_0\,\):\(\,r_0\)個の共和分ベクトルが存在する。

\(\textrm{H}_1\,\):\(\,K\)個の共和分ベクトルが存在する。

よってトレース検定の対立仮説は「\(\textbf{y}_t\,\)の要素は全て定常過程\(\,\textrm{I}(0)\,\)である」と同義である。

最大固有値検定

\(\textrm{H}_0\,\):\(\,r_0\)個の共和分ベクトルが存在する。

\(\textrm{H}_1\,\):\(\,r_0+1\)個の共和分ベクトルが存在する。

よって最大固有値検定の帰無仮説は「\(\textbf{y}_t\,\)には、たかだか\(\,r_0\,\)組の共和分関係がある」と同義である。

ca.jo {urca}によるヨハンセン検定

共和分ベクトルが2つ存在する場合

  • たかだか1組が棄却される。
set.seed(20220619)
y1 <- rnorm(n = 50) %>%
    cumsum()
y2 <- y1 + rnorm(n = 50, sd = 0.2)
y3 <- y1 + rnorm(n = 50, sd = 0.4)
adf.test(y1)
adf.test(diff(y1))

    Augmented Dickey-Fuller Test

data:  y1
Dickey-Fuller = -1.9459, Lag order = 3, p-value = 0.596
alternative hypothesis: stationary


    Augmented Dickey-Fuller Test

data:  diff(y1)
Dickey-Fuller = -3.8615, Lag order = 3, p-value = 0.02292
alternative hypothesis: stationary
adf.test(y2)
adf.test(diff(y2))

    Augmented Dickey-Fuller Test

data:  y2
Dickey-Fuller = -2.0328, Lag order = 3, p-value = 0.5611
alternative hypothesis: stationary


    Augmented Dickey-Fuller Test

data:  diff(y2)
Dickey-Fuller = -3.5863, Lag order = 3, p-value = 0.04356
alternative hypothesis: stationary
adf.test(y3)
adf.test(diff(y3))

    Augmented Dickey-Fuller Test

data:  y3
Dickey-Fuller = -2.192, Lag order = 3, p-value = 0.4973
alternative hypothesis: stationary


    Augmented Dickey-Fuller Test

data:  diff(y3)
Dickey-Fuller = -4.2904, Lag order = 3, p-value = 0.01
alternative hypothesis: stationary
ca.jo(x = cbind(y1, y2, y3), type = "eigen") %>%
    summary()

###################### 
# Johansen-Procedure # 
###################### 

Test type: maximal eigenvalue statistic (lambda max) , with linear trend 

Eigenvalues (lambda):
[1] 0.40439237 0.35783934 0.05310518

Values of teststatistic and critical values of test:

          test 10pct  5pct  1pct
r <= 2 |  2.62  6.50  8.18 11.65
r <= 1 | 21.26 12.91 14.90 19.19
r = 0  | 24.87 18.90 21.07 25.75

Eigenvectors, normalised to first column:
(These are the cointegration relations)

          y1.l2      y2.l2      y3.l2
y1.l2  1.000000  1.0000000  1.0000000
y2.l2 -1.364282 -0.5706116  0.6876745
y3.l2  0.366082 -0.4274515 -0.7656045

Weights W:
(This is the loading matrix)

          y1.l2    y2.l2       y3.l2
y1.d -1.2451897 1.101823 -0.10401175
y2.d -0.7171452 1.452653 -0.11202514
y3.d -1.5741247 3.176104 -0.09019024

共和分ベクトルが1つ存在する場合

  • たかだか0組が棄却される。
set.seed(20220619)
y1 <- rnorm(n = 50) %>%
    cumsum()
y2 <- y1 + rnorm(n = 50, sd = 0.2)
y3 <- rnorm(n = 50) %>%
    cumsum()
adf.test(y1)
adf.test(diff(y1))

    Augmented Dickey-Fuller Test

data:  y1
Dickey-Fuller = -1.9459, Lag order = 3, p-value = 0.596
alternative hypothesis: stationary


    Augmented Dickey-Fuller Test

data:  diff(y1)
Dickey-Fuller = -3.8615, Lag order = 3, p-value = 0.02292
alternative hypothesis: stationary
adf.test(y2)
adf.test(diff(y2))

    Augmented Dickey-Fuller Test

data:  y2
Dickey-Fuller = -2.0328, Lag order = 3, p-value = 0.5611
alternative hypothesis: stationary


    Augmented Dickey-Fuller Test

data:  diff(y2)
Dickey-Fuller = -3.5863, Lag order = 3, p-value = 0.04356
alternative hypothesis: stationary
adf.test(y3)
adf.test(diff(y3))

    Augmented Dickey-Fuller Test

data:  y3
Dickey-Fuller = -2.7045, Lag order = 3, p-value = 0.2917
alternative hypothesis: stationary


    Augmented Dickey-Fuller Test

data:  diff(y3)
Dickey-Fuller = -5.4705, Lag order = 3, p-value = 0.01
alternative hypothesis: stationary
ca.jo(x = cbind(y1, y2, y3), type = "eigen") %>%
    summary()

###################### 
# Johansen-Procedure # 
###################### 

Test type: maximal eigenvalue statistic (lambda max) , with linear trend 

Eigenvalues (lambda):
[1] 0.37505150 0.06963101 0.02728262

Values of teststatistic and critical values of test:

          test 10pct  5pct  1pct
r <= 2 |  1.33  6.50  8.18 11.65
r <= 1 |  3.46 12.91 14.90 19.19
r = 0  | 22.56 18.90 21.07 25.75

Eigenvectors, normalised to first column:
(These are the cointegration relations)

             y1.l2     y2.l2      y3.l2
y1.l2  1.000000000  1.000000  1.0000000
y2.l2 -0.997038451 -1.693690 -0.5043597
y3.l2 -0.001133481 -0.365622 -0.3363326

Weights W:
(This is the loading matrix)

          y1.l2       y2.l2        y3.l2
y1.d -1.0428216 0.118647936 -0.003645518
y2.d -0.1225725 0.125501127 -0.008297668
y3.d  1.8782829 0.006849041  0.106522882

参照引用資料

  1. 村尾博(2019),『Rで学ぶVAR実証分析』,オーム社,pp.154-160

最終更新

Sys.time()
[1] "2024-04-14 09:07:27 JST"

R、Quarto、Package

R.Version()$version.string
[1] "R version 4.3.3 (2024-02-29 ucrt)"
quarto::quarto_version()
[1] '1.4.542'
packageVersion(pkg = "tidyverse")
[1] '2.0.0'

著者