Tutorials › Causal Inference › Worked Example: Constructing a Cohort-Specific Event Study

Staggered Adoption and Event Studies · Tutorial 628 of 972

Worked Example: Constructing a Cohort-Specific Event Study

Work through a hypothetical staggered-adoption panel to calculate cohort-by-event-time effects and build a dynamic profile while accounting for changing control groups and cohort support.

Advanced 10 min read

What You'll Learn

  • Define cohort-specific effects by adoption cohort and event time.
  • Identify untreated control cohorts separately for each cohort-time comparison.
  • Calculate event-time difference-in-differences contrasts from panel means.
  • Aggregate supported cohort effects using explicit cohort-size weights.
  • Explain how changing cohort composition limits interpretation of a dynamic profile.

From Adoption Cohorts to an Event-Time Profile

A staggered-adoption event study is assembled from comparisons, not from a single before-and-after difference. Each treated cohort has its own adoption date, its own eligible untreated controls at each calendar time, and its own sequence of post-adoption effects. The practical challenge is to keep those pieces aligned: compare the same treated cohort over the right time window, remove the corresponding change among units that remain untreated, and aggregate only cohort effects that are observed at the event time of interest.

This tutorial constructs that profile for a hypothetical balanced panel. The calculations illustrate point estimation; they do not include standard errors or confidence intervals. Earlier material on group-time effects establishes the difference-in-differences logic used here. The emphasis is on applying it consistently across cohorts and event times.

Definition: Let \(G_i\) denote unit \(i\)'s first treatment period, with \(G_i=\infty\) for a never-treated unit. Treatment is absorbing: a unit remains treated from period \(G_i\) onward. For a cohort adopting in period \(g\), event time \(k\) corresponds to calendar time \(t=g+k\). A cohort-specific event-time effect is the average treatment effect for cohort \(g\) at time \(g+k\), denoted \(\tau_{g,k}=\operatorname{ATT}(g,g+k)\), for \(k\geq 0\).

For each cohort \(g\) and post-adoption time \(t\), use \(g-1\) as the pre-treatment baseline. A natural eligible control set is the set of units still untreated at the comparison time: never-treated units and cohorts with \(G_i>t\). Units already treated by \(t\) are not controls. In particular, a cohort that is untreated at the baseline but adopts before or at \(t\) cannot serve as an untreated control for the whole comparison window.

Estimator: With a control set \(C_{g,t}\) consisting only of units untreated through time \(t\), the cohort-time difference-in-differences contrast is $$ \widehat{\tau}_{g,t} = \left(\bar{Y}_{g,t}-\bar{Y}_{g,g-1}\right) - \left(\bar{Y}_{C_{g,t},t}-\bar{Y}_{C_{g,t},g-1}\right). $$ Here \(\bar{Y}_{g,t}\) is the mean outcome for cohort \(g\) in period \(t\), and \(\bar{Y}_{C_{g,t},t}\) is the mean among eligible controls in that period. The event-time estimate is \(\widehat{\tau}_{g,k}=\widehat{\tau}_{g,g+k}\).

This contrast identifies the cohort-specific effect under the relevant causal assumptions. There must be no anticipation, so outcomes for cohort \(g\) at baseline \(g-1\) are unaffected by future treatment. In the absence of treatment, the average outcome change from \(g-1\) to \(t\) for cohort \(g\) must equal the corresponding change for its eligible controls. Outcomes and treatment must be consistently defined, and one unit's treatment must not change another unit's outcome. For the arithmetic below, assume a complete balanced panel with stable cohort membership. In an application, these assumptions require substantive consideration; observed means alone cannot establish them.

Worked Example: Mapping the Cohorts and Eligible Controls

Worked Example: Mapping the Cohorts and Eligible Controls

Suppose a hypothetical panel follows four groups over six periods. Three groups adopt in periods 3, 4, and 5; the fourth is never treated. The table gives each group's size and observed mean outcome. All figures are hypothetical.

GroupAdoption periodNumber of unitsPeriod 1Period 2Period 3Period 4Period 5Period 6
Cohort A340404247515458
Cohort B430606264687275
Cohort C520303234364247
Never treated\(\infty\)50505254565860

For cohort A at event time \(k=0\), the target period is \(t=3\). Cohorts B and C have not yet adopted, and the never-treated group remains untreated, so all three are eligible controls. At \(k=1\), \(t=4\), cohort B is treated and must be excluded; cohorts C and the never-treated group remain eligible. At \(k=2\), \(t=5\), only the never-treated group remains untreated. At \(k=3\), \(t=6\), it is still the only eligible control.

