A/B tests · AdvancedMultiple comparisons correction

An online Bonferroni correction and five more methods side by side: Holm, Hochberg, Šidák, Benjamini–Hochberg and Benjamini–Yekutieli. Paste a list of hypotheses with p-values and the calculator shows the adjusted p-values, which results stay significant and where every number comes from, and explains FWER and FDR in plain words. Python and R code.

Your numbers stay in the browser and are never sent anywhere

01Data02Result03Step by step04False findings05Code06Examples07Questions08Related
01

Data

A name and p separated by a semicolon or a tab — you can paste two columns from Excel. A line with just a number works too.

Method
Significance level α

Like Bonferroni, but step by step, and never weaker. A good default for A/B/n.

02

Result

2 of 4 are significant.
After the Holm correction; without a correction 4 would look “significant”, and the difference is exactly the chance findings the correction protects you from.
Adjusted p-values
The chosen method is highlighted; “significant” means the adjusted p is below α
HypothesispBonf.HolmHochbergŠidákBHBY
Button0.0100.040 — significant0.030 — significant0.030 — significant0.039 — significant0.020 — significant0.042 — significant
Colour0.0400.1600.0600.040 — significant0.1510.040 — significant0.083
Copy0.0300.1200.0600.040 — significant0.1150.040 — significant0.083
Price0.0050.020 — significant0.020 — significant0.020 — significant0.020 — significant0.020 — significant0.042 — significant
03

Step by step

Holm: where the numbers come from

The p-values in ascending order are multiplied by m, m − 1, …, 1 (m = 4); then a running maximum is taken from the top down, so an adjusted p cannot be smaller than the one before it.

#HypothesispMultiplierp × multiplierAdjusted
1Price0.005× 4.0000.0200.020 · significant
2Button0.010× 3.0000.0300.030 · significant
3Copy0.030× 2.0000.0600.060
4Colour0.040× 1.0000.0400.060
04

False findings

Chance of at least one false finding
Without a correction, α = 0.05: 1 − (1 − α)^m
4 hyp. → 19%15101520100%0

You have 4 hypotheses: without a correction, at least one false “win” turns up with probability 19% (if the tests are independent).

FWER or FDR

FWER is the probability of at least one false finding. Bonferroni, Holm, Hochberg and Šidák control it: use it when any error is costly, such as a rollout or medicine.

FDR is the share of false results among all those found. Benjamini–Hochberg and Benjamini–Yekutieli control it: for exploring many metrics, where a couple of false findings is acceptable.

05

Check in Python / R

Check in Python / R
from statsmodels.stats.multitest import multipletests

p = [0.01, 0.04, 0.03, 0.005]
reject, p_adj, _, _ = multipletests(p, alpha=0.05, method="holm")
06

Examples

07

Frequently asked questions

Each test at α = 0.05 carries a 5% chance of a false “win”. If you check 10 metrics, at least one turns out “significant” by chance with probability 40%, and with 20 metrics 64%. A correction recalculates the p-values so that the overall chance of an error is back near the stated α. Without it, chance findings look like discoveries and end up in the report.

Updated