33.9 Biases in Event Studies
Event studies are subject to several biases that can affect the estimation of abnormal returns, the validity of test statistics, and the interpretation of results. This section discusses key biases and recommended corrections.
33.9.1 Timing Bias: Different Market Closing Times
Campbell et al. (1998) highlight that differences in market closing times across exchanges can obscure abnormal return calculations, especially for firms traded in multiple time zones.
Solution:
- Use synchronized market closing prices where possible.
- Adjust event windows based on the firm’s primary trading exchange.
33.9.2 Upward Bias in Cumulative Abnormal Returns
- The aggregation of CARs can introduce an upward bias due to the use of transaction prices (i.e., bid and ask prices).
- Issue: Prices can jump due to liquidity constraints, leading to artificially inflated CARs.
Solution:
- Use volume-weighted average prices (VWAP) instead of raw transaction prices.
- Apply robust standard errors to mitigate bias.
33.9.3 Cross-Sectional Dependence Bias
Cross-sectional dependence in returns biases the standard deviation estimates downward, leading to inflated test statistics when multiple firms experience the event on the same date.
- (MacKinlay 1997): This bias is particularly problematic when firms in the same industry or market share event dates.
- (Wiles, Morgan, and Rego 2012): Events in concentrated industries amplify cross-sectional dependence, further inflating test statistics.
Solution:
- Use Calendar-Time Portfolio Abnormal Returns (CTARs) (Jaffe 1974).
- Apply a time-series standard deviation test statistic (S. J. Brown and Warner 1980) to correct standard errors.
# Load required libraries
library(sandwich) # For robust standard errors
library(lmtest) # For hypothesis testing
# Simulated dataset
set.seed(123)
df_returns <- data.frame(
event_id = rep(1:100, each = 10),
firm_id = rep(1:10, times = 100),
abnormal_return = rnorm(1000, mean = 0.02, sd = 0.05)
)
# Cross-sectional dependence adjustment using clustered standard errors
model <- lm(abnormal_return ~ 1, data = df_returns)
coeftest(model, vcov = vcovCL(model, cluster = ~event_id))
#>
#> t test of coefficients:
#>
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 0.0208064 0.0014914 13.951 < 2.2e-16 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
33.9.4 Sample Selection Bias
Event studies often suffer from self-selection bias, where firms self-select into treatment (the event) based on private information. This is similar to omitted variable bias, where the omitted variable is the private information that led the firm to take the action.
33.9.5 Corrections for Sample Selection Bias
Heckman Two-Stage Model (Acharya 1993)
Problem: Hard to find a strong instrument that meets the exclusion restriction.
Solution: Estimate the Mills ratio (λ) to account for private information in firm decisions.
Counterfactual Observations
- **Propensity Score Matching**: Matches firms experiencing an event with similar firms that did not.
- **Switching Regression**: Compares outcomes across two groups while accounting for unobserved heterogeneity.
- Heckman Selection Model
A Heckman selection model can be used when private information influences both event participation and abnormal returns.
Examples: Y. Chen, Ganesan, and Liu (2009); Wiles, Morgan, and Rego (2012); Fang, Lee, and Yang (2015)
Steps:
First Stage (Selection Equation): Model the firm’s probability of experiencing the event using a Probit regression.
Second Stage (Outcome Equation): Model abnormal returns, controlling for the estimated Mills ratio (λ).
# Load required libraries
library(sampleSelection)
# Simulated dataset for Heckman model
set.seed(123)
df_heckman <- data.frame(
firm_id = 1:500,
event = rbinom(500, 1, 0.3), # Event occurrence (selection)
firm_size = runif(500, 1, 10), # Firm characteristic
abnormal_return = rnorm(500, mean = 0.02, sd = 0.05)
)
# Introduce selection bias by correlating firm_size with event occurrence
df_heckman$event[df_heckman$firm_size > 7] <- 1
# Heckman Selection Model
heckman_model <- selection(
selection = event ~ firm_size, # Selection equation
outcome = abnormal_return ~ firm_size, # Outcome equation
data = df_heckman
)
# Summary of Heckman model
summary(heckman_model)
#> --------------------------------------------
#> Tobit 2 model (sample selection model)
#> Maximum Likelihood estimation
#> Newton-Raphson maximisation, 6 iterations
#> Return code 8: successive function values within relative tolerance limit (reltol)
#> Log-Likelihood: 165.4579
#> 500 observations (239 censored and 261 observed)
#> 6 free parameters (df = 494)
#> Probit selection equation:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) -1.75936 0.15793 -11.14 <2e-16 ***
#> firm_size 0.33933 0.02776 12.22 <2e-16 ***
#> Outcome equation:
#> Estimate Std. Error t value Pr(>|t|)
#> (Intercept) 0.006025 0.040359 0.149 0.881
#> firm_size 0.001311 0.004205 0.312 0.755
#> Error terms:
#> Estimate Std. Error t value Pr(>|t|)
#> sigma 0.049048 0.002836 17.297 <2e-16 ***
#> rho 0.188195 0.421944 0.446 0.656
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#> --------------------------------------------
Interpretation
If the Mills ratio (λ) is significant, it indicates that private information affects CARs.
Weak instruments can lead to multicollinearity, making the second-stage estimates unreliable.
- Propensity Score Matching
PSM matches event firms with similar non-event firms, controlling for selection bias.
Examples of PSM in Finance and Marketing:
# Load required libraries
library(MatchIt)
# Simulated dataset
set.seed(123)
df_psm <- data.frame(
firm_id = 1:1000,
event = rbinom(1000, 1, 0.5), # 50% of firms experience an event
firm_size = runif(1000, 1, 10),
market_cap = runif(1000, 100, 10000)
)
# Propensity score matching (PSM)
match_model <- matchit(event ~ firm_size + market_cap, data = df_psm, method = "nearest")
# Summary of matched sample
summary(match_model)
#>
#> Call:
#> matchit(formula = event ~ firm_size + market_cap, data = df_psm,
#> method = "nearest")
#>
#> Summary of Balance for All Data:
#> Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean
#> distance 0.4987 0.4875 0.2093 1.0656 0.0602
#> firm_size 5.2627 5.6998 -0.1683 1.0530 0.0494
#> market_cap 5208.5283 4868.5828 0.1163 1.0483 0.0359
#> eCDF Max
#> distance 0.1152
#> firm_size 0.0902
#> market_cap 0.0713
#>
#> Summary of Balance for Matched Data:
#> Means Treated Means Control Std. Mean Diff. Var. Ratio eCDF Mean
#> distance 0.4987 0.4898 0.1668 1.1170 0.0489
#> firm_size 5.2627 5.6182 -0.1369 1.0693 0.0404
#> market_cap 5208.5283 4949.8521 0.0885 1.0594 0.0283
#> eCDF Max Std. Pair Dist.
#> distance 0.1034 0.1673
#> firm_size 0.0872 0.6549
#> market_cap 0.0649 0.9168
#>
#> Sample Sizes:
#> Control Treated
#> All 507 493
#> Matched 493 493
#> Unmatched 14 0
#> Discarded 0 0
# Extract matched data
matched_data <- match.data(match_model)
Advantages of PSM
Controls for observable differences between event and non-event firms.
Reduces selection bias while maintaining a valid control group.
- Switching Regression
A Switching Regression Model accounts for selection on unobservables using instrumental variables.
- Example: Cao and Sorescu (2013) applied switching regression to compare two outcomes while correcting for selection bias.