【stata】自写命令分享dynamic_est,实现DID、ES一键出图

2024-09-06

最早是我用来checkdata的,后来为了方便就写成了函数。现在我稍微完善了一下,封装成了stata外部命令,能够实现一句命令查看outcome var在treat作用下的dynamic effect。


Content

1. 命令简介

dynamic_est 是一个用于可视化动态效应(dynamic effect)的工具。它特别适用于事件研究(event study)或双重差分(Difference-in-Differences, DID)分析。通过一句命令即可展示动态效应,帮助用户更好地理解在某变量的作用下,随时间变化其对结果变量的影响。

在输出的图像中,为了让结果更加直观,我加入了各期的系数、标准误,也标注了显著性

fig1

2.命令选项

(1) 主要选项

dynamic_est {outcome_var} , treat({varlist}) time({varlist}) ref({numeric}) 

dynamic_est 需要以下四个必需变量:

  • y: 结果变量(outcome variable),即你想要观察的因变量。
  • treat: 分组变量
    • 可以是二元变量,用于区分处理组(treatment group)或对照组(control group)
    • 也支持强度(intensity)变量
  • time: 时间变量
    • 支持自然年份(standard-spec.)
    • 相对年份(staggered-spec.)
  • ref: 基期选择,数值型,如{2006} 或 {-1},用于定义reference period。

(2) 其他选项

除了以上的必需变量,dynamic_est 还支持以下可选参数:

  • absorb(string): 可吸收的固定效应或控制变量
  • cluster(varlist): 聚类变量,用于调整标准误
  • cov(string): 模型中要包含的协变量
  • level(string): 置信区间水平,默认为90%,可选值为909599
  • regtype(string): 回归类型,可选择reg(默认的OLS)或ppml(泊松伪极大似然估计)
  • figname(string): 输出图形的文件名
  • figtitle(string): 图形的标题
  • figsubtitle(string): 图形的副标题

3.安装方法

已上传ssc

ssc install dynamic_est,replace 

或者从我的仓库中获取

net install dynamic_est, from("https://mengke25.github.io/files/function/stata/dynamic_est") replace

如果安装失败,可通过邮件向我索取。因为是自用命令,可能还有很多不完善的地方,如果有什么建议或者问题,欢迎私信我

allenmeng97@gmail.com

uibemk@126.com

4.示例

(1) 基本用法

standard-spec.

dynamic_est lnv , treat(treat) time(year) ref(2009) 

staggered-spec.

dynamic_est lnv , treat(treat) time(t) ref(-1) 

(2) 进阶用法

dynamic_est lnv , treat(treat_intens) time(year) ref(2009) absorb(id year) cluster(id) regtype(reg)

(3) 帮助文件

help

5.写在最后

需要补充说明的是,dynamic effect并不完全等同于DID中的平行趋势检验。 上文所谓的standard-spec和staggered-spec是为了区分数据的范式

  • 在standard-spec情形下,time是自然时间,此时dynamic effect结果可以被看做平行趋势检验结果。例如,在这种情况下,以下两组代码等价:
    ppmlhdfe Active i(2016/2019).year#i1.Tr_cate if year>=2015 , /// 
    a(id_cate#country_j year#country_j) cluster(country_j) 
    
dynamic_est Active if year>=2015,treat(Tr_cate) time(year) ref(2015) /// 
absorb(id_cate#country_j year#country_j) cluster(country_j) regtype(ppml)
  • 在standard-spec情形下,
    • 不能直接用dynamic_est去直接对类似多时点的数据进行分析。
    • 需要先对panel进行处理,例如像Sun Abraham、callaway santanna等(或者用panelmatch的方法)对panel进行重构成,才能进行分析。
    • 关于panel-data的重构,我也po出了对panel data restruct的思考以及相关的代码
    • 此外,我写的另一个外部命令(欢迎使用)twfe_stgdid可以直接对staggered-spec的数据进行分析。

转载请注明出处@mengke25

请喝咖啡打赏渠道