The same rule gives cohort B controls C and the never-treated group at \(k=0\), then only the never-treated group at \(k=1\) and \(k=2\). For cohort C, the never-treated group is the eligible control at both \(k=0\) and \(k=1\). This changing support is part of the design, not a clerical detail: a treated cohort that has adopted cannot be put back into the control pool merely because it is a convenient comparison group.

The example's untreated outcome paths are stipulated to increase by 2 units per period in every group. The observed post-adoption means incorporate treatment effects on top of that common untreated trend. Thus the example satisfies the parallel-trends condition by construction, and there is no anticipation in the pre-adoption means. In real data, those counterfactual features are assumptions, not directly observed facts.

Calculating Cohort-by-Event-Time Contrasts

The baseline is cohort-specific: for adoption in period \(g\), subtract the cohort's mean in period \(g-1\), not a universal period for every cohort. The controls' change must use that same pair of calendar periods. When the control set contains multiple cohorts, pool their means using their numbers of units; this is equivalent to calculating the mean change over all eligible control units in the balanced panel.

Worked Example: Estimating Several Effects for Cohort A

Cohort A adopts in period 3, so its baseline is period 2, when its mean outcome is 42. At event time zero, its mean rises from 42 to 47, a change of 5. The eligible controls are B, C, and the never-treated group, with sizes 30, 20, and 50. Their pooled means are $$ \bar{Y}_{C_{3,3},2} = \frac{30(62)+20(32)+50(52)}{100} =51, \qquad \bar{Y}_{C_{3,3},3} = \frac{30(64)+20(34)+50(54)}{100} =53. $$ Their change is \(53-51=2\). Therefore, $$ \widehat{\tau}_{3,0} = (47-42)-(53-51) =5-2 =3. $$ Under the assumptions stated above, this estimates a treatment effect of 3 outcome units for cohort A in its first treatment period.

At event time \(k=1\), period 4, cohort B is already treated and is excluded. The eligible controls are C and the never-treated group. Their pooled mean changes from $$ \frac{20(32)+50(52)}{70}=46.2857 \quad\text{in period 2 to}\quad \frac{20(36)+50(56)}{70}=50.2857 \quad\text{in period 4}, $$ a change of 4. Cohort A's change is \(51-42=9\), so $$ \widehat{\tau}_{3,1}=(51-42)-(50.2857-46.2857)=9-4=5. $$ At \(k=2\), period 5, only the never-treated units are eligible. Their change from period 2 to period 5 is \(58-52=6\). Cohort A's change is \(54-42=12\), giving \(\widehat{\tau}_{3,2}=12-6=6\). At \(k=3\), the never-treated group's change from period 2 to period 6 is \(60-52=8\), while cohort A's change is \(58-42=16\); thus \(\widehat{\tau}_{3,3}=16-8=8\).

Worked Example: Estimating Effects for Cohorts B and C

Cohort B adopts in period 4, so its baseline is period 3, with mean 64. At \(k=0\), the eligible controls are C and the never-treated group. Their pooled mean is $$ \frac{20(34)+50(54)}{70}=48.2857 \quad\text{in period 3, and}\quad \frac{20(36)+50(56)}{70}=50.2857 \quad\text{in period 4}. $$ The control change is 2, while cohort B's change is \(68-64=4\). Hence \(\widehat{\tau}_{4,0}=4-2=2\).

At \(k=1\), only the never-treated group is eligible. From period 3 to period 5, its change is \(58-54=4\); cohort B's change is \(72-64=8\). The estimate is \(\widehat{\tau}_{4,1}=8-4=4\). At \(k=2\), the corresponding changes are \(75-64=11\) for cohort B and \(60-54=6\) for the never-treated group, giving \(\widehat{\tau}_{4,2}=11-6=5\).

Cohort C adopts in period 5 and has period 4 as its baseline, with mean 36. The never-treated group is its eligible control at both supported event times. At \(k=0\), cohort C changes by \(42-36=6\), while controls change by \(58-56=2\), so \(\widehat{\tau}_{5,0}=6-2=4\). At \(k=1\), the changes from period 4 to period 6 are 11 for cohort C and 4 for the never-treated group, yielding \(\widehat{\tau}_{5,1}=11-4=7\).

Why the Difference-in-Differences Contrast Identifies the Effect

The subtraction has a direct justification. Write \(Y_{it}(0)\) for unit \(i\)'s outcome at time \(t\) without treatment and \(Y_{it}(1)\) for its outcome under treatment. For a treated cohort at \(t\geq g\), consistency and no anticipation imply that its observed baseline outcome is its untreated outcome, while its observed outcome at \(t\) includes the treatment effect. Its expected change can therefore be written as $$ E[Y_{it}\mid G_i=g]-E[Y_{i,g-1}\mid G_i=g] = E[Y_{it}(0)-Y_{i,g-1}(0)\mid G_i=g]+\operatorname{ATT}(g,t). $$ Eligible controls are untreated at both dates, so their observed change equals their untreated outcome change. Parallel trends equates that expected untreated change for cohort \(g\) to the corresponding change for the eligible controls. Subtracting the control change cancels the untreated trend and leaves \(\operatorname{ATT}(g,t)\). This argument applies separately for each cohort and target period; it does not make an already-treated cohort an eligible control.

Aggregating Supported Effects

A dynamic profile summarizes cohort-specific estimates at each event time. A useful aggregation makes its weights explicit. Here, use cohort-size weights among the cohorts with estimates at that event time, renormalizing the weights when fewer cohorts have support. This targets an average of the supported cohort effects, not necessarily the effect for every cohort or a fixed population at every event time.

Worked Example: Constructing the Dynamic Profile

At event time zero, cohorts A, B, and C are all supported. Weighting by their sizes gives $$ \widehat{\tau}_{0} = \frac{40(3)+30(2)+20(4)}{40+30+20} = \frac{260}{90} = 2.889 \text{ outcome units}. $$ At event time one, all three cohorts remain supported, with estimates 5, 4, and 7: $$ \widehat{\tau}_{1} = \frac{40(5)+30(4)+20(7)}{90} = \frac{460}{90} = 5.111 \text{ outcome units}. $$ At event time two, only A and B have observed support in this panel. Renormalizing over their combined size gives $$ \widehat{\tau}_{2} = \frac{40(6)+30(5)}{40+30} = \frac{390}{70} = 5.571 \text{ outcome units}. $$ At event time three, only cohort A is supported, so the size-weighted average equals its estimate, 8 outcome units.

Event timeSupported cohortsSize-weighted estimateInterpretation of the supported average
0A, B, C2.889Average first-period effect across all three cohorts
1A, B, C5.111Average effect one period after adoption across all three cohorts
2A, B5.571Average effect two periods after adoption across A and B
3A8.000Effect three periods after adoption for A only

The profile rises across the displayed event times, but its interpretation changes as support narrows. The first two averages describe the same three cohorts; the later averages describe subsets. Thus, the difference between 5.111 at event time one and 5.571 at event time two is not automatically the average within-cohort increase for a fixed population. At event time three, the value is not a multi-cohort average at all. In an application, report the supported cohorts and weighting rule alongside each point in the profile.

Common Mistake: Reusing a Control Group After It Adopts

A tempting but incorrect shortcut is to use every cohort that was untreated at the treated cohort's baseline as a control at every later date. For cohort A, that would keep cohort B in the control set at period 4 even though B adopts in period 4. B's observed change can then include its own treatment effect, so subtracting that change no longer isolates A's effect under the stated parallel-trends argument. The correction is to re-evaluate eligibility at every target date: a control must remain untreated through that date. This can change both the size and the composition of the control group across event times.

A second interpretive caution follows from the aggregation example: a changing supported-cohort set changes what an event-time average represents. Restricting attention to the largest event time without naming its supported cohorts can make a profile appear to describe a common population when it does not. The calculations produce point estimates only; uncertainty assessment and responsible presentation require separate attention.

Key takeaway: For each adoption cohort and post-treatment event time, set the baseline to \(g-1\), include only controls untreated through the target period, calculate the cohort-specific difference-in-differences contrast, and aggregate only cohorts with support using stated weights. Interpret each profile point for the cohorts it actually contains.

Check Your Understanding

Use the definitions and hypothetical panel above to check each step of the construction.

  1. For cohort B at event time zero, why is cohort A not an eligible control, while cohort C is?
  2. For cohort C at event time zero, calculate the treated cohort change and the never-treated change from the stated table. What is the resulting contrast?
  3. Why does the event-time-two aggregate use cohorts A and B only, and why are the weights renormalized?
  4. Explain why a unit that adopts in the target period cannot be counted as untreated for that cohort-time comparison.
  5. What changes in the interpretation of the profile when its supported cohort set changes between event times one and two?
Clinical Biostats