Wie berechne ich, ob der Grad der Überlappung zwischen zwei Listen signifikant ist?

9

Wenn ich zwei Listen A und B habe, die beide Teilmengen einer viel größeren Liste C sind, wie kann ich feststellen, ob der Grad der Überlappung von A und B größer ist, als ich zufällig erwarten würde?

Sollte ich nur zufällig Elemente aus C mit den gleichen Längen wie die Listen A und B auswählen und diese zufällige Überlappung bestimmen und dies viele Male tun, um eine Art oder einen empirischen p-Wert zu bestimmen? Gibt es einen besseren Weg, dies zu testen?

Eintopf
quelle
Sie sollten Colins Antwort verwenden, aber Ihre Idee, eine Monte-Carlo-Simulation durchzuführen, ist auch richtig.

Antworten:

9

nymXmX

nAnBnCnABAB

nABHG(nA,nC,nB)

Um einen p-Wert zu berechnen, können Sie diesen R-Befehl verwenden:

#Some example values
n_A = 100;n_B = 200; n_C = 500; n_A_B = 50
1-phyper(n_A_B, n_B, n_C-n_B, n_A)
[1] 0.008626697

Wort der Vorsicht. Denken Sie an mehrere Tests, dh wenn Sie viele A- und B- Listen haben, müssen Sie Ihre p-Werte mit einer Korrektur anpassen. Zum Beispiel die FDR- oder Bonferroni-Korrekturen.

csgillespie
quelle
2

Die Antwort von csgillespie scheint bis auf eines richtig zu sein: Sie gibt die Wahrscheinlichkeit an, in der Überlappung P (x> n_A_B) streng mehr als n_A_B zu sehen, aber ich denke, OP möchte den p-Wert P (x> = n_A_B). Sie könnten Letzteres durch bekommen

n_A = 100;n_B = 200; n_C = 500; n_A_B = 50
phyper(n_A_B - 1, n_A, n_C-n_A, n_B, lower.tail = FALSE) 
leda
quelle
+1 für lower.tail=FALSE. Ansonsten werden sehr kleine p-Werte (<1e-16) abgeschnitten.
Backlin