Intuicyjne wyjaśnienie, dlaczego działa procedura FDR Benjamini-Hochberg?

14

Czy istnieje prosty sposób wyjaśnienia, dlaczego procedura Benjaminiego i Hochberga (1995) faktycznie kontroluje współczynnik fałszywych odkryć (FDR)? Ta procedura jest tak elegancka i zwarta, a jednak dowód na to, dlaczego działa ona niezależnie (pojawiający się w załączniku do ich artykułu z 1995 r. ), Nie jest zbyt łatwo dostępny.

Trisoloriansunscreen
źródło
4
moim zdaniem dowód kontroli FDR przedstawiony tutaj jest bardziej intuicyjny (zauważ, że szukasz dowodu twierdzenia 2): citeseerx.ist.psu.edu/viewdoc/... Tam argument polegał tylko na zauważeniu, że my może użyć opcjonalnego twierdzenia o zatrzymaniu.
user795305
3
Jest dobry wykład Benjaminiego na YouTube na temat problemu wielokrotnych porównań, a także historia i logiczny rozwój metod dostosowań zastosowanych w celu rozwiązania tego problemu.
Alexis
Ramdas i in. (2017) jest bardzo ładnym ostatnim artykułem, który ujednolica i uogólnia wiele różnych metod testowania, a ich twierdzenie 1 (c) implikuje Twierdzenie 1 w Benjamini i Hochberg (1995). Dowód po prostu stosuje Lemat 1 (c), aby ograniczyć oczekiwania dotyczące FDP, a sam ten Lemat został właśnie udowodniony przez bardzo prosty rachunek wielowymiarowy w dodatku.
daniel.s
2
Oto inne intuicyjne wyjaśnienie, które znalazłem na kanale StatQuest na YouTube: youtube.com/watch?v=K8LQSvtjcEo
RobertF

Odpowiedzi:

2

Oto Rkod do wygenerowania obrazu. Pokaże 15 symulowanych wartości p wykreślonych w zależności od ich kolejności. Tworzą więc wzorzec punktu rosnącego. Punkty poniżej czerwonych / fioletowych linii reprezentują znaczące testy na poziomie 0,1 lub 0,2. FDR to liczba czarnych punktów poniżej linii podzielona przez całkowitą liczbę punktów poniżej linii.

x0 <- runif(10)      #p-values of 10 true null hypotheses. They are Unif[0,1] distributed.
x1 <- rbeta(5,2,30)  # 5 false hypotheses, rather small p-values
xx <- c(x1,x0)
plot(sort(xx))
a0 <- sort(xx)
for (i in 1:length(x0)){a0[a0==x0[i]] <- NA}
points(a0,col="red")
points(c(1,15), c(1/15 * 0.1 ,0.1), type="l", col="red")
points(c(1,15), c(1/15 * 0.2 ,0.2), type="l", col="purple")

Mam nadzieję, że może to dać pewne wyobrażenie o kształcie, jaki ma rozkład uporządkowanych wartości p. To, że linie są poprawne, a nie np. Jakaś krzywa w kształcie przypowieści, ma związek z kształtem rozkładów rzędów. Należy to obliczyć wyraźnie. W rzeczywistości linia jest tylko konserwatywnym rozwiązaniem.

Horst Grünbusch
źródło
1
Czy miałbyś coś przeciwko dodaniu set.seed(<some number>)i opublikowaniu wynikowej liczby dla osób, które nie czytają R.
gung - Przywróć Monikę
Żaden punkt nie spada poniżej linii, gdy uruchamiam ten kod ...
winni2k,