Atlas
statminds
Multiple Comparisons (Correction Model)The underlying model family class (e.g. GLM, linear model, categorical matrix, log-linear).Parametric ReferenceStatistical methods that assume a specific probability distribution family (typically normal).12-stage workflow

Bonferroni Correction

The engine for Maximum Alpha Protection. The Bonferroni method audits multiple independent strikes on the same data, utilizing a 'Zero-Tolerance' penalty to ensure the family-wise error rate never exceeds 5%.

Model familyMultiple Comparisons (Correction Model)
Hypothesistwo-tailed (typically, but can be one-tailed)
AliasesBonferroni Adjustment · Alpha Splitting · Family-Wise Error Shield
G1
False-Positive Neutralization
Guard against 'Spurious Discoveries' that occur by chance when running dozens of simultaneous tests.
G2
Strict Significance Audit
Adjust the alpha threshold (α/k) to maintain the highest level of scientific integrity.
G3
Alpha-Shielding Strategy
Provide a conservative 'Safe Harbor' for p-values in exploratory multi-variable research.
Visual Overview Dashboard
1

What is it?

Bonferroni Correction is designed to adjust significance thresholds or confidence intervals during multiple pairwise comparisons to protect against Family-Wise Error Rate inflation.

The engine for Maximum Alpha Protection. The Bonferroni method audits multiple independent strikes on the same data, utilizing a 'Zero-Tolerance' penalty to ensure the family-wise error rate never exceeds 5%.

2

Goals & Indications

  • False-Positive Neutralization: Guard against 'Spurious Discoveries' that occur by chance when running dozens of simultaneous tests.
  • Strict Significance Audit: Adjust the alpha threshold (α/k) to maintain the highest level of scientific integrity.
  • Alpha-Shielding Strategy: Provide a conservative 'Safe Harbor' for p-values in exploratory multi-variable research.
3

Core Idea Diagram

Raw FWER InflationBonferroni FWER Limit (5%)FWER probability vs number of comparisons
4

Claims tested

H₀: H₀: For each of k comparisons, null hypothesis holds (e.g., μᵢ = μⱼ, ρ = 0, β = 0)
Hₐ: Hₐ: For at least one comparison, alternative hypothesis holds (e.g., μᵢ ≠ μⱼ, ρ ≠ 0, β ≠ 0)
5

How it works

  1. State raw significance alpha (typically 0.05) and count comparisons m.
  2. Adjust alpha threshold: alpha_corrected = alpha_raw / m.
  3. Compare each individual p-value against the corrected alpha threshold.
  4. Controls Family-Wise Error Rate (FWER) strictly at or below alpha_raw.
6

Assumptions

Multiple statistical tests conducted on same dataset: More than one hypothesis test on related data
Tests are independent or positively correlated: Bonferroni assumes worst-case (independent tests)
Inherit assumptions from underlying test: Each individual test must meet its own assumptions
7

Important Note

Bonferroni correction controls family-wise error rate (FWER) at α across k tests. Two equivalent approaches: (1) Test each comparison at α_adjusted = α/k (adjusted threshold), or (2) Multiply each p-value by k and compare to α (adjusted p-values). Most conservative multiple testing correction.

8

Worked Example

Comparisons (m)Uncorrected FWERCorrected Threshold
m = 15.0%0.0500
m = 1040.1%0.0050
m = 5092.3%0.0010
Interactive Sandbox

FWER Inflation & Correction Laboratory

Increase the number of comparisons. Observe how FWER (false positive chance) inflates rapidly, and check how Bonferroni correction controls it back under the alpha threshold.

Raw Alpha Threshold (α_raw)0.050
Number of Comparisons (m)10
Average Test Correlation (r)0.00
FWER Control Audit
Bonferroni Alpha: 0.00500
Raw FWER: 40.1%
Actual FWER: 40.1%
Corrected FWER: 4.89%
Uncorrected Error Risk: Critical
FWER Inflation Curve vs. Bonferroni
UncorrectedBonferroni
The 12-Stage Precision Workflow
01Collective Parity
Hypotheses
We test the null for a SET of hypotheses, seeking a signal that remains visible even after the multi-testing penalty.
02Independent Strikes
Assumptions
Ensuring the tests are conceptually distinct—Bonferroni is most rigorous when comparisons are not highly redundant.
03The k-Factor
Diagnostics
Defining 'k'—the exact number of comparisons planned. Over-estimating k leads to 'Information Suicide' (too much power loss).
04focus
Comparing FlowMotion recovery across 10 different clinical outcomes, ensuring any significant result is not a fluke.
05Holm-Bonferroni Pivot
Alternatives
Knowing when to switch to the Holm method for slightly more power while keeping the same strict FWER shield.
06Adjusted Alpha
Significance
Executing the α_new = .05 / k formula—the ultimate strike on the p-value landscape.
07Shielded Confidence
Effect Size
Reporting 95% Confidence Intervals that have been adjusted to match the new Bonferroni threshold.
08Power Inflation
Sample Size
Accounting for the massive N required to overcome the conservative penalty of the Bonferroni strike.
09The k-Statement
Reporting
Explicitly stating: 'To control for 10 comparisons, a Bonferroni-adjusted alpha of p < .005 was used.'
10p.adjust Logic
Software
Executing 'p.adjust(method = "bonferroni")'—the command that automatically rescales p-values for discovery.
11focus
Identifying if you are correcting for tests that shouldn't be in the 'family,' which inadvertently strangles real effects.
12focus
Tracing the logic back to the Bonferroni inequality and the foundational works of Carlo Emilio Bonferroni.
01Hypothesis test logic

