Multiple testing#

A single hypothesis test at α = 0.05 expects a false positive about 5% of the time when the null is true. RNA-seq runs thousands of tests—one per gene. The family-wise error explodes unless you adjust.

A numeric sketch#

Suppose 20,000 genes are truly null (no expression difference) and you call anything with p < 0.05 “significant.”

  • Expected false positives ≈ 20,000 × 0.05 = 1,000 genes

  • That list is mostly noise

Real data mix null and non-null genes, but the same logic holds: unadjusted p-values overstate how special each hit is.

Three policies you will see#

1. No adjustment#

Report raw p-values. Fine for one pre-planned test. Misleading as a genome-wide discovery list.

2. Bonferroni#

For m tests, use threshold α / m, or multiply each p by m and cap at 1.

  • Controls the family-wise error rate (probability of any false positive)

  • Very conservative when m is ~20,000

  • You will miss many real genes

3. Benjamini–Hochberg FDR#

Controls the false discovery rate: among the genes you call significant, what fraction are expected to be false?

  • Sort p-values ascending

  • Find the largest k such that p₍ₖ₎ ≤ (k / m) × α

  • Reject that gene and all more significant ones

BH is the default compromise in genomics discovery screens. Module 11 stores the BH-adjusted values in a column named fdr.

How to read results#

  • Raw p answers: “If this single gene were the only test, how surprising is the difference?”

  • FDR answers: “If I take the whole significant list at this cutoff, what fraction of that list is expected to be wrong?”

For Enrichr you will pass genes with FDR below a cutoff (and often a fold-change floor). That list is still imperfect; enrichment is a second layer of summarization, not proof that every gene is causal.