Expected Return Models

Expected return models estimate what a stock's return would have been without the event. The EventStudy R package provides 15 models — from the Market Model to Fama-French, GARCH, and DCC-GARCH — to calculate the benchmark against which abnormal returns are measured.

Part of the Methodology Guide

This page is part of the Event Study Methodology Guide.

The expected return model determines how "normal" returns are estimated during the estimation window. Abnormal returns are the difference between actual and expected returns. The EventStudy R package provides 15 models, from simple benchmarks to multi-factor, volatility, and time-varying parameter models.

Choosing the right expected return model is critical for isolating event effects. Research by Campbell, Lo, and MacKinlay (1997) shows that for short-window event studies of 3 to 11 days, the Market Model and multi-factor models produce similar results in over 90% of cases. The choice of model matters most for long-horizon studies and for small-cap or high-beta stocks where factor exposures diverge substantially from the market average.

Which Expected Return Models Are Available?

An expected return model is a statistical specification that estimates what a stock's return would have been in the absence of the event, using data from a pre-event estimation window. The difference between the actual return and this model-predicted benchmark constitutes the abnormal return. The choice of model directly affects the precision of abnormal return estimates: according to Campbell, Lo, and MacKinlay (1997), the Market Model typically explains 20% to 40% of the variance in individual stock returns, and models with additional risk factors can improve this to 30% to 50%.

Market Model
A single-factor OLS regression of stock returns on market index returns, producing firm-specific alpha and beta estimates. Used in approximately 75% of published event studies.
Factor Model
A multi-factor extension (e.g., Fama-French 3-Factor or 5-Factor) that controls for additional systematic risk exposures such as size, value, profitability, and investment patterns.
GARCH Model
A volatility model that allows the variance of returns to change over time, capturing volatility clustering commonly observed around corporate announcements and macroeconomic events.
ModelR ClassFactorsBest For
Market ModelMarketModelMarketGeneral purpose (default)
Market AdjustedMarketAdjustedModelMarketLimited data, quick analysis
Mean AdjustedComparisonPeriodMeanAdjustedModelNoneNo market index available
Fama-French 3-FactorFamaFrench3FactorModelMkt + SMB + HMLSize/value effects
Fama-French 5-FactorFamaFrench5FactorModelMkt + SMB + HML + RMW + CMAComprehensive risk adjustment
Carhart 4-FactorCarhart4FactorModelFF3 + MomentumMomentum-driven events
GARCH(1,1)GARCHModelMarket + GARCHVolatility clustering
BHARBHARModelMarketLong-horizon studies
Volume ModelVolumeModelMarketAbnormal trading volume
Volatility ModelVolatilityModelMarketAbnormal return variance
Rolling WindowRollingWindowModelMarketTime-varying parameters
DCC-GARCHDCCGARCHModelMarket + DCCTime-varying beta & correlation
Linear FactorLinearFactorModelCustomCustom factor specifications
Custom ModelCustomModelUser-definedFull flexibility

Which Model Should I Choose?

Use the following decision tree:

  • No market index data? → Mean Adjusted Model
  • Need factor risk adjustment?
    • Size + Value → Fama-French 3-Factor
    • + Profitability + Investment → Fama-French 5-Factor
    • + Momentum → Carhart 4-Factor
  • Volatility clustering?
    • Constant correlation → GARCH Model
    • Time-varying correlation → DCC-GARCH Model
  • Parameters unstable over time? → Rolling Window Model
  • Long horizon (> 12 months)? → BHAR Model
  • Studying volume or volatility? → Volume Model or Volatility Model
  • Standard short-window study? → Market Model

Default recommendation

The Market Model is the standard choice in event study literature. Start here unless you have a specific reason to use a different model. Run diagnostics to check if the fit is adequate.

How Do I Configure Models in R?

All models are passed via the ParameterSet:

Configure and run with Market Model
# Default: Market Model
ps <- ParameterSet$new(return_model = MarketModel$new())

task <- EventStudyTask$new(firm_data, index_data, request)
task <- run_event_study(task, ps)

# Model fit statistics
model_diagnostics(task)

Switching models is a one-line change:

Switch between models
# Use a different model
ps <- ParameterSet$new(return_model = MarketAdjustedModel$new())
ps <- ParameterSet$new(return_model = ComparisonPeriodMeanAdjustedModel$new())
ps <- ParameterSet$new(return_model = GARCHModel$new())

Statistical Models

Market Model

The most widely used model in event studies, employed in approximately 75% of published short-window studies since the 1990s. It estimates a linear relationship between stock and market returns during the estimation window, typically using 120 to 250 trading days of pre-event data.

