邮箱:econometrics666@sina.cn
所有计量经济圈方法论丛的do文件都放在社群里,可以直接取出使用运行,也欢迎到研究小组交流访问.
今天,我们“面板数据研究小组”给计量经济圈的圈友引荐一个经常用到的方法——Vector autoregressive regression(VAR)。下一次,在这个VAR基础上,我们会将此方法延伸到面板数据的VAR,TVP-VAR,FAVAR等前沿模型里,这样就可以用在微观面板数据和大规模宏观数据中去了。
在时间序列计量中,我们已经学习了很多关于(结构)向量自回归模型(VAR),因为这是诺贝尔奖获得者Sims最为人熟知的贡献之一。Sims经常发文反对当前在微观计量中比较流行的因果识别策略,比如IV, Matching, Quasi-experiment等。他认为这些都只是一股脑地在讲单个方程,而不是构造一个联立方程组,毕竟像(S)VAR这样的模型压根不用去看哪个变量是外生和内生。
我们只需要把所有互相影响的变量都当成内生变量来构建一个联立方程组,然后根据Cholesky分解规则来施行一些限制,来保证我们能够恰好识别出所有的待估参数。Blanchard & Quah在1990年对VAR模型进行修正,他们尝试给模型加入若干结构性约束,从而可以得到唯一的结构关系,来解决模型对信息的识别问题,从而使脉冲响应具有一定的经济意义。
下面这个方程就是VAR(P),里面的yt向量包含了k个变量,我们只是用了简化的形式来展现VAR方程。Xt到Xt-s是外生变量,Ut是扰动项。因此,这就是一个有k个变量且存在P期滞后因子的一般VAR形式。他是一个reduced form(简约式VAR),即一个变量由自己的滞后项和其他变量的滞后项进行解释,而不包括当期项。这个里面的误差项在各个方程之间很可能出现相关性。递归的VAR(Recursive VAR)可以保证每个方程的误差项与前一个方程的误差项不存在相关性。
为了进行对比,我们写出结构VAR(SVAR),两者明显的区别在于SVAR中有了其他变量的当期值。SVAR可以转化成简约式VAR,转换过程也比较简单。我们把Zt方程代入Xt方程里,然后进行简单的移项和合并,就可以得到Xt的表达式,同理,我们可以把Xt方程代入Zt的表达式,进行相同的操作从而得到Zt的表达式。然后,我们就得到了Xt和Zt关于他们各自的滞后项和对方滞后项的函数,那就是我们想要的简约表达式。可以具体参见一下SVAR与VAR的区别:https://blog.stata.com/2016/09/20/structural-vector-autoregression-models/
如果这个VAR系统是稳定的,也就是说我们的那个方程组的特征根都位于单位圆内(这个需要看我们怎么写这个表达式),那我们可以将上面的VAR模型转换成下面这个向量移动平均(Vector Moving Average)。现在,我们看不到这k个变量的滞后项,里面的ΣDi代表的是转换方程,而后面的那个Σ代表的是脉冲响应函数。
如果想要估计出来VAR系统的参数,那么我们需要保证yt和Xt都是协方差平稳的时间序列数据(Covariance-stationary series),注:这是弱平稳。时间序列数据要协方差恒定,有一个必要条件,就是必须要有一个均值回复水平(mean reverting level),就是说这个数据不管怎么变动都会有一个向均值恢复的倾向。
对AR(1)模型,均值回复水平=b0/(1-b1)。如果b1=1,则该AR(1)模型不存在均值回复水平,这个时间序列数据也就不满足协方差恒定。因此,做了一个AR(1)模型之后,我们要用Dickey-Fuller检验来检验斜率系数b1是否显著不等于1 (b1等于1称为单位根)。
也就是说,在做(S)VAR模型的时候,第一前提是对里面牵涉到的变量的开展单位根检验。如果这些变量都服从I(0)过程,那我们可以直接进行VAR建模。如若不然,我们就需要对那些不平稳的时间序列变量进行一阶差分(一般而言,数据经过一阶差分之后都会趋向于平稳),然后再进行VAR建模。当然,还有一些伙伴想要对那些平稳的时间序列也差分,因为他们认为要差分就需要对不平稳的和平稳的时间序列都差分。尽管平稳时间序列差分之后能够再次取得平稳性,但差分之后所损失的原始信息会很多,并且增加了额外的估计和解释难度。因此,我们并不建议对平稳时间序列再进行差分。
对于是否需要VAR系统里的各个变量都是平稳的,这个问题现在大体的倾向是,如果我们想要做out-of-sample预测,那么我们需要保证VAR里的变量平稳,不然存在“虚假回归”的可能。如果我们只是想要得到各个变量间的脉冲响应函数,那么我们可以不必要求VAR系统的变量是平稳的。这个在Sims的文章和后面的其他相关文章中有提及到,不过仍然存在着一些争议。我们还是希望圈友们能够在做VAR之前检验一下各个变量的平稳性。
如果你的VAR系统里的变量都服从I(1)过程,那我们还是建议你先对这些变量做一个协整检验,比如用Johansen test。其结果将会告诉你,是否我们应当建立一个VECM模型(Vector error correction model),来把他们之间的长期和短期的关系联动起来。那就是说,长期而言,比如两个变量有一个稳定的关系,但短期他们之间的关系可以偏离长期关系,只是后面必须恢复到长期的稳态关系才行。所以,在我们看来,如果你发现能够使用VECM模型,就优先使用VECM而不是VAR,因为他能够告诉我们更多的关于两个变量之间的关系。
现在,我们来看看具体怎么操作VAR或者SVAR模型。
1.选择相关变量,切记根据理论模型选择重要变量,若是变量过多,那会导致我们待估计的参数过大而出现问题。
2.检查你的数据和尽量做一些合理的调整,比如对于收入或者股票指数或GDP等这些数据,我们尽量取log对数值。
3.检查你的数据是否包含非平稳的部分,常用的单位根检验方法是ADF test,在这个检验里面包括三种类型:没有常数项和趋势项,没有常数项但有趋势项,有常数项和趋势项(注:这里我们就不区分什么漂移项和趋势项了)。因为这三种类型对应着各自不同的单位根显著性表格,所以根据你的散点图或者直觉看看你的数据类型符合哪种类型。如果你想要进一步得到核实,可以使用PP test再次检验数据中的单位根。
4.选择VAR系统的滞后阶数,这里面的指标包括AIC,BIC,HQ等等,输入指令后窗口会自动告诉你最优的滞后阶数。
5.检验是否存在协整关系,我们常用的就是Johansen test。如果存在协整关系,那么我就选择VECM模型进行回归(实际上,VECM模型与VAR模型差不多是一家人)
6.估计模型,或者VAR或者VECM。
7.回归后的检验,比如我们用Ljung-Box test等去检验残差是否存在自相关。
8.可以进行预测,得到脉冲响应函数IRF和方差分解函数VDF。
下面我们来用一个具体的示例来演示VAR的操作思路和步骤。SVAR稍稍有点不同,但也遵循着同样的步骤和方法。注: SVAR的下一期再细讲。
我们想要研究一个国家的真实投资、真实消费和真实收入三者之间的关系,用到的数据是从1959年第一季度到2010年第三季度总共207个季度数据。
首先我们来看看这三者的时间趋势图,从图中可以看出三者有一个Co-movement的过程,并且随着时间向上的趋势是非常明显的。我们有了关于三者长期关系的直观印象,同时很也认为这个数据很可能是detrended平稳的。下面我们会分别对三个数据进行单位根检验。
对lrgrossinv进行单位根检验,包括了时间趋势项,发现这个数据是非平稳的。
对lrconsump进行单位根检验,包括了时间趋势项,发现这个数据是非平稳的。
对lrgdp进行单位根检验,包括了时间趋势项,发现这个数据是非平稳的。
现在,我们对这三个变量进行一阶差分。
对lrgrossinv进行一阶差分之后,我们发现D.lrgrossinv数据是平稳的。
对lrconsump进行一阶差分之后,我们发现D.lrconsump数据是平稳的。
对lrgdp进行一阶差分之后,我们发现D.lrgdp数据是平稳的。
然后,我们用上面这三个一阶差分后的D.lrgrossinv, D.lrconsump, D.lrgdp变量组建VAR模型,并且还包括外生的真实货币量D.lrmbase。注:这里只展示了第一个关于D.lrgrossinv的回归方程,其他二个关于D.lrconsump和D.lrgdp的方程就没有在这里展示了。从回归方程中,我们可以看到,暂时性地选择了4阶滞后项。
通过上面的回归之后,我们再来根据相关标准选择最优的滞后阶数。从下表中,我们发现大部分信息准则都指向了1阶滞后项,因此我们在下阶段回归中会用各变量的一阶滞后。
选择一阶滞后项,我们得到了下表的结果。
我们可以通过Log-likelihood和信息准则来比较一下选择4阶滞后和1阶滞后的优劣。明显的是下方的那个回归结果好一些,因此1阶滞后是更加好的选择。
我们再检验一下,是否应该把外生的D.lrmbase包括在VAR系统中来,联合的系数显著性检验表明确实应该把他包括进来。
检验各个内生变量在每个方程和整个VAR系统中的联合显著性。从下表中我们可以看到,这里面的内生变量在我们选择的最优1阶滞后阶数下具有联合显著性。
现在,我们用格兰杰因果检验来确认是否在这三个变量之间有因果关系。如果根据5%的显著性水平,那我们可以得到如下因果关系:D.lrconsump和D.lrgdp联合起来是D.lrgrossinv的原因;D.lrgdp是D.lrconsump的原因,以及D.lrgdp和D.lrgrossinv联合起来是D.lrconsump的原因;最后,D.lrgrossinv, D.lrconsump是D.lrgdp的原因。
现在,我们可以看看这个VAR系统自身是不是稳定的,因为只有稳定的系统才能够去做预测或者脉冲响应分析。结果显示,这个VAR系统满足平稳性假定。
下面我们需要展示的是,这三个变量之间的脉冲响应函数。在这里,我们先集中展示当有来自其他变量的冲击时,另一个变量随着时间步数所做出的相应反应。Table是脉冲响应函数的具体数字,而Graph是脉冲响应的直观图形。
从这个脉冲响应图形里,我们发现实际总投资有一个向下方反应的趋势,即来自实际总消费和实际总收入的冲击,在8个季度里最终还是恢复到平稳状态。实际总投资的调整到位了,他消化了所有来自其他方面的冲击波动,而这恰恰是一个经济系统应当有的状态。
从实际总消费和实际总收入的脉冲响应图中,我们也得到了类似的结论。即,来自其他变量的外生冲击波对自己的影响会有一个总体上而言不断下降的过程,并且到第8个季度该变量消化吸收了所有的冲击。
接下来,我们通过方差分解Variance decomposition来看看在这个VAR系统中,到底是哪一个变量对我们感兴趣的变量的解释力度大(这个是通过预测均方误差表现的)。这个方差分解表和下面的方差分解图,都很好地表明,实际总投资和总消费对自己的解释力度最大,贡献了预测均方误差的90%以上。
从实际总收入的方差分解图,我们可以看出实际总投资对实际总收入的预测误差变动的贡献力度甚至超过了实际总收入本身。这足以看出实际总投资在这个国家实际总收入的重要性。
我们实际上也可以做一些稳健性检验,比如当我们改变Cholesky分解的顺序,那我们的脉冲响应函数是否有明显不同的改变呢?
下面这个脉冲相应图中有icy和icy2,其中icy代表我们上面的那个Cholesky分解顺序,而icy2代表另外一种Cholesky分解顺序。我们发现不管使用哪种分解顺序,都得到了类似的脉冲响应函数图,因此我们有理由相信这个结论是可信的。
方差分解图中可以看出,在第二种Cholesky分解中,实际总投资在实际总消费的预测误差中占的比重增大了。这足以看出Cholesky分解顺序对VAR系统的重要性,因此我们希望经济理论能够在VAR系统的识别中起一定的作用。
得到整个VAR系统的估计结果后,我们可以看看这个模型到底怎么样?下面这个图就是以2006第一季度为起点做的样本内预测(后面8个季度的预测),蓝线代表预测的值,而红线代表实际观测值。从这个图中,我们可以看出这个模型的长期预测能力还有待改进,因为整体的趋势有错位,出现了早早到达尖峰或迟迟到达峰谷的情形。我们觉得样本内预测做得比较好,那么样本外的预测out-of-sample预测就会值得信赖。
这个模型在样本内预测不好的原因,很可能是由于这个VAR系统的残差项存在严重的1阶自相关(5%显著性水平)。这表明,咱们的AIC,BIC等选择的最优滞后阶数是存在问题的。
如果我们调整滞后阶数到3,那么这个VAR系统的残差项就不存在自相关了,预测性可能会更好(咱们没有再一次去重复之前所有的结果)。
我们现在来做VECM检验,首先选择最优的滞后阶数。注:这里的滞后阶数是2或者3,与之前选择的滞后阶数1是不同的,因为之前的那个VAR是先通过4阶滞后阶数回归之后,我们再做的最优滞后阶数选取的。
然后,我们用Johansen test来检测这三个变量是否存在协整关系。无论我们选择滞后阶数是2还是3,结论都显示这三个变量之间不存在协整关系。
面板数据研究小组各种方法论丛的do file都放在咱们的社群,可以直接到社群提取使用。
SVAR模型的示例可以参见: https://blog.stata.com/2016/09/20/structural-vector-autoregression-models/
推荐一篇文章:“Vector Autoregressions” by James H. Stock and Mark W. Watson
联系客服