EViews教程



SVAR模型

前面介绍的VAR模型,也叫简约式(reduced-form)VAR模型,这是一个相对SVAR(结构VAR,structural VAR)模型的概念。VAR模型应用的一个困难在于,我们往往不太清楚以什么样的次序排列内生变量,进而获得正交化误差才是合适的。最致命的是,当内生变量较多时,不同排序得出的分析结论可能会相差很大😢。为了解决这一问题,一种途径是使用SVAR模型,从源头上把正交化误差,也叫结构性新息(structural innovation)或结构性冲击(structural shock),给识别出来。

SVAR模型认为简约式VAR模型的误差之所以会存在相关,是因为内生变量间存在同期反馈效应(contemporaneous feedback effect),即同一时期的内生变量间可能会相互影响。因此,SVAR模型的一个基本设定是:$$Ay_t = c + \sum_{i=1}^p A_i^s y_{t-i} + Be_t \tag{1}$$其中,\(A\)和\(A_i^s\)是系数矩阵,其中的系数被称为结构系数(structural coefficients);\(e_t\)是满足\(Var(e_t)=I_k\)的结构冲击向量。系数矩阵\(A\)的存在是SVAR模型区别于VAR模型的关键。

由于SVAR模型存在同期反馈效应,这使得这一模型具有内生性问题,所以,估计SVAR模型的一种方法是利用工具变量。但是,实际应用中通常不会这么做,这是因为如果我们能利用经济学理论对结构系数进行约束的话,利用简约式VAR的估计结果就能把结构系数识别并估计出来,而不用再去寻找工具变量(寻找好的工具变量常常是件痛苦的事情😢)。常见的约束有三类:A-B约束、S约束和F约束。

A-B约束

对模型\((1)\)中的SVAR模型,我们可以利用\(A\)的逆得到模型的简约式表达:$$y_t = c + \sum_{i=1}^p A_i y_{t-i} + u_t \tag{2}$$其中,\(A_i = A^{-1} A_i^s\),\(u_t = A^{-1} Be_t \)。所以,简约式VAR模型里的误差方差矩阵为:$$Var(u_t) = \Sigma_u = A^{-1} BB’A’^{-1}$$

基于模型\((2)\),我们可以获得\(\Sigma_u\)的估计。由于方差矩阵是对称的,所以,这里面包含了对\(k(k+1)/2\)个参数的估计。因为\(A\)和\(B\)共有\(2k^2\)个参数,所以,不对\(A\)和\(B\)进行约束的话,是无法通过估计\(k(k+1)/2\)个参数,进而间接估计出\(A\)和\(B\)的。我们至少需要施加\(2k^2 – k(k+1)/2 = k^2+k(k-1)/2\)个约束才有可能对\(A\)和\(B\)进行识别。

通常,对矩阵\(B\),我们会设其非对角线上的元素都为0(共\(k^2-k\)个约束);对矩阵\(A\),我们会设其对角线全为1(共\(k\)个约束)。因此,我们至少还需对\(A\)的非对角元素再施加\(k(k-1)/2\)个约束。以[VAR模型]里的二元VAR模型为例,我们可以采用如下设定:$$A = \begin{bmatrix} 1 & 0\\ A_{21} & 1 \ \end{bmatrix}$$这意味着同期的dlinc不会进入dlcs的方程。

要估计上述设定的SVAR模型,我们需要先估计对应的简约式VAR模型,再通过设置约束来估计结构系数,相应的代码为:

var_a.cleartext(svar)      
var_a.append(svar) @unitlower(A)
var_a.append(svar) @diag(B) 
var_a.svar

上面的第一行代码使用cleartext命令(加参数svar)清除已有的SVAR约束设置。第二、三行代码使用append命令(加参数svar)对SVAR进行约束设置:@unitlower函数把\(A\)设为对角线为1(unit的含义)的下三角(lower的含义)矩阵;@diag把\(B\)设为对角矩阵。最后一行代码通过svar命令实施估计。估计结果如下图所示:

图中最上面的部分需要注意收敛是否达成,这是因为SVAR模型的估计方法是MLE,使用了最优化算法。”Structural VAR is just-identified“表明当前的模型是正好识别的,如果存在过度识别,下面的结果会报告检验过度识别的LR统计量。接下来,是展示矩阵\(A\)和\(B\)的约束的部分。然后,是系数的估计结果(包括了估计值、标准误、z统计量和相应检验显著性的p值)以及对数似然值。最后,是矩阵\(A\)和\(B\)以及另外两个矩阵\(S\)和\(F\)(含义见下文)的估计结果。

S约束

如果把\(A^{-1}B\)看作一个整体,令\(S=A^{-1}B\),有:$$Var(u_t) = \Sigma_u = SS’^{-1}$$在这种设定下可以直接对\(S\)进行约束。由于\(S\)中只有\(k^2\)个参数,因此,一般只需施加\(k(k-1)/2\)个约束就能识别出结构冲击。当然,如果不对\(A\)和\(B\)做设定的话,我们通常无法经由估计\(S\),进而估计出\(A\)和\(B\)。