Ri,t=αi+βiRm,t+εi,tR_{i,t} = \alpha_i + \beta_i \cdot R_{m,t} + \varepsilon_{i,t}
  • αi\alpha_i: stock return unexplained by the market (intercept)
  • βi\beta_i: sensitivity to market movements (slope)
  • εi,t\varepsilon_{i,t}: firm-specific residual

Abnormal return:

ARi,t=Ri,t(α^i+β^iRm,t)AR_{i,t} = R_{i,t} - (\hat{\alpha}_i + \hat{\beta}_i \cdot R_{m,t})
ProsCons
Simple, well-understoodAssumes constant alpha, beta
Few data requirementsIgnores size, value, momentum factors
Standard in the literatureSensitive to estimation window choice

Market Adjusted Model

Assumes the stock's expected return equals the market return — no estimation window regression needed.

ARi,t=Ri,tRm,tAR_{i,t} = R_{i,t} - R_{m,t}
ProsCons
No estimation window requiredIgnores firm-specific risk exposure
Works with limited dataLess accurate for high-beta stocks

Comparison Period Mean Adjusted Model

Uses the stock's own average return during the estimation window as the expected return. No market index needed.

ARi,t=Ri,tRˉiAR_{i,t} = R_{i,t} - \bar{R}_i

where Rˉi\bar{R}_i is the mean return during the estimation window.

ProsCons
No market data neededIgnores market-wide movements
Simple to computeBiased if market trends during event window

Market Model with Scholes-Williams Beta

Adjusts for non-synchronous trading (thin trading, different market hours) by estimating beta using lagged market returns.

βiSW=Cov(Ri,t,  Rm,t+ρRm,t1)Var(Rm,t+ρRm,t1)\beta_i^{SW} = \frac{\text{Cov}(R_{i,t},\; R_{m,t} + \rho \cdot R_{m,t-1})}{\text{Var}(R_{m,t} + \rho \cdot R_{m,t-1})}
ProsCons
Corrects for thin trading biasMore complex estimation
Better for illiquid stocksRequires lagged returns

GARCH(1,1) Model

Models time-varying volatility. Useful when return variance is not constant — common around earnings announcements, crises, and macro events.

Ri,t=αi+βiRm,t+εi,t,εi,tN(0,σi,t2)R_{i,t} = \alpha_i + \beta_i \cdot R_{m,t} + \varepsilon_{i,t}, \quad \varepsilon_{i,t} \sim N(0, \sigma^2_{i,t})
σi,t2=ω+α1εi,t12+β1σi,t12\sigma^2_{i,t} = \omega + \alpha_1 \varepsilon^2_{i,t-1} + \beta_1 \sigma^2_{i,t-1}
ProsCons
Captures volatility clusteringRequires longer estimation window
Better standard errorsSlower to estimate
More realistic for crisis eventsMay not converge for all stocks
R
ps <- ParameterSet$new(return_model = GARCHModel$new())

Economic Models

Fama-French 3-Factor Model

Extends the Market Model with size (SMB) and value (HML) factors, as introduced by Fama and French (1993). Controls for the tendency of small-cap and value stocks to earn higher returns. The 3-factor model typically achieves an R-squared of 30% to 50% for individual stocks, compared to 20% to 40% for the single-factor Market Model.

Ri,tRf=αi+β1(Rm,tRf)+β2SMBt+β3HMLt+εi,tR_{i,t} - R_f = \alpha_i + \beta_1 (R_{m,t} - R_f) + \beta_2 \cdot \text{SMB}_t + \beta_3 \cdot \text{HML}_t + \varepsilon_{i,t}
ProsCons
Controls for size and value effectsRequires factor data (e.g., from Kenneth French's website)
More precise abnormal returnsMore complex to set up
R
ps <- ParameterSet$new(return_model = FamaFrench3FactorModel$new())
task <- EventStudyTask$new(firm_data, index_data, request, factor_tbl = ff3_data)

Carhart 4-Factor Model

Adds a momentum factor (WML — Winners Minus Losers) to the Fama-French 3-Factor Model. Controls for the tendency of recent winners to continue outperforming.

Ri,tRf=αi+β1(Rm,tRf)+β2SMBt+β3HMLt+β4WMLt+εi,tR_{i,t} - R_f = \alpha_i + \beta_1 (R_{m,t} - R_f) + \beta_2 \cdot \text{SMB}_t + \beta_3 \cdot \text{HML}_t + \beta_4 \cdot \text{WML}_t + \varepsilon_{i,t}
R
ps <- ParameterSet$new(return_model = Carhart4FactorModel$new())

Fama-French 5-Factor Model

Adds profitability (RMW — Robust Minus Weak) and investment (CMA — Conservative Minus Aggressive) to the 3-Factor Model.

Ri,tRf=αi+β1(RmRf)+β2SMB+β3HML+β4RMW+β5CMA+εi,tR_{i,t} - R_f = \alpha_i + \beta_1 (R_m - R_f) + \beta_2 \text{SMB} + \beta_3 \text{HML} + \beta_4 \text{RMW} + \beta_5 \text{CMA} + \varepsilon_{i,t}

The most comprehensive risk adjustment available. Use when you want to rule out that abnormal returns are compensation for known risk factors.

R
ps <- ParameterSet$new(return_model = FamaFrench5FactorModel$new())

Special-Purpose Models

BHAR (Buy-and-Hold Abnormal Returns)

For long-horizon event studies (months to years). Computes the difference between compounded stock returns and compounded benchmark returns.

BHARi=t=1T(1+Ri,t)t=1T(1+Rm,t)BHAR_{i} = \prod_{t=1}^{T}(1 + R_{i,t}) - \prod_{t=1}^{T}(1 + R_{m,t})
ProsCons
Appropriate for long horizonsNot suitable for short windows
Captures compounding effectsSensitive to rebalancing frequency
R
ps <- ParameterSet$new(return_model = BHARModel$new())

Volume Model

Measures abnormal trading volume instead of abnormal price returns. Useful for studying information arrival, liquidity events, or market attention.

R
ps <- ParameterSet$new(
  return_model = VolumeModel$new(),
  study_type = "volume"
)

Volatility Model

Measures abnormal return volatility. Useful for studying uncertainty around events — does the event increase or decrease return variance?

R
ps <- ParameterSet$new(
  return_model = VolatilityModel$new(),
  study_type = "volatility"
)

Time-Varying Parameter Models

Rolling Window Model

Allows market model parameters (α\alpha, β\beta) to vary over time by re-estimating on a rolling window. Captures structural breaks and gradual parameter shifts that the standard Market Model misses.

Ri,t=αi,w+βi,wRm,t+εi,tR_{i,t} = \alpha_{i,w} + \beta_{i,w} \cdot R_{m,t} + \varepsilon_{i,t}

where αi,w\alpha_{i,w} and βi,w\beta_{i,w} are estimated using observations in window w=[th,t]w = [t - h, t] with configurable window size hh.

R
ps <- ParameterSet$new(return_model = RollingWindowModel$new(window_size = 60))
ProsCons
Captures time-varying risk exposureRequires longer estimation period
No distributional assumptions on parametersNoisier estimates with small windows
Simple to implement and interpretSensitive to window size choice

Window size

A window of 60 trading days (~3 months) balances responsiveness and stability. Shorter windows capture faster changes but produce noisier estimates.

DCC-GARCH Model

Models both time-varying volatility and time-varying correlation between stock and market returns using the Dynamic Conditional Correlation framework of Engle (2002). The beta is re-estimated at each time step based on the conditional covariance matrix.

βi,t=him,thmm,t\beta_{i,t} = \frac{h_{im,t}}{h_{mm,t}}

where him,th_{im,t} is the conditional covariance from a DCC-GARCH(1,1) model and hmm,th_{mm,t} is the conditional market variance.

R
ps <- ParameterSet$new(return_model = DCCGARCHModel$new())
ProsCons
Captures time-varying beta and correlationComputationally intensive
Theoretically grounded (Engle 2002)Requires rmgarch package
More realistic for crisis and structural break periodsMay not converge for all stock-market pairs

When to use DCC-GARCH

Use when you suspect both volatility and the stock-market relationship change over time — common around financial crises, regime changes, or for stocks undergoing fundamental business model shifts.

Custom Models

Linear Factor Model / Custom Model

For custom specifications. LinearFactorModel lets you define arbitrary factors; CustomModel gives full control over the estimation procedure.

Custom factor model
# Custom factor model
ps <- ParameterSet$new(return_model = LinearFactorModel$new())
task <- EventStudyTask$new(firm_data, index_data, request, factor_tbl = my_factors)

Literature

  • Campbell, J.Y., Lo, A.W. & MacKinlay, A.C. (1997). The Econometrics of Financial Markets.
  • Kolari, J.W. & Pynnonen, S. (2010). Event Studies for Financial Research.
  • Wooldridge, J.M. (2019). Econometrics.

Implement this with the R package

Access advanced features and full customization through the EventStudy R package.

What Should I Read Next?

We use cookies for analytics to improve this site. See our Privacy Policy.