上篇介绍到,VAR模型研究的是多个时间序列变量之间的相互影响关系,但是模型估计出的参数结果及其显著水平似乎并不能直观地反映这种影响关系,而要想直观地呈现这种关系,就需要使用本篇介绍的「脉冲响应函数」(impulse response function)。
通过上篇的介绍,我们知道双变量的VAR模型的标准形式如下:
通过不断迭代,可以将上式进行如下转换:
当,,而的数学期望始终为0,则为的数学期望,记为。则有,
通过上篇我们还知道,
代入得到,
上式称为VAR的移动平均形式,即VMA(vector moving averge)。
通过定义如下符号:
VMA可以写成如下形式:
可以看出,中的元素刻画了的单位变化对时间序列变量当期值的影响作用。以双变量为例,每个都是一个二行、二列的矩阵:
第一行、第一列:的单位变化对的影响作用;
第一行、第二列:的单位变化对的影响作用;
第二行、第一列:的单位变化对的影响作用;
第二行、第二列:的单位变化对的影响作用。
每个位置的元素构成了一个脉冲响应函数,反映了不同滞后期的的单位变化对的影响的变化趋势。
和上篇一样,这里仍然使用vars
工具包中的相关函数。
计算VMA的系数矩阵()的函数是Phi()
,它的语法结构如下:
Phi(x, nstep = 10)
参数含义如下:
x:由
VAR()
或SVAR()
函数估计出的VAR模型对象;nstep:的最大滞后项数,默认为10。
Phi()
函数输出的矩阵个数是nstep + 1
,其中第一个为,然后依次为、、...、。
- library(vars)
- model <- VAR(Canada, p = 2, type = "const")
- Phi(model, nstep = 2)
-
- ## , , 1
- ##
- ## [,1] [,2] [,3] [,4]
- ## [1,] 1 0 0 0
- ## [2,] 0 1 0 0
- ## [3,] 0 0 1 0
- ## [4,] 0 0 0 1
- ##
- ## , , 2
- ##
- ## [,1] [,2] [,3] [,4]
- ## [1,] 1.6378206 0.16727167 -0.06311863 0.26558478
- ## [2,] -0.1727658 1.15042820 0.05130390 -0.47850131
- ## [3,] -0.2688329 -0.08106500 0.89547833 0.01213003
- ## [4,] -0.5807638 -0.07811707 0.01866214 0.61893150
- ##
- ## , , 3
- ##
- ## [,1] [,2] [,3] [,4]
- ## [1,] 2.0191501 0.3491150 -0.14251580 0.6512430
- ## [2,] 0.1676489 1.1553945 -0.01191318 0.1240154
- ## [3,] -0.3062245 -0.2169480 0.86759379 -0.1419466
- ## [4,] -0.8923428 -0.1847587 0.10271259 0.1952708
脉冲响应函数可以通过irf()
函数计算,语法结构如下:
- irf(x, impulse = NULL, response = NULL,
- n.ahead = 10, ortho = TRUE, cumulative = FALSE,
- boot = TRUE, ci = 0.95, runs = 100, seed = NULL, ...)
主要参数含义如下:
x、n.ahead:同
Phi()
函数的x
和nstep
参数;impulse:作为脉冲的变量;默认为所有内生变量;
response:作为响应的变量;默认为所有内生变量;
cumulative:是否计算累积的脉冲响应系数。
- impluse <- irf(model, n.ahead = 20)
- par(mfrow = c(2,2))
- plot(impluse)
若变量的「滞后值」对的当期值具有影响作用,则称是的格兰杰(Granger)原因,即对于下式中至少有一个滞后项系数不为0:
是否为0与是否是格兰杰原因无关,因为它刻画的是当期值而非滞后值对当期值的影响作用。
格兰杰因果检验(Granger Causality Test)就是检验某(些)变量是否是其他变量的格兰杰原因,其零假设是该变量不是其他变量的格兰杰原因。若零假设为真,意味着没必要把该变量作为VAR模型的内生变量看待。
可以使用vars
工具包中的causality()
函数进行格兰杰因果检验,语法结构如下:
- causality(x, cause = NULL, vcov.=NULL,
- boot=FALSE, boot.runs=100)
检验变量e
是否为其他变量的格兰杰原因:
- causality(model, cause = "e")
-
- ## $Granger
- ##
- ## Granger causality H0: e do not Granger-cause prod rw U
- ##
- ## data: VAR object model
- ## F-Test = 6.2768, df1 = 6, df2 = 292, p-value = 3.206e-06