接上面的二元VAR例子,在EViews中,如果我们直接对\(S\)矩阵施加约束,至少得施加1个约束。如果我们打算把\(S\)设为上三角矩阵,可以使用@upper函数,代码如下:

var_a.cleartext(svar)      
var_a.append(svar) @upper(S) 
var_a.svar

对于这个例子,由于对矩阵\(A\)和\(B\)没有做任何设定,所以,在输出的结果中不会出现它们的估计结果。

F约束

上面介绍的A-B约束和S约束都是所谓的短期(short-run)约束,即约束会直接影响结构冲击的短期作用。事实上,为了识别SVAR模型,我们也可以实施长期(long-run)约束,该约束是直接施加在累积响应(系数)上的。

模型\((2)\)可以表达为:$$y_t = \Psi(1)^{-1}c + \Psi(L)^{-1}Se_t $$其中,\(\Psi(L)\)为滞后算子多项式:$$ \Psi(L) = I_k – A_1L – \cdots – A_pL^p$$所以,累计响应(系数)就是\(\Psi(1)^{-1}S\),这就是EViews中的\(F\)矩阵,F约束即是对它的约束。同S约束一样,为了识别SVAR模型,F约束一般需要至少\(k(k-1)/2\)个。下面是一个施加F约束的例子:

var_a.cleartext(svar)      
var_a.append(svar) @F(1,2) =  @F(2,1)
var_a.append(svar) @F(1,1) =  1
var_a.svar

中间的两行代码直接对\(F\)矩阵的元素做了约束:令\(F\)的两个非对角元素相等,并令\(F\)的第一个对角元素等于1。由于我们其实只需要施加1个约束就能识别二元SVAR模型,所以,这是一个过度识别的例子。

约束设置

除了上面介绍过的施加约束的方式外,我们还可以利用以下函数:

  • @vec(X) = v1, v2 …:该函数对矩阵X按列设定,例如,@vec(A) = 1 0, na 1(此处的na表示对参数不做约束),这等价于@unitupper(A)
  • @row(X,r) = a:该函数把X的r行的值全设为a
  • @col(X,c) = a:该函数把X的c列的值全设为a

当然,我们也可以采用鼠标模式来设置约束:估计完简约式VAR模型后,点击var对象窗口左上方的Proc/Estimate Structural Factorizaton…,将会出现下图:

图中的Restriction Preset处可以选择一些常用的约束设置;Restrictions处可以用鼠标选中不同的矩阵,然后通过右侧Manual下的框进行手动设置。注意,在EViews中允许同时对4个矩阵进行约束设置,尽管我们一般不会这么做。

冲击响应和方差分解

估计完SVAR模型后,可以利用前面见过的impulse和vdcomp命令来获得冲击响应图和方差分解结果,只是需要注意要把参数imp设定为struct:

var_a.impulse(imp=struct)      
var_a.vdcomp(imp=struct)
命令复习
  • .cleartex(svar):清空SVAR模型的约束设置
  • .append(svar):对SVAR模型进行约束设置
  • .svar:输出SVAR模型的估计结果

[注] ( . )命令表示命令可单独使用,也可跟在对象后使用;.命令表示命令只能跟在对象后使用。

练习
  1. 通过@vec函数重现上述施加S约束的估计结果。
  2. 对上面的施加F约束的例子,过度识别检验的结果显示约束设置是否合理?

读后有收获欢迎打赏站长吃支可爱多😹


点赞    

扫一扫,点右上角⋯分享

冲击响应函数
 



   
   
 卯光宇 回复给 famo

famo: 老师,您好,最近在做SVAR,读了上面的内容,知道了AB约束和S是短期约束,但我做出来冲击图AB约束和S约束做出æ�

AB约束和S约束得到同样的结果不矛盾,S本来就是通过A和B定义的。做短期或长期约束一般是根据经济理论来决定的,最好参考相关文献。

发表于北京时间2025-06-21下午9:19
 famo 留言给 卯光宇

老师,您好,最近在做SVAR,读了上面的内容,知道了AB约束和S是短期约束,但我做出来冲击图AB约束和S约束做出来的结果是一样的,这个有问题吗?还有一般都是做短期约束吗?我有点不知道如何选择,最近刚做出来的结果才符合预期😀

发表于北京时间2025-06-15下午7:43
 卯光宇 回复给 famo

famo: 😀请教一下,请问这个矩阵NA表明两个变量的关系吗?如果要看某两个变量的关系,其他变量的关系不看,就把后

NA是指对应的参数不做约束,反映变量之间的关系。即使只关心两个变量之间的关系,其他的NA一般也不能约束为0。就像做回归,只关心x对y的边际影响,不能只使用简单回归而不使用多元回归。

发表于北京时间2025-06-13下午12:15
 famo 留言给 卯光宇

😀请教一下,请问这个矩阵NA表明两个变量的关系吗?如果要看某两个变量的关系,其他变量的关系不看,就把后者的NA改为0吗(我做的是5个变量)

发表于北京时间2025-06-13上午9:53



    给站长留言    
😀😂😅😆😊😍😝🤭🌹🤝😵😭😱😳😣😴
昵称*
验证*:7+8 =