Multiple Testing Correction Calculator: BH (FDR), BY, and Bonferroni
When running tens of thousands of tests simultaneously, using p < 0.05 alone will inevitably generate large numbers of false positives: with 20,000 tests, even if every null hypothesis is true, roughly 1,000 results will appear “significant.” This is why differential expression, GWAS, and enrichment analyses all require multiple testing correction.
Bonferroni is the most conservative: divide the threshold by the number of tests, p_adj = p × n. It controls the FWER (the probability that at least one false positive occurs), at the cost of suppressing nearly all true signals as well.
Benjamini–Hochberg (BH) controls the FDR (the expected proportion of false positives among the results you declare significant). The algorithm is:
- Sort the n p-values in ascending order; call the i-th value p₍ᵢ₎;
- Compute
q₍ᵢ₎ = p₍ᵢ₎ × n / i; - Work backwards from the largest i, taking the cumulative minimum to ensure q is non-decreasing;
- Cap at 1.
How to interpret q = 0.05: It does not mean “this result has a 95% chance of being real.” It means “if I call every result with q ≤ 0.05 significant, on average 5% of those calls will be false positives.” FDR is a statement about a set of results, not about any single result — this is the most commonly misunderstood point.
BH assumes the tests are independent or positively correlated. When strong negative correlations are present, use Benjamini–Yekutieli (BY), shown in the third column. BY = BH × C(n), where C(n) = 1 + 1/2 + … + 1/n; it is valid under arbitrary correlation structures, at the cost of being more conservative — C(n) ≈ 2.93 for n = 10 and ≈ 7.49 for n = 1,000, so the penalty grows with the number of tests.
FAQ
What does q = 0.03 mean?
It is an estimate of the FDR: if every result with q ≤ 0.03 is declared a positive, on average about 3% of those positives will be false. It describes the set of results, not the probability that any individual result is true or false.
Should I use BH or Bonferroni?
Exploratory analyses (differential expression, enrichment) typically use BH, accepting some false positives in exchange for greater sensitivity; confirmatory tests or safety-critical judgments favor Bonferroni.
What happens if a p-value is 0?
p = 0 remains 0 after correction. In real data, zeros often reflect underflow; it is advisable to retain high-precision p-values from the original computation.
Related tools
qPCR 2^−ΔΔCt Relative Quantification Online Calculator
Paste your Ct table and get ΔCt, ΔΔCt, fold-change, and within-group dispersion calculated automatically.
Gene List Intersection, Union & Difference — Online Venn Set Calculator
Paste 2–3 gene/ID lists and instantly get intersections, unions, and unique elements, with deduplication and case normalization.
log2FC ↔ Fold Change Online Converter
Convert between log2FC and fold change, with up/downregulation percentages and a common threshold reference table.
Buy me a coffee