Une explication intuitive pourquoi la procédure FDR de Benjamini-Hochberg fonctionne?

14

Existe-t-il un moyen simple d'expliquer pourquoi la procédure de Benjamini et Hochberg (1995) contrôle réellement le taux de fausses découvertes (FDR)? Cette procédure est si élégante et compacte et pourtant la preuve de pourquoi elle fonctionne sous indépendance (apparaissant en annexe de leur article de 1995 ) n'est pas très accessible.

Trisoloriansunscreen
la source
4
à mon avis, la preuve du contrôle FDR présentée ici est plus intuitive (notez que vous recherchez la preuve du théorème 2): citeseerx.ist.psu.edu/viewdoc/… Là, l'argument reposait simplement sur la constatation que nous peut utiliser le théorème d'arrêt facultatif.
user795305
3
Il y a une bonne conférence de Benjamini sur YouTube sur le problème des comparaisons multiples, et l'histoire et le développement logique des méthodes d'ajustement utilisées pour le résoudre.
Alexis
Ramdas et al. (2017) est un très bel article récent qui unifie et généralise de nombreuses méthodes de tests multiples, et leur proposition 1 (c) implique le théorème 1 de Benjamini & Hochberg (1995). La preuve applique simplement le lemme 1 (c) pour limiter l'attente du FDP, et ce lemme lui-même est juste prouvé par un calcul multivarié très basique dans leur annexe.
daniel.s
2
Voici une autre explication intuitive que j'ai trouvée sur la chaîne de StatQuest sur YouTube: youtube.com/watch?v=K8LQSvtjcEo
RobertF

Réponses:

2

Voici un Rcode pour générer une image. Il affichera 15 valeurs de p simulées tracées par rapport à leur ordre. Ils forment donc un motif de points ascendant. Les points sous les lignes rouges / violettes représentent des tests significatifs au niveau 0,1 ou 0,2. Le FDR est le nombre de points noirs sous la ligne divisé par le nombre total de points sous la ligne.

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

J'espère que cela pourrait donner une idée de la forme de la distribution des valeurs de p ordonnées. Le fait que les lignes soient correctes et non par exemple une courbe en forme de parabole a à voir avec la forme des distributions d'ordre. Cela doit être calculé explicitement. En fait, la ligne n'est qu'une solution conservatrice.

Horst Grünbusch
la source
1
Pourriez-vous ajouter set.seed(<some number>)et publier le chiffre obtenu pour les personnes qui ne lisent pas R?
gung - Rétablir Monica
Aucun des points ne tombe sous la ligne lorsque
j'exécute