Como faço para calcular se o grau de sobreposição entre duas listas é significativo?

9

Se eu tiver duas listas A e B, ambas subconjuntos de uma lista C muito maior, como posso determinar se o grau de sobreposição de A e B é maior do que eu esperaria por acaso?

Devo selecionar aleatoriamente elementos de C com os mesmos comprimentos das listas A e B e determinar essa sobreposição aleatória, e fazer isso várias vezes para determinar algum valor-p empírico ou empírico? Existe uma maneira melhor de testar isso?

Ensopado
fonte
Você deve usar a resposta de Colin, ainda assim a sua ideia de fazer a simulação de Monte Carlo também está correta.

Respostas:

9

nymXmX

nAnBnCnABAB

nABHG(nA,nC,nB)

Para calcular um valor-p, você pode usar este comando R:

#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

Palavra de cautela. Lembre-se de vários testes, ou seja, se você tiver muitas listas A e B , precisará ajustar seus valores-p com uma correção. Por exemplo, as correções de FDR ou Bonferroni.

csgillespie
fonte
2

A resposta de csgillespie parece correta, exceto por uma coisa: fornece a probabilidade de ver estritamente mais de n_A_B na sobreposição, P (x> n_A_B), mas acho que OP deseja o valor P (x> = n_A_B). Você pode obter o último por

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
fonte
+1 para lower.tail=FALSE. Valores p muito pequenos (<1e-16) são truncados caso contrário.
Backlin