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):

StepRuleThresholdPredictors passingReading
1naive (smallest: SNP56 , SNP11 , SNP96 , SNP12 )vs expected by chance alone
2Bonferronitoo strict once credit is shared in the joint fit
3RIC stepwise, k = 2*log(100) —SNP56 onlyrefitted alone: ,
4Bonferroni on the RIC modelstill ⟹ 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