Stata命令大全 面板数据计量分析与软件实现
说明:以下do文件相当一部分内容来自于中山大学连玉君STATA教程,感谢他的贡献。本人做了一定的修改与筛选。
*----------面板数据模型 * 1.静态面板模型:FE 和RE
* 2.模型选择:FE vs POLS, RE vs POLS, FE vs RE (pols混合最小二乘估计) * 3.异方差、序列相关和截面相关检验 * 4.动态面板模型(DID-GMM,SYS-GMM) * 5.面板随机前沿模型
* 6.面板协整分析(FMOLS,DOLS)
*** 说明:1-5均用STATA软件实现, 6用GAUSS软件实现。
* 生产效率分析(尤其指TFP):数据包络分析(DEA)与随机前沿分析(SFA) *** 说明:DEA由DEAP2.1软件实现,SFA由Frontier4.1实现,尤其后者,侧重于比较C-D与Translog生产函数,一步法与两步法的区别。常应用于地区经济差异、FDI溢出效应(Spillovers Effect)、工业行业效率状况等。
* 空间计量分析:SLM模型与SEM模型
*说明:STATA与Matlab结合使用。常应用于空间溢出效应(R&D)、财政分权、地方政府公共行为等。
* ---------------------------------
* -------- 一、常用的数据处理与作图 ----------- * ---------------------------------
* 指定面板格式
xtset id year (id为截面名称,year为时间名称) xtdes /*数据特征*/
xtsum logy h /*数据统计特征*/ sum logy h /*数据统计特征*/
*添加标签或更改变量名 label var h \人力资本\
1
rename h hum
*排序
sort id year /*是以STATA面板数据格式出现*/ sort year id /*是以DEA格式出现*/
*删除个别年份或省份 drop if year<1992
drop if id==2 /*注意用==*/
*如何得到连续year或id编号(当完成上述操作时,year或id就不连续,为形成panel格式,需要用egen命令) egen year_new=group(year) xtset id year_new
**保留变量或保留观测值 keep inv /*删除变量*/ **或
keep if year==2000
**排序
sort id year /*是以STATA面板数据格式出现 sort year id /*是以DEA格式出现
**长数据和宽数据的转换 *长>>>宽数据
reshape wide logy,i(id) j(year)
*宽>>>长数据
reshape logy,i(id) j(year)
**追加数据(用于面板数据和时间序列)
xtset id year *或者 xtdes
2
tsappend,add(5) /表示在每个省份再追加5年,用于面板数据/
tsset *或者 tsdes
.tsappend,add(8) /表示追加8年,用于时间序列/
*方差分解,比如三个变量Y,X,Z都是面板格式的数据,且满足Y=X+Z,求方差var(Y),协方差Cov(X,Y)和Cov(Z,Y) bysort year:corr Y X Z,cov
**生产虚拟变量 *生成年份虚拟变量 tab year,gen(yr) *生成省份虚拟变量 tab id,gen(dum)
**生成滞后项和差分项 xtset id year
gen ylag=l.y /*产生一阶滞后项),同样可产生二阶滞后项*/ gen ylag2=L2.y
gen dy=D.y /*产生差分项*/
*求出各省2000年以前的open inv的平均增长率 collapse (mean) open inv if year<2000,by(id)
变量排序,当变量太多,按规律排列。可用命令 aorder 或者
order fdi open insti
3
*----------------- * 二、静态面板模型 *-----------------
*--------- 简介 -----------
* 面板数据的结构(兼具截面资料和时间序列资料的特征) use product.dta, clear browse
xtset id year xtdes
* --------------------------------- * -------- 固定效应模型 ----------- * ---------------------------------
* 实质上就是在传统的线性回归模型中加入 N-1 个虚拟变量, * 使得每个截面都有自己的截距项,
* 截距项的不同反映了个体的某些不随时间改变的特征 *
* 例如: lny = a_i + b1*lnK + b2*lnL + e_it * 考虑中国29个省份的C-D生产函数
*******-------画图------* *散点图+线性拟合直线
twoway (scatter logy h) (lfit logy h)
*散点图+二次拟合曲线
twoway (scatter logy h) (qfit logy h)
*散点图+线性拟合直线+置信区间
twoway (scatter logy h) (lfit logy h) (lfitci logy h)
4
*按不同个体画出散点图和拟合线,可以以做出fe vs re的初判断*
twoway (scatter logy h if id<4) (lfit logy h if id<4) (lfit logy h if id==1) (lfit logy h if id==2) (lfit logy h if id==3)
*按不同个体画散点图,so beautiful!!!*
graph twoway scatter logy h if id==1 || scatter logy h if
id==2,msymbol(Sh) || scatter logy h if id==3,msymbol(T) || scatter logy h if id==4,msymbol(d) || , legend(position(11) ring(0) label(1 \北京\label(2 \天津\河北\山西\
**每个省份logy与h的散点图,并将各个图形合并 twoway scatter logy h,by(id) ylabel(,format(%3.0f)) xlabel(,format(%3.0f))
*每个个体的时间趋势图*
xtline h if id<11,overlay legend(on)
* 一个例子:中国29个省份的C-D生产函数的估计 tab id, gen(dum) list
* 回归分析
reg logy logk logl dum*, est store m_ols
xtreg logy logk logl, fe est store m_fe
est table m_ols m_fe, b(%6.3f) star(0.1 0.05 0.01)
* Wald 检验
test logk=logl=0 test logk=logl
* stata的估计方法解析
* 目的:如果截面的个数非常多,那么采用虚拟变量的方式运算量过大 * 因此,要寻求合理的方式去除掉个体效应
* 因为,我们关注的是 x 的系数,而非每个截面的截距项 * 处理方法: *
5
* y_it = u_i + x_it*b + e_it (1)
* ym_i = u_i + xm_i*b + em_i (2) 组内平均 * ym = um + xm*b + em (3) 样本平均 * (1) - (2), 可得: * (y_it - ym_i) = (x_it - xm_i)*b + (e_it - em_i) (4) /*within estimator*/ * (4)+(3), 可得:
* (y_it-ym_i+ym) = um + (x_it-xm_i+xm)*b + (e_it-em_i+em) * 可重新表示为:
* Y_it = a_0 + X_it*b + E_it
* 对该模型执行 OLS 估计,即可得到 b 的无偏估计量
**stata后台操作,揭开fe估计的神秘面纱!!!
egen y_meanw = mean(logy), by(id) /*个体内部平均*/ egen y_mean = mean(logy) /*样本平均*/ egen k_meanw = mean(logk), by(id) egen k_mean = mean(logk)
egen l_meanw = mean(logl), by(id) egen l_mean = mean(logl)
gen dyw = logy - y_meanw gen dkw = logk - k_meanw gen dlw=logl-l_meanw reg dyw dkw dlw,nocons est store m_stata
gen dy = logy - y_meanw + y_mean gen dk = logk - k_meanw +k_mean gen dl=logl-l_meanw+l_mean reg dy dk dl
est store m_stata
est table m_*, b(%6.3f) star(0.1 0.05 0.01)
* 解读 xtreg,fe 的估计结果
6
xtreg logy h inv gov open,fe *-- R^2
* y_it = a_0 + x_it*b_o + e_it (1) pooled OLS * y_it = u_i + x_it*b_w + e_it (2) within estimator * ym_i = a_0 + xm_i*b_b + em_i (3) between estimator *
* --> R-sq: within 模型(2)对应的R2,是一个真正意义上的R2 * --> R-sq: between corr{xm_i*b_w,ym_i}^2 * --> R-sq: overall corr{x_it*b_w,y_it}^2 *
*-- F(4,373) = 855.93检验除常数项外其他解释变量的联合显著性 * *
*-- corr(u_i, Xb) = -0.2347 *
*-- sigma_u, sigma_e, rho
* rho = sigma_u^2 / (sigma_u^2 + sigma_e^2)
dis e(sigma_u)^2 / (e(sigma_u)^2 + e(sigma_e)^2) *
* 个体效应是否显著?
* F(28, 373) = 338.86 H0: a1 = a2 = a3 = a4 = a29 * Prob > F = 0.0000 表明,固定效应高度显著
*---如何得到调整后的 R2,即 adj-R2 ? ereturn list
reg logy h inv gov open dum*
*---拟合值和残差
* y_it = u_i + x_it*b + e_it
* predict newvar, [option] /* xb xb, fitted values; the default
stdp calculate standard error of the fitted values ue u_i + e_it, the combined residual
xbu xb + u_i, prediction including effect
7
u u_i, the fixed- or random-error component e e_it, the overall error component */
xtreg logy logk logl, fe predict y_hat predict a , u predict res,e predict cres, ue gen ares = a + res list ares cres in 1/10
* --------------------------------- * ---------- 随机效应模型 --------- * ---------------------------------
* y_it = x_it*b + (a_i + u_it) * = x_it*b + v_it
* 基本思想:将随机干扰项分成两种
* 一种是不随时间改变的,即个体效应 a_i
* 另一种是随时间改变的,即通常意义上的干扰项 u_it * 估计方法:FGLS
* Var(v_it) = sigma_a^2 + sigma_u^2 * Cov(v_it,v_is) = sigma_a^2 * Cov(v_it,v_js) = 0
* 利用Pooled OLS,Within Estimator, Between Estimator * 可以估计出sigma_a^2和sigma_u^2,进而采用GLS或FGLS * Re估计量是Fe估计量和Be估计量的加权平均 * yr_it = y_it - theta*ym_i * xr_it = x_it - theta*xm_i
* theta = 1 - sigma_u / sqrt[(T*sigma_a^2 + sigma_u^2)]
* 解读 xtreg,re 的估计结果 use product.dta, clear xtreg logy logk logl, re
*-- R2
8
* --> R-sq: within corr{(x_it-xm_i)*b_r, y_it-ym_i}^2 * --> R-sq: between corr{xm_i*b_r,ym_i}^2 * --> R-sq: overall corr{x_it*b_r,y_it}^2
* 上述R2都不是真正意义上的R2,因为Re模型采用的是GLS估计。 *
* rho = sigma_u^2 / (sigma_u^2 + sigma_e^2)
dis e(sigma_u)^2 / (e(sigma_u)^2 + e(sigma_e)^2) *
* corr(u_i, X) = 0 (assumed)
* 这是随机效应模型的一个最重要,也限制该模型应用的一个重要假设 * 然而,采用固定效应模型,我们可以粗略估计出corr(u_i, X) xtreg market invest stock, fe *
* Wald chi2(2) = 10962.50 Prob> chi2 = 0.0000
*-------- 时间效应、模型的筛选和常见问题
*---------目录--------
* 7.2.1 时间效应(双向固定(随机)效应模型) * 7.2.2 模型的筛选
* 7.2.3 面板数据常见问题 * 7.2.4 面板数据的转换
* ---------------------------------- * ------------时间效应-------------- * ---------------------------------- * 单向固定效应模型
* y_it = u_i + x_it*b + e_it * 双向固定效应模型
* y_it = u_i + f_t + x_it*b + e_it
9
qui tab year, gen(yr) drop yr1
xtreg logy logk logl yr*, fe
* 随机效应模型中的时间效应
xtreg logy logk logl yr*, fe
* --------------------------------- * ----------- 模型的筛选 ---------- * ---------------------------------
* 固定效应模型还是Pooled OLS?
xtreg logy logk logl yr*, fe /*Wald 检验*/
qui tab id, gen(dum) /*LR检验*/ reg logy logk logl /*POLS*/ est store m_ols
reg logy logk logl dum*,nocons est store m_fe lrtest m_ols m_fe
est table m_*, b(%6.3f) star(0.1 0.05 0.01)
* RE vs Pooled OLS? * H0: Var(u) = 0 * 方法一:B-P 检验
xtreg logy logk logl, re xttest0
* FE vs RE?
* y_it = u_i + x_it*b + e_it
*--- Hausman 检验 ---
* 基本思想:如果 Corr(u_i,x_it) = 0, Fe 和 Re 都是一致的,但Re更有效
10
* 如果 Corr(u_i,x_it)!= 0, Fe 仍然有效,但Re是有偏的
* 基本步骤
***情形1:huasman为正数 xtreg logy logk logl, fe est store m_fe
xtreg logy logk logl, re est store m_re hausman m_fe m_re
*** 情形2:
qui xtreg logy h inv gov open,fe est store fe
qui xtreg logy h inv gov open,re est store re hausman fe re
* Hausman 检验值为负怎么办?
* 通常是因为RE模型的基本假设 Corr(x,u_i)=0 无法得到满足 * 检验过程中两个模型的方差-协方差矩阵都采用Fe模型的 hausman fe re, sigmaless
* 两个模型的方差-协方差矩阵都采用Re模型的 hausman fe re, sigmamore
*== 为何有些变量会被drop掉? use nlswork.dta, clear tsset idcode year
xtreg ln_wage hours tenure ttl_exp, fe /*正常执行*/ * 产生种族虚拟变量
tab race, gen(dum_race)
xtreg ln_wage hours tenure ttl_exp dum_race2 dum_race3, fe * 为何 dum_race2 和 dum_race3 会被 dropped ?
* 固定效应模型的设定:y_it = u_i + x_it*b + e_it (1) * 由于个体效应 u_i 不随时间改变,
* 因此若 x_it 包含了任何不随时间改变的变量, * 都会与 u_i 构成多重共线性,Stata会自动删除之。
11
*******异方差、序列相关和截面相关问题
* ---------------- 简 介 -------------
* y_it = x_it*b + u_i + e_it *
* 由于面板数据同时兼顾了截面数据和时间序列的特征, * 所以异方差和序列相关必然会存在于面板数据中;
* 同时,由于面板数据中每个截面(公司、个人、国家、地区)之间还可能存在内在的联系,
* 所以,截面相关性也是一个需要考虑的问题。 *
* 此前的分析依赖三个假设条件:
* (1) Var[e_it] = sigma^2 同方差假设 * (2) Corr[e_it, e_it-s] = 0 序列无关假设 * (3) Corr[e_it, e_jt] = 0 截面不相关假设 *
* 当这三个假设无法得到满足时,便分别出现 异方差、序列相关和截面相关问题; * 我们一方面要采用各种方法来检验这些假设是否得到了满足; * 另一方面,也要在这些假设无法满足时寻求合理的估计方法。
* ---------------- 假设检验 -------------
*== 组间异方差检验(截面数据的特征) * Var(e_i) = sigma_i^2 * Fe 模型
xtreg logy logk logl, fe xttest3
* Re 模型
* Re本身已经较大程度的考虑了异方差问题,主要体现在sigma_u^2上
*== 序列相关检验
12
* Fe 模型
* xtserial Wooldridge(2002),若无序列相关,则一阶差分后残差相关系数应为-0.5
xtserial logy logk logl
xtserial logy logk logl, output
* Re 模型
xtreg logy logk logl, re
xttest1 /*提供多个统计检验量*/
*== 截面相关检验
* xttest2命令 H0: 所有截面残差的相关系数都相等
xtreg logy logk logl, fe xttest2
* 由于检验过程中执行了SUE估计,所以要求T>N xtreg logy logk logl if id<6, fe xttest2
* xtcsd 命令(提供了三种检验方法) xtreg logy logk logl, fe
xtcsd , pesaran /*Pesaran(2004)*/ xtcsd , friedman /*Friedman(1937)*/
xtreg logy logk logl, re xtcsd , pesaran
* ----------------- 估计方法 ---------------------
*== 异方差稳健型估计
xtreg logy h inv gov open, fe robust est store fe_rb
13
xtreg logy h inv gov open, fe robust est store fe
* 结果对比
esttab fe_rb fe, b(%6.3f) se(%6.3f) mtitle(fe_rb fe)
*== 序列相关估计
* 一阶自相关 xtregar, fe/re
* 模型: y_it = u_i + x_it*b + v_it (1) * v_it = rho*v_it-1 + z_it (2)
xtregar logy h inv gov open, fe est store fe_ar1
xtregar logy h inv gov open,fe lbi /*Baltagi-Wu LBI test*/ * 说明:
* (1) 这里的Durbin-Watson =1.280677 具有较为复杂的分布, * 不同于时间序列中的D-W统计量。
* (2) 其临界值见Bhargava et al. (1982, The Review of Economic Studies 49:553-549)
* (3) Baltagi-Wu LBI = 1.4739834 基本上没有太大的参考价值, * 因为他们并未提供临界值表,而该统计量的分布又相当复杂
xtregar logy h inv gov open, re est store re_ar1
* 两阶段估计
xtregar logy h inv gov open, fe twostep est store fe_ar1_two
* 结果对比
xtreg logy h inv gov open, fe est store fe
local models \
esttab `models', b(%6.3f) se(%6.3f) mtitle(`models') r2 sca(r2_w corr)
14
* 高阶自相关 * newey2 命令
newey2 logy h inv gov open, lag(2)
*== 组间相关(截面相关) * cluster 选项
use xtcs.dta, clear
xtreg logy h inv gov open, fe cluster(id) est store fe_cluster
xtreg logy h inv gov open, re cluster(id) est store re_cluster
************看过去很晕,采用一种综合处理: * xtgls 命令 * xtpcse 命令
*--- 简介(Greene, 2000, chp15) * * 模型
* y = X*b + U
* 重点在于考虑干扰项 U 的结构,包括
* (1) 异方差 (2) 序列相关 (3) 截面相关性 * 应用范围:多用于“大T,小N”型面板数据,
* 因为,此时截面的异质性并不是重点关注的,而时序特征则较为明显
* 因此,模型设定中未考虑个体效果
* | y_1 | | X_1 | | e_1 | * | y_2 | | X_2 | | e_2 | * | . | | . | | . | * | . | = | . | * b + | . | * | . | | . | | . |
15
* | y_n | | X_n | | e_n |
*-- 截面异方差
* E[e_i*e_i'] = s_i^2 *
* | s1^2 0 ... 0 |
* | 0 s2^2 ... 0 | * | . |
* V = | . | * | . | * | 0 0 ... sn^2 |
*-- 截面相关
* E[e_i*e_i'] = s_ij^2 *
* | s_11 s_12 ... s_1n |
* | s_21 s_22 ... s_2n | * | . |
* V = | . | * sigma^2 * | . | * | s_n1 s_n2 ... s_nn |
*-- 序列相关
* E[e_i*e_i'] = s_i^2 * M_i *
* | s1^2*M_1 0 ... 0 |
* | 0 s2^2*M_2 ... 0 | * | . |
* V = | . | * | . | * | 0 0 ... sn^2*M_n |
16
* GLS 估计
* b = [X'V^{-1}*X]^{-1}[X'V^{-1}y] * Var[b] = [X'V^{-1}*X]^{-1}
*--- 估计和检验 -------------
*=== xtgls 命令
use invest2.dta, clear
xtgls market invest stock, panels(iid) /*iid, 等同于Pooled OLS*/ est store g_0
reg market invest stock est store g_ols
xtgls market invest stock, panel(het) /*截面异方差*/ est store g_phet
xtgls market invest stock, corr(ar1) /*所有截面具有相同的自相关系数*/
est store g_par1
xtgls market invest stock, corr(psar1) /*每个截面有自己的自相关系数*/
est store g_psar1
xtgls market invest stock, panel(corr) /*截面间相关且异方差*/ est store g_pcorr
xtgls market invest stock, p(c) corr(ar1) est store g_all
* 检验异方差
xtgls market invest stock, panel(het) /*截面异方差*/ xttest3
* 检验序列相关
xtserial market invest stock
* 检验截面相关
xtgls market invest stock, panel(het) xttest2
17
* 结果对比
xtreg market invest stock, fe est store fe
local models \
esttab `models', b(%6.3f) se(%6.3f) mtitle(`models') r2 sca(r2_w) local models \
esttab `models', b(%6.3f) se(%6.3f) mtitle(`models') r2 sca(r2_w) compress
* 说明:
* 为何 xtgls 不汇报 R2 ?
* 因为此时的R2未必介于0和1之间,不具有传统线性回归模型中R2的含义
*=== xtpcse 命令
* 默认假设:存在截面异方差和截面相关 * 估计方法:OLS 或 Prais-Winsten 回归 * 有别于xtgls(采用FGLS估计)
* 更适于方块面板 N不大(10-20),T不大(10-40) * 与 xtgls 的区别:估计方法不同
* xtgls 采用GLS进行估计,而xtpsce采用OLS。
use invest2.dta, clear xtpcse invest market stock
est store pcse_full /*OLS估计,调整异方差和截面相关后的标准误*/
xtgls invest market stock, panels(correlated)
est store m_xtgls /*FGLS估计,异方差和截面相关*/
xtpcse invest market stock, correlation(ar1)
est store pcse_ar1 /*Prais_Winsten估计,共同的自相关系数*/
xtpcse invest market stock, correlation(ar1) hetonly est store pcse_ar1 /*不考虑截面相关*/
* 结果对比
xtreg invest market stock, fe est store fe
18
local models \
esttab `models', b(%6.3f) se(%6.3f) mtitle(`models') r2 sca(r2_w) * xtpcse 的结果与 xtgls 非常相似,但前者可以汇报R2
* 当N较大时,采用该方法会非常费时,
* 因为方差协方差矩阵是采用OLS估计的残差计算的 use xtcs.dta, clear xtdes
xtpcse tl size ndts tang tobin npr /*大约5-8分钟*/ est store xtpcse
xtreg tl size ndts tang tobin npr, fe est store fe
* 结果对比
local models \
esttab `models', b(%6.3f) se(%6.3f) mtitle(`models') r2 sca(r2_w) * 系数估计值有较大差别,但符号和显著性是一致的。
***------动态面板模型 Part I
*------------------------------- * 动态面板模型
*------------------------------- * 简介
* 一阶差分IV估计量(Anderson and Hisao, 1982) * 一阶差分GMM估计量(Arellano and Bond, 1991) * 系统GMM估计量(AB,1995; BB,1998)
* == 简介 == *
19
* 模型: y[it] = a0*y[it-1] + a1*x[it] + a2*w[it] + u_i + e[it] *
* 特征:解释变量中包含了被解释变量的一阶滞后项 * 可以是非平行面板,但要保证时间连续
* x[it] —— 严格外生变量 E[x_it,e_is] =0 for all t and s * 即,所有干扰项与x都不相关
* w[it] —— 先决变量 E[w_it,e_is]!=0 for s
* 即,前期干扰项与当期x相关,但当期和未来期干扰项与x不相关。
* y[it-1]—— 内生变量 E[x_it,e_is]!=0 for s<=t * 即,前期和当期,尤其是当期干扰项与x相关 * u_i 随机效应,在截面间是 iid 的。u_i 与 e[it] 独立。 *
* 内生性问题:
* (1) 若假设 u_i 为随机效应,则 Corr(y[i,t-1], u_i) !=0
* (2) 若假设 u_i 为个体效应,需要想办法去除之,因为数据为\大N小T\* 一阶差分: D.y[i,t-1] = y[i,t-1] - y[i,t-2] * D.e[i,t] = e[i,t] - e[i,t-1]
* 显然: Corr(D.y[i,t-1], D.e[i,t]) !=0, 差分方程存在内生问题; * 组内去心: ym[i,t-1] = y[i,t-1] - 1/(T-1)*(y[i,t-1]+...+y[i,T]) * em[i,t] = e[i,t] - 1/T*(e[i,t]+e[i,t-1]+...+e[i,T])
* 显然: Corr(ym[i,t-1], em[i,t]) !=0, 仍然存在内生性问题 *
* 处理办法:IV估计或GMM估计,选择合适的工具变量 *
* 矩条件: E[e_it,z_it] = 0
*======================================== *========= 一阶差分 IV 估计量 ============ *========Anderson and Hisao(1982)======== *======================================== *
* 基本思想:采用一阶差分去除个体效应 u_i,
* y 的滞后二阶作为 D.y[it-1] 的工具变量
* 同时,D.y[it-2] 也可以作为 D.y[it-1] 的工具变量
20
use abdata.dta, clear des /*变量的定义*/ tsset id year
* 模型: n_it = b1*n_it-1 + b2*n_it-2 * + b3*w_it + b4*w_it-1 * + b5*k_it + b6*k_it-1 + b7*k_it-2 * + b8*ys_it + b9*ys_it-1 + b10*ys_it-2 *
xtivreg n L2.n w L1.w k L1.k L2.k ys L1.ys L2.ys yr1981-yr1984 /// (L.n = L3.n), fd *
* 等价于 *
xtivreg n L2.n L(0/1).w L(0/2).(k ys) yr1981-yr1984 (L.n = L3.n), fd
*==================================== *========= 一阶差分GMM估计量 ========= *==============AB91================== *
* L.Hansen (1982) 提出 GMM *
* Arellano and Bond (1991) *
* 模型: *
* y[it] = a0*y[it-1] + a1*x[it] + a2*w[it] + u_i + v[it] *
* 假设条件:
* 干扰项 v[it] 不存在序列相关; *
* 适用范围: * 大N,小T
* 随后,我们会介绍“小N大T”型动态面板的估计方法 *
* 基本思想:
21
*
* 在 Anderson and Hisao(1982) 基础上增加了更多可用的工具变量 *
* 在 t=3 处,y_i1 可以作为所有滞后项的工具变量
* 在 t=4 处, y_i1, y_i2 可以作为所有滞后项的工具变量 *
* D.y[it] = a1*D.y[it-1] + a2*D.X[it] + D.v[it] X_it = [x_it, w_it] *
* 因此,所有工具变量构成的矩阵如下: *
* |y_i1 0 0 0 0 0 ... 0 ... 0 D.x_i3 |
* | 0 y_i1 y_i2 0 0 0 ... 0 ... 0 D.x_i4 | * | 0 0 0 y_i1 y_i2 y_i3 ... 0 ... 0 D.x_i5 | * Z_i = | . . . . . . . . . . . | * | . . . . . . . . . . . | * | 0 0 0 0 0 0 ... y_i1 ... yiT-2 D.x_iT | *
* Z_i 的行数为 T-2
* Z_i 的列数为 sum_(m=1)^(T-2){m} + K, K 为 X 的列数 *
* 以 T =7,K=3 为例,则 Z_i 的列数为 (1+2+3+4+5)+3 = 18 *
* 设定工具变量的基本原则: *
* 对-内生-变量的处理:与上述方法类似,
* 即滞后两阶以上的水平变量均可作为差分方程的工具变量 (GMM type) * 对-先决-变量的处理:滞后一阶以上的水平变量均可作为工具变量 (GMM type) * 对-外生-变量的处理:自己作为自己的工具变量 (Standard IV)
*== 例1:一阶差分估计量的基本设定
* 解释变量仅包含 y_it 的一阶滞后项,默认设定 * 干扰项同方差,一阶段估计
use abdata.dta, clear
xtabond n L(0/1).w L(0/2).(k ys) yr1980-yr1984 est store ab_0
*- 结果释疑
22
*
* -1- 工具变量的个数是如何确定的?(xtdpd, p.74) *
* 外生变量的工具变量等于外生变量的个数
* L(0/1).w L(0/2).(k ys) yr1980-yr1984 共 13个 * 内生变量的工具变量:共 27个 *
list id year n L2.n DL2.n if id == 140 *
* 差分方程的可用工具变量
*-------------------------------------------------------- * year of Years of Number of * difference equation instruments instruments * 1978 1976 1 * 1979 1976-1977 2 * 1980 1976-1978 3 * 1981 1976-1979 4 * 1982 1976-1980 5 * 1983 1976-1981 6 * 1984 1976-1982 7
*-------------------------------------------------------- * 28个
* -2- GMM-type 和 Standard 两种类型的工具变量有何差异?(xtabond,p.27) *
* GMM-type 是针对内生变量或先决变量而言的工具变量,有多列 * Standard 是针对外生变量而言的工具变量,只有一列
*- 过度识别检验(工具变量的使用是否合理) *
estat sargan *
* 说明:
* H0: overidentifying restrictions are valid
* 这里,我们拒绝了原假设,但AB91指出,当干扰项存在异方差时, * Sargan检验倾向于过度拒绝原假设,因此此处得到的结论并不可信。 * 采用两阶段估计,然后再执行Sargan检验较为稳妥:
23
*
xtabond n L(0/1).w L(0/2).(k ys) yr1980-yr1984,twostep estat sargan *
* 说明:不过,AB91发现,
* 若存在异方差,在两阶段估计后执行Sargan检验往往倾向于 * Underreject问题,即过度接受原假设。
* 通常而言,这很可能是我们的模型设定不当,或是工具变量的选择不合理。
* - 干扰项序列相关检验 *
* AB91 一阶差分估计量要求原始模型的干扰项不存在序列相关, * 显然,差分后的干扰项必然存在一阶序列相关,
* 因此,我们需要检验差分方程的残差是否存在二阶(或更高阶)序列相关即可 *
* 默认,二阶序列相关检验
xtabond n L(0/1).w L(0/2).(k ys) yr1980-yr1984,vce(robust) estat abond
* 说明:若存在二阶相关,则意味着选取的工具变量不合理 * 高阶序列相关检验
xtabond n L(0/1).w L(0/2).(k ys) yr1980-yr1984,vce(robust) artest(3) estat abond
*== 稳健型估计
xtabond n L(0/1).w L(0/2).(k ys) yr1980-yr1984, lags(2) robust est store ab4_one_rb
* 此时,无法 Sargan 统计量 estat sargan
*== 两阶段估计 AB91(Tab4(a2)) 考虑异方差问题
* 利用第一阶段估计得到的残差构造方差-协方差矩阵,进而重新估计模型 *
xtabond n L(0/1).w L(0/2).(k ys) yr1980-yr1984, lags(2) twostep
24
est store ab4_twostep
* 此时,Sargan 检验无法拒绝原假设 *
estat sargan
* AB91重要建议:
* (1) 采用一阶段估计结果进行系数显著性的统计推断; * (2) 采用两阶段估计给出的 Sargan统计量进行模型筛选 *
* 进一步的讨论:
* 虽然AB91建议不要采用两阶段(非稳健)估计进行统计推断,
* 但Windmeijer(2005,Journal of Econometrics)通过模拟分析表明,
* 采用纠偏(bias-corrected,WC)后的稳健性VCE,可以更好地进行统计推断 xtabond n L(0/1).w L(0/2).(k ys) yr1980-yr1984, lags(2) twostep vce(robust)
est store ab_wc_rb
* 结果对比
local mm \ esttab `mm',mtitle(`mm') *
* 结论:
* AB91_onestep_rb 的结果与 AB91_WC_rb 的参数估计相同,后者标准误较大 * 建议采用 Windmeijer(2005) 两阶段-纠偏-稳健型 估计量。
*== 先决变量的设定
* 由于当期干扰项显然会影响后续 w 和 k,所以把它们设定为先决变量更为合理 * 注意: 此时逗号前就不能再出现这两个变量了
xtabond n L(0/1).ys yr1980-yr1984, lags(2) twostep /// pre(w k) est store ab4_pre estat sargan
* 从 Sargan p值来看,将 w 和 k 设为先决变量似乎更为合理
* pre() 选项的设定
xtabond n L(0/1).ys yr1980-yr1984, lags(2) twostep /// pre(w,lag(1,3)) pre(k,lag(2,.)) *
25
* 解释:
* pre(w,lag(1,3))
* lag(1,3) 中的 1 表示 L.w 也会作为解释变量,
* lag(1,3) 中的 3 表示 L2.w 和 L3.w 可以作为 L.w 的工具变量,但 L4.w 不可以;
* pre(k,lag(2,.))
* lag(2,.) 中的 2 表示 L1.k, L2.k 都会作为解释变量;
* lag(2,.) 中的 . 表示 L3.k, L4.k ... 都可以作为 L2.k 的工具变量
* 说明:上述设定都可附加 -vce(robust)- 选项以便获得稳健型标准误。
*== 工具变量过多导致的问题
* 过多的工具变量往往导致过度约束假设无法满足
* 估计结果的有效性降低,因为部分工具变量与内生或先决变量的相关性很弱 * 对矩阵尺寸的要求增加
* 解决办法:限制最大的滞后阶数
xtabond n L(0/1).ys yr1980-yr1984, lags(2) twostep /// pre(w,lag(1,3)) pre(k,lag(2,3))
*== 系数估计的上下限
* 虽然 Pooled OLS 和 Fixed Effects 估计都是有偏的, * 但是二者却决定了 y_it-1 真是估计值的上界和下界 * 换言之, Pooled OLS 估计高估了真实值
* 而 Fixed effects 估计则低估了真实值
26
*======================================= *============= 系统GMM估计量 =========== *==============AB95,BB98=============== *=======================================
* Arellano and Bover (1995), * Blundell and Bond(1998)
* Haha(1999), Judson and Owen(1999) *
* 适用范围: * 大N,小T *
* AB91 的局限
* (1) 当 y[i,t-1] 的系数较大,即 y[i,t] 表现出强烈的序列相关时;
* (2) 当 Var[u_i]/Var[e_it] 较大时,即个体效应的波动远大于常规干扰项的波动;
* AB91 的表现欠佳。
* 原因在于,水平滞后项是差分方程中内生变量的-弱工具变量-; * 因此,需要寻求更佳的工具变量 *
*== 基本思想: *
* --- 几个概念 --- *
* 水平值 —— y x * 差分值 —— D.y D.x
* 水平方程:y_it = b1*y_it-1 + b2*x_it + u_i + v_it * 可用工具变量:D.y[i,t-1] 可以作为 y[i,t-1] 的工具变量 * 差分方程:D.y_it = b1*D.y_it-1 + b2*D.x_it + D.v_it
* 可用工具变量:y[i,t-2],y[i,t-3]...都可以作为 D.y[i,t-1]的工具变量 *
* --- 差分GMM估计量与系统GMM估计量的区别 ---
27
*
* (1) 差分GMM估计量采用水平值的滞后项作为差分变量的工具变量; * 如 y_it-3 是 D.y_it-1 的工具变量
* (2) 系统GMM估计量进一步采用差分变量的滞后项作为水平值的工具变量; * 相当于进一步增加了可用的工具变量, * 且估计过程中同时使用水平方程和差分方程
* (3) 主要原因在于差分GMM的工具变量往往是弱工具变量,即 corr(X,Z) 过低 *
* --- xtabond2 命令---Roodman(2005) *
* 既可以估计差分 GMM 估计量,也可以估计系统 GMM 估计量; * 同时可以估计一般化的回归模型
* 提供两阶自相关检验,Sargan检验,Hansen检验,以及工具变量外生性检验 *
* --- xtdpdsys 命令--- Stata官方命令,以 xtabond2命令 为基础
*------------------------------------ *---------- xtabond2 命令------------ *------------------------------------ * 适用于 Stata8-10 各个版本 * 既可以完成 -一阶差分GMM估计- * 也可以完成 -系统GMM估计- * 详细参考资料:
* Roodman, D. 2006. How to Do xtabond2:
* An Introduction to \* Working Paper 103. Center for Global Development, Washington.
*== 使用 xtabond2 命令得到 -一阶差分估计量- *- 附加 -noleveleq- 选项即可
* 采用 xtabond2 估计 AB91 文中表4 的结果
* Arellano and Bond (1991), Table 4 * Column (a1)
use abdata, clear
xtabond2 n L(1/2).n L(0/1).w L(0/2).(k ys) yr1980-yr1984, /// gmm(L.n) iv(L(0/1).w l(0/2).(k ys) yr1980-yr1984) ///
28
nomata noleveleq small * gmm(*) 填写内生变量的名称
* iv(*) 填写所有外生变量以及自己设定的工具变量的名称
* noleveleq 表示估计过程中不使用水平方程,即为差分GMM估计量 est store aba1_ab2
xtabond n L(0/1).w L(0/2).(k ys) yr1980-yr1984, lags(2) est store aba1_ab
esttab aba1_ab2 aba1_ab, mtitle(aba1_ab2 aba1_ab)
* Column (a2) * 两阶段估计
xtabond2 n L(0/1).w L(0/2).(k ys) L(1/2).n yr1980-yr1984, /// gmm(L.n) iv(L(0/1).w l(0/2).(k ys) yr1980-yr1984) /// noleveleq small twostep est store aba2_ab2
xtabond n L(0/1).w L(0/2).(k ys) yr1980-yr1984, lags(2) twostep est store aba2_ab
esttab aba2_ab2 aba2_ab, mtitle(aba2_ab2 aba2_ab)
*=== 一阶差分估计量 部分解释变量内生 * 一阶段估计
xtabond2 n L.n L(0/1).(w k) yr1980-yr1984, /// gmm(L.(w k n)) iv(yr1980-yr1984) /// noleveleq noconstant small robust est store fd_1s * 两阶段估计
xtabond2 n L.n L(0/1).(w k) yr1980-yr1984, /// gmm(L.(w k n)) iv(yr1980-yr1984) /// noleveleq robust small twostep est store fd_2s
esttab fd_1s fd_2s, mtitle(fd_1s fd_2s)
*== 系统 GMM 估计量
xtabond2 n L.n L(0/1).(w k) yr1978-yr1984, /// gmm(L.n) iv(L(0/1).(w k) yr1978-yr1984) ///
29
robust small *
* 解释: *
*-- gmm() 选项
* 设定内生变量和先决变量,它们的工具变量将有多列,GMM *
*-- iv() 选项
* 设定严格外生变量,作为自己的工具变量,在工具变量矩阵中仅占一列 *
*-- 差分方程和水平方程
* 默认情况下,差分方程和水平方程都参与估计 *
*-- robust 选项
* (1) 对于一阶段估计(不附加twostep选项),
* 采用传统异方差-序列相关稳健型估计量计算标准误; * (2) 对于两阶段估计(附加twostep选项),
* 采用Windmeijer(2005)纠偏估计量计算标准误; *-- Sargan检验
* Sargan test of overid. restrictions: chi2(34) * 34 = 47 - 13 (13是外生变量的个数,包含常数项) * 可见,无论采用Sargan检验还是Hansen J检验,都拒绝了工具变量合理的原假设
* 指定工具变量应用于 水平方程 还是 差分方程
* 例如,假设 w, k, 以及年度虚拟变量都是外生的(当然,这一假设可能并不合理) *
xtabond2 n L.n L(0/1).(w k) yr1978-yr1984, gmm(L.n) /// iv(L(0/1).(w k) yr1978-yr1984, eq(level)) /// robust small twostep est store sys_wkexg
* 将 w 和 k 都设定为内生变量 * yr dummies 仅出现在水平方程中
xtabond2 n L.n L(0/1).(w k) yr1978-yr1984, /// gmm(L.(w k n)) iv(yr1978-yr1984, eq(level)) /// robust small twostep
30
est store sys_wkendog_lev
* yr dummies 同时出现在水平方程和差分方程中
xtabond2 n L.n L(0/1).(w k) yr1978-yr1984, /// gmm(L.(w k n)) iv(yr1978-yr1984, eq(both)) /// robust small twostep est store sys_wkendog_both
* 结果对比
local mm \ esttab `mm', mtitle(`mm') compress
*--------------------------- *------ xtdpdsys 命令------ *--------------------------- * 仅适用于 Stata10 版本
* 中国上市公司资本结构动态调整 use xtcs.dta, clear qui tab year, gen(yr) drop yr1
* Case I:假设所有解释变量均为外生变量(L.tl除外) *
local xx \ xtdpdsys tl `xx', vce(robust) twostep
dis ln(2) / (1 - _b[L1.tl]) /*调整半周期*/ est store dycs_2sys * 设定说明:
* (1) 无需设定 L.tl, 因为 xtdpdsys 默认设定被解释变量的滞后一期为解释变量,
* 而且该变量被自动设定为内生变量;
* (2) 稳健型估计采用 vce(robust) 选项加以设定;
* (3) 该命令不会自动进行 AR(2)序列相关检验和Sargan过度识别检验
* 序列相关检验 estat abond
31
* 过度识别检验
estat sargan /*稳健型估计下无法获得Sargan统计量*/ * 正确方法
local xx \ xtdpdsys tl `xx', twostep estat sargan
* Case II:假设Tobin和npr为先决变量
local xx \此处不应再包含 tobin和npr*/ xtdpdsys tl `xx', pre(tobin npr,lag(1,.)) twostep est store dycs_2pre estat abond
estat sargan
* Case III:假设Tobin和npr为内生变量
local xx \此处不应再包含 tobin和npr*/ xtdpdsys tl `xx', endog(tobin npr,lag(1,.)) twostep est store dycs_2endog estat abond estat sargan
* Case IV: 假设除了年度虚拟变量和公司规模外,所有解释变量均为先决变量 local xx \
xtdpdsys tl `xx', pre(tobin npr,lag(1,.)) /// pre(tang ndts) twostep est store dycs_2preAll estat abond estat sargan
* 假设除 L.tl 外的所有解释变量外生最为合适。
* OLS 估计(调整系数的上限)
local xx \ reg tl L.tl `xx', robust est store dycs_2OLS
* FE 估计(调整系数的下限)
local xx \ xtreg tl L.tl `xx', robust fe est store dycs_2FE
32
* 结果对比
local mm \dycs_2FE\
local ss \ esttab `mm',mtitle(`mm') scalar(`ss') compress
* 结论:
* (1) 估计出的调整系数介于合理的范围内,即OLS和FE之间;
* (2) 就模型设定而言,dycs_2sys 最为合理,即把所有解释变量均设定为外生变量。 *
* 调整半周期为:
local xx \ xtdpdsys tl `xx', vce(robust) twostep
dis ln(2) / (1 - _b[L1.tl]) /*调整半周期*/
xtabond2 logy l.logy h inv gov open fdi yr4-yr14, /// gmm(l.logy h) iv(gov open fdi yr4-yr14)robust twostep
33