政策评估 (Policy Evaluation) 是当前公共经济学和劳动经济学中最常用的实证方法。其目的在于评价一项既有政策的效果,此类研究关注的是该政策的处理效应 (Treatment Effect)。由于政策往往是对一类特定的人群起作用,政策评估的基本思想是将这类人群与其他人群进行比较。目前,双重差分模型 (Difference-in-Differences) 是用于政策评估的常用模型。
1.1 因果识别思路
双重差分需满足共同趋势这一前提假设,也就是说实验组和控制组在政策施行之前并不存在显著差异,因此使用 DID 方法时需要进行平行趋势检验,即对政策施行之前的实验组和控制组特征是否相似进行检验。
1.2 截面数据 vs 面板数据
1.3 常见计量模型设定
政策施行时间一致:
政策逐步施行:
当政策逐步推进时,不存在明确的实验组和控制组划分,此时回归模型保留了时间固定效应 以及交乘项 x 估计政策实行效果。同样可以加入一系列控制变量 控制可能干扰政策施行的影响因素。
平行趋势检验:
该模型中包括了政策之前和之后若干期的虚拟变量 ,即可用于检验平行趋势是否成立,也可估计政策施行每一期效果具体大小,代表时间固定效应。系数 用于检验平行趋势是否成立,若系数不显著则平行趋势成立;系数 度量的是政策实行后每一期的效果大小,若显著则说明该期政策效应存在。
2. Stata实现
2.1 政策施行时间一致
keep if inlist(Year,2002,2003) //保留政策施行时间一致的观测值
reg y Treat##After
2.2 政策逐渐施行
eststo m1: reg y i.id i.Year Treat_x_After //混合OLS回归
xtset id Year
eststo m2: xtreg y i.Year Treat_x_After, fe //面板固定效应
local m "m1 m2"
esttab `m', nogap replace not b(%4.2f) s(N r2_a) //输出回归结果
2.3 平行趋势检验
以 nlswork.dta 数据为例,假定一项外生政策在 78 年实施,试点组由 idcode 大于 2604 的观测值构成:
webuse nlswork, clear
xtset idcode year, delta(1) //设置成面板数据
gen post = (year >= 78)
gen treated = (idcode > 2604)
levelsof year, local(localyear) //判断年份的情况
return list
qui sum year
return list
进一步,生成政策之前和之后每一期的虚拟变量 coeff69 - coeff88:
local yearmin = r(min)
foreach i of local localyear {
local j = `i' - 78
if `i' > `yearmin'{
gen coeff`i' = (year == `i' & treated == 1)
label var coeff`i' "`j'"
if `i' <= 78 {
local countsmall78 = `countsmall78' + 1
}
}
}
利用面板固定效应估计回归结果:
. global controlx "c.age##c.age c.ttl_exp##c.ttl_exp i.south i.race i.year" //设定控制变量
. xtreg ln_w coeff* $controlx, fe robust
. est store dynamic
可以看出,在政策实行之前的系数 coeff69 - coeff77 基本不显著,政策实行之后的系数 coeff78、coeff80 和 coeff82 显著异于0。
做图:可以使用 coefplot
命令将平行趋势检验和各期政策效果以图形的形式表示出来。
coefplot dynamic, keep(coeff*) vertical recast(connect) yline(0) ///
> xline(`countsmall78') ciopts(recast( > rline) lpattern(dash))