Power Analysis & Simulation
Before running an event study, a natural question arises: will my test detect the effect if it exists? Power analysis via Monte Carlo simulation answers this by generating synthetic data with a known effect, running the event study many times, and counting how often the test correctly rejects the null.
Power analysis prevents wasted research effort by quantifying the likelihood of detecting a true effect before data collection begins. Research by Kothari and Warner (2007) demonstrates that with daily data and a cross-sectional t-test, a sample of 20 firms achieves roughly 50% power to detect a 1% abnormal return, while increasing the sample to 50 firms raises power above 80% at the 5% significance level.
Why Is Power Analysis Important?
Power analysis in event studies is a simulation-based procedure that determines the probability of detecting a true abnormal return of a given magnitude, conditional on sample size, test statistic, and event window design. As demonstrated by Brown and Warner (1985) in their seminal Monte Carlo study, a sample of 20 firms with daily data achieves roughly 50% power to detect a 1% abnormal return using a cross-sectional t-test, while 50 firms raise power above 80%. Power analysis is essential for avoiding underpowered studies that waste resources by being unlikely to detect economically meaningful effects.
| Question | Power Analysis Answers |
|---|---|
| Is my sample size sufficient? | Rejection rate for given N, effect size, and test |
| Which test is most powerful? | Compare rejection rates across test statistics |
| How large must the effect be? | Minimum detectable effect at 80% power |
| Does window length matter? | Power as a function of event window width |
Rule of thumb
A study should have at least 80% power (detect the effect 80% of the time when it exists). If power is below 50%, the study is more likely to miss the effect than find it.
How Does Monte Carlo Simulation Work?
Algorithm
- Specify a data-generating process (DGP): Define how stock returns are generated, including the abnormal return you want to detect.
- Simulate many datasets: Generate synthetic datasets from the DGP.
- Run the event study on each: Apply your chosen model and test statistic.
- Count rejections: The fraction of simulations where the test rejects is the estimated power.
Running in R
# Power analysis: can we detect a 1% abnormal return with 20 firms?
sim_result <- simulate_event_study(
n_events = 20,
n_simulations = 500,
abnormal_return = 0.01,
estimation_window_length = 120,
event_window = c(-2, 2),
alpha = 0.05
)
sim_resultParameters
Simulation Parameters
| Parameter | Description | Default |
|---|---|---|
| n_events | Number of events (firms) in each simulation | 20 |
| n_simulations | Number of Monte Carlo replications | 1000 |
| abnormal_return | True abnormal return injected at event date | 0 |
| estimation_window_length | Length of estimation window (trading days) | 120 |
| event_window | Event window as c(start, end) | c(-5, 5) |
| alpha | Significance level | 0.05 |
| return_model | Model to use (e.g., MarketModel$new()) | Market Model |
| test_statistic | Test to evaluate (e.g., "CSectT") | "CSectT" |
| dgp_params | Data-generating process parameters (list) | list() |
How Do I Interpret Power Curves?
Power curves plot rejection rates against a varying design parameter. Typical event studies achieve 80% power with 30–50 firms for a 1% abnormal return, but require 100+ firms to detect a 0.5% effect. Vary one parameter at a time to see how power changes:
# Power as a function of sample size
sizes <- c(10, 20, 30, 50, 100)
power_by_n <- sapply(sizes, function(n) {
sim <- simulate_event_study(
n_events = n,
n_simulations = 500,
abnormal_return = 0.01
)
sim$power
})
data.frame(n_events = sizes, power = round(power_by_n, 3))# Power as a function of effect size
effects <- c(0.005, 0.01, 0.015, 0.02, 0.03)
power_by_effect <- sapply(effects, function(ar) {
sim <- simulate_event_study(
n_events = 30,
n_simulations = 500,
abnormal_return = ar
)
sim$power
})
data.frame(abnormal_return = effects, power = round(power_by_effect, 3))What Is Size Analysis?
Under the null (), the rejection rate should equal . If it exceeds , the test over-rejects (inflated Type I error). According to Brown and Warner (1985), well-specified tests should produce rejection rates between 4% and 6% at the 5% nominal level across 1,000 simulations, while poorly specified tests can over-reject at rates of 10–25%.
# Size check: rejection rate under H0
size_result <- simulate_event_study(
n_events = 30,
n_simulations = 1000,
abnormal_return = 0, # No effect
alpha = 0.05
)
# Should be close to 0.05
size_result$rejection_rateInterpreting Size Analysis
| Outcome | Interpretation | Action |
|---|---|---|
| Rejection rate ≈ 0.05 | Test is correctly sized | Safe to use |
| Rejection rate >> 0.05 | Test over-rejects | Use a robust alternative (e.g., BMP, Rank) |
| Rejection rate << 0.05 | Test is conservative | Lower power, but valid |
- Statistical Power
- The probability that a test correctly rejects the null hypothesis when the alternative is true (i.e., when a real abnormal return exists). A study with 80% power has a 20% chance of a Type II error (missing a true effect).
- Minimum Detectable Effect (MDE)
- The smallest abnormal return that can be detected at 80% power given the sample size, volatility, and event window. For typical daily stock returns with 3% annualized volatility, the MDE with 30 firms is approximately 0.8%.
- Data-Generating Process (DGP)
- The statistical model used to simulate synthetic returns in Monte Carlo experiments, specifying the distribution of normal returns, the abnormal return magnitude, and the variance structure.
Design Recommendations
| Design Choice | Impact on Power | Recommendation |
|---|---|---|
| More firms | Higher power | Aim for N ≥ 30 |
| Longer estimation window | Better variance estimate | Use 120+ days |
| Narrower event window | Less noise | Use [-1, +1] unless theory suggests wider |
| Lower σ (less volatile stocks) | Higher power | No control, but be aware of differences |
| BMP or Rank test | Higher power under non-normality | Use when residuals are non-normal |
Literature
- Brown, S.J. & Warner, J.B. (1985). Using daily stock returns: The case of event studies. Journal of Financial Economics, 14(1), 3–31.
- Kolari, J.W. & Pynnönen, S. (2010). Event Studies for Financial Research.
- Campbell, J.Y., Lo, A.W. & MacKinlay, A.C. (1997). The Econometrics of Financial Markets. Chapter 4.
Implement this with the R package
Access advanced features and full customization through the EventStudy R package.
What Should I Read Next?
- Test Statistics — choose the right test for your study
- Inference & Robustness — wild bootstrap and multiple testing corrections
- Diagnostics & Export — validate results before publication