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?


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.


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) 

+1 para lower.tail=FALSE. Valores p muito pequenos (<1e-16) são truncados caso contrário.
Backlin
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.