Hypotheses

Pragmatic null and alternative hypotheses defined in mathematical notation.

A hypothesis is a question sharpened to a point. Ambiguity is the enemy of inference.
Logic Core
Null · H₀

H₀: For each of k comparisons, null hypothesis holds (e.g., μᵢ = μⱼ, ρ = 0, β = 0)

Alternative · Hₐ

Hₐ: For at least one comparison, alternative hypothesis holds (e.g., μᵢ ≠ μⱼ, ρ ≠ 0, β ≠ 0)

Why it matters two-tailed (typically, but can be one-tailed)

Bonferroni correction controls family-wise error rate (FWER) at α across k tests. Two equivalent approaches: (1) Test each comparison at α_adjusted = α/k (adjusted threshold), or (2) Multiply each p-value by k and compare to α (adjusted p-values). Most conservative multiple testing correction.

02Model diagnostics

Assumptions

The core mathematical criteria needed to ensure that statistical testing remains unbiased and valid.

Build your analysis on rock, not sand. Verify the mathematical foundation before building the model.
Integrity Shield
6
Assumptions
1
Critical / High Severity
How to check
Quick
Count number of statistical tests (k) conducted on same sample or closely related samples. If k ≥ 2, multiple comparison correction needed.
Rigorous
Define 'family' of tests a priori: logically related tests that address same research question. Not all tests in a paper need correction - only those in same family (e.g., all pairwise comparisons for one ANOVA, or all correlations testing one theory).
If violated
If only single test (k=1), no correction needed - report unadjusted p-value. If tests are completely independent and address different research questions (different families), consider whether correction is necessary. Overly aggressive correction across unrelated tests reduces statistical power unnecessarily.
How to check
Quick
Consider whether tests are correlated. Example: pairwise t-tests after ANOVA are positively correlated (share same control group). Correlations among variables are often positively correlated.
Rigorous
Calculate correlation matrix of test statistics if possible. Bonferroni is conservative (overly strict) when tests are positively correlated, which is common in practice.
If violated
If tests are highly correlated (not independent): Bonferroni is overly conservative (loses power). Consider: (1) Holm-Bonferroni (sequential method, uniformly more powerful); (2) Hochberg method (less conservative); (3) False Discovery Rate (FDR) methods like Benjamini-Hochberg; (4) Resampling-based methods that account for correlation structure. Note: Bonferroni is VALID but CONSERVATIVE with correlated tests - still controls FWER but sacrifices power.
How to check
Quick
For each test in the family, check assumptions of that test type. Example: if conducting multiple t-tests, check normality and equal variances for each. If multiple correlations, check linearity and outliers for each pair.
Rigorous
Bonferroni correction only adjusts p-values - it does NOT fix violations of assumptions in underlying tests. Must verify normality, homoscedasticity, linearity, etc. for each comparison separately.
If violated
If assumptions violated for underlying test: (1) Fix violations for each test (transform data, use robust methods, check outliers); (2) Use non-parametric alternatives (e.g., Spearman instead of Pearson for correlations) THEN apply Bonferroni; (3) Use permutation tests with Bonferroni adjustment. Bonferroni corrects for multiple testing, not for violated assumptions.
How to check
Quick
Ask: 'Were these comparisons specified before data collection?' Planned/confirmatory tests → apply Bonferroni. Exploratory/post-hoc searches → may be too conservative.
Rigorous
Pre-registration of hypotheses and analysis plan is best practice. If exploratory, consider FDR methods (Benjamini-Hochberg) which are designed for discovery and less conservative than FWER control.
If violated
If exploratory/data-driven (not a priori): (1) Consider FDR methods (Benjamini-Hochberg) designed for discovery; (2) Use Holm-Bonferroni as compromise (still controls FWER but more powerful); (3) Report unadjusted p-values with full transparency about exploratory nature; (4) Validate findings in independent dataset. Bonferroni is most appropriate for confirmatory testing of a priori hypotheses.
How to check
Quick
Ask: 'Are all comparisons equally important?' Bonferroni gives equal weight (α/k) to each test. If some tests more critical than others, weighted approaches may be better.
Rigorous
Consider whether false positives are equally costly across all tests. Example: in drug trials, some comparisons (efficacy) may be more important than others (secondary outcomes).
If violated
If comparisons have different importance/priority: (1) Use weighted Bonferroni (allocate α unequally based on importance); (2) Use hierarchical testing (test primary hypothesis first at α, then secondary at adjusted α); (3) Use Holm-Bonferroni with priority ordering; (4) Separate analyses for primary vs exploratory endpoints. Standard Bonferroni assumes equal importance.
How to check
Quick
Conduct power analysis for smallest expected effect at adjusted α = α/k. Example: if k=10 and α=.05, each test uses α/k = .005 (very stringent) - requires larger n than α=.05.
Rigorous
Use G*Power or similar: input expected effect size, α_adjusted = α/k, desired power (typically .80). Compare required n to actual n. Bonferroni reduces power significantly - may need 2-3× larger sample than single test.
If violated
If underpowered at α/k: (1) Increase sample size based on power analysis at α/k; (2) Use less conservative method (Holm-Bonferroni, FDR) to preserve power; (3) Reduce number of comparisons (focus on most important tests); (4) Use planned contrasts instead of all pairwise comparisons; (5) Report effect sizes and CIs alongside p-values. Bonferroni with small n often results in low power and many false negatives.
03Residual Forensics

