XT5. 动态面板数据模型
作者:李琼琼 (山东大学)
邮箱:lqqflora@163.com
1. 简介
动态面板模型(Dynamic Panel Data Model)是一类包含时间序列和横截面数据的回归模型,广泛用于研究因变量随时间变化的动态效应。基本的模型设定如下:
\[ y_{it} = \alpha y_{it-1} + \beta x_{it} + \gamma Z_{it} + \mu_i + \lambda_t + \varepsilon_{it} \]
其中: - \(y_{it}\) 是被解释变量,表示单位 \(i\) 在时间 \(t\) 的观测值; - \(y_{it-1}\) 是因变量的滞后项,表示单位 \(i\) 在时间 \(t-1\) 的观测值; - \(x_{it}\) 是自变量,表示单位 \(i\) 在时间 \(t\) 的解释变量; - \(Z_{it}\) 是其他控制变量; - \(\alpha\) 是滞后项的系数; - \(\beta\) 和 \(\gamma\) 是其他自变量的系数; - \(\mu_i\) 是单位固定效应,捕捉不同个体之间的异质性; - \(\lambda_t\) 是时间固定效应,捕捉时间因素的影响; - \(\varepsilon_{it}\) 是误差项,表示未被模型解释的部分。
该模型的典型特征是引入了因变量的滞后项,能够捕捉到数据的动态特性,即过去的决策或行为对当前的影响。在实际经济学和金融学研究中,许多变量(如企业投资、消费、生产等)存在明显的惯性效应,动态面板模型能够有效地捕捉这种惯性。
2. 估计和检验方法
2.1 动态面板模型的内生性问题
在动态面板数据模型中,特别是在估计滞后因变量(\(y_{it-1}\))的系数时,面临着独特的内生性问题。具体而言,内生性问题主要来源于因变量的滞后项与个体效应之间的相关性。以下是动态面板模型中内生性问题的几种常见来源:
滞后因变量与个体效应的相关性: 在动态面板模型中,因变量的滞后项(\(y_{it-1}\))可能与个体固定效应(\(\mu_i\))相关联。个体效应代表了不同单位之间未被观测到的异质性,可能包括各单位的常数因素,如企业的管理水平、历史遗留问题等。这些未被观测的个体特征与滞后因变量相关联,导致滞后项和误差项之间存在内生性,进而使得估计的系数偏误。例如,在企业投资决策模型中,滞后投资的决策不仅受到过去投资的影响,还受到企业自身长期发展战略和未观察到的管理效应的影响,从而引入了内生性问题。
时间序列上的自相关性: 在面板数据中,多个时间点的观察值之间通常存在自相关性。这意味着当前的因变量值(\(y_{it}\))不仅与自变量有关,还受到过去观察值的影响。如果我们在模型中直接使用滞后因变量(\(y_{it-1}\))作为自变量,就可能出现滞后因变量和误差项之间的相关性,从而导致内生性。
动态面板数据的反馈效应: 动态面板模型中,滞后因变量不仅反映过去的影响,还可能受到当前和未来时间点的其他变量影响。换言之,当前的行为不仅受到过去行为的影响,也可能反过来影响未来的行为。比如,企业的历史投资决策(滞后因变量)可能与当前的市场环境或政策变化相关联,这种反馈效应进一步加剧了内生性问题。
由于上述原因,直接使用传统的普通最小二乘法(OLS)方法来估计动态面板模型中的滞后因变量系数会导致严重的偏误,无法得到有效的估计结果。因此,需要采用能够处理内生性的估计方法来克服这一问题。
为此,文献中通常采用 FD-GMM(差分广义矩估计)和 SYS-GMM(系统广义矩估计)等方法进行估计。通过引入工具变量(如滞后期的自变量或其他外生变量)来替代滞后因变量,从而消除因滞后因变量与个体效应之间的相关性。具体方法如 Stata 中的 xtabond
和 xtdpdsys
命令,能够有效地估计滞后因变量的系数,并解决内生性问题。
2.2 FD-GMM(差分广义矩估计)
差分广义矩估计(FD-GMM)方法通过对面板数据进行差分处理,消除个体效应 \(\mu_i\),使得滞后因变量与个体效应不再相关。差分后,数据的动差特性使得模型更容易估计。
估计过程
差分处理:为了消除单位固定效应 \(\mu_i\),我们对模型进行差分。原始的动态面板模型为:
\[ y_{it} = \alpha y_{it-1} + \beta x_{it} + \gamma Z_{it} + \mu_i + \lambda_t + \varepsilon_{it} \]
对上式进行一阶差分,得到:
\[ \Delta y_{it} = \alpha \Delta y_{it-1} + \beta \Delta x_{it} + \gamma \Delta Z_{it} + \Delta \varepsilon_{it} \]
其中,\(\Delta\) 表示时间差分,\(\Delta y_{it} = y_{it} - y_{it-1}\)。
工具变量:在差分后的模型中,滞后一期的因变量 \(\Delta y_{it-1}\) 是内生的,需要使用工具变量。我们使用滞后两期以上的自变量作为工具变量,如 \(\Delta y_{it-2}\) 和其他的控制变量滞后值。
估计:使用 GMM 方法估计模型的参数。具体而言,我们最小化以下目标函数:
\[ \hat{\theta} = \underset{\theta}{\text{argmin}} \left( \mathbf{g}(\theta)' W \mathbf{g}(\theta) \right) \]
其中:
- \(\mathbf{g}(\theta)\) 是模型的 moment 条件,即工具变量与误差项之间的矩条件;
- \(W\) 是权重矩阵,通常是经验协方差矩阵的逆;
- \(\theta\) 是需要估计的模型参数。
估计公式:对于差分后的模型,广义矩估计的估计方程为:
\[ \mathbf{g}(\theta) = \frac{1}{T} \sum_{t=2}^{T} (y_{it} - \alpha y_{it-1} - \beta x_{it} - \gamma Z_{it}) \]
该方程通过最小化误差项与工具变量之间的差异来进行估计。
在 Stata 中实现:
xtabond dependent_var independent_vars, lags(#) robust
dependent_var
:因变量;independent_vars
:自变量;lags(#)
:滞后期数;robust
:使用稳健标准误。
2.2 SYS-GMM(系统广义矩估计)
系统广义矩估计(SYS-GMM)方法是对差分广义矩估计的扩展,它不仅使用差分方程,还引入了水平方程来增强估计的效率。SYS-GMM 方法将差分方程与水平方程结合,利用更多的信息来估计模型。
估计过程
差分方程:与 FD-GMM 相同,首先对动态面板数据进行差分,消除个体效应 \(\mu_i\)。差分后的方程为:
\[ \Delta y_{it} = \alpha \Delta y_{it-1} + \beta \Delta x_{it} + \gamma \Delta Z_{it} + \Delta \varepsilon_{it} \]
水平方程:除了差分方程,SYS-GMM 还使用水平方程来进一步增强工具变量的使用。水平方程为:
\[ y_{it} = \alpha y_{it-1} + \beta x_{it} + \gamma Z_{it} + \mu_i + \lambda_t + \varepsilon_{it} \]
水平方程保留了个体效应 \(\mu_i\),但利用工具变量进行估计。这样,SYS-GMM 综合了差分信息和水平方程的水平信息,使得估计更加高效。
工具变量选择:在 SYS-GMM 中,工具变量不仅来自于差分后的数据,还来自于原始数据。常用的工具变量包括:
- 差分工具变量:如 \(\Delta y_{it-2}\) 和 \(\Delta x_{it-2}\);
- 水平方程的工具变量:如 \(y_{it-2}\)、\(x_{it-2}\)。
估计:与 FD-GMM 相同,使用 GMM 方法进行估计,通过最小化目标函数来估计模型参数:
\[ \hat{\theta} = \underset{\theta}{\text{argmin}} \left( \mathbf{g}(\theta)' W \mathbf{g}(\theta) \right) \]
目标函数中包含差分方程和水平方程的 moment 条件。
在 Stata 中实现:
xtdpdsys dependent_var independent_vars, varlist) robust lags(#) ivstyle(
ivstyle(varlist)
:指定工具变量;lags(#)
:指定滞后期数;robust
:使用稳健标准误。
2.3 假设检验
Hansen 检验:用于检验工具变量是否有效。Hansen 检验的零假设是工具变量是有效的。如果 p 值小于显著性水平(如 0.05),则说明工具变量可能存在问题,需要进一步调整。
AR(1) 和 AR(2) 检验:用于检验残差的自相关性。AR(1) 检验检验的是一阶自相关性,AR(2) 检验检验的是二阶自相关性。如果 AR(1) 的 p 值显著,而 AR(2) 的 p 值不显著,说明模型合适。
稳健标准误:在异方差性存在的情况下,使用稳健标准误进行调整,确保估计结果更加可靠。
3. Stata 实操
动态面板数据模型的估计主要有 4 个 Stata 命令,其中官方命令为 xtabond
、xtdpdsys
、xtdpd
,非官方命令为 xtabond2
,具体如下: - xtabond
用于 FD-GMM 估计; - xtdpdsys
用于 SYS-GMM 估计; - xtdpd
用于 FD-GMM 和 SYS-GMM 估计; - xtabond2
用于 FD-GMM 和 SYS-GMM 估计。
其中,xtabond2
可以提供由异方差调整后的 Hansen 统计量。
3.1 数据背景
接下来,我们将使用 Arellano and Bond (1991) 在研究企业雇佣员工数量的影响因素时的数据 abdata.dta
,来说明 GMM 相关命令的应用。其中,模型设定如下:
\[ n_{i t}=\alpha_{1} n_{i(t - 1)}+\alpha_{2} n_{i(t-2)}+\beta^{\prime}(L) x_{i t}+\lambda_{t}+\eta_{i}+v_{i t} \]
- \(n_{i t}\),企业 \(i\) 在第 \(t\) 年末雇佣员工数量的对数值;
- \(n_{i(t - 1)}\),企业 \(i\) 在第 \(t-1\) 年末雇佣员工数量的对数值;
- \((L) x_{i t}\),表示解释变量 \(x\) 及其滞后项,具体包括:
- \(w_{i,t}\) 和 \(w_{i,t-1}\) (即企业 \(i\) 在第 \(t\) 和 \(t-1\) 年实际工资的对数);
- \(k_{i,t}\) 、\(k_{i,t-1}\) 和 \(k_{i,t-2}\) (即企业 \(i\) 在第 \(t\)、\(t-1\) 和 \(t-2\) 年资本存量的对数);
- \(ys_{i,t}\)、\(ys_{i,t-1}\) 和 \(ys_{i,t-2}\) (即企业 \(i\) 所在行业在第 \(t\)、\(t-1\) 和 \(t-2\) 年总产出的对数);
- \(\lambda_{t}\) 为年份虚拟变量,其含义为总需求每年受到的外部冲击,也可表示为
i.yr1979-yr1984
。
3.2 FD-GMM 的实现
xtabond 命令
执行 FD-GMM 估计时,最常用的命令是 xtabond
,语法格式如下:
xtabond depvar [indepvars] [if] [in] [,options]
主要选项的含义为: - depvar
:被解释变量; - indepvars
:严格外生的解释变量; - noconstant
:无常数项; - lags(p)
:表示使用被解释变量 p 阶滞后值作为解释变量,默认一阶滞后 lags(1)
; - maxldep(q)
:表示最多使用 q 阶被解释变量的滞后值作为工具变量,默认使用所有可能的滞后值; - endogenous()
:内生解释变量,可使用多次; - twostep
:两阶段估计,可修正 Sargan 统计量; - inst()
:其他的工具变量 (除解释变量滞后项以外); - vce()
:默认为 vce(gmm)
,计算得到普通 GMM 标准误,vce(robust)
为异方差稳健稳健标准误。
本例中,可以使用命令估计劳动力方程:
webuse "abdata", clear // 调用数据
xtabond n L(0/1).w L(0/2).(k ys) ///
///
yr1980-yr1984, vce(robust)
lags(2) twostep est store Fdxtabond
// L(0/1).w 表示 w 的当期值与一阶滞后
xtdpd 命令
xtdpd
命令是 xtabond
的一般化,适用于更复杂的动态面板数据模型,尤其是当涉及多个内生变量时,可以通过 dgmmiv()
和 lgmmiv()
选项灵活地设定工具变量。语法格式如下:
if] [in] ,
xtdpd depvar [indepvars] [varlist [...]) [options] dgmmiv(
主要选项的含义为: - dgmmiv(varlist [, lagrange(flag [llag])])
:指定内生的被解释变量或者内生解释变量,以及其滞后项作为差分方程的 GMM 式工具变量。默认情况下,lagrange(flag)
为 2,表示从 2 阶滞后开始作为工具变量。例如,dgmmiv(y , lagrange(2 4))
会将变量 y
的 2-4 阶滞后项作为差分方程的工具变量。如果只指定 dgmmiv(y)
,则默认会使用 y
的 2-n 阶滞后项作为工具变量。 - lgmmiv(varlist [, lag(#)])
:指定一阶差分后的被解释变量或内生解释变量的滞后项作为水平方程的 GMM 工具变量。lag(#)
表示使用的滞后阶数,默认阶数为 1。例如,lgmmiv(y , lag(2))
会使用变量 y
一阶差分的 2 阶滞后项作为工具变量。 - iv(varlist [, nodifference])
:指定外生变量的一阶差分项作为差分方程的标准型工具变量。如果使用 nodifference
选项,则表示该外生变量将作为水平方程的标准型工具变量。这个选项帮助区分外生与内生变量,并使用适当的工具变量。 - div(varlist)
:为差分方程设定额外的标准型工具变量。用于增加模型中其他外生工具变量,改善估计的有效性。 - liv(varlist)
:为水平方程设定额外的标准型工具变量。与 div(varlist)
类似,但作用于水平方程。 - twostep
:此选项用于指定使用两步 GMM 估计方法,在第一步中使用普通的矩估计,而在第二步中利用第一步估计的结果来计算加权矩估计。两步法可以提高估计的效率,尤其是在工具变量多且异方差存在时。 - vce()
:与 xtabond
命令相同,用于指定误差的标准误估计类型。常见选项包括 vce(robust)
用于稳健标准误,vce(cluster clustvar)
用于群体聚类标准误等。
延续上面的例子,xtdpd
对应的命令为:
l(1/2).n L(0/1).w L(0/2).(k ys) ///
xtdpd n ///
yr1980-yr1984, w L(0/2).(k ys)) ///
dgmmiv(n) div(L(0/1).vce(robust)
div(yr1980-yr1984) twostep est store Fdxtdpd
xtabond2 命令
xtabond2
命令不是 Stata 官方命令,它是由 David Roodman 提供的一个扩展命令,用于估计动态面板数据模型。得益于其对 系统广义矩估计(SYS-GMM) 和 差分广义矩估计(FD-GMM) 的灵活实现,xtabond2
在实证分析中得到了广泛应用,尤其是在处理面板数据中的滞后因变量和内生性问题时。xtabond2
提供了更精细的控制,允许用户选择不同的工具变量,并进行多种诊断检验,帮助解决常见的内生性和工具变量的有效性问题。
xtabond2
命令语法格式:
varlist [if] [in] ///
xtabond2 depvar varlist [, laglimits(a b) collapse)]) ///
[, gmm(varlist [, equation()]) ///
iv(nocons twostep robust] nolevel
主要选项的含义为: - gmm(varlist [, laglimits(a b) collapse])
:指定内生变量的 GMM 工具变量。varlist
是内生变量的列表,laglimits(a b)
指定用于生成工具变量的滞后期范围,其中 a
和 b
分别表示滞后期的最小和最大值。例如,laglimits(2 4)
表示使用变量的第 2 到第 4 阶滞后作为工具变量。collapse
选项将数据转换为更简洁的形式(将每个变量的工具变量压缩为一列)。 - iv(varlist [, equation()])
:指定外生变量作为工具变量。varlist
是外生变量的列表,equation()
选项允许指定外生变量的工具变量在特定方程中使用(例如,面板数据中的水平方程或差分方程)。 - nolevel
:去除水平方程中的个体效应,即假定所有个体效应为零。这通常用于简化模型,尤其是当固定效应不影响估计结果时。 - nocons
:去除回归方程中的常数项。该选项在模型中不需要截距时使用,通常在进行差分后(已消除固定效应)时采用。 - twostep
:使用两步 GMM 估计方法。第一步进行矩估计,第二步使用第一步的估计结果加权来改进估计的效率。两步法通常用于在样本较小或工具变量较多的情况下提高估计效率。 - robust
:使用稳健标准误来调整估计结果的标准误差,以解决异方差问题。这个选项通常用于数据存在异方差或序列相关性时。
延续上面的例子,xtabond2
对应的命令为:
ssc install xtabond2, replace // 安装 xtabond2
*
l(1/2).n l(0/1).w l(0/2).(k ys) yr1980-yr1984, ///
xtabond2 n l.n) iv(l(0/1).w l(0/2).(k ys)) ///
gmm(///
iv(yr1980-yr1984) robust
nolevel twostep est store Fdxtabond2
3.3 SYS-GMM 的实现
采用 xtdpdsys
命令进行 SYS-GMM 估计
xtdpdsys
命令语法格式:
if] [in] [,options] xtdpdsys depvar [indepvars] [
主要选项的含义为: - noconstant
:无常数项; - lags(p)
:表示使用被解释变量 p 阶滞后值作为解释变量,默认一阶滞后; - maxldep(q)
:表示最多使用 q 阶被解释变量的滞后值作为工具变量,,默认使用所有可能的滞后值; - pre()
:指定前定变量; - endogenous ()
:指定内生解释变量,可使用多次; - twostep
和 vce()
:与 xtabond
命令相同。
xtdpdsys
估计命令:
w L(0/2).(k ys) yr1980-yr1984, ///
xtdpdsys n L(0/1).vce(robust)
lags(2) twostep est store Sysxtdpdsys
采用 xtdpd
命令进行 SYS-GMM 估计
xtdpd
估计命令:
w L(0/2).(k ys) yr1980-yr1984, ///
xtdpd n L(1/2).n L(0/1).w L(0/2).(k ys)) ///
dgmmiv(n) lgmmiv(n) div(L(0/1).vce(robust)
div(yr1980-yr1984) twostep est store Sysxtdpd
采用 xtabond2
命令进行 SYS-GMM 估计
xtabond2
估计命令:
l(1/2).n l(0/1).w l(0/2).(k ys) yr1980-yr1984, ///
xtabond2 n l.n) iv(l(0/1).w l(0/2).(k ys), eq(diff)) ///
gmm(eq(diff)) twostep robust
iv(yr1980-yr1984,est store Sysxtabond2
3.2.4 模型估计结果比较
local mm "Fdxtabond Fdxtdpd Fdxtabond2 Sysxtdpdsys Sysxtdpd Sysxtabond2"
`mm', mtitle(`mm') compress ///
esttab star(* 0.1 ** 0.05 *** 0.01) ///
b(%10.3f) nogap
-----------------------------------------------------------------------------------
(1) (2) (3) (4) (5) (6) s Sysxtdpd Sysxtab~2
Fdxtabond Fdxtdpd Fdxtabo~2 Sysxtdp~
-----------------------------------------------------------------------------------
L.n 0.656*** 0.656*** 0.656*** 0.977*** 0.977*** 1.057***
(3.34) (3.34) (7.29) (6.89) (6.89) (12.83)
L2.n -0.073 -0.073 -0.073*** -0.084** -0.084** -0.091**
(-1.61) (-1.61) (-2.70) (-2.00) (-2.00) (-2.05) w -0.513*** -0.513*** -0.513*** -0.563*** -0.563*** -0.526***
(-3.43) (-3.43) (-9.55) (-3.73) (-3.73) (-2.98) w 0.329 0.329 0.329*** 0.567*** 0.567*** 0.558**
L.
(1.59) (1.59) (3.42) (2.67) (2.67) (2.41) k 0.269*** 0.269*** 0.269*** 0.285*** 0.285*** 0.274***
(3.89) (3.89) (6.15) (4.26) (4.26) (4.39) k 0.022 0.022 0.022 -0.088 -0.088 -0.108
L.
(0.26) (0.26) (0.43) (-1.01) (-1.01) (-1.32) k -0.041 -0.041 -0.041 -0.096** -0.096** -0.114***
L2.
(-0.96) (-0.96) (-1.58) (-2.22) (-2.22) (-2.88)
ys 0.592*** 0.592*** 0.592*** 0.614*** 0.614*** 0.642***
(3.56) (3.56) (5.13) (3.45) (3.45) (3.73)
L.ys -0.572** -0.572** -0.572*** -0.765*** -0.765*** -0.756***
(-2.23) (-2.23) (-4.10) (-3.10) (-3.10) (-2.82)
L2.ys 0.117 0.117 0.117 0.114 0.114 0.127
(0.73) (0.73) (1.03) (0.66) (0.66) (0.67)
yr1980 0.009 0.009 0.009 0.009 0.009 0.017
(0.65) (0.65) (0.86) (0.56) (0.56) (1.14)
yr1981 -0.035 -0.035 -0.035* -0.025 -0.025 -0.017
(-1.27) (-1.27) (-1.75) (-0.84) (-0.84) (-0.59)
yr1982 -0.043 -0.043 -0.043** -0.030 -0.030 -0.019
(-1.49) (-1.49) (-2.05) (-0.93) (-0.93) (-0.70)
yr1983 -0.028 -0.028 -0.028 -0.010 -0.010 0.007
(-0.85) (-0.85) (-1.29) (-0.27) (-0.27) (0.24)
yr1984 -0.034 -0.034 -0.034 -0.021 -0.021 -0.008
(-1.03) (-1.03) (-1.50) (-0.62) (-0.62) (-0.28) _cons 0.494 0.494 0.325 0.325 -0.103
(0.74) (0.74) (0.49) (0.49) (-0.14)
-----------------------------------------------------------------------------------N 611 751 611 751 751 751
-----------------------------------------------------------------------------------
statistics in parentheses
t p<0.1, ** p<0.05, *** p<0.01 *
由上表可以看出,在 FD-GMM 估计中,雇佣员工数量对数的一阶滞后项的系数在 0.6 左右,而在 SYS-GMM 估计中的系数为 0.9 左右,同时,SYS-GMM 估计结果整体偏高,并且各个系数显著性水平也更高。
对于 FD-GMM 估计,三种命令估计的结果相同,因此在做 FD-GMM 时,选择三者之中任意命令对结果没有影响,而对于 SYS-GMM 估计,xtdpdsys
和 xtdpd
的估计结果一致,而 xtabond2
估计结果与前面两个命令有差异。
4. 常见问题
关于动态面板数据模型 (dynamic panel data,DPD),我们常常会遇到如下问题:
- 如何在一阶差分 GMM 和系统 GMM 间选择;
- 当解释变量中含有内生变量时,应该如何对模型进行估计;
- 干扰项序列相关检验无法通过怎么办;
- 过度识别检验无法通过怎么办;
- 大 \(T\) 小 \(N\) 型面板能否用 GMM 进行估计。
4.1 FD-GMM 还是 SYS-GMM?
需要强调的是,无论 一阶差分 GMM (FD-GMM) 还是系统 GMM (SYS-GMM),模型设定是不受影响的,并且二者仅在计量估计方法上不一样,即矩条件不同。SYS-GMM 使用的矩条件多,利用的信息也多,估计也更有效率,但其受到的限制也多,如假定被解释变量的一阶差分项与个体效应变量不相关。更多细节,请参考「连享会」主页专题「IV-GMM」。
那么,在估计模型时该选择哪种估计方法呢?
Bond (2002) 认为当被解释变量的一阶滞后项系数 \(\rho\) 不是很大时,如 \(\rho < 0.8\),FD-GMM 估计结果较好,而当 \(\rho > 0.8\) 时,SYS-GMM 较好。
此外,若对性别、户口、行业等不随时间变化变量感兴趣,则必须使用 SYS-GMM 估计。
4.2 解释变量中能否包含内生变量?
考虑如下模型:
\[ y_{it} = a_0 y_{i t-1} + a_1 x_{it} + a_2 k_{it} + u_i + v_{i t-1} \]
其中,\(y_{i t-1}\) 是一个典型的内生变量,这里用 \(L.(2/.)y_{it}\) 作为 \(D.y_{it-1}\) 的工具变量,假设 \(k_{it}\) 为内生解释变量,使用其二阶及更高阶的滞后项 \(L.(2/.)k_{it}\)作为工具变量 。
具体命令使用: - xtabond
: endogenous()
选项来设定内生解释变量,在本例中为 endogenous(k)
,如果限定使用 \(k_{it}\) 工具变量的个数,比如只使用二阶和三阶滞后项,则可以设定为 endogenous(k, lag(0 2))
; 如果内生变量为 \(k_{it}\) 的滞后一期,则可以设定为 endogenous(k, lag(1 2))
,此时工具变量为滞后项\(k_{i t-1}\)的二、三阶滞后项 - xtdpd
:dgmmiv()
和 lgmmiv()
选项来设定内生变量 (包括被解释变量和解释变量),当使用 FD-GMM 估计时,设定为 dgmmiv(y k)
,而使用SYS-GMM估计时,则设定为dgmmiv(y k) lgmmiv(y k)
- xtabond2
:gmm()
选项来设定内生变量 (包括被解释变量和解释变量),对于内生被解释变量设定为 gmm(l.y)
或者 gmm(y, lag(2 .))
,为将解释变量的二阶及所有高阶滞后项作为工具变量;对于内生解释变量设定为gmm(k)
,其含义是将解释变量的一阶及所有高阶滞后项作为工具变量,若设定成gmm(k, lag(2 3))
则为将解释变量的二阶和三阶滞后项作为工具变量 - xtdpdsys
:endogenous()
选项来设定内生解释变量,设定为endogenous(k)
,表示将内生解释变量 k 的二阶及所有高阶滞后项作为工具变量;设定为endogenous(k lag(0, 2))
,表示将内生解释变量 k 的二阶和三阶滞后项作为工具变量,其中 0 为变量 k 的当期值作为内生变量,2 表示内生变量 k 的滞后 2 阶和 3 阶项作为工具变量; 若设定为 endogenous(k, lag(1, 3))
表示将内生解释变量 L.k ( k 的一阶滞后项) 的二、三、四阶滞后项 (即 L(2/4).L.k) 作为工具变量
k 为内生变量,k 的设定如下
* 假设: 资本存量
webuse "abdata", clear
xtabond n L(0/1).w L(0/2).ys yr1980-yr1984, ///
k) twostep vce(robust)
lags(2) endogenous(
xtabond n L(0/1).w L(0/2).ys yr1980-yr1984, ///
k, lag(0, 2)) twostep vce(robust)
lags(2) endogenous(// 限定内生解释变量工具变量的滞后阶数
xtabond n L(0/1).w L(0/2).ys yr1980-yr1984, ///
k, lag(1, 2)) twostep vce(robust)
lags(2) endogenous(// 设定滞后项的内生解释变量
w L(0/2).ys k yr1980-yr1984, ///
xtdpd n L(1/2).n L(0/1).k) div(L(0/1).w L(0/2).ys) ///
dgmmiv(n vce(robust)
div(yr1980-yr1984) twostep // FD-GMM 估计
w L(0/2).ys k yr1980-yr1984, ///
xtdpd n L(1/2).n L(0/1).k) lgmmiv(n k) div(year yr1979-yr1984) ///
dgmmiv(n nocons hascons vce(robust)
// SYS-GMM 估计
l(1/2).n l(0/1).w l(0/2).ys k yr1980-yr1984, ///
xtabond2 n l.n k) iv(l(0/1).w l(0/2).ys) ///
gmm(robust
iv(yr1980-yr1984) nolevel twostep
l(1/2).n l(0/1).w l(0/2).ys k yr1980-yr1984, ///
xtabond2 n l.n) gmm(k, lag(2 3)) iv(l(0/1).w l(0/2).ys) ///
gmm(robust
iv(yr1980-yr1984) nolevel twostep // 限定内生解释变量工具变量的滞后阶数
w L(0/2).ys k yr1980-yr1984, ///
xtdpdsys n L(0/1).k) twostep vce(robust)
lags(2) endog(// SYS-GMM 估计
w L(0/2).ys k yr1980-yr1984, ///
xtdpdsys n L(0/1).k, lag(0, 2)) twostep vce(robust)
lags(2) endog(// 限定内生解释变量工具变量的滞后阶数
w L(0/2).ys k yr1980-yr1984, ///
xtdpdsys n L(0/1).k, lag(1, 3)) twostep vce(robust)
lags(2) endogenous(// 设定滞后项的内生解释变量
4.3 干扰项序列相关检验无法通过怎么办?
Arellano and Bond (1991) 估计工具变量的设定关键点:
\[ E\left(\Delta y_{i(t-j)} \Delta \varepsilon_{i t}\right)=0 \quad j \geq 2 \]
换言之,FD-GMM 和 SYS-GMM 成立的前提是扰动项 {\({\varepsilon_{i,t}}\)} 不存在序列相关,否则就会导致内生性问题。因此,需要对扰动项序列相关进行检验,具体如下:
原假设:扰动项不存在序列相关;
- “扰动项的一阶差分” 存在自相关:
\[ \begin{aligned} \operatorname{Cov}\left(\Delta \varepsilon_{i t}, \Delta \varepsilon_{i, t-1}\right) &=\operatorname{Cov}\left(\varepsilon_{i t}-\varepsilon_{i, t-1}, \varepsilon_{i, t-1}-\varepsilon_{i, t-2}\right) \\ &=\operatorname{Cov}\left(\varepsilon_{i, t-1},-\varepsilon_{i, t-1}\right) \\ &=-\operatorname{Var}\left(\varepsilon_{i, t-1}\right) \neq 0 \end{aligned} \]
- 扰动项的差分不存在二阶或更高的自相关:
\[ \operatorname{Cov}\left(\Delta \varepsilon_{i t}, \Delta \varepsilon_{i, t-k}\right)=0, k \geqslant 2 \]
故可通过检验扰动项的差分是否存在二阶 (或更高阶) 的自相关来检验原假设。
Stata 命令为 estat abond
。
qui xtabond n L(0/1).w L(0/2).(k ys) yr1980-yr1984, ///
vce(robust)
lags(2) twostep estat abond
test for zero autocorrelation in first-differenced errors
Arellano-Bond
+-----------------------+
|Order | z Prob > z|
|------+----------------|
| 1 |-2.1783 0.0294 |
| 2 |-.30351 0.7615 |
+-----------------------+ H0: no autocorrelation
可以看出,在 5% 的显著性水平下,扰动项的差分存在一阶自相关,但不存在二阶自相关,故不拒绝原假设。
如果无法通过序列相关检验,主要原因可能是干扰项中包含了一些序列相关特征较为明显的变量。此时,我们可以通过增加解释变量,以使干扰项变得更「干净」。具体设定如下:
- 加入时间虚拟变量;
- 加入部分解释变量的滞后项 (要有一定的理论依据);
- 加入被解释变量的滞后项,可以通过
xtabond
命令的lag(#)
选项来设定。
需要特别说明的是,序列相关检验和过度识别检验往往要同步进行。因为,如果选择的工具变量不妥 (表现为过度识别检验无法通过),序列相关检验也就没有了根基。
4.4 过度识别检验无法通过怎么办?
在工具变量大于内生变量个数时,需要进行过度识别检验。基本原理是检验工具变量是否是与干扰项相关,即工具变量是否为外生变量。具体如下:
原假设:所有工具变量都是外生;
方法:在
xtabond
命令以后,使用estat sargan
命令。
quietly xtabond n L(0/1).w L(0/2).(k ys) ///
// 不使用 VCE(robust)
yr1980-yr1984, lags(2)
estat sargan // 过度识别检验
test of overidentifying restrictions
Sargan
H0: overidentifying restrictions are validchi2(25) = 61.26444
chi2 = 0.0001 Prob >
可以看出,该结果拒绝了原假设,即认为存在工具变量和干扰项是相关。 但是 Arellano and Bond (1991) 指出,当干扰项存在异方差时, Sargan 检验倾向于过度拒绝原假设,因此得到的结论并不可信。建议采用两阶段估计,再执行 Sargan 检验比较稳妥。
quietly xtabond n L(0/1).w L(0/2).(k ys) ///
// 不使用 VCE(robust)
yr1980-yr1984, twostep lags(2) estat sargan // 使用两阶段估计后的过度识别检验
test of overidentifying restrictions
Sargan
H0: overidentifying restrictions are validchi2(25) = 29.34445
chi2 = 0.2498 Prob >
可以看出,结果没有拒绝原假设,即工具变量与扰动项不相关。
实际上,Sargan 检验是联合检验:(1) 模型的设定正确 (2) 工具变量合理。因此,若拒绝原假设,则说明前面两个假设至少有一个存在问题。此时,应该先考虑模型的设定是否有问题,进而分析工具变量的设定是否合理。
关于工具变量,通常使用 \(y_{t-s} (s\geq 2)\) 作为 \(\Delta y_{it-1}\) 的工具变量,但当 \(T\) 较大时,就会有很多个工具变量。显然,随着 \(s\) 的增加,\(\rho_s = corr(\Delta y_{it-1}, y_{t-s})\) 会越来越小。一般而言,当 \(s \geq 6\) 以后,对应的工具变量很可能是弱工具变量,即 \(y_{t-7}\) 与 \(\Delta y_{it-1}\) 的相关性很低。
通过减少工具变量的使用,一定程度上可以避免弱工具变量问题。在 xtabond
命令中,可以使用 maxldep(#)
来限制工具变量的最大滞后阶数,进而达到限制工具变量总数的目的。例如,xtabond y x, maxldep(5)
意味着最多只用五个滞后项 (注意:不是五阶滞后),即用 \(y_{t-2}, \cdots y_{t-6}\) 作为 \(\Delta y_{it-1}\) 的工具变量。
未使用 maxldep()
选项,GMM 式工具变量为 L(2/.).n,具体如下:
xtabond n L(0/1).w L(0/2).(k ys) yr1980-yr1984, ///
twostep lags(2)
for differenced equation
Instruments type: L(2/.).n
GMM-w LD.w D.k LD.k L2D.k D.ys LD.ys L2D.ys D.yr1980
Standard: D. D.yr1981 D.yr1982 D.yr1983 D.yr1984
使用 maxldep()
选项,GMM 式工具变量为 L(2/6).n,具体如下:
xtabond n L(0/1).w L(0/2).(k ys) yr1980-yr1984, ///
twostep lags(2) maxldep(5)
for differenced equation
Instruments type: L(2/6).n
GMM-w LD.w D.k LD.k L2D.k D.ys LD.ys L2D.ys D.yr1980
Standard: D. D.yr1981 D.yr1982 D.yr1983 D.yr1984
使用其他动态面板回归命令的方法: - xtdpd
命令:使用 dgmmiv(n, lagrange(2 5))
,将被解释变量的 2-5 阶滞后项作为 \(\Delta n_{it-1}\) 的工具变量; - xtabond2
命令:使用 gmm(l.n, laglimits(2 5) collapse))
,laglimits()
限制滞后项的阶数,collapse
系统自动删减工具变量; - xtdpdsys
命令:使用 maxldep(5)
,表示最多使用被解释变量的 5 阶滞后作为工具变量。
4.5 大 T 小 N 型面板数据如何处理?
上面介绍的 FD-GMM 和 SYS-GMM 适用于 大 N 小 T 的短面板数据,当研究样本为长面板数据 (大 T 小 N) 时,比如省级面板数据,GMM 估计可能不是最有效的。根据 Bruno(2005) 的做法,基于 Bootstrap 偏差纠正的 LSDV 估计可以在一定程度上克服 N 较小的问题。
下面,将通过一个模拟例子,来对 FD-GMM、SYS-GMM 和 bias corrected LSDV 的估计效果进行比较。
数据生成过程 (DPG)
该面板数据包含 10 个个体的 60 期数据,即 $ N = 10$, \(T = 60\),变量具体构造如下:
\[ y_{it} = 0.9y_{i t-1}+0.8x_{i,t}+u_i+u_t+e_{i t-1} \]
\[ corr(x_{it}, u_i) \neq 0 \]
\[ x_{it} = 0.2x_{i t-1} + v_{i t} \]
对应 Stata 命令:
clear all
help xtarsim // 查看 xtarsim 命令的帮助文档
y x eta, ///
xtarsim gamma(0.9) beta(0.8) rho(0.2) ///
n(10) t(60) corr 1) sn(9) seed(1234) one(
模型估计
用 xtabond
和 xtdpdsys
命令进行 FD-GMM 和 SYS-GMM 估计:
xtabond y x
est store FdGMM
y x
xtdpdsys est store SysGMM
用 xtlsdvc
命令进行 bias corrected LSDV 估计:
help xtlsdvc // 外部命令,需要下载安装词命令
y x, initial(ab) vcov(50)
xtlsdvc // vcov(50) 计算标准误、显著性,需要较长等待时间
// initial(ab) 表示选择 Arellano 和 Bond (1991)
提出的 FD-GMM 估计为偏差纠正的初始量est store LSDVab
y x, initial(bb) vcov(50)
xtlsdvc // vcov(50) 计算标准误、显著性,需要较长等待时间
// initial(bb) 表示选择 Blundell 和 Bond (1998)
提出的 Sys-GMM 估计为偏差纠正的初始量est store LSDVbb
local mm "FdGMM SysGMM LSDVab LSDVbb"
`mm', mtitle(`mm') compress ///
esttab star(* 0.1 ** 0.05 *** 0.01)
估计结果为:
-------------------------------------------------------
(1) (2) (3) (4)
FdGMM SysGMM LSDVab LSDVbb
-------------------------------------------------------y 0.874*** 0.870*** 0.894*** 0.896***
L.
(50.50) (55.79) (54.83) (55.32)
x 0.842*** 0.863*** 0.836*** 0.837***
(19.20) (20.95) (21.71) (21.75)
_cons 0.105** 0.109**
(2.33) (2.42)
-------------------------------------------------------N 580 590 590 590
-------------------------------------------------------statistics in parentheses
t p<0.1, ** p<0.05, *** p<0.01 *
把数据模拟中的 \(y_{i t-1}\) 的系数由 0.9 变为 0.4,重复上述过程,再对估计结果进行比较。
clear all
y x eta, n(10) t(60) gamma(0.4) beta(0.8) ///
xtarsim corr 1) sn(9) seed(1234)
rho(0.2) one(xtabond y x
est store FdGMM
y x
xtdpdsys est store SysGMM
y x, initial(ab) vcov(50)
xtlsdvc est store LSDVab
y x, initial(bb) vcov(50)
xtlsdvc est store LSDVbb
local mm "FdGMM SysGMM LSDVab LSDVbb"
`mm', mtitle(`mm') compress ///
esttab star(* 0.1 ** 0.05 *** 0.01)
估计结果为:
--------------------------------------------------------
(1) (2) (3) (4)
FdGMM SysGMM LSDVab LSDVbb
--------------------------------------------------------y 0.393*** 0.390*** 0.396*** 0.396***
L.
(27.72) (32.09) (26.65) (26.17)
x 0.812*** 0.812*** 0.812*** 0.812***
(58.10) (61.98) (67.61) (66.06)
_cons 0.589*** 0.593***
(13.03) (13.28)
--------------------------------------------------------N 580 590 590 590
--------------------------------------------------------statistics in parentheses
t p<0.1, ** p<0.05, *** p<0.01 *
可以看出,当 \(y_{i t-1}\) 的系数为 0.4, XTLSDVC
的优势非常有限;而当 \(y_{i t-1}\) 的系数为 0.9 时,XTLSDVC
的优势比较明显。
5. 参考文献
Arellano, M., & Bond, S. (1991). Some tests of specification for panel data: Monte Carlo evidence and an application to employment equations. The Review of Economic Studies, 58(2), 277-297. Link, PDF, Google
Blundell, R. W., & Bond, S. R. (1998). Initial conditions and moment restrictions in dynamic panel data models. Journal of Econometrics, 87(1), 115-143. Link, PDF, Google
Bond, S. (2002). Dynamic panel data models: A guide to micro data methods and practice. Portuguese Economic Journal, 1(2), 141-162. Link, PDF, Google
Bruno, G. S. F. (2005). Approximating the bias of the LSDV estimator for dynamic unbalanced panel data models. Economics Letters, 87(3), 361–366. Link, PDF, Google
Wooldridge, J. M. (2010). Econometric Analysis of Cross Section and Panel Data. MIT Press.
6. 相关推文
Note:产生如下推文列表的 Stata 命令为:
lianxh 动态面板, md0 nocat
安装最新版lianxh
命令:
ssc install lianxh, replace
- 万源星, 2020, xtpdyn:动态面板Probit模型及Stata实现, 连享会 No.44.
- 严雅雪, 2020, Stata: 动态面板门槛模型, 连享会 No.71.
- 刘川钰, 2023, xtusreg:时间间隔不等情况下的动态面板估计, 连享会 No.1150.
- 吕可夫, 2021, Stata:如何估计包含非时变变量的动态面板模型-xtseqreg, 连享会 No.827.
- 姚旭生, 2022, Stata:动态面板数据模型与xtabond2应用, 连享会 No.867.
- 李琼琼, 2020, Stata实操陷阱:动态面板数据模型, 连享会 No.470.
- 谢雁翔, 2021, xtdpdgmm:线性动态面板模型的GMM估计及Stata实现, 连享会 No.1105.
- 连享会, 2021, FAQs答疑-2021寒假-Stata高级班-Day1-连玉君-动态面板, 连享会 No.513.
- 连享会, 2024, 有奖问卷:2024 Stata 暑期高级班备选主题, 连享会 No.1385.
- 连玉君, 2021, 连享会课程:动态面板数据模型, 连享会 No.25.
- 陈汉青, 2021, Stata:动态面板数据模型OLS估计的偏差, 连享会 No.531.
7. Appendix 本文涉及的 Stata 代码
* 数据导入
webuse "abdata", clear
* FD-GMM 估计xtabond n L(0/1).w L(0/2).(k ys) yr1980-yr1984, ///
vce(robust)
lags(2) twostep est store Fdxtabond
l(1/2).n L(0/1).w L(0/2).(k ys) yr1980-yr1984, ///
xtdpd n w L(0/2).(k ys)) ///
dgmmiv(n) div(L(0/1).vce(robust)
div(yr1980-yr1984) twostep est store Fdxtdpd
ssc install xtabond2, replace // xtabond2 为外部命令
* l(1/2).n l(0/1).w l(0/2).(k ys) yr1980-yr1984, ///
xtabond2 n l.n) iv(l(0/1).w L(0/2).(k ys)) ///
gmm(///
iv(yr1980-yr1984) robust
nolevel twostep est store Fdxtabond2
* SYS-GMM 估计w L(0/2).(k ys) yr1980-yr1984, ///
xtdpdsys n L(0/1).vce(robust)
lags(2) twostep est store Sysxtdpdsys
w L(0/2).(k ys) yr1980-yr1984, ///
xtdpd n L(1/2).n L(0/1).w L(0/2).(k ys)) ///
dgmmiv(n) lgmmiv(n) div(L(0/1).vce(robust)
div(yr1980-yr1984) twostep est store Sysxtdpd
l(1/2).n l(0/1).w l(0/2).(k ys) yr1980-yr1984, ///
xtabond2 n l.n) iv(l(0/1).w l(0/2).(k ys), eq(diff)) ///
gmm(eq(diff)) twostep robust
iv(yr1980-yr1984, est store Sysxtabond2
* FD-GMM 与 SYS-GMM 结果呈现local mm "Fdxtabond Fdxtdpd Fdxtabond2 Sysxtdpdsys Sysxtdpd Sysxtabond2"
`mm', mtitle(`mm') compress ///
esttab star(* 0.1 ** 0.05 *** 0.01) b(%10.3f) nogap
* 含内生变量的 GMM 估计xtabond n L(0/1).w L(0/2).ys yr1980-yr1984, ///
k) twostep vce(robust)
lags(2) endogenous(
xtabond n L(0/1).w L(0/2).ys yr1980-yr1984, ///
k, lag(0, 2)) twostep vce(robust)
lags(2) endogenous(
xtabond n L(0/1).w L(0/2).ys yr1980-yr1984, ///
k, lag(1, 2)) twostep vce(robust)
lags(2) endogenous(
w L(0/2).ys k yr1980-yr1984, ///
xtdpd n L(1/2).n L(0/1).k) div(L(0/1).w L(0/2).ys) ///
dgmmiv(n vce(robust)
div(yr1980-yr1984) twostep
w L(0/2).ys k yr1980-yr1984, ///
xtdpd n L(1/2).n L(0/1).k) lgmmiv(n k) div(year yr1979-yr1984) ///
dgmmiv(n nocons hascons vce(robust)
l(1/2).n l(0/1).w l(0/2).ys k yr1980-yr1984, ///
xtabond2 n l.n k) iv(l(0/1).w L(0/2).ys) ///
gmm(robust
iv(yr1980-yr1984) nolevel twostep
w L(0/2).ys k yr1980-yr1984, ///
xtdpdsys n L(0/1).k) twostep vce(robust)
lags(2) endog(
* 序列相关检验xtabond n L(0/1).w L(0/2).(k ys) yr1980-yr1984, ///
vce(robust)
lags(2) twostep estat abond
* 过度识别检验quietly xtabond n L(0/1).w L(0/2).(k ys) yr1980-yr1984, ///
lags(2)estat sargan
quietly xtabond n L(0/1).w L(0/2).(k ys) yr1980-yr1984, ///
twostep lags(2)estat sargan
N 数据
* 模拟大 T 小 clear all
help xtarsim
y x eta, n(10) t(60) gamma(0.9) beta(0.8) rho(0.2) ///
xtarsim corr 1) sn(9) seed(1234)
one(
xtabond y x
est store FdGMM
y x
xtdpdsys est store SysGMM
help xtlsdvc
y x, initial(ab) vcov(50)
xtlsdvc est store LSDVab
y x, initial(bb) vcov(50)
xtlsdvc est store LSDVbb
local mm "FdGMM SysGMM LSDVab LSDVbb"
`mm', mtitle(`mm') compress ///
esttab star(* 0.1 ** 0.05 *** 0.01)
clear all
y x eta, n(10) t(60) gamma(0.4) ///
xtarsim ///
beta(0.8) rho(0.2) corr 1) sn(9) seed(1234)
one(
xtabond y x
est store FdGMM
y x
xtdpdsys est store SysGMM
y x, initial(ab) vcov(50)
xtlsdvc est store LSDVab
y x, initial(bb) vcov(50)
xtlsdvc est store LSDVbb
local mm "FdGMM SysGMM LSDVab LSDVbb"
`mm', mtitle(`mm') compress ///
esttab star(* 0.1 ** 0.05 *** 0.01)