Multiple Testing and the Bonferroni Correction
Context: FIT2086_MOC · what breaks when Hypothesis Testing is used to select predictors for a regression · the same false-positive logic motivates RIC in Model Selection and Information Criteria (AIC, BIC) · drilled on the gene data in Studio 8 (Penalized Regression in R (glmnet))
Quick Revision
- 🎯 Objective: tests at level with every null true ⟹ false positives expected ➔ Bonferroni rejects only when ⟹ .
- ⚠️ Key Constraint: divide by the number of tests (every transformation and interaction tried counts), and remember Bonferroni controls the FWER, not the FDR.
📝 Core
- Coefficient test ➔ vs ; inside a multiple regression it asks whether predictor contributes after accounting for the other predictors in that model.
- Marginal screening ➔ fit separate one-predictor regressions, keep if its -value is small ➔ simple, but marginal association ≠ conditional importance in the multiple regression.
- The multiple-testing problem ➔ one test falsely rejects a true null with probability ; tests with all nulls true ⟹ expected -values below ➔ , ⟹ false positives on average.
- Data dredging ➔ the same problem arising when many transformations or interactions are tried.
- Bonferroni procedure ➔ reject only when ⟹ , without requiring the tests to be independent ➔ , ⟹ threshold .
- FWER ➔ family-wise error rate false positive across the family of tests ➔ Bonferroni controls it: strong protection, but very conservative when many hypotheses are tested.
- FDR ➔ false discovery rate expected proportion of discoveries that are false ➔ procedures such as Benjamini–Hochberg control it and usually have more power to identify genuinely associated predictors.
- Joint-fit weakness (Studio 8) ➔ predictors carrying overlapping information share credit in one big fit ⟹ each -value is inflated relative to fitting it alone ⟹ Bonferroni on a joint fit can reject everything.
- RIC = Bonferroni as a criterion ➔ stepwise with , i.e. R’s
step(…, k = 2*log(p)), is the information-criterion version of the Bonferroni idea, built for large .
📊 Exam Execution Trace & Applied Exercises
Manual Execution Trace
Studio 8, gene data: , SNP predictors, full glm logistic fit (rerun on the studio files):
| Step | Rule | Threshold | Predictors passing | Reading |
|---|---|---|---|---|
| 1 | naive | (smallest: SNP56 , SNP11 , SNP96 , SNP12 ) | vs expected by chance alone | |
| 2 | Bonferroni | too strict once credit is shared in the joint fit | ||
| 3 | RIC stepwise, k = 2*log(100) | — | SNP56 only | refitted alone: , |
| 4 | Bonferroni on the RIC model | still | ⟹ fails, even though RIC kept it |
- Test-set payoff ( rows) ➔ full 100-SNP model: CA , AUC , log-loss · RIC’s SNP56-only model: CA , AUC , log-loss — better than the full fit and than BIC’s two-SNP model ().
- Reading ➔ 12 “significant” SNPs when ~5 are expected by noise ⟹ most are likely false discoveries; Bonferroni and RIC agree the signal is thin — at most one SNP, and one SNP predicts best.
⚠️ Common Mistakes
- 💡 Keeping fixed across many predictors ➔ noise alone produces “significant” predictors.
- 💡 Dividing by instead of ➔ the Bonferroni divisor is the count of tests, not the sample size.
- 💡 Calling Bonferroni an FDR method ➔ it bounds the probability of any false rejection; FDR bounds the proportion of false discoveries.
- 💡 Counting the intercept ➔
coefficients(summary(fit))[,4]includes the(Intercept)row; use[-1]when counting predictors.
🧠 Active Recall
predictors, none associated with the target, each tested at . How many false discoveries are expected, and what threshold does Bonferroni use?
Answer
- Short answer: predictors declared significant by chance; Bonferroni uses .
- Why: Per-test error adds up ➔ each true null rejects with probability , so tests give on average; the stricter per-test threshold holds the FWER at .
With in the thousands, why might an FDR procedure be preferred to Bonferroni?
Answer
- Short answer: becomes so strict that genuine predictors are missed; FDR control accepts a small proportion of false discoveries in exchange for more power.
- Why: FWER vs FDR ➔ FWER penalises even one false positive in the whole family; Benjamini–Hochberg targets the false fraction of what is discovered.
Why did the gene data's joint fit pass zero SNPs under Bonferroni, and what does RIC do instead?
Answer
- Short answer: With 100 correlated-in-effect predictors fitted together, individual -values are inflated, so none reach ; RIC searches models with a penalty per term and keeps SNP56 alone.
- Why: Shared credit ➔ overlapping information splits each effect across predictors; RIC applies the Bonferroni-style price to adding a term, not to one joint table of -values.