直交化インパルス応答におけるショックの制約
直交化インパルス応答では誘導VARモデルの撹乱項に発生させるショック\(\,\textbf{A}^{-1}\pmb{\delta}\,\)にはコレスキー分解\(\,\pmb{\Sigma}_u=\textbf{PP}^{'}\,\)で得た下三角行列\(\,\textbf{P}\,\)の制約を設ける。
ここで\(\,\textbf{P}\,\)の対角要素は誘導撹乱項\(\,\textbf{u}\,\)の共分散行列\(\,\Sigma_u\,\)の対角要素の平方根、標準偏差となる(\(\,\textbf{PP}^{'}\,\)の対角要素は誘導撹乱項の分散であるため)。
以下に例として\(\,\textbf{P}\,\)を\(4\times4\)の係数行列と設定する。
library(dplyr)
# 下三角行列 P の例
P <- matrix(data = 0, nrow = 4, ncol = 4)
P[lower.tri(P, diag = T)] <- sample(x = 1:16, size = 10, replace = F)
P
[,1] [,2] [,3] [,4]
[1,] 11 0 0 0
[2,] 7 13 0 0
[3,] 14 2 5 0
[4,] 10 1 3 8
選択ベクトルの影響
「選択ベクトルの影響」とは「内生変数の並び順の影響」と同義である。
# 4つの選択ベクトル
e1 <- c(1, 0, 0, 0) %>%
matrix(ncol = 1)
e2 <- c(0, 1, 0, 0) %>%
matrix(ncol = 1)
e3 <- c(0, 0, 1, 0) %>%
matrix(ncol = 1)
e4 <- c(0, 0, 0, 1) %>%
matrix(ncol = 1)
# 第1内生変数(y1)にショックを与える。
# 第1内生変数に発生したショックは係数行列Pを通じて第2から4までの内生変数のインパルス応答値に影響を及ぼす。
P %*% e1
[,1]
[1,] 11
[2,] 7
[3,] 14
[4,] 10
# 第2内生変数(y2)にショックを与える。
# 第2内生変数に発生したショックは係数行列Pを通じて第3から4までの内生変数のインパルス応答値に影響を及ぼす。
P %*% e2
[,1]
[1,] 0
[2,] 13
[3,] 2
[4,] 1
# 第3内生変数(y3)にショックを与える。
# 第3内生変数に発生したショックは係数行列Pを通じて第4内生変数のインパルス応答値のみに影響を及ぼす。
P %*% e3
[,1]
[1,] 0
[2,] 0
[3,] 5
[4,] 3
# 第4内生変数(y4)にショックを与える。
# 第4内生変数に発生したショックは他の内生変数のインパルス応答値に影響を及ぼさない。
P %*% e4
[,1]
[1,] 0
[2,] 0
[3,] 0
[4,] 8
例えば\(\,\textbf{y}_4\,\)にショックを発生させるとして誘導VARモデルの内生変数の並びが、
[1]\(\,\{\textbf{y}_1,\,\textbf{y}_2,\,\textbf{y}_3,\,\textbf{y}_4\}\,\)の場合
選択ベクトルが\(\textbf{e}_4=\,(0,0,0,1)^{'}\,\)であるため、ショック発生の瞬間の他の内生変数のインパルス応答値に影響しない。
[2]\(\,\textbf{y}_4,\,\textbf{y}_1,\,\textbf{y}_2,\,\textbf{y}_3\,\)の場合
選択ベクトルが\(\textbf{e}_1=\,(1,0,0,0)^{'}\,\)であるため、\(\,\textbf{Pe}_1\,\)の要素は全て非ゼロとなり、ショック発生の瞬間の他の内生変数のインパルス応答値に影響する。
以下に共通してインパルスは\(\,\textbf{y}_1\,\)、レスポンスは\(\,\textbf{y}_3\,\)として例を示す。
library(vars)
set.seed(20220717)
y <- matrix(data = 0, ncol = 22, nrow = 3)
B1 <- matrix(data = runif(n = 9, min = -0.7, max = 0.7) %>%
round(2), nrow = 3)
B2 <- matrix(data = runif(n = 9, min = -0.7, max = 0.7) %>%
round(2), nrow = 3)
for (t in 3:22) {
y[, t] <- B1 %*% y[, t - 2] + B2 %*% y[, t - 1] + matrix(data = rnorm(n = 3, sd = 0.1), ncol = 1)
}
y <- y[, -c(1, 2)]
y1 <- y[1, ]
y2 <- y[2, ]
y3 <- y[3, ]
p <- 2
# Pattern 1
out_var <- VAR(y = cbind(y1, y2, y3), p = p, type = "none")
irf(out_var, impulse = "y1", response = "y3", ortho = T, boot = F)
Impulse response coefficients
$y1
y3
[1,] -0.02105563
[2,] 0.02324502
[3,] 0.10949461
[4,] 0.03946037
[5,] 0.08830397
[6,] -0.05858292
[7,] -0.01536861
[8,] -0.11419092
[9,] -0.04190792
[10,] -0.04910469
[11,] 0.02854856
# Pattern 2
out_var <- VAR(y = cbind(y3, y1, y2), p = p, type = "none")
irf(out_var, impulse = "y1", response = "y3", ortho = T, boot = F)
Impulse response coefficients
$y1
y3
[1,] 0.00000000
[2,] 0.02644206
[3,] 0.10646906
[4,] 0.03193340
[5,] 0.06636040
[6,] -0.06375650
[7,] -0.02813760
[8,] -0.10124641
[9,] -0.03579424
[10,] -0.02844972
[11,] 0.03609118
# Pattern 3
out_var <- VAR(y = cbind(y2, y3, y1), p = p, type = "none")
irf(out_var, impulse = "y1", response = "y3", ortho = T, boot = F)
Impulse response coefficients
$y1
y3
[1,] 0.00000000
[2,] 0.01509623
[3,] 0.11848423
[4,] 0.02015902
[5,] 0.08826608
[6,] -0.07225698
[7,] -0.01299801
[8,] -0.11255414
[9,] -0.03382719
[10,] -0.03822610
[11,] 0.03210121
Pattern1,2,3それぞれの\(\,\textbf{y}_3\,\)のインパルス応答値は異なっている。
なお、他の内生変数からの影響の受け難さの順に内生変数を並べることで並び順の影響を軽減できるが、それには当該分析分野に関する相当な知識が必要となる。
参照引用資料
- 村尾博(2019),『Rで学ぶVAR実証分析』,オーム社,pp.262-263
最終更新
[1] "2024-04-14 14:26:25 JST"
R、Quarto、Package
R.Version()$version.string
[1] "R version 4.3.3 (2024-02-29 ucrt)"
packageVersion(pkg = "tidyverse")