9 votos

¿Cómo puedo calcular si el grado de solapamiento entre dos listas es significativo?

Si tengo dos listas A y B, ambas subconjuntos de una lista mucho mayor C, ¿cómo puedo determinar si el grado de solapamiento de A y B es mayor de lo que cabría esperar por azar?

¿Debo seleccionar al azar elementos de C de la misma longitud que las listas A y B y determinar ese solapamiento aleatorio, y hacer esto muchas veces para determinar algún tipo de valor p empírico? ¿Existe una forma mejor de probar esto?

2voto

Eggs McLaren Puntos 945

Si he entendido bien tu pregunta, tienes que utilizar el Distribución hipergeométrica . Esta distribución suele asociarse a los modelos de urna, es decir, hay $n$ bolas en una urna, $y$ están pintados de rojo, y dibujas $m$ bolas de la urna. Entonces, si $X$ es el número de bolas en su muestra de $m$ que son de color rojo, $X$ tiene una distribución hipergeométrica.

Para su ejemplo concreto, dejemos que $n_A$ , $n_B$ y $n_C$ denotan las longitudes de sus tres listas y deja que $n_{AB}$ denotan el solapamiento entre $A$ y $B$ . Entonces

$$n_{AB} \sim \text{HG}(n_A, n_C, n_B)$$

Para calcular un valor p, puede utilizar este comando de 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

Unas palabras de precaución. Recuerde las pruebas múltiples, es decir, si tiene muchas A y B entonces tendrá que ajustar sus valores p con una corrección. Para el ejemplo las correcciones FDR o Bonferroni.

2voto

raman Puntos 21

La respuesta de csgillespie parece correcta excepto por una cosa: da la probabilidad de ver estrictamente más que n_A_B en la superposición, P(x > n_A_B), pero creo que el OP quiere el pvalue P(x >= n_A_B). Se podría obtener este último mediante

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)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X