xtabond2 是什么?
xtabond2 是由 David Roodman 编写的一个用户编写的命令(ssc install xtabond2),它极大地扩展和改进了 Stata 内置的 xtabond 命令。xtabond2 主要用于估计动态面板数据模型,特别是当模型因包含被解释变量的滞后项而存在内生性和序列相关问题时。

为什么需要 xtabond2?(核心问题)
在面板数据中,如果我们想估计一个包含滞后被解释变量的模型,
$$ y{it} = \alpha y{it-1} + \beta X_{it} + ci + u{it} $$
- $y_{it}$ 是个体 $i$ 在时间 $t$ 的被解释变量。
- $y{it-1}$ 是 $y{it}$ 的一阶滞后项。
- $X_{it}$ 是一组外生或前定解释变量。
- $c_i$ 是个体固定效应。
- $u_{it}$ 是特异性误差项。
这里会产生两个主要问题:
-
动态面板偏差:即使 $u{it}$ 与 $X{it}$ 不相关,$y_{it-1}$ 也与个体固定效应 $ci$ 相关(因为 $y{it-1}$ 包含了 $c_i$ 的影响),当我们对模型进行“差分”以消除 $ci$ 时,$y{it-1}$ 会与变换后的误差项 $(u{it} - u{it-1})$ 相关,这导致传统的固定效应或随机效应估计量是有偏且不一致的,尤其是在时间维度 $T$ 较小的情况下。
(图片来源网络,侵删) -
内生解释变量:模型中的 $X{it}$ 也可能与误差项 $u{it}$ 相关(即内生性问题)。
为了解决这些问题,Arellano 和 Bond (1991) 提出了差分广义矩估计量,而 Blundell 和 Bond (1998) 在此基础上提出了系统广义矩估计量。xtabond2 命令可以方便地实现这两种方法以及其他更高级的估计方法。
xtabond2 的基本语法
xtabond2 的基本语法结构如下:
xtabond2 depvar [indepvars] [if] [in], ///
gmm(varlist, [options]) ///
iv(varlist, [options]) ///
[other_options]
核心选项:
-
gmm(varlist, ...):指定需要使用广义矩方法进行估计的变量。
(图片来源网络,侵删)- 这些变量通常被认为是内生的,或者是前定的。
xtabond2会自动为这些变量生成滞后项作为工具变量。- 示例:
gmm(y L.y, lag(2 4))表示对变量y和L.y使用 GMM,并利用它们从第 2 期到第 4 期的滞后项作为工具变量。
-
iv(varlist, ...):指定只使用标准工具变量进行估计的变量。- 这些变量必须是外生的。
xtabond2不会为这些变量生成滞后项作为工具变量,而是直接使用它们自身作为工具变量。- 示例:
iv(z)表示变量z被视为外生变量,直接作为自身的工具变量。
如何分配变量?
对于一个典型的动态面板模型 y L.y x1 x2,变量分配通常是:
- 被解释变量:
y - GMM (内生/前定):
L.y(动态项,必然是前定的) 和可能内生的x1。- 语法:
gmm(L.y x1, ...)
- 语法:
- IV (外生): 外生的
x2。- 语法:
iv(x2)
- 语法:
常用选项:
lag(# #): 在gmm()中使用,指定 GMM 工具变量的滞后阶数范围。lag(2 4)表示使用从 t-2 到 t-4 期的滞后项,默认是lag(2 .),即从 t-2 期到最早的可用时期。maxldep(#): 指定 GMM 工具变量的最大滞后阶数。maxldep(4)。noleveleq: 不估计水平方程,这是在进行系统 GMM (System GMM) 时的一个选项,默认情况下会同时估计差分方程和水平方程。twostep: 计算两阶段估计量,默认是onestep(一步估计),两阶段估计量在异方差下更有效,但标准误可能向下偏误,通常需要使用small选项进行修正。small: 使用小样本修正后的 t 统计量和标准误。强烈建议在使用twostep时加上此选项。vce(robust): 计算稳健的标准误,通常与small一起使用。artests(#): 进行 Arellano-Bond 序列相关检验,默认是artests(2),检验一阶和二阶序列相关,我们希望 AR(1) 显著而 AR(2) 不显著。sargan/hansen: 进行过度识别约束检验,Hansen 检验是两阶段估计下的首选,因为它对工具变量的有效性更稳健。我们希望不能拒绝原假设(即工具变量是有效的)。noconstant/constant: 模型是否包含常数项。
实例操作
假设我们有一个数据集 panel.dta,想估计一个企业投资模型,其中投资 (inv) 取决于其滞后值 (L.inv)、企业价值 (value) 和杠杆率 (leverage),我们怀疑 leverage 是内生的。
第 1 步:安装和准备数据
// 如果还没安装,先安装 xtabond2 ssc install xtabond2, replace // 加载示例数据(这里用 Stata 自带的 grunfeld 数据集作为演示) use http://www.stata-press.com/data/r15/grunfeld.dta, clear // 声明为面板数据 xt firm year
第 2 步:使用 xtabond2 估计
我们设定:
inv为被解释变量。L.inv为动态项,放入gmm()。value为外生变量,放入iv()。leverage为内生变量,放入gmm()。
// 基本的一步系统 GMM 估计
xtabond2 inv L.inv value leverage, ///
gmm(L.inv leverage, lag(2 4)) iv(value) ///
artests(2) sargan
命令解释:
gmm(L.inv leverage, lag(2 4)): 将L.inv和leverage作为 GMM 变量,使用它们从 t-2 到 t-4 期的滞后项作为工具变量。iv(value): 将value作为外生变量,直接作为其自身的工具变量。artests(2): 报告 AR(1) 和 AR(2) 检验。sargan: 报告 Sargan 过度识别检验(一步估计下)。
第 3 步:结果解读
xtabond2 的输出结果非常关键,需要仔细检查:
-
系数表:
L.inv的系数 $\alpha$ 是我们关心的动态效应。value和leverage的系数 $\beta$ 是它们对inv的影响。
-
Arellano-Bond test for AR(#):
- AR(1) p-value < 0.05: 这是期望的,说明差分后的误差项存在一阶序列相关。
- AR(2) p-value > 0.05: 这是关键的,说明不存在二阶序列相关,AR(2) 显著,意味着模型设定有问题,工具变量可能无效。
-
Sargan/Hansen test of overident. restrictions:
- p-value > 0.05: 这是期望的,我们不能拒绝“所有工具变量都有效”的原假设,p-value 很小,说明我们使用的工具变量中,有一部分与误差项相关,模型设定有误。
-
Number of instruments:
这个数字很重要,如果工具变量数量过多(超过了面板的横截面数量 N),会导致估计量不可靠(弱工具变量问题),一个经验法则是,工具变量数量不应超过 N 的三分之一。
第 4 步:两步估计(推荐)
两步 GMM 在大样本下更有效,但标准误有偏,务必加上 small 选项。
// 两步系统 GMM 估计,使用小样本修正和稳健标准误
xtabond2 inv L.inv value leverage, ///
gmm(L.inv leverage, lag(2 4)) iv(value) ///
twostep small vce(robust) ///
artests(2) hansen
注意:当使用 twostep 时,过度识别检验应使用 Hansen test 而不是 Sargan test,因为 Hansen test 对异方差和工具变量的有效性更稳健。
常见问题与注意事项
-
一步 vs 两步:
- 一步估计:在小样本下更可靠,标准误无偏。
- 两步估计:在大样本下更有效(标准误更小)。现代实践中,两步估计配合小样本修正 (
small) 和稳健标准误 (vce(robust)) 是更常见的选择。
-
系统 GMM vs 差分 GMM:
- 差分 GMM:只对原始方程进行差分,当被解释变量的 $y{it-1}$ 的滞后项与 $\Delta u{it}$ 的相关性很高时(即 $\alpha$ 接近 1),工具变量会很弱。
- 系统 GMM:同时估计差分方程和水平方程,它使用差分变量的滞后项作为水平方程的工具,反之亦然,这为 GMM 提供了额外的、更有效的工具变量,尤其是在 $\alpha$ 较大或 $T$ 较小时,表现通常优于差分 GMM。
xtabond2默认使用系统 GMM。
-
工具变量过多:
- 这是系统 GMM 的一个主要风险,过多的工具变量会导致 J 检验失效和估计量精度下降,如果工具变量数量过多,可以尝试:
- 增加滞后项的最小阶数(如
lag(3 4)而不是lag(2 4))。 - 使用
collapsed选项将高阶滞后项合并,以减少工具变量数量。
- 增加滞后项的最小阶数(如
- 这是系统 GMM 的一个主要风险,过多的工具变量会导致 J 检验失效和估计量精度下降,如果工具变量数量过多,可以尝试:
-
vce(cluster panelvar):- 另一个处理异方差和序列相关的方法是在
vce()选项中使用聚类稳健标准误,聚类到个体层面。vce(robust)主要处理异方差,而vce(cluster firm)同时处理异方差和同一时间点上的相关性。
- 另一个处理异方差和序列相关的方法是在
xtabond2 是处理动态面板数据模型的利器,使用它的核心在于:
- 正确指定:将内生/前定变量放入
gmm(),将外生变量放入iv()。 - 诊断检验:务必检查 AR(2) 检验和 Hansen/Sargan 检验的结果,以判断模型设定和工具变量的有效性。
- 谨慎选择:通常推荐使用两步系统 GMM,并配合小样本修正 (
small) 和稳健标准误 (vce(robust)或vce(cluster ...))。 - 警惕工具变量:密切关注报告的工具变量数量,避免因工具变量过多而导致估计失效。
