如何在STATA中从TWFE系数图中移除事件年份?
事件研究系数图移除事件年份的Stata代码反馈
针对你要在异质性处理时点(1990-2018年县任意时点接受处理)的事件研究中移除系数图事件年份的需求,结合你提供的代码,给出如下专业反馈:
一、现有代码的核心问题
变量生成冗余:
- 你生成了
Hurr_Surface1-10和Hurr_Lead0-10,但实际仅用到前6期的滞后与领先变量,多余变量会占用不必要的内存,建议缩小循环范围至1/6和0/6。 - 手动逐个生成
MajLag和MajLead系列虚拟变量过于繁琐,完全可以用循环简化,减少重复代码出错概率。
- 你生成了
系数图未实现“移除事件年份”需求:
- 你当前仅修改了事件当年(
MajLead0)的标签,但并未将其从系数图中剔除,需在coefplot选项中添加drop(MajLead0)来实现移除。 coeflabels中的变量顺序混乱,会导致x轴相对时点(-6到-1、1到6)排列无序(比如先显示0,再显示1-6,最后显示-1到-6),完全不符合事件研究图的阅读逻辑。
- 你当前仅修改了事件当年(
回归设定的潜在优化点:
- 针对异质性处理时点的事件研究,更严谨的做法是先生成每个县的处理年份(如首次遭遇飓风的年份),再计算相对时间变量
rel_year = year - treat_year,接着基于rel_year生成对应虚拟变量(排除基准组,比如rel_year==-1)。你当前手动生成滞后/领先变量的方式虽可行,但如果存在重复处理的情况,可能会导致变量定义偏差。
- 针对异质性处理时点的事件研究,更严谨的做法是先生成每个县的处理年份(如首次遭遇飓风的年份),再计算相对时间变量
二、修正后的代码示例
1. 简化变量生成代码
xtset fips year // 仅生成需要的6期滞后与领先变量 forvalues i = 1/6 { by fips (year), sort: gen Hurr_Surface`i' = L`i'.vmax_sust } forvalues i = 0/6 { by fips (year), sort: gen Hurr_Lead`i' = F`i'.vmax_sust } // 用循环批量生成飓风事件虚拟变量 forvalues i = 1/6 { by fips (year), sort: gen MajLag`i' = inrange(Hurr_Surface`i', 48, 299) } forvalues i = 0/6 { by fips (year), sort: gen MajLead`i' = inrange(Hurr_Lead`i', 48, 299) }
2. 回归与系数图修正(移除事件年份+调整时点顺序)
// 按相对时点从远到近的顺序定义处理变量列表 local treat_vars MajLead6 MajLead5 MajLead4 MajLead3 MajLead2 MajLead1 MajLag1 MajLag2 MajLag3 MajLag4 MajLag5 MajLag6 local i = 1 foreach dep_var in `dep_vars' { qui xtreg `dep_var' `treat_vars' , fe vce(cluster fips) estimates store Wage_Reg`i' local i = `i' + 1 } coefplot (Wage_Reg1, label("贫困率") pstyle(p4)) /// , vertical drop(_cons MajLead0) // 移除常数项和事件当年的系数 yline(0) msize(1) msymbol(D) byopts(yrescale xrescale row(2)) /// // 按x轴逻辑顺序设置时点标签 coeflabels(MajLead6 = "-6" /// MajLead5 = "-5" /// MajLead4 = "-4" /// MajLead3 = "-3" /// MajLead2 = "-2" /// MajLead1 = "-1" /// MajLag1 = "1" /// MajLag2 = "2" /// MajLag3 = "3" /// MajLag4 = "4" /// MajLag5 = "5" /// MajLag6 = "6") /// legend(off) xlabel(, angle(45)) xtitle({stSerif: 相对事件时点}, size(3) color(gs5)) /// ylabel(, angle(45)) ytitle({stSerif: 系数}, size(3) color(gs5)) /// subtitle(, size(3) margin(none) justification(center) color(gs5) bcolor(white) bmargin(top_bottom))
三、关键注意事项
- 移除事件年份:
drop(MajLead0)会直接从系数图中剔除事件当年的系数;如果仅想隐藏标签而非移除系数,可将coeflabels中MajLead0的标签设为空字符串。 - 时点顺序:必须保证
treat_vars中的变量顺序为从最远的领先期(-6)到最近的领先期(-1),再到最近的滞后期(1)到最远的滞后期(6),这样x轴才会呈现符合逻辑的事件前后效应变化。 - 异质性处理时点适配:若你的“处理”定义为县首次遭遇飓风,建议先生成每个县的首次处理年份
first_treat_year,再计算相对时间变量,以此生成虚拟变量,避免重复处理对结果的干扰。
内容的提问来源于stack exchange,提问作者Anupam Ghosh
相关产品推荐
相关产品推荐

