Co to jest procedura Benjaminiego–Hochberga?
Procedura Benjaminiego–Hochberga (ang. Benjamini–Hochberg procedure, BH) to metoda korekty wielu testów, która kontroluje FDR (ang. false discovery rate), czyli oczekiwany odsetek fałszywych odkryć wśród wyników istotnych. Benjamini i Hochberg (1995) zaproponowali ją jako alternatywę dla kontroli FWER, czyli ryzyka choćby jednego błędu I rodzaju, którą zapewniają korekta Bonferroniego i poprawka Holma. Różnicę między FWER a FDR opisuje hasło problem wielokrotnych porównań.
Jak to zrobić krok po kroku
- Uporządkuj m wartości p od najmniejszej: p(1) ≤ p(2) ≤ … ≤ p(m).
- Dla każdej pozycji i policz próg i/m · q, gdzie q to dopuszczalny poziom FDR, zwykle .05.
- Znajdź największe i, dla którego p(i) ≤ i/m · q, i odrzuć hipotezy od 1 do i.
To procedura „w górę”: o wyniku decyduje ostatnia wartość p poniżej progu, więc może zostać odrzucona hipoteza z p większym od własnego progu. Skorygowane wartości p z p.adjust(p, "BH") porównuje się wprost z .05.
Przykład w R
Zasymulowaliśmy 10 testów t, w tym 4 z prawdziwym efektem. Trzecia najmniejsza wartość p = .0152 przekracza swój próg .015, ale czwarta, p = .0194, mieści się w progu .020, więc BH odrzuca cztery hipotezy (skorygowane p = .0486). Poprawka Holma odrzuca tylko dwie. Kosztem tej mocy jest zgoda na to, że część odkryć może być fałszywa.
Jak opisać w pracy
Na co uważać
- FDR to nie FWER. Gdy nawet jeden fałszywy wynik jest poważny, np. przy hipotezie głównej badania konfirmacyjnego, wybierz Holma.
- Zależność testów. Benjamini i Yekutieli (2001) wykazali, że BH kontroluje FDR także przy dodatniej zależności testów; przy dowolnej zależności służy ich zachowawcza modyfikacja (BY).
- Rodzina testów. Ustal z góry, które testy korygujesz razem (zob. czy stosować poprawkę). Własne wartości p przeliczysz w kalkulatorze poprawek na wielokrotne porównania.
Procedura Benjaminiego–Hochberga w R
Kod symuluje 10 testów t (4 z efektem, 6 bez), porządkuje wartości p, pokazuje progi BH i porównuje skorygowane p według Benjaminiego–Hochberga i Holma.
Progi BH i skorygowane p dla 10 testów
R
set.seed(4360)
d <- c(rep(0.6, 4), rep(0, 6)) # 4 prawdziwe efekty, 6 zerowych
p <- sapply(d, function(delta)
t.test(rnorm(40, delta), rnorm(40))$p.value)
p <- sort(p); m <- length(p)
tab <- data.frame(i = 1:m, p = round(p, 5),
prog_BH = round((1:m) / m * .05, 4),
p_BH = round(p.adjust(p, "BH"), 4),
p_Holm = round(p.adjust(p, "holm"), 4))
tab
colSums(tab[, c("p_BH", "p_Holm")] < .05) # liczba odrzuconych hipotezWynik w R
i p prog_BH p_BH p_Holm
1 1 0.00005 0.005 0.0004 0.0005
2 2 0.00007 0.010 0.0004 0.0006
3 3 0.01525 0.015 0.0486 0.1220
4 4 0.01943 0.020 0.0486 0.1360
5 5 0.04008 0.025 0.0802 0.2405
6 6 0.17349 0.030 0.2892 0.8675
7 7 0.25526 0.035 0.3647 1.0000
8 8 0.35725 0.040 0.4466 1.0000
9 9 0.42986 0.045 0.4776 1.0000
10 10 0.68152 0.050 0.6815 1.0000
p_BH p_Holm
4 2 Bibliografia oprogramowania
Wyniki pochodzą z uruchomienia pokazanego kodu w R 4.5.3 (bez dodatkowych pakietów). W pracy podaj wersje faktycznie użytych pakietów (sessionInfo()).
- R: R Core Team. (2026). R: A language and environment for statistical computing (Version 4.5.3) [Computer software]. R Foundation for Statistical Computing. https://www.R-project.org/
Najczęstsze pytania
Kiedy wybrać procedurę Benjaminiego–Hochberga zamiast poprawki Holma?
Gdy testów jest dużo, analiza ma charakter eksploracyjny i akceptujesz, że niewielka część istotnych wyników może być fałszywa. Przy hipotezach konfirmacyjnych wybierz Holma.
Co oznacza FDR = .05 w procedurze Benjaminiego–Hochberga?
Że średnio nie więcej niż 5% wyników uznanych za istotne to fałszywe odkrycia. Nie oznacza to 5% ryzyka choćby jednego błędu I rodzaju.
Jak policzyć korektę Benjaminiego–Hochberga w R?
Funkcją p.adjust(p, method = 'BH'); skorygowane wartości p porównaj z .05. Ta sama funkcja liczy poprawki Holma i Bonferroniego, co ułatwia porównanie metod.
Powiązane hasła
Poradniki, w których użyjesz tego pojęcia
Poprawki na wielokrotne porównania
Bonferroni, Holm, Hochberg, BH i BY na jednym przykładzie: co kontroluje każda poprawka, kiedy którą wybrać i jak opisać wynik w pracy.
Czytaj →PoradnikCzy muszę stosować poprawkę?
Kiedy poprawka na wielokrotne porównania jest potrzebna, a kiedy nie: rodzina testów, tabela tak/nie, przykład w R i wzór uzasadnienia w pracy.
Czytaj →Potrzebujesz wsparcia w analizie danych?
Wybierz ofertę dopasowaną do pracy dyplomowej albo profesjonalnego projektu naukowego.
Wyceń analizęOferta dla studentówBibliografia i dalsza literatura naukowa (APA 7)
- Benjamini, Y., & Hochberg, Y. (1995). Controlling the false discovery rate: A practical and powerful approach to multiple testing. Journal of the Royal Statistical Society: Series B (Methodological), 57(1), 289–300. https://doi.org/10.1111/j.2517-6161.1995.tb02031.x
- Benjamini, Y., & Yekutieli, D. (2001). The control of the false discovery rate in multiple testing under dependency. The Annals of Statistics, 29(4), 1165–1188. https://doi.org/10.1214/aos/1013699998
Cytowania BibTeX
@article{benjamini1995controlling, author={Benjamini, Yoav and Hochberg, Yosef}, title={{Controlling the false discovery rate: A practical and powerful approach to multiple testing}}, journal={Journal of the Royal Statistical Society: Series B (Methodological)}, year={1995}, volume={57}, number={1}, pages={289--300}, doi={10.1111/j.2517-6161.1995.tb02031.x}}@article{benjamini2001control, author={Benjamini, Yoav and Yekutieli, Daniel}, title={{The control of the false discovery rate in multiple testing under dependency}}, journal={The Annals of Statistics}, year={2001}, volume={29}, number={4}, pages={1165--1188}, doi={10.1214/aos/1013699998}}