set.seed(20220619)
<- rnorm(n = 50) %>%
y1 cumsum()
<- y1 + rnorm(n = 50, sd = 0.2)
y2 <- y1 + rnorm(n = 50, sd = 0.4) y3
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組が棄却される。
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)
<- rnorm(n = 50) %>%
y1 cumsum()
<- y1 + rnorm(n = 50, sd = 0.2)
y2 <- rnorm(n = 50) %>%
y3 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
参照引用資料
- 村尾博(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_version() quarto
[1] '1.4.542'
packageVersion(pkg = "tidyverse")
[1] '2.0.0'