双重差分安慰剂检验代码
DID安慰剂检验
DID进行政策分析的重要假设是满足平行趋势。在实证分析中,除了要检验平行趋势,一般情况还需要进行安慰剂检验。本文主要介绍如何随机抽取样本作为处理组来进行安慰剂检验。以下是全部代码,在进行分析前手头需要有placebo.dta
这一数据集,id
这一数据集是仅包括个体识别码和时间的数据,从placebo.dta
中截取。本文未能提供原始数据(样本量太大)。下面对代码进行逐一解读。
use id,clear
///调用id数据
sample 1
///随机选1%个样本后续用于作为处理组
keep id
///仅保留id这一代码
save temp,replace
///保存为temp文件,用于后续合并使用
use placebo,clear
///调用本文主要的使用数据
merge m:1 id using temp
///与前文随机生成的1%的样本数据集合并
cap drop treat
///如果数据集有treat这一变量,则删除
gen treat =(_merge==3)
///将前面随机生成的1%样本设置为处理组
drop _merge
///删除多余变量
save placebo_did,replace
///这一步好像有点多余
reghdfe aqiind c.treat#c.post htmpt ltmpt , $absorb $cluster
///进行回归,注意这里定义了两个global,前文没有呈现
parmest,format (estimate min95 max95 %8.2f p %8.3f) saving('temp1.dta', replace)
///将回归结果系数保存到temp1数据集中
use 'temp1.dta', clear
keep if parm=='c.treat#c.post'
///仅保留关心的系数
save 'simulations.dta', replace
///将结果保存到simulation数据集中
下面部分是对上一个模块的循环,设置循环200次。循环主要体现在下面的sample
这一命令。其余就是不断生成估计的系数,然后使用append命令将结果合并在一起。
forvalues i=1(1)200{ use id,clear sample 1 //随机选1%个样本 keep id save temp,replace use placebo,clear merge m:1 id using temp cap drop trea gen treat =(_merge==3) drop _merge save placebo_did,replace reghdfe aqiind c.treat#c.post htmpt ltmpt , $absorb $cluster parmest,format (estimate min95 max95 %8.2f p %8.3f) saving('temp1.dta', replace) use 'temp1.dta', clear keep if parm=='c.treat#c.post' append using 'simulations.dta' save 'simulations.dta', replace}
这一部分是对处理得到的数据进行绘图。使用的命令为dpplot
,其余均为绘图的常规操作,此处不再赘述。
use 'simulations.dta',clear
dpplot estimate ,xline(0,lc(black*0.5) ) xline(-14.414,lc(red*0.5) lp(dash) ) ///
xlabel(-15(5)15) xtitle('Treatment Effect',size(*0.8)) ytitle('Density',size(*0.8)) note('') caption('')
graph export '安慰剂检验.png', replace
最后放上一张图:
点亮在看,截图并发送关键词安慰剂至后台获取本文代码。