Skip to content

Instantly share code, notes, and snippets.

@scunning1975
Created February 20, 2022 14:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save scunning1975/e99a845d0f697491ba378f19f3256c52 to your computer and use it in GitHub Desktop.
Save scunning1975/e99a845d0f697491ba378f19f3256c52 to your computer and use it in GitHub Desktop.
********************************************************************************
* name: baker.do
* author: scott cunningham (baylor) adapting andrew baker (stanford)
* description: illustrate TWFE with differential timing and
* heterogenous treatment effects over time
* last updated: jan 5, 2022
********************************************************************************
clear
capture log close
set seed 20200403
* 1,000 firms (25 per state), 40 states, 4 groups (250 per groups), 30 years
* First create the states
set obs 40
gen state = _n
* Finally generate 1000 firms. These are in each state. So 25 per state.
expand 25
bysort state: gen firms=runiform(0,5)
label variable firms "Unique firm fixed effect per state"
* Second create the years
expand 30
sort state
bysort state firms: gen year = _n
gen n=year
replace year = 1980 if year==1
replace year = 1981 if year==2
replace year = 1982 if year==3
replace year = 1983 if year==4
replace year = 1984 if year==5
replace year = 1985 if year==6
replace year = 1986 if year==7
replace year = 1987 if year==8
replace year = 1988 if year==9
replace year = 1989 if year==10
replace year = 1990 if year==11
replace year = 1991 if year==12
replace year = 1992 if year==13
replace year = 1993 if year==14
replace year = 1994 if year==15
replace year = 1995 if year==16
replace year = 1996 if year==17
replace year = 1997 if year==18
replace year = 1998 if year==19
replace year = 1999 if year==20
replace year = 2000 if year==21
replace year = 2001 if year==22
replace year = 2002 if year==23
replace year = 2003 if year==24
replace year = 2004 if year==25
replace year = 2005 if year==26
replace year = 2006 if year==27
replace year = 2007 if year==28
replace year = 2008 if year==29
replace year = 2009 if year==30
egen id =group(state firms)
* Add 250 firms treated every period with the treatment effect still 7 on average
* Cohort years 1986, 1992, 1998, 2004
su state, detail
gen group=0
replace group=1 if state<=`r(p25)'
replace group=2 if state>`r(p25)' & state<=`r(p50)'
replace group=3 if state>`r(p50)' & state<=`r(p75)'
replace group=4 if state>`r(p75)' & `r(p75)'!=.
gen treat_date = 0
replace treat_date = 1986 if group==1
replace treat_date = 1992 if group==2
replace treat_date = 1998 if group==3
replace treat_date = 2004 if group==4
gen treat=0
replace treat=1 if group==1 & year>=1986
replace treat=1 if group==2 & year>=1992
replace treat=1 if group==3 & year>=1998
replace treat=1 if group==4 & year>=2004
* Data generating process
gen e = rnormal(0,(0.5)^2)
gen te1 = rnormal(10,(0.2)^2)
gen te2 = rnormal(8,(0.2)^2)
gen te3 = rnormal(6,(0.2)^2)
gen te4 = rnormal(4,(0.2)^2)
gen te = .
replace te = te1 if group == 1
replace te = te2 if group == 2
replace te = te3 if group == 3
replace te = te4 if group == 4
***********************************************************************************************************************
* DGP: heterogeneous versus constant (but always across group heterogeneity)
* Cumulative treatment effect is te x (year - t_g + 1) -- Dynamic treatment effects over time for each group.
* How does (year - treat_date + 1) create dynamic ATT? Assume treat_date is 1992 and it is year 2000. Then, te=8 x (2000 - 1992 + 1) = 8 x (9) = 72. Group 2's TE rises from an 8 up to 72 in the t+8 year.
***********************************************************************************************************************
* Constant treatment effects. Notice, the treatment effect is constant.
gen y2 = firms + n + te*treat + e // parallel trends IN EVERY PERIOD.
* Data generating process with heterogeneity over time
gen y = firms + n + treat*te*(year - treat_date + 1) + e
* For group 1, the ATT in 1986 is 10
* For group 1, the ATT in 1987 is 20
* For group 1, the ATT in 1988 is 30 and so on
* This is what we mean by "dynamic treatment effects" or "heterogeneity over time"
** Estimation
* Estimation using TWFE - constant treatment effects
areg y2 i.year treat, a(id) robust
* Estimation using TWFE - heterogenous treatment effects over time
areg y i.year treat, a(id) robust
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment