分享

双重差分安慰剂检验代码

 我是张金康呀 2021-01-18

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

最后放上一张图:

致谢:谢王奇师兄提供原始代码并提供讲解


看,图并发送关键词安慰剂后台获取本文代码

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多