Markets: A Rigorous Course

12.3 Aggregating across events and firms

Advanced about 20 min

Suppose there are NN events (or firms), each with its own CARiCAR_i, Var⁡^(CARi)\widehat{\operatorname{Var}}(CAR_i) and SCARiSCAR_i.

12.3.1Tests under independence#

J1 (MacKinlay) Assume the CARs are independent across ii:

CAR‾=1N∑iCARi,J1=CAR‾1N2∑iVar⁡^(CARi) ∼a N(0,1).(12.10)\overline{CAR}=\frac1N\sum_iCAR_i,\qquad J_1=\frac{\overline{CAR}}{\sqrt{\frac1{N^2}\sum_i\widehat{\operatorname{Var}}(CAR_i)}}\ \overset{a}{\sim}\ N(0,1). \tag{12.10}

Cross-sectional tt Estimate the variance of CAR‾\overline{CAR} from the cross-section itself:

tCS=CAR‾sCAR/N,sCAR2=1N−1∑i(CARi−CAR‾)2.(12.11)t_{CS}=\frac{\overline{CAR}}{s_{CAR}/\sqrt N},\qquad s_{CAR}^2=\frac1{N-1}\sum_i(CAR_i-\overline{CAR})^2. \tag{12.11}

This is robust to event-induced variance but ignores the precision differences across firms.

Proposition 12.3Patell test

Under the assumptions of Proposition 12.2 and independence across ii, with L1>4L_1>4,

ZPatell=∑i=1NSCARiN L1−2L1−4 →d N(0,1)(N→∞).(12.12)Z_{\text{Patell}}=\frac{\sum_{i=1}^NSCAR_i}{\sqrt{N\,\frac{L_1-2}{L_1-4}}}\ \xrightarrow{d}\ N(0,1)\quad (N\to\infty). \tag{12.12}
Proof

By Proposition 12.2 each SCARi∼tνSCAR_i\sim t_\nu with ν=L1−2\nu=L_1-2, which has mean 0 and variance ν/(ν−2)=(L1−2)/(L1−4)\nu/(\nu-2)=(L_1-2)/(L_1-4). The SCARiSCAR_i are independent with identical mean and variance. The Lindeberg–Lévy CLT applies to their sum, which has variance N(L1−2)/(L1−4)N(L_1-2)/(L_1-4).∎

This is the multi-day version used by Campbell, Lo and MacKinlay (their J2J_2). Patell (1976, J. Accounting Research 14(2) [V]) standardised each day's AR by (12.7) and summed. Standardising gives more weight to precisely estimated, low-variance firms, so it is more powerful than J1 when firm variances differ.

12.3.2Event-induced variance and BMP#

Event-induced variance Suppose the event multiplies the disturbance variance in the event window by k>1k>1 but has no mean effect. Then Var⁡(CARi)≈kσi2L2\operatorname{Var}(CAR_i)\approx k\sigma_i^2L_2, while the estimate uses σ^i2\hat\sigma_i^2 from calm times. So Var⁡(SCARi)≈k(L1−2)/(L1−4)\operatorname{Var}(SCAR_i)\approx k(L_1-2)/(L_1-4), and ZPatell≈N(0,k)Z_{\text{Patell}}\approx N(0,k). The rejection rate at nominal 5% becomes P(∣N(0,1)∣>1.96/k)P(|N(0,1)|>1.96/\sqrt k), which is about 33% for k=4k=4. The same applies to J1. The tests mistake a volatility event for a mean event.

Proposition 12.4BMP test, Boehmer, Musumeci and Poulsen 1991

Let

tBMP=SCAR‾sSCAR/N,sSCAR2=1N−1∑i(SCARi−SCAR‾)2.(12.13)t_{\text{BMP}}=\frac{\overline{SCAR}}{s_{SCAR}/\sqrt N},\qquad s^2_{SCAR}=\frac1{N-1}\sum_i(SCAR_i-\overline{SCAR})^2. \tag{12.13}

If the event scales every firm's event-window variance by a common kk and has no mean effect, then tBMP→dN(0,1)t_{\text{BMP}}\xrightarrow{d}N(0,1) as N→∞N\to\infty for any k>0k>0.

Proof

Under the stated alternative-variance null, the SCARiSCAR_i are i.i.d. with mean 0 and variance ω2≈k(L1−2)/(L1−4)\omega^2 \approx k(L_1-2)/(L_1-4), whatever kk is. The sample variance sSCAR2→ω2s^2_{SCAR}\to\omega^2 in probability by the law of large numbers. N SCAR‾/ω→N(0,1)\sqrt N\,\overline{SCAR}/\omega\to N(0,1) by the CLT. Slutsky's theorem gives the result.∎

BMP keeps the efficiency gain from standardisation (precise firms weigh more) and the robustness of a cross-sectional variance. (Reference: J. Financial Economics 30(2):253–272 [V].)

Simulation evidence These figures come from m12_event_study.py: 30 firms, L1=240L_1=240, window [−1,1][-1,1], idiosyncratic sd 1.5%, market factor from toolkit.data.synthetic_returns, nominal 5%, critical value 1.96.

Scenario J1 Patell BMP Cross-sectional tt
No event (400 sims) 5.8% 5.5% 7.3% 7.3%
+2% day-0 effect (200 sims) 100% 99.5% 99.5% 99.5%
+0.5% day-0 effect (400 sims) 21.8% 21.5% 20.5% 20.5%
Variance ×4 in window, no mean effect (400 sims) 28.8% 29.3% 6.5% 5.8%

The slight over-rejection of BMP and the cross-sectional tt under the null comes from using 1.96 instead of the t29t_{29} critical value 2.045. With N=30N=30, the cross-sectional standard deviation is itself noisy.

12.3.3Clustering and other caveats#

Clustering and cross-correlation All of (12.10)–(12.13) assume independence across ii. Geopolitical events are the extreme case of event clustering: every stock reacts on the same calendar day. Common shocks not captured by the market model (sector, oil, rupee) then correlate the ARs. If the average pairwise correlation of abnormal returns is ρˉ\bar\rho,

Var⁡(AR‾)=σ2N[1+(N−1)ρˉ].\operatorname{Var}(\overline{AR})=\frac{\sigma^2}{N}\left[1+(N-1)\bar\rho\right].

With N=30N=30 and ρˉ=0.1\bar\rho=0.1 the variance is 3.9 times what independence assumes, so tt-statistics are about twice too large. Remedies:

  1. Form a portfolio of the event firms and run a single time-series test on its return, which builds the correlation into σ^2\hat\sigma^2.
  2. Use the Kolari–Pynnönen (2010) adjustment of BMP, which multiplies tBMPt_{\text{BMP}} by (1−rˉ)/(1+(N−1)rˉ)\sqrt{(1-\bar r)/(1+(N-1)\bar r)}, with rˉ\bar r the average estimation-window residual correlation (Rev. Financial Studies 23(11):3996–4025 [V]).
  3. Add the common factors (Brent, USDINR) to the normal-return model.

Other caveats

  • Overlapping windows. Two events whose windows overlap (for example a war and a tariff truce) are not separately identified. The 12 May 2025 Nifty jump coincided with both the India–Pakistan ceasefire and the US–China tariff truce. No event study can split the two on that day's data alone.
  • Anticipation and leakage. If information leaks, the effect appears before τ=0\tau=0. Widen the window to the left, or use intraday data around the timestamp. In 2026 there were press reports of large oil-futures positions placed shortly before official statements on Iran [S]. Treat such reports as a reason for caution about day-0 timing, not as established fact.
  • Volatility changes after the event. These bias post-event tests that use pre-event σ\sigma. Re-estimate σ\sigma on a post-event window, or use BMP.
  • Multiple testing. Running many windows and many assets will find "significant" CARs by chance (M04 on multiple testing). Fix the window and the asset list before looking at the data.

Create a free account

Reading is open to everyone. An account keeps your progress, answers, notes and code drafts, and gives you the study plan, the journals and the simulator. Running code needs an account approved for it.