Diagnostics

Checking residual plots and indices to examine model deviations and ensure standard error integrity.

Trust, but verify. The outliers often hold more truth than the averages.
System Health
Essential checks
  1. Number of comparisons (k) clearly stated
  2. Adjusted significance threshold: α_adjusted = α/k (or adjusted p-values)
  3. Original p-values AND adjusted p-values (or adjusted α) for each test
  4. Power analysis showing adequate power at α/k
  5. 95% confidence intervals for each effect
Recommended checks
  1. Comparison with Holm-Bonferroni (sequential Bonferroni, uniformly more powerful)
  2. False Discovery Rate (FDR) comparison (Benjamini-Hochberg) for exploratory analyses
  3. Forest plot showing all effect sizes with CIs and significance
  4. Effect sizes for each comparison (Cohen's d, r, OR, etc.)
  5. Sensitivity analysis: results at different α levels
  6. Table showing test, original p, adjusted p, decision (reject/fail to reject)
  7. Statement about test independence/correlation structure
  8. Pre-registration or a priori justification for family of tests
04Live Instances

Applied Minds

Review concrete study examples, data layout guidelines, and copy executable syntax scripts.

Theory is the map. Practice is the terrain. Simulation bridges the gap.
Applied Wisdom
Example 01

Multiple Pairwise t-tests with Bonferroni Correction (5 comparisons)

Research question: Which pairs of 4 smartphone apps differ in reducing anxiety? Design: RCT with 4 apps (Headspace, Calm, Waking Up, Control; n=30 per group). Outcome: Anxiety reduction (STAI score, 0-80 continuous). Challenge: 4 groups → k=6 pairwise comparisons. Use Bonferroni: α_adjusted = .05/6 = .0083 per test.

DesignRCT, multiple pairwise t-tests
GroupsHeadspace · Calm · Waking Up · Control
Total n120
Outcome ScaleAnxiety reduction (STAI 0-80, continuous)
# Bonferroni Correction: Multiple pairwise t-tests
# Example 1: 4 groups, 6 comparisons, α_adjusted = .05/6 = .0083

library(tidyverse)
library(effectsize)
library(ggplot2)

set.seed(2025)
data <- data.frame(
  app = rep(c("Headspace", "Calm", "Waking Up", "Control"), each=30),
  anxiety_reduction = c(
    rnorm(30, 12.5, 6.2),   # Headspace: M=12.5
    rnorm(30, 11.8, 5.9),   # Calm: M=11.8
    rnorm(30, 10.2, 6.1),   # Waking Up: M=10.2
    rnorm(30, 4.1, 5.5)     # Control: M=4.1
  )
)

cat("=== BONFERRONI CORRECTION: Multiple Pairwise t-tests ===")
cat("\n4 groups → k = 4×3/2 = 6 pairwise comparisons\n")
cat("α = .05, α_adjusted = .05/6 = .0083 per test\n\n")

# Descriptive statistics
cat("Descriptive Statistics:\n")
desc_stats <- data %>%
  group_by(app) %>%
  summarise(n = n(), M = mean(anxiety_reduction), SD = sd(anxiety_reduction))
print(desc_stats)

# All pairwise t-tests (unadjusted)
cat("\n--- Step 1: Conduct all pairwise t-tests(unadjusted) ---\n")

groups <- unique(data$app)
comparisons <- combn(groups, 2, simplify=FALSE)
results <- data.frame()

for (i in 1:length(comparisons)) {
  g1 <- comparisons[[i]][1]
  g2 <- comparisons[[i]][2]
  
  d1 <- data$anxiety_reduction[data$app == g1]
  d2 <- data$anxiety_reduction[data$app == g2]
  
  # t-test
  t_result <- t.test(d1, d2, var.equal=TRUE)  # Assuming equal variances
  
  # Cohen's d
  d <- cohens_d(d1, d2, pooled_sd=TRUE)
  
  results <- rbind(results, data.frame(
    comparison = paste(g1, "vs", g2),
    mean_diff = mean(d1) - mean(d2),
    t_stat = t_result$statistic,
    df = t_result$parameter,
    p_unadjusted = t_result$p.value,
    CI_lower = t_result$conf.int[1],
    CI_upper = t_result$conf.int[2],
    cohen_d = d$Cohens_d
  ))
}

cat("\nUnadjusted Results:\n")
print(results[, c("comparison", "mean_diff", "p_unadjusted", "cohen_d")])

# Apply Bonferroni correction
cat("\n--- Step 2: Apply Bonferroni Correction ---\n")

k <- nrow(results)
alpha <- 0.05
alpha_adjusted <- alpha / k

cat("Number of comparisons(k):", k, "\n")
cat("Family-wise α:", alpha, "\n")
cat("Adjusted α per test(Bonferroni):", round(alpha_adjusted, 4), "\n\n")

# Method 1: Adjusted significance threshold
results$sig_bonferroni_threshold <- ifelse(results$p_unadjusted < alpha_adjusted, "Yes", "No")

# Method 2: Adjusted p-values (equivalent)
results$p_bonferroni <- pmin(results$p_unadjusted * k, 1.0)  # Cap at 1.0
results$sig_bonferroni_p <- ifelse(results$p_bonferroni < alpha, "Yes", "No")

cat("Bonferroni-Adjusted Results:\n")
print(results[, c("comparison", "p_unadjusted", "p_bonferroni", "sig_bonferroni_p", "cohen_d")])

cat("\nNote: Two equivalent methods:\n")
cat("1. Test each at α_adjusted = .05/6 = .0083 (adjusted threshold)\n")
cat("2. Multiply each p by k=6, compare to α=.05 (adjusted p-values)\n\n")

# Verification: Methods give identical results
cat("Verification: Both methods identical?\n")
cat(all(results$sig_bonferroni_threshold == results$sig_bonferroni_p), "\n\n")

# Compare with R's built-in p.adjust
results$p_r_bonferroni <- p.adjust(results$p_unadjusted, method="bonferroni")
cat("Comparison with R p.adjust(method='bonferroni'):\n")
print(results[, c("comparison", "p_bonferroni", "p_r_bonferroni")])

# Power analysis
cat("\n--- Step 3: Power Analysis ---\n")
library(pwr)

# Power for detecting medium effect (d=0.5) at α_adjusted
power_bonf <- pwr.t.test(n=30, d=0.5, sig.level=alpha_adjusted, type="two.sample")$power
power_unadj <- pwr.t.test(n=30, d=0.5, sig.level=alpha, type="two.sample")$power

cat("Power to detect d=0.5 with n=30 per group:\n")
cat("  At α=.05 (unadjusted):", round(power_unadj, 3), "\n")
cat("  At α=.0083 (Bonferroni):", round(power_bonf, 3), "\n")
cat("  Power loss:", round((power_unadj - power_bonf) * 100, 1), "%\n\n")

# Visualization: Forest plot
results$comparison_clean <- factor(results$comparison, 
                                    levels=results$comparison[order(results$mean_diff)])

ggplot(results, aes(x=mean_diff, y=comparison_clean)) +
  geom_vline(xintercept=0, linetype="dashed", color="gray50", size=1) +
  geom_errorbarh(aes(xmin=CI_lower, xmax=CI_upper, 
                     color=sig_bonferroni_p), height=0.3, size=1.2) +
  geom_point(aes(color=sig_bonferroni_p), size=4) +
  scale_color_manual(values=c("Yes"="#d73027", "No"="#a6a6a6"),
                     name="Significant\n(Bonferroni)",
                     labels=c("Yes(p < .0083)", "No")) +
  labs(title="Forest Plot: Pairwise Comparisons with Bonferroni Correction",
       subtitle=paste0("α_adjusted = .05/6 = .0083 per test | FWER = .05"),
       x="Mean Difference in Anxiety Reduction(95% CI)",
       y="Pairwise Comparison") +
  theme_minimal(base_size=12) +
  theme(plot.title = element_text(face="bold", size=14))

# Comparison table
cat("\n--- Step 4: Summary Table ---\n")
summary_table <- results %>%
  select(comparison, mean_diff, p_unadjusted, p_bonferroni, cohen_d, sig_bonferroni_p) %>%
  mutate(decision = ifelse(sig_bonferroni_p == "Yes", "Reject H₀", "Fail to reject H₀"))
print(summary_table)

# APA Reporting
cat("\n--- Step 5: APA-Style Results ---\n\n")
cat(paste0(
  "Six pairwise independent-samples t-tests were conducted to compare anxiety reduction\n",
  "across four mindfulness apps. To control family-wise error rate at α = .05, Bonferroni\n",
  "correction was applied(α_adjusted = .05/6 = .0083 per test).\n\n",
  "Results revealed:\n",
  "• Headspace(M = 12.5, SD = 6.2) significantly outperformed Control(M = 4.1, SD = 5.5),\n",
  "  t(58) = 5.62, p_Bonferroni < .001, d = 1.46 (very large effect).\n",
  "• Calm(M = 11.8, SD = 5.9) also exceeded Control, t(58) = 5.21, p_Bonferroni < .001, d = 1.35.\n",
  "• No significant differences among the three active apps(all p_Bonferroni > .10).\n\n",
  "Bonferroni correction maintained FWER at .05 across 6 comparisons while identifying\n",
  "robust effects of active interventions vs control."
))

cat("\n\n=== ANALYSIS COMPLETE ===")
Interpretation Blueprint

Bonferroni correction (α_adjusted = .0083) successfully controlled family-wise error at .05 across 6 pairwise comparisons. Results: Headspace and Calm significantly exceeded Control (both p_Bonferroni < .001, d > 1.3), but no differences among active apps. Power analysis revealed 18% power loss due to conservative adjustment (power = .70 at α_adjusted vs .88 at α_unadjusted). Bonferroni appropriate here given confirmatory nature and modest number of comparisons (k=6). For larger k, consider Holm-Bonferroni.

05Tactical Pivots

Alternatives

Structured fallback pathways for choosing alternative tests when normality or slopes requirements fail.

When the path is blocked, pivot. Rigor is not rigidity; it is the intelligent adaptation to reality.
Adaptive Strategy
Alpha Shielding Ladder Ideal · Independent Multiple Strikes
Unrelated Tests
Maintain Bonferroni logic. The most rigorous guard against global Type I error inflation.
Peak Shielding
Correlated Tests
Pivot to Sidak Correction or FDR to reclaim power if outcomes are highly related.
Power Sacrifice
Dozens of Tests
Abandon Bonferroni. Use False Discovery Rate (FDR) or permutation-based alpha-splitting.
Information Suicide
Temporal Trajectory Audit Collective Strike Snapshot
Static Battery
Exploratory grid.
Stay with Bonferroni. Protect the sanctity of the 5% global alpha.
Sequential Audits
Continuous monitoring.
Pivot to Sequential Alpha Spending (O’Brien-Fleming) to audit data as it streams in.
Adaptive Technical Safeguards · adaptive safeguards
excessive conservatism
  • Holm-Bonferroni Strike — A step-down method that maintains the same shield while increasing power.
  • False Discovery Rate (FDR) — Control the proportion of false positives rather than the global FWER.
redundant outcomes
  • PCA Pre-Reduction — Collapse outcomes into a single component to avoid the multi-testing penalty.
  • MANOVA Strike — Run a single multivariate test instead of multiple independent strikes.
06Adjusted Comparisons

Post-hoc

Group mean comparisons and correction controls (e.g. Tukey HSD, Bonferroni) to protect against Family-Wise Error Rates.

The omnibus test opens the door; post-hoc analysis explores the room.
Forensic Detail
Adjusted Comparisons

Post-hoc pairwise tests defined for this model.

Interpretation Guidelines

No specific guidelines provided.

07Standardized scale impact

Effect Size

Understanding effect sizes (e.g., Cohen's d, Partial Eta-Squared) and clinical impact benchmarks.

Significance is noise. Magnitude is the signal. Measure the impact, not just the probability.
Impact Magnitude

Small: 0.2, Medium: 0.5, Large: 0.8

Small: .10, Medium: .30, Large: .50

Small: .01, Medium: .06, Large: .14

Recommended Metric: ALWAYS report effect sizes with confidence intervals alongside Bonferroni-adjusted p-values. Effect size indicates practical significance; adjusted p-value indicates statistical significance after FWER control.
Small
0.2
Medium
0.5
Large
0.8
0.50
ALWAYS report effect sizes with confidence intervals alongside Bonferroni-adjusted p-values. Effect size indicates practical significance; adjusted p-value indicates statistical significance after FWER control.
Recommended Measure
112
Available Metrics
ReportUse ALWAYS report effect sizes with confidence intervals alongside Bonferroni-adjusted p-values. Effect size indicates practical significance; adjusted p-value indicates statistical significance after FWER control. to represent clinical impact magnitude.
08Statistical Power

Sample Size

Guidelines for minimum sample requirements and power analysis parameters.

An underpowered study is an ethical failure. Respect the data by collecting enough of it.
Power Protocol
Floor Requirements

The 'Shield Buffer' Minimum: A minimum of 30 participants per comparison is recommended. Bonferroni math penalizes your alpha—if N is small, you will commit 'Scientific Suicide' by being too conservative.

Effect SizeParametersRequired n
Small Effectd=0.20, k=10n ≈ 1250 total
Medium Effectd=0.50, k=10n ≈ 210 total
Large Effectd=0.80, k=10n ≈ 85 total
Key considerations

The 'Power Tax': Running 10 tests instead of 1 requires doubling your sample size to maintain the same ability to detect effects. Only include 'Hypothesis-Driven' comparisons in your strike to avoid bankrupting your statistical power.

G*Power StrategyBenchmark: T-tests → Means (Corrected). Parameters: Number of tests (k), Cohen's d, α_adjusted = .05 / k, Power = .80. Note: Required N increases exponentially as you add more simultaneous strikes.
09APA narrative blueprint

Reporting

How to compile statistical results into publication prose matching APA and journal style guides.

Data does not speak for itself. It requires a translator. Be clear, be precise, be honest.
Narrative Arc
Worked APA paragraph example
To control family-wise error rate across six pairwise comparisons, Bonferroni correction was applied (α_adjusted = .05/6 = .0083 per test). After correction, two comparisons remained significant: Headspace significantly outperformed Control (mean difference = 8.4 points, 95% CI [5.1, 11.7], p_Bonferroni < .001, Cohen's d = 1.46), as did Calm vs Control (mean difference = 7.7 points, 95% CI [4.4, 11.0], p_Bonferroni < .001, d = 1.35). No significant differences emerged among the three active intervention apps (all p_Bonferroni > .10). Bonferroni correction maintained family-wise Type I error at α = .05 while identifying robust effects of mindfulness interventions relative to control.
Reusable template

To control for multiple comparisons, Bonferroni / Holm-Bonferroni / Benjamini-Hochberg FDR correction was applied to maintain family-wise error rate / false discovery rate at α = .05. If Bonferroni: With k = number tests, the adjusted significance threshold was α_adjusted = .05/k = .value per test. Alternative phrasing: Each p-value was multiplied by k = number and compared to α = .05. Report results: After correction method, number out of k tests remained significant: describe significant findings with adjusted p-values, effect sizes, and CIs. If applicable: Unadjusted results are provided for completeness but should be interpreted with caution due to inflation of Type I error.

Essential statistics to report
  • Number of comparisons (k) clearly stated
  • Correction method used (Bonferroni, Holm, FDR, etc.)
  • Adjusted significance threshold (α/k) OR adjusted p-values
  • Both unadjusted and adjusted p-values (or clearly state which reported)
  • Effect sizes with confidence intervals for each comparison
  • Number of significant tests before and after correction
  • Statement about FWER or FDR control level
10Exhibit Builder

Manuscript Lab

Copy standard summary tables and forensic reporting grids to outline analysis details.

Table 1: Bonferroni-Corrected Pairwise Comparisons
ComparisonM_diffSEp (Raw)p (Bonferroni)Significance
Group A vs. Control12.42.5.004.012Significant
Group B vs. Control8.22.5.015.045Significant
Group A vs. Group B4.22.5.120.360NS
Note. Reporting alpha-adjusted p-values. Alpha_orig = .05, Alpha_corr = .0167. N = 150.
p (.045)Borderline Robustness. Group B was only just significant after correction. This identifies a vulnerable effect that might disappear if more groups were added to the audit.
Header glossary

The 'Corrected' Probability. Calculated by multiplying the raw p-value by the number of comparisons. This protects against the 'P-Hacking' trap where running many tests increases the chance of a fluke finding.

The Adjusted Threshold. To maintain a 5% error rate, each individual test must now beat .0167 instead of .05.

11Algorithmic Logic

Command Center

Syntax libraries and function parameters for executing calculations in stats packages.

Code is the modern laboratory. Clean execution ensures reproducible discovery.
Execution Engine
# 1. Execute Bonferroni Correction on Vector of p-values
p.adjust(c(0.004, 0.015, 0.12), method = 'bonferroni')

# 2. Pairwise T-tests with Bonferroni
rstatix::pairwise_t_test(df, score ~ group, p.adjust.method = 'bonferroni')
Library stack
R
statsrstatix
Python
statsmodels.stats.multitest
Elite Forensic Strike

Bonferroni is the 'Nuclear Option'. It is extremely conservative and can 'kill' real effects (Type II error). If you have more than 5 comparisons, switch to 'Holm-Bonferroni' or 'False Discovery Rate' (FDR) for better balance.

# Execute Holm-Bonferroni (Sequential correction)
p.adjust(p_values, method = 'holm')
12The Over-adjustment Trap

Common Mistakes

Analytical caveats and corrections to maintain modeling integrity.

Wisdom is learning from the failures of others. Anticipate the error before it occurs.
Defensive Logic
Why it's wrong
Bonferroni should be applied to a 'family' of related tests addressing the same research question, not every statistical test in a paper. Over-correction across unrelated tests unnecessarily reduces power and increases false negatives. Example: If testing 3 unrelated hypotheses (diet → weight, sleep → memory, exercise → mood), each is a separate family - don't apply Bonferroni across all 3.
The correction
Define 'families' of tests a priori based on logical groupings (e.g., all pairwise comparisons from one ANOVA = one family; correlations testing one theory = one family). Apply Bonferroni within families, not across entire paper. Be transparent about family definitions. Pre-register analysis plan when possible.
Why it's wrong
Choosing which tests to include in the 'family' after seeing results is a form of p-hacking. Example: conducting 20 tests, seeing 5 are p<.05, then arbitrarily defining those 5 as 'exploratory' to avoid correction. This defeats the purpose of FWER control and inflates false positives.
The correction
Pre-specify (ideally pre-register) which tests constitute each family BEFORE data analysis. Document rationale based on research questions, not results. If truly exploratory, use FDR methods (Benjamini-Hochberg) designed for discovery. Report all tests conducted, not just 'significant' ones. Transparency is key.
Why it's wrong
Bonferroni assumes worst-case scenario (independent tests). When tests are correlated (e.g., pairwise t-tests after ANOVA share control group; multiple correlations among related variables), Bonferroni is overly conservative - loses statistical power unnecessarily while still controlling FWER. Example: 10 correlations among personality traits are positively correlated → Bonferroni sacrifices power.
The correction
When tests are correlated, use less conservative methods that account for correlation structure: (1) Holm-Bonferroni (sequential, uniformly more powerful than Bonferroni); (2) Hochberg method (less conservative); (3) FDR methods (Benjamini-Hochberg); (4) Permutation/resampling methods that preserve correlation structure. Holm-Bonferroni is almost always preferable to standard Bonferroni - same FWER control, more power.
Why it's wrong
FWER (Bonferroni) controls probability of ANY false positive across all tests (stringent, confirmatory). FDR (Benjamini-Hochberg) controls expected proportion of false positives among discoveries (less stringent, exploratory). Choosing the wrong one mismatches analysis goals: using FDR for confirmatory testing allows too many false positives; using FWER for exploratory discovery sacrifices too much power.
The correction
Understand the difference: FWER (Bonferroni, Holm) = confirmatory hypothesis testing, minimizing false positives absolutely. FDR (Benjamini-Hochberg) = exploratory discovery, willing to accept some false positives for higher detection rate. Choose based on research goal: confirmatory → FWER; exploratory → FDR. Be explicit about choice and rationale in methods section.
Why it's wrong
There are many correction methods with vastly different stringency (Bonferroni most conservative, FDR least). Saying 'corrected for multiple comparisons' without specifying method is non-reproducible and readers can't evaluate appropriateness. Different methods can yield different conclusions.
The correction
ALWAYS state specific correction method: 'Bonferroni correction', 'Holm-Bonferroni sequential method', 'Benjamini-Hochberg FDR', etc. Report both unadjusted and adjusted p-values when possible. State number of tests in family (k). Provide rationale for method choice (confirmatory vs exploratory). Enable readers to reproduce and evaluate your analysis.
Why it's wrong
As k increases, α_adjusted = α/k becomes very small (e.g., k=20 → α_adj = .0025). This drastically reduces power - may need 2-3× larger sample to maintain power = .80. With insufficient power, Bonferroni leads to many false negatives (failing to detect real effects). Researchers often don't adjust sample size for k.
The correction
Conduct power analysis at α_adjusted = α/k, NOT at α. For large k: (1) Increase sample size accordingly (use G*Power at α/k); (2) Reduce number of tests (focus on most important comparisons); (3) Use less conservative method (Holm-Bonferroni, FDR); (4) Use planned contrasts instead of all pairwise comparisons. Report post-hoc power analysis to assess sensitivity. Don't over-correct yourself into Type II errors.
Why it's wrong
Bonferroni designed for confirmatory hypothesis testing where minimizing false positives is paramount. In exploratory research (biomarker discovery, screening studies, hypothesis generation), overly conservative correction causes many false negatives - missing potentially important findings. Exploratory goal is to identify promising leads for future confirmatory testing, not to prove definitive effects.
The correction
For exploratory analyses: (1) Use FDR methods (Benjamini-Hochberg) that balance discovery and false positives; (2) Report unadjusted results with full transparency and caveat about Type I error inflation; (3) Validate findings in independent replication sample; (4) Be clear about exploratory nature in reporting ('hypothesis-generating', 'preliminary screening'). Reserve FWER control (Bonferroni) for confirmatory pre-registered analyses.
Why it's wrong
Bonferroni is the most well-known but MOST CONSERVATIVE correction. Holm-Bonferroni is uniformly more powerful (detects more true effects) while maintaining same FWER control - there is rarely a reason to use standard Bonferroni over Holm. Researchers default to Bonferroni without considering more appropriate/powerful alternatives.
The correction
Consider hierarchy of methods: (1) For confirmatory testing, use Holm-Bonferroni (sequential, more powerful than Bonferroni, same FWER control); (2) For exploratory, use Benjamini-Hochberg FDR (balances discovery and false positives); (3) Only use standard Bonferroni if required by journal or field convention. Justify choice based on research goals (confirmatory vs exploratory) and test structure (independent vs correlated). Stay current with methodological literature.
13Academic Lineage

References

Scholarly lineage and citation keys grounding the statistical framework.

We stand on the shoulders of giants. Honor the source of the method.
Academic Lineage
[1]
Bonferroni, C. E. (1936). Teoria statistica delle classi e calcolo delle probabilità. Pubblicazioni del R Istituto Superiore di Scienze Economiche e Commerciali di Firenze, 8, 3-62.
Original publication introducing Bonferroni inequality, basis for Bonferroni correction controlling family-wise error rate.
[2]
Holm, S. (1979). A simple sequentially rejective multiple test procedure. Scandinavian Journal of Statistics, 6(2), 65-70.
Holm-Bonferroni (sequential Bonferroni): uniformly more powerful than standard Bonferroni while maintaining FWER control at α. Should be preferred in most applications.
[3]
Hochberg, Y. (1988). A sharper Bonferroni procedure for multiple tests of significance. Biometrika, 75(4), 800-802.
Hochberg method: less conservative than Holm-Bonferroni (tests from largest to smallest p-value). Valid under certain positive dependence conditions.
doi: 10.1093/biomet/75.4.800
[4]
Benjamini, Y., & Hochberg, Y. (1995). Controlling the false discovery rate: A practical and powerful approach to multiple testing. Journal of the Royal Statistical Society: Series B, 57(1), 289-300.
Benjamini-Hochberg FDR: controls false discovery rate (expected proportion of false positives among discoveries) rather than FWER. Less conservative, appropriate for exploratory research. Widely used in genomics, neuroimaging.
doi: 10.1111/j.2517-6161.1995.tb02031.x
[5]
Perneger, T. V. (1998). What's wrong with Bonferroni adjustments. BMJ, 316(7139), 1236-1238.
Influential critique arguing Bonferroni correction often misapplied and overly conservative. Discusses appropriate use: planned comparisons, not exploratory analyses. Sparked debate on multiple testing philosophy.
doi: 10.1136/bmj.316.7139.1236
[6]
Rothman, K. J. (1990). No adjustments are needed for multiple comparisons. Epidemiology, 1(1), 43-46.
Controversial paper arguing against routine multiple testing adjustments, emphasizing transparency and replication over correction. Important counterpoint to automatic correction.
doi: 10.1097/00001648-199001000-00010
[7]
Shaffer, J. P. (1995). Multiple hypothesis testing. Annual Review of Psychology, 46(1), 561-584.
Comprehensive review of multiple comparison procedures: Bonferroni, Holm, Hochberg, FDR, and others. Excellent primer on when to use each method.
doi: 10.1146/annurev.ps.46.020195.003021
[8]
Goeman, J. J., & Solari, A. (2014). Multiple hypothesis testing in genomics. Statistics in Medicine, 33(11), 1946-1978.
Modern treatment of multiple testing in high-dimensional data (genomics, neuroimaging). Covers FWER, FDR, resampling methods, and practical guidance for large k (thousands of tests).
doi: 10.1002/sim.6082
If your discovery cannot survive the Bonferroni penalty, it was likely never a discovery at all. Trust only the signals that withstand the fire of multiple comparisons.
The Interpretive Rigor Directive
statminds · BonferroniMind reference · v2.2 · updated 2026-01-1715 of 15 sections