Stata连享会 主页 || 视频 || 推文 || 知乎 || Bilibili 站
温馨提示: 定期 清理浏览器缓存,可以获得最佳浏览体验。
New!
lianxh
命令发布了:
随时搜索推文、Stata 资源。安装:
. ssc install lianxh
详情参见帮助文件 (有惊喜):
. help lianxh
连享会新命令:cnssc
,ihelp
,rdbalance
,gitee
,installpkg
⛳ Stata 系列推文:
袁洛琪 (北京大学),luoqi_yuan@163.com
何庆红 (北京大学)
目录
政策评估 (Policy Evaluation) 是当前公共经济学和劳动经济学中最常用的实证方法。其目的在于评价一项既有政策的效果,此类研究关注的是该政策的处理效应 (Treatment Effect)。由于政策往往是对一类特定的人群起作用,政策评估的基本思想是将这类人群与其他人群进行比较。目前,双重差分模型 (Difference-in-Differences) 是用于政策评估的常用模型。此推文的目的是,简要介绍两期和多期双重差分模型 (DID) 中模型设定和系数含义。
其中,
故 DID 估计出的处理效应为处理组接受处理后的平均处理效应 (ATT at the post-treatment period),即:
双重差分需满足共同趋势这一前提假设,也就是说实验组和控制组在政策施行之前并不存在显著差异,因此使用 DID 方法时需要进行平行趋势检验,即对政策施行之前的实验组和控制组特征是否相似进行检验。
政策施行时间一致:
政策逐步施行:
当政策逐步推进时,不存在明确的实验组和控制组划分,此时回归模型保留了时间固定效应
平行趋势检验:
该模型中包括了政策之前和之后若干期的虚拟变量
首先,我们输入一组数据,并定义相关变量。
clear
input id Year Treat After Treat_x_After
1 2001 0 0 0
1 2002 0 0 0
1 2003 0 1 0
1 2004 0 1 0
2 2001 0 0 0
2 2002 0 0 0
2 2003 0 1 0
2 2004 0 1 0
3 2001 1 0 0
3 2002 1 0 0
3 2003 1 1 1
3 2004 1 1 1
end
bysort id: gen fi = 0.5*id
bysort id: gen y = _n + fi
replace y = y + 10 if Treat_x_After==1
save "DIDm_simudata.dta", replace
. use "DIDm_simudata.dta", clear
. keep if inlist(Year,2002,2003) //保留政策施行时间一致的观测值
. list, sepby(id) noobs
+---------------------------------------------------+
| id Year Treat After Treat_~r fi y |
|---------------------------------------------------|
| 1 2002 0 0 0 .5 2.5 |
| 1 2003 0 1 0 .5 3.5 |
|---------------------------------------------------|
| 2 2002 0 0 0 1 3 |
| 2 2003 0 1 0 1 4 |
|---------------------------------------------------|
| 3 2002 1 0 0 1.5 3.5 |
| 3 2003 1 1 1 1.5 14.5 |
+---------------------------------------------------+
此时两期 DID 的计量模型为:
在 Stata 中有两种实现方式:
. reg y Treat##After
Source | SS df MS Number of obs = 6
-------------+---------------------------------- F(3, 2) = 281.56
Model | 105.583333 3 35.1944444 Prob > F = 0.0035
Residual | .25 2 .125 R-squared = 0.9976
-------------+---------------------------------- Adj R-squared = 0.9941
Total | 105.833333 5 21.1666667 Root MSE = .35355
------------------------------------------------------------------------------
y | Coefficient Std. err. t P>|t| [95% conf. interval]
-------------+----------------------------------------------------------------
1.Treat | 0.750 0.433 1.73 0.225 -1.113 2.613
1.After | 1.000 0.354 2.83 0.106 -0.521 2.521
Treat#After |
1 1 | 10.000 0.612 16.33 0.004 7.365 12.635
_cons | 2.750 0.250 11.00 0.008 1.674 3.826
------------------------------------------------------------------------------
Treat#After 对应的系数即为计量模型中的系数
. reg y Treat After Treat_x_After
Source | SS df MS Number of obs = 6
-------------+---------------------------------- F(3, 2) = 281.56
Model | 105.583333 3 35.1944444 Prob > F = 0.0035
Residual | .25 2 .125 R-squared = 0.9976
-------------+---------------------------------- Adj R-squared = 0.9941
Total | 105.833333 5 21.1666667 Root MSE = .35355
-------------------------------------------------------------------------------
y | Coefficient Std. err. t P>|t| [95% conf. interval]
--------------+----------------------------------------------------------------
Treat | 0.750 0.433 1.73 0.225 -1.113 2.613
After | 1.000 0.354 2.83 0.106 -0.521 2.521
Treat_x_After | 10.000 0.612 16.33 0.004 7.365 12.635
_cons | 2.750 0.250 11.00 0.008 1.674 3.826
-------------------------------------------------------------------------------
上述命令是通过手动生成交乘项 Treat_x_After 的方法进行两期 DID 的回归分析。同样 Treat_x_After 对应的系数即为计量模型中的系数
. use "DIDm_simudata.dta", clear
. list id Year Treat After y, sepby(id) noobs
+----------------------------------+
| id Year Treat After y |
|----------------------------------|
| 1 2001 0 0 1.5 |
| 1 2002 0 0 2.5 |
| 1 2003 0 1 3.5 |
| 1 2004 0 1 4.5 |
|----------------------------------|
| 2 2001 0 0 2 |
| 2 2002 0 0 3 |
| 2 2003 0 1 4 |
| 2 2004 0 1 5 |
|----------------------------------|
| 3 2001 1 0 2.5 |
| 3 2002 1 0 3.5 |
| 3 2003 1 1 14.5 |
| 3 2004 1 1 15.5 |
+----------------------------------+
此时 DID 的计量模型为:
在 Stata 中可通过以下两种方式实现:
. 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) //输出回归结果
--------------------------------------------
(1) (2)
y y
--------------------------------------------
1.id 0.00
2.id 0.50
3.id 1.00
2001.Year 0.00 0.00
2002.Year 1.00 1.00
2003.Year 2.00 2.00
2004.Year 3.00 3.00
Treat_x_Af~r 10.00 10.00
_cons 1.50 2.00
--------------------------------------------
N 12.00 12.00
r2_a 1.00 1.00
--------------------------------------------
* p<0.05, ** p<0.01, *** p<0.001
以 nlswork.dta 数据为例,假定一项外生政策在 78 年实施,试点组由 idcode 大于 2604 的观测值构成:
clear all
set more off
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
Fixed-effects (within) regression Number of obs = 28,502
Group variable: idcode Number of groups = 4,710
R-squared: Obs per group:
Within = 0.1619 min = 1
Between = 0.2932 avg = 6.1
Overall = 0.2174 max = 15
F(33,4709) = 62.36
corr(u_i, Xb) = 0.1187 Prob > F = 0.0000
(Std. err. adjusted for 4,710 clusters in idcode)
-------------------------------------------------------------------------------------
| Robust
ln_wage | Coefficient std. err. t P>|t| [95% conf. interval]
--------------------+----------------------------------------------------------------
coeff69 | 0.006 0.021 0.27 0.790 -0.035 0.046
coeff70 | 0.034 0.021 1.65 0.100 -0.007 0.075
coeff71 | 0.009 0.022 0.41 0.684 -0.034 0.052
coeff72 | 0.038 0.023 1.64 0.101 -0.007 0.084
coeff73 | 0.045 0.023 1.92 0.055 -0.001 0.091
coeff75 | 0.031 0.024 1.30 0.194 -0.016 0.078
coeff77 | 0.058 0.025 2.36 0.018 0.010 0.107
coeff78 | 0.060 0.026 2.32 0.020 0.009 0.110
coeff80 | 0.048 0.026 1.83 0.067 -0.003 0.099
coeff82 | 0.053 0.026 2.05 0.041 0.002 0.104
coeff83 | 0.036 0.027 1.36 0.175 -0.016 0.089
coeff85 | 0.031 0.026 1.18 0.236 -0.020 0.081
coeff87 | 0.047 0.026 1.78 0.076 -0.005 0.099
coeff88 | 0.024 0.029 0.84 0.400 -0.032 0.081
省略...
--------------------+----------------------------------------------------------------
sigma_u | .36355618
sigma_e | .29351858
rho | .60539259 (fraction of variance due to u_i)
-------------------------------------------------------------------------------------
可以看出,在政策实行之前的系数 coeff69 - coeff77 基本不显著,政策实行之后的系数 coeff78、coeff80 和 coeff82 显著异于0。
同时,我们可以使用 coefplot
命令将平行趋势检验和各期政策效果以图形的形式表示出来。具体关于 coefplot
命令的介绍,可参考连享会推文「Stata可视化:让他看懂我的结果」。
. coefplot dynamic, keep(coeff*) vertical recast(connect) yline(0) ///
> xline(`countsmall78') ciopts(recast( > rline) lpattern(dash))
Note:产生如下推文列表的 Stata 命令为:
lianxh did, m
安装最新版lianxh
命令:
ssc install lianxh, replace
免费公开课
最新课程-直播课
专题 | 嘉宾 | 直播/回看视频 |
---|---|---|
⭐ 最新专题 | 文本分析、机器学习、效率专题、生存分析等 | |
研究设计 | 连玉君 | 我的特斯拉-实证研究设计,-幻灯片- |
面板模型 | 连玉君 | 动态面板模型,-幻灯片- |
面板模型 | 连玉君 | 直击面板数据模型 [免费公开课,2小时] |
⛳ 课程主页
⛳ 课程主页
关于我们
课程, 直播, 视频, 客服, 模型设定, 研究设计, stata, plus, 绘图, 编程, 面板, 论文重现, 可视化, RDD, DID, PSM, 合成控制法
等
连享会小程序:扫一扫,看推文,看视频……
扫码加入连享会微信群,提问交流更方便
✏ 连享会-常见问题解答:
✨ https://gitee.com/lianxh/Course/wikis
New!
lianxh
和songbl
命令发布了:
随时搜索连享会推文、Stata 资源,安装命令如下:
. ssc install lianxh
使用详情参见帮助文件 (有惊喜):
. help lianxh