{smcl}
{* *! version 1 2021-05-26}{...}
{vieweralsosee "did_imputation" "help did_imputation"}{...}
{vieweralsosee "csdid" "help csdid"}{...}
{vieweralsosee "did_multiplegt" "help did_multiplegt"}{...}
{vieweralsosee "eventstudyinteract" "help eventstudyinteract"}{...}
{vieweralsosee "did_multiplegt" "help did_multiplegt"}{...}
{vieweralsosee "estimates store" "help estimates store"}{...}
{viewerjumpto "Syntax" "event_plot##syntax"}{...}
{viewerjumpto "The list of models" "event_plot##listmodels"}{...}
{viewerjumpto "Options" "event_plot##options"}{...}
{viewerjumpto "Combining plots" "event_plot##combine"}{...}
{viewerjumpto "Usage examples" "event_plot##usage"}{...}
{title:Description}
{pstd}
{bf:event_plot} - Plot the staggered-adoption diff-in-diff ("event study") estimates: coefficients post treatment ("lags") and, if available, pre-trend coefficients ("leads") along with confidence intervals (CIs).
{pstd}
This command is used once estimates have been produced by the imputation estimator of Borusyak et al. 2021 ({help did_imputation}),
other methods robust to treatment effect heterogeneity ({help did_multiplegt}, {help csdid}, {help eventstudyinteract}), and conventional event-study OLS.
{marker syntax}{...}
{title:Syntax}
{phang}
{cmd: event_plot} [{help event_plot##listmodels:list of models}] [, {help event_plot##options:options}]
{marker listmodels}{...}
{title:The List of Models}
{phang}
Each term in the list of models specifies where to read the coefficient estimates (and variances) from.{p_end}
{phang}1) Leave empty or specify a dot ({bf:.}) to plot the current estimates, stored in the {cmd:e()} output;{p_end}
{phang}2) To show previously constructed estimates which were saved by {help estimates store}, provide their name;{p_end}
{phang}3) To read the estimates from an arbitrary row-vector, specify {it:bmat}{bf:#}{it:vmat} where:{p_end}
{pmore}- {it:bmat} is the name of the coefficient matrix or an expression to access it, e.g. r(myestimates) (with no internal spaces).
This should be a row-vector;{p_end}
{pmore}- {it:vmat} is the name of the variance matrix or an expression to access it.
This can be a square matrix or a row-vector of invidiual coefficient variances, and it is optional
(i.e. {it:bmat}{bf:#} would plot the coefs without CIs).{p_end}
{phang}By including several terms like this, you can combine several sets of estimates on one plot, see {help event_plot##combine:Combining plots}.
{marker options}{...}
{title:Options}
{pstd}
These options are designs for a showing single plot. Please see {help event_plot##combine:Combining plots} for adjustments and additional options when plots are combined.
{dlgtab:Which Coefficients to Show}
{phang}{opt stub_lag(prefix#postfix)}: a template for how the relevant coefficients are called in the estimation output.
No lag coefficients will be shown if {opt stub_lag} is not specified, except after {cmd:did_imputation} (in which case {opt stub_lag(tau#)} is assumed).
The template must include the symbol {it:#} indicating where the number is located (running from 0).{p_end}
{pmore}{it:Examples:}{p_end}
{phang2}{opt stub_lag(tau#)} means that the relevant coefficients are called tau0, tau1, ..., as with {cmd:did_imputation} (note that the postfix is empty in this example);{p_end}
{phang2}{opt stub_lag(L#xyz)} means they are called L0xyz, L1xyz, ... (note that just specifying {opt stub_lag(L#)} will not be enough in this case).
{phang}{opt stub_lead(prefix#postfix)}: same for the leads. Here the number runs from 1. {it:Examples:} {opt stub_lead(pre#)} or {opt stub_lead(F#xyz)}.
{phang}{opt trimlag(integer)}: lags 0..{bf:trimlag} will be shown, while others will be suppressed. To show none (i.e. pre-trends only), specify {opt trimlag(-1)}. The default is to show all available lags.
{phang}{opt trimlead(integer)}: leads 1..{bf:trimlead} will be shown, while others will be suppressed. To show none (i.e no pre-trends), specify {opt trimlead(0)}. The default is to show all available lags.
{dlgtab:How to Show The Coefficients}
{phang}{opt plottype(string)}: the {help twoway} plot type used to show coefficient estimates. Supported options: {help twoway connected:connected} (by default), {help line}, {help scatter}.{p_end}
{phang}{opt ciplottype(string)}; the {help twoway} plot type used to show CI estimates. Supported options:{p_end}
{phang2}- {help rarea} (default for {opt plottype(connected)} and {opt plottype(line)});{p_end}
{phang2}- {help rcap} (default for {opt plottype(scatter)});{p_end}
{phang2}- {help twoway connected:connected};{p_end}
{phang2}- {help scatter};{p_end}
{phang2}- {bf:none} (i.e. don't show CIs at all; default if SE are not available).{p_end}
{phang}{opt together}: by default the leads and lags are shown as two separate lines (as recommended by Borusyak, Jaravel, and Spiess 2021).
If {opt together} is specified, they are shown as one line, and the options for the lags are used for this line
(while the options for the leads are ignored). {p_end}
{phang}{opt shift(integer)}: Shift all coefficients to the left (when {opt shift}>0) or right (when {opt shift}<0). Specify if lag 0 actually corresponds to period -{opt shift} relative to the event time, as in the case of anticipation effects. This is similar to the {opt shift} option in {help did_imputation}. The default is zero. {p_end}
{dlgtab:Graph options}
{phang}{opt default_look}: sets default graph parameters. Additional graph options can still be specified and will be combined with these, but options cannot be repeated. See details in the {help event_plot##defaultlook:Default Look} section below. {p_end}
{phang}{opt graph_opt(string)}: additional {help twoway options} for the graph overall (e.g. {opt title}, {opt xlabel}).{p_end}
{phang}{opt lag_opt(string)}: additional options for the lag coefficient graph (e.g. {opt msymbol}, {opt lpattern}, {opt color}).{p_end}
{phang}{opt lag_ci_opt(string)}: additional options for the lag CI graph (e.g. {opt color}) {p_end}
{phang}{opt lead_opt(string)}, {opt lead_ci_opt(string)}: same for lead coefficients and CIs. Ignored if {opt together} is specified.{p_end}
{dlgtab:Legend options}
{pstd}A legend is shown by default, unless {opt together} is specified. You can either adjust the automatic legend by using {opt legend_opt()}
, or suppress or replace it by specifying {opt noautolegend} and modifying {opt graph_opt()}.{p_end}
{pmore}{it:Notes:}{p_end}
{phang2}- the order of graphs for the legend: lead coefs, lead CIs, lag coefs, lag CIs, excluding those not applicable
(e.g. CIs with {opt ciplottype(none)} or leads with {opt together}).{p_end}
{phang2}- with {opt ciplottype(connected)} or {opt ciplottype(scatter)}, each CI is two lines instead of one.{p_end}
{phang2}- if {opt together} is specified, the legend is automatically off. Use {opt noautolegend} to add a manual legend.{p_end}
{phang}{opt legend_opt(string)}: additional options for the automatic legend.{p_end}
{phang}{opt noautolegend}: suppresses the automatic legend. A manual legend (or the {opt legend(off)} option) should be added to {opt graph_opt()}.{p_end}
{dlgtab:Miscellaneous}
{phang}{opt savecoef}: save the data underlying the plot in the current dataset, e.g. to later use it in more elaborate manual plots.
Variables {it:__event_H#}, {it:__event_pos#}, {it:__event_coef#}, {it:__event_lo#}, and {it:__event_hi#} will be created for each model {it:#}=1,..., where:{p_end}
{phang2}- {it:H} is the number of periods relative to treatment;{p_end}
{phang2}- {it:pos} is the x-coordinate (equals to {it:H} by default but modified by {opt perturb} and {opt shift});{p_end}
{phang2}- {it:coef} is the point estimate;{p_end}
{phang2}- [{it:lo},{it:hi}] is the CI.{p_end}
{phang}{opt reportcommand}: report the command for the plot. Use it together with {opt savecoef} to then create more elaborate manual plots.{p_end}
{phang}{opt noplot}: do not show the plot (useful together with {opt savecoef}).{p_end}
{phang}{opt alpha(real)}: CIs will be shown for the confidence level {opt alpha}. Default is 0.05. {p_end}
{phang}{opt verbose}: debugging mode.{p_end}
{marker combine}{...}
{title:Combining plots}
{phang}Up to 8 models can be combined, e.g. to show how the estimates differ between {cmd:did_imputation} and OLS, or between males and females.
{phang}With several models, additional options are available, while the syntax and meaning of others is modified: {p_end}
{phang2}{opt perturb(numlist)}: shifts the plots horizontally relative to each other, so that the estimates are easier to read. The numlist is the list of x-shifts, and the default is an equally spaced sequence from 0 to 0.2 (but negative numbers are allowed). To prevent the shifts, specify {opt perturb(0)}. {p_end}
{phang2}{opt lag_opt#(string)}, {opt lag_ci_opt#(string)}, {opt lead_opt#(string)}, {opt lead_ci_opt#()} for #=1,...,5: extra parameters
for individual models (e.g. colors). Similar options without an index, e.g. {opt lag_opt()}, are passed to all relevant graphs. {p_end}
{phang2}{opt stub_lag}, {opt stub_lead}, {opt trim_lag}, {opt trim_lead}, {opt shift} can be specified either as a list of values (one per plot), or as just one value to be used for all plots.{p_end}
{phang2}{opt plottype} and {opt together} are currently required to be the same for all graphs.{p_end}
{marker defaultlook}{...}
{title:Default Look}
{phang} With one model, specifying {opt default_look} is equivalent to including these options:{p_end}
{phang2}{opt graph_opt(xline(0, lcolor(gs8) lpattern(dash)) yline(0, lcolor(gs8)) graphregion(color(white)) bgcolor(white) ylabel(, angle(horizontal)))}
{opt lag_opt(color(navy))} {opt lead_opt(color(maroon) msymbol(S))}
{opt lag_ci_opt(color(navy%45 navy%45))} {opt lead_ci_opt(color(maroon%45 maroon%45))}
{opt legend_opt(region(lstyle(none)))}
{phang}With multiple models, the only difference is in colors. Both lags and leads use the same color: navy for the first plot, maroon for the second, etc.{p_end}
{marker usage}{...}
{title:Usage examples}
1) Estimation + plottting via {help did_imputation}:
{cmd:did_imputation Y i t Ei, autosample hor(0/20) pretrend(14)}
{cmd:estimates store bjs} {it:// you need to store the coefs only to combined the plots, see Exanple 3}
{cmd:event_plot, default_look graph_opt(xtitle("Days since the event") ytitle("Coefficients") xlabel(-14(7)14 20))}
2) Estimation + plotting via conventional OLS-based event study estimation:
{it:// creating dummies for the lags 0..19, based on K = number of periods since treatment (or missing if there is a never-treated group)}
{cmd:forvalues l = 0/19} {
{cmd:gen L`l'event = K==`l'}
}
{cmd:gen L20event = K>=20} {it:// binning K=20 and above}
{it:// creating dummies for the leads 1..14}
{cmd:forvalues l = 0/13} {
{cmd:gen F`l'event = K==-`l'}
}
{cmd:gen F14event = K<=-14} {it:// binning K=-14 and below}
{it:// running the event study regression. Drop leads 1 and 2 to avoid underidentification}
{it://if there is no never-treated group (could instead drop any others); see Borusyak et al. 2021}
{cmd:reghdfe outcome o.F1event o.F2event F3event-F14event L*event, a(i t) cluster(i)}
{it:// plotting the coeffients}
{cmd:event_plot, default_look stub_lag(L#event) stub_lead(F#event) together plottype(scatter)} ///
{cmd:graph_opt(xtitle("Days since the event") ytitle("OLS coefficients") xlabel(-14(7)14 20))}
3) Combining estimates from {help did_imputation} OLS:
{cmd:event_plot bjs ., stub_lag(tau# L#event) stub_lead(pre# F#event) together plottype(scatter) default_look} ///
{cmd:graph_opt(xtitle("Days since the event") ytitle("OLS coefficients") xlabel(-14(7)14 20))}
4) For estimation + plotting with {help csdid}, {help did_multiplegt}, and {help eventstudyinteract}, as well as {help did_imputation}
and traditional OLS, see our example on GitHub: five_estimators_example.do at {browse "https://github.com/borusyak/did_imputation"}
{title:Missing Features}
{phang}- More flexibility for {opt stub_lag} and {opt stub_lead} for reading the coefficients of conventional event studies{p_end}
{phang}- Automatic support of alternative robust estimators: {cmd:did_multiplegt}, {cmd:csdid}, and {cmd:eventstudyinteract}{p_end}
{phang}- Allow {opt plottype} and {opt together} to vary across the combined plots{p_end}
{pstd}
If you are interested in discussing these or others, please {help event_plot##author:contact me}.
{title:References}
{phang}{it:If using this command, please cite:}
{phang}
Borusyak, Kirill, Xavier Jaravel, and Jann Spiess (2021). "Revisiting Event Study Designs: Robust and Efficient Estimation," Working paper.
{p_end}
{title:Acknowledgements}
{pstd}
We thank Kyle Butts for the help in preparing this helpfile.
{marker author}{...}
{title:Author}
{pstd}
Kirill Borusyak (UCL Economics), k.borusyak@ucl.ac.uk