上篇介绍的传递函数模型的假设是,会影响到,而不会影响到,因此称为外生变量(exogenous variable)。如果和以及更多的变量之间能够相互影响,此时它们就是内生变量(endogenous variable)。向量自回归模型(vector autoregressive model,VAR模型)研究的就是内生变量之间的相互影响作用。
以双变量为例:
式中,、、、是滞后算子多项式,且阶数相同,假设其阶数为,它也称作是VAR模型的阶数。
对于每个变量来说,预测变量包括本身的阶滞后值、其他变量的阶滞后值、其他变量的当期值(或)。
和为白噪声,且彼此互不相关。
将模型形式中的当期值移到等号左侧,变成如下形式:
以矩阵形式写出,
再变换得,
使用一些符号代替上式中的矩阵,得到下式:
式中,,其余依次类推。
上式中,等号右侧不再包含变量的当期值,称为「VAR模型的标准形式」,而包含当期值的形式称为「结构性VAR模型」。
变量当期值之间的相关性被隐藏在模型残差之中。因为,
显然,若变量的当期值之间存在联系,即和至少有一个不为0,则和必然相关;反之,若变量的当期值不存在相互影响,则和也不相关。
此外,模型中还可加入其他项,如截距(即)、时间趋势项、外生变量等。
在R语言中,可以使用vars工具包对VAR模型进行估计。
若VAR模型中有个内生变量,则有个模型表达式。标准形式的VAR模型可以直接使用OLS方法对每个表达式进行估计,使用的函数是VAR(),语法结构如下:
- VAR(y, p = 1, type = c("const", "trend", "both", "none"),
- season = NULL, exogen = NULL,
- lag.max = NULL,
- ic = c("AIC", "HQ", "SC", "FPE"))
该函数针对的模型形式如下:
参数含义如下:
y:内生变量构成的矩阵,每列代表一个变量;
p:模型阶数;
type:确定成分的类型,包括截距、时间项、二者兼有、二者皆无,分别使用"const"、 "trend"、"both"、"none"表示;
season:居中的季节虚拟变量;
exogen:外生变量构成的矩阵,对应模型形式中的;
lag.max:若模型阶数不确定,可通过此参数设置最大阶数,再根据
ic参数指定的准则确定“最优”阶数;ic:确定“最优”阶数的信息准则。
官方文档示例:
- library(vars)
- data(Canada)
- head(Canada)
- ## e prod rw U
- ## [1,] 929.6105 405.3665 386.1361 7.53
- ## [2,] 929.8040 404.6398 388.1358 7.70
- ## [3,] 930.3184 403.8149 390.5401 7.47
- ## [4,] 931.4277 404.2158 393.9638 7.27
- ## [5,] 932.6620 405.0467 396.7647 7.37
- ## [6,] 933.5509 404.4167 400.0217 7.13
-
- model <- VAR(Canada, p = 2, type = "const")
- summary(model)
上述代码会输出每个模型表达式的参数估计结果。以第一个变量e为例:
- ## Estimation results for equation e:
- ## ==================================
- ## e = e.l1 + prod.l1 + rw.l1 + U.l1 + e.l2 + prod.l2 + rw.l2 + U.l2 + const
- ##
- ## Estimate Std. Error t value Pr(>|t|)
- ## e.l1 1.638e+00 1.500e-01 10.918 < 2e-16 ***
- ## prod.l1 1.673e-01 6.114e-02 2.736 0.00780 **
- ## rw.l1 -6.312e-02 5.524e-02 -1.143 0.25692
- ## U.l1 2.656e-01 2.028e-01 1.310 0.19444
- ## e.l2 -4.971e-01 1.595e-01 -3.116 0.00262 **
- ## prod.l2 -1.017e-01 6.607e-02 -1.539 0.12824
- ## rw.l2 3.844e-03 5.552e-02 0.069 0.94499
- ## U.l2 1.327e-01 2.073e-01 0.640 0.52418
- ## const -1.370e+02 5.585e+01 -2.453 0.01655 *
- ## ---
- ## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
- ##
- ##
- ## Residual standard error: 0.3628 on 73 degrees of freedom
- ## Multiple R-Squared: 0.9985, Adjusted R-squared: 0.9984
- ## F-statistic: 6189 on 8 and 73 DF, p-value: < 2.2e-16
以及残差的协方差矩阵和相关系数矩阵:
- ## Covariance matrix of residuals:
- ## e prod rw U
- ## e 0.131635 -0.007469 -0.04210 -0.06909
- ## prod -0.007469 0.425711 0.06461 0.01392
- ## rw -0.042099 0.064613 0.60886 0.03422
- ## U -0.069087 0.013923 0.03422 0.07821
- ##
- ## Correlation matrix of residuals:
- ## e prod rw U
- ## e 1.00000 -0.03155 -0.1487 -0.6809
- ## prod -0.03155 1.00000 0.1269 0.0763
- ## rw -0.14870 0.12691 1.0000 0.1568
- ## U -0.68090 0.07630 0.1568 1.0000
从前面的标准形式转换成如下结构性VAR形式:
与标准形式相比,,其余以此类推。
虽然标准形式的VAR是从结构性VAR中推导出来的,但该过程是不可逆的。很容易理解,已知和能够得到;反之,已知并不能得到和。
对于结构性VAR模型,只有和中的部分元素已知时才能将其估计出来。
例如,假设已知不受当期值影响,即已知,也即,则此时结构性VAR的其他参数是可以被估计出来的。
估计结构性VAR使用的函数是SVAR(),语法结构如下:
- SVAR(x, estmethod = c("scoring", "direct"),
- Amat = NULL, Bmat = NULL,
- start = NULL, max.iter = 100,
- conv.crit = 0.1e-6, maxls = 1.0,
- lrtest = TRUE, ...)
参数含义如下:
x:使用
VAR()函数估计出的标准形式VAR;Amat、Bmat:对矩阵A和B施加约束。若只对A和B其中一个施加约束,则另外一个默认为单位矩阵;对于需要施加约束的矩阵,已知的元素直接赋给相应的值,待估计的元素设置为NA。
- m <- diag(4)
- diag(m) <- NA
- m[2, 1] <- NA
- m[4, 1] <- NA
- m
- ## [,1] [,2] [,3] [,4]
- ## [1,] NA 0 0 0
- ## [2,] NA NA 0 0
- ## [3,] 0 0 NA 0
- ## [4,] NA 0 0 NA
-
- smodel <- SVAR(model, Amat = m)
- print(smodel)
- ## SVAR Estimation Results:
- ## ========================
- ##
- ##
- ## Estimated A matrix:
- ## e prod rw U
- ## e 2.756 0.000 0.000 0.000
- ## prod 0.087 1.533 0.000 0.000
- ## rw 0.000 0.000 1.282 0.000
- ## U 2.562 0.000 0.000 4.882