Markets: A Rigorous Course

12.2 Abnormal returns and their exact distribution

Core about 25 min

Motivation

On 24 Feb 2022 the Nifty fell 4.78%. Was that the invasion, or an unusually bad day that would have happened anyway? This section turns the question into a test: estimate what a normal day looks like, measure how far the event days were from it, and work out exactly how far is too far to be noise.

Reading guide

The setup, the definitions of AR and CAR, the statements of Propositions 12.1–12.2 and the worked example are for every reader; if you have read the event-study primer in M06A · 6A.2 you already have the mechanics. The proofs (folded below) are advanced and can be skipped on a first reading.

Notationas in 12.1

  • Event time τ\tau counts trading days, with τ=0\tau=0 the first session that could react to the news.
  • The estimation window τ∈[T0+1,T1]\tau\in[T_0+1,T_1] has L1L_1 days, here [−250,−11][-250,-11] with L1=240L_1=240. The event window τ∈[T1+1,T2]\tau\in[T_1+1,T_2] has L2L_2 days, for example [0,+4][0,+4] with L2=5L_2=5.
  • RiτR_{i\tau} is the return of asset ii, RmτR_{m\tau} that of the market proxy. The normal-return model is the market model (12.1), Riτ=αi+βiRmτ+εiτR_{i\tau}=\alpha_i+\beta_iR_{m\tau}+\varepsilon_{i\tau} with Var⁡(εiτ)=σi2\operatorname{Var}(\varepsilon_{i\tau})=\sigma_i^2; the constant-mean model drops βiRmτ\beta_i R_{m\tau}.
  • A star marks the event window: Ri∗R_i^* and X∗X^* are the event-window returns and regressors.

Interactive figure · m12-event-windows

12.2.1Normal returns and abnormal returns#

Estimate (12.1) by ordinary least squares (OLS) on the estimation window. In matrix form, let XX be the L1×2L_1\times2 matrix with rows (1,Rmτ)(1,R_{m\tau}) and RiR_i the L1L_1-vector of returns:

θ^i=(α^iβ^i)=(X′X)−1X′Ri,(12.2)\hat\theta_i=\begin{pmatrix}\hat\alpha_i\\\hat\beta_i\end{pmatrix}=(X'X)^{-1}X'R_i, \tag{12.2}
σ^i2=1L1−2(Ri−Xθ^i)′(Ri−Xθ^i).(12.3)\hat\sigma_i^2=\frac{1}{L_1-2}(R_i-X\hat\theta_i)'(R_i-X\hat\theta_i). \tag{12.3}

The abnormal return (AR) on an event-window day is the return minus what the model predicted for that day:

ARiτ=Riτ−α^i−β^iRmτ,τ∈[T1+1,T2].(12.4)AR_{i\tau}=R_{i\tau}-\hat\alpha_i-\hat\beta_iR_{m\tau}, \qquad \tau\in[T_1+1,T_2]. \tag{12.4}

Stack these as the L2L_2-vector ARi∗=Ri∗−X∗θ^iAR_i^*=R_i^*-X^*\hat\theta_i.

12.2.2Why abnormal returns are correlated#

Key idea

An abnormal return is noisier than the day's own noise σi\sigma_i, because α^i\hat\alpha_i and β^i\hat\beta_i are estimates. Their error is the same on every day of the event window, so it does not average out: the abnormal returns of different days are positively correlated, and the error grows on days when the market itself moves a lot, which is exactly what geopolitical news does.

Proposition 12.1distribution of abnormal returns

Assume, conditional on market returns, that the εiτ\varepsilon_{i\tau} are i.i.d. (independent and identically distributed) N(0,σi2)N(0,\sigma_i^2) in both windows, and that under the null hypothesis H0H_0 of no event effect, (12.1) holds in the event window too. Then

ARi∗∣X,X∗∼N ⁣(0,  Vi),Vi=σi2[IL2+X∗(X′X)−1X∗′].(12.5)AR_i^*\mid X,X^*\sim N\!\left(0,\;V_i\right),\qquad V_i=\sigma_i^2\left[I_{L_2}+X^*(X'X)^{-1}X^{*\prime}\right]. \tag{12.5}
Proof

Under H0H_0, Ri∗=X∗θi+εi∗R_i^*=X^*\theta_i+\varepsilon_i^* and θ^i=θi+(X′X)−1X′εi\hat\theta_i=\theta_i+(X'X)^{-1}X'\varepsilon_i. So

ARi∗=εi∗−X∗(X′X)−1X′εi.(12.6)AR_i^* = \varepsilon_i^* - X^*(X'X)^{-1}X'\varepsilon_i. \tag{12.6}

This is a linear function of jointly normal vectors, so it is normal with mean zero. The two windows do not overlap, so εi∗\varepsilon_i^* and εi\varepsilon_i are independent and

Var⁡(ARi∗)=σi2I+X∗(X′X)−1X′(σi2I)X(X′X)−1X∗′=σi2[I+X∗(X′X)−1X∗′].\operatorname{Var}(AR_i^*) = \sigma_i^2I + X^*(X'X)^{-1}X'(\sigma_i^2I)X(X'X)^{-1}X^{*\prime} = \sigma_i^2\left[I+X^*(X'X)^{-1}X^{*\prime}\right].

∎

In (12.5) the first term, σi2I\sigma_i^2 I, is the day's own noise. The second term is estimation error: α^,β^\hat\alpha,\hat\beta are noisy, and that noise is common to every day in the event window. So abnormal returns are positively correlated across days within the window, even with i.i.d. disturbances. For a single day, the diagonal element is

Var⁡(ARiτ)=σi2[1+1L1+(Rmτ−Rˉm)2∑s(Rms−Rˉm)2],(12.7)\operatorname{Var}(AR_{i\tau})=\sigma_i^2\left[1+\frac1{L_1}+\frac{(R_{m\tau}-\bar R_m)^2}{\sum_{s}(R_{ms}-\bar R_m)^2}\right], \tag{12.7}

using the standard inverse of the 2×22\times2 matrix X′XX'X. A large market move on the event day inflates the variance through the last term. This matters for geopolitical events, which move the market.

12.2.3The cumulative abnormal return and its exact test#

The cumulative abnormal return (CAR) adds the abnormal returns over the window. Let γ\gamma be the L2L_2-vector of ones (or of ones on a sub-window). Then

CARi=γ′ARi∗,Var⁡(CARi)=γ′Viγ=σi2[L2+γ′X∗(X′X)−1X∗′γ].(12.8)CAR_i=\gamma'AR_i^*,\qquad \operatorname{Var}(CAR_i)=\gamma'V_i\gamma=\sigma_i^2\left[L_2+\gamma'X^*(X'X)^{-1}X^{*\prime}\gamma\right]. \tag{12.8}

For the constant-mean model, XX is a column of ones, X′X=L1X'X=L_1, and (12.8) becomes σi2(L2+L22/L1)\sigma_i^2(L_2+L_2^2/L_1).

Proposition 12.2exact tt-test

Under the assumptions of Proposition 12.1, the standardised CAR

SCARi=CARiσ^i2 γ′[I+X∗(X′X)−1X∗′]γ∼tL1−2.(12.9)SCAR_i=\frac{CAR_i}{\sqrt{\hat\sigma_i^2\,\gamma'[I+X^*(X'X)^{-1}X^{*\prime}]\gamma}} \sim t_{L_1-2}. \tag{12.9}
Proof
  1. By (12.8), Z=CARi/Var⁡(CARi)∼N(0,1)Z=CAR_i/\sqrt{\operatorname{Var}(CAR_i)}\sim N(0,1).
  2. (L1−2)σ^i2/σi2∼χL1−22(L_1-2)\hat\sigma_i^2/\sigma_i^2\sim\chi^2_{L_1-2}, the usual OLS result: the residual vector is MεiM\varepsilon_i with M=I−X(X′X)−1X′M=I-X(X'X)^{-1}X' idempotent (MM=MMM=M: it projects onto the residual space) of rank L1−2L_1-2.
  3. The residuals MεiM\varepsilon_i are independent of θ^i−θi=(X′X)−1X′εi\hat\theta_i-\theta_i=(X'X)^{-1}X'\varepsilon_i, because they are jointly normal with Cov⁡=σ2MX(X′X)−1=0\operatorname{Cov}=\sigma^2 M X(X'X)^{-1}=0. They are also independent of εi∗\varepsilon^*_i, which comes from a different window.
  4. Hence σ^i2\hat\sigma^2_i is independent of ZZ, and SCARi=Z/χL1−22/(L1−2)SCAR_i = Z/\sqrt{\chi^2_{L_1-2}/(L_1-2)} is tL1−2t_{L_1-2} by definition.∎

With L1=240L_1=240 the t238t_{238} critical value at 5% two-sided is 1.970, close to the normal 1.96.

12.2.4Worked example: the Nifty on 24 Feb 2022#

Worked example 12.1single event, constant-mean model

On 24 Feb 2022, the day Russia invaded Ukraine, the Nifty 50 fell 4.78% to 16,247.951. The Nifty cannot be its own benchmark, so use the constant-mean model. Suppose the estimation window [−250,−11][-250,-11] gives a mean daily return of 0.05% and a residual standard deviation of 1.00%. These two numbers are assumptions; the lab below computes them from data. The returns are the actual Nifty closes2.

Day τ\tau Date Close Return ARτAR_\tau (return − 0.05%) CAR from day 0
0 24 Feb 2022 16,247.95 −4.78% −4.83% −4.83%
+1 25 Feb 16,658.40 +2.53% +2.48% −2.35%
+2 28 Feb 16,793.90 +0.81% +0.76% −1.59%
+3 2 Mar 16,605.95 −1.12% −1.17% −2.76%
+4 3 Mar 16,498.05 −0.65% −0.70% −3.46%
  • Day 0 alone, [0,0][0,0]: Var⁡(AR0)=0.012(1+1/240)\operatorname{Var}(AR_0)=0.01^2(1+1/240), so sd⁡=1.002%\operatorname{sd}=1.002\%, t=−4.83/1.002=−4.82t=-4.83/1.002=-4.82 and p≈3×10−6p\approx3\times10^{-6}.
  • Five days, [0,+4][0,+4]: CAR=−3.46%CAR=-3.46\%, and by (12.8) sd⁡=1.00%×5+25/240=2.26%\operatorname{sd}=1.00\%\times\sqrt{5+25/240}=2.26\%, so t=−1.53t=-1.53 and p≈0.13p\approx0.13.

The one-day effect is unmistakable. The five-day CAR is not significant: the next day's rebound and four days of ordinary noise swamp it. Window length is a power choice. By (12.8), for a 5% one-day shock with 1.5% daily noise, a single-firm test at the t238t_{238} critical value detects it 91% of the time with a [0,0][0,0] window, 48% with [−1,+1][-1,+1] and 16% with [−5,+5][-5,+5]; the timeline figure above shows each case, and exercise m12_event_study confirms it by simulation.

Practitioner notes

  • Fat tails (M02) mean the exact tt result is only approximate. A 5-sigma day in a GARCH world (volatility that clusters, M02) is less rare than the tt tail says. For a single event, compare the AR with the empirical distribution of estimation-window returns, a bootstrap or rank test, as well as the tt.
  • Volatility rises around geopolitical events. Using estimation-window σ\sigma then overstates significance after the event; see the Boehmer–Musumeci–Poulsen (BMP) test in 12.3.

Data lab Open on OI Charts (opens in a new tab)

Event study on real data: Nifty, Brent, gold and the rupee around a shock

The lab downloads daily closes for the Nifty 50, Brent and gold futures and USDINR, sets day 0 to the first session of each market on or after the event date, estimates a constant-mean model on the 240 returns in [−250,−11][-250, -11], and plots cumulative abnormal returns over [−5,+20][-5, +20]. The band is ±1.96\pm1.96 times the standard deviation of the CAR under no event effect, σ^iL+L2/L1\hat\sigma_i\sqrt{L + L^2/L_1}, the constant-mean case of (12.8). The table reports AR0AR_0 with the tt-ratio of (12.7), and the CARs over [0,+4][0, +4] and [−5,+20][-5, +20] with their tt-ratios (12.9). Switch events to compare 24 Feb 2022 with 7 Apr 2025 and 7 May 2025.

What to look at Worked example 12.1 used assumed estimation-window numbers; here they come from the data. Check whether the day-0 abnormal return is significant while the 26-day CAR is not, and whether the CARs leave the band before day 0 (leakage or anticipation, 12.3).

Questions

  1. For 24 Feb 2022, compare the Nifty's AR0AR_0 and its tt with worked example 12.1. Why does the CAR over [−5,+20][-5, +20] have so much less power?
  2. Brent and gold futures settle in US hours. Is 24 Feb the right day 0 for them, given the timing rules of 12.1? What changes if you treat 25 Feb as day 0?
  3. Volatility rose after the event. Using the discussion of event-induced variance in 12.3, are the post-event tt-ratios overstated or understated?
  4. The four assets react on the same calendar day. Why does that make a pooled test across them (12.10) invalid, and which remedy from 12.3 would you use?

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.