4 votos

Comprobación de la importancia del solapamiento en R

Spacedman me ha dado una respuesta. Pero no estoy del todo satisfecho con la respuesta, ya que no me da ningún tipo de valor (valor p o z). Así que vuelvo a formular mi pregunta y la publico de nuevo. Sin ofender al Sr. Spacedman.

Tengo un diccionario de digamos 61000 elementos y de este diccionario, tengo dos conjuntos. El conjunto A contiene 23000 elementos y el conjunto B contiene 15000 elementos y un solapamiento del conjunto A y el conjunto B da 10000 elementos. ¿Cómo puedo estimar un valor p o un valor z para demostrar que este solapamiento es significativo y no se produce por casualidad o viceversa?

Lo que me han sugerido hasta ahora incluye métodos de simulación MonteCarlo. ¿Es posible disponer de un método analítico?

Gracias de antemano.

8voto

samiq Puntos 1128

Si mi comentario es correcto, entonces usted puede Monte-carlo simularlo:

sim=unlist(lapply(1:10000,
 function(i){A=sample(1:27511,23706);B=sample(1:27511,14557);return(sum(A %in% B))}))
hist(sim)

Probablemente formas más ordenadas de hacer ese bucle pero da igual.

Tu 10752 está muy a la izquierda de mi histograma, por lo que hay muchos menos elementos comunes de los esperados por casualidad.

Puede que haya alguna prueba exacta que haga lo mismo. Probablemente hay una aproximación Normal - en cuyo caso se ve alrededor de 20 sigma de la media:

hist(sim,xlim=c(10752,12660))

7voto

jldugger Puntos 7490

Un modelo para esta situación es poner 61000 ( $n$ ) en una urna, de las cuales 23000 ( $n_1$ ) están etiquetados como "A". 15000 ( $k$ ) se extraen al azar sin sustitución . De estos, $m$ tienen la etiqueta "A". ¿Cuál es la probabilidad de que $m \ge 10000$ ?

El número total de muestras posibles es igual al número de $k$ -subconjuntos de elementos de un $n$ -set, $\binom{n}{k}$ . Todos tienen la misma probabilidad de salir sorteados, por hipótesis. Sea $i \ge 10000$ . El número de muestras posibles con $i$ A es el número de subconjuntos de un $n_1$ -set teniendo $i$ A, multiplicado por el número de subconjuntos de un $n-n_1$ -set teniendo $k-i$ no A; es decir, $\binom{n_1}{i}\binom{n-n_1}{k-i}$ . Suma de todos los posibles $i$ y dividiendo por el azar de cada muestra se obtiene la probabilidad de observar un solapamiento de $m = 10000$ o superior:

$$\Pr(\text{overlap} \ge m) = \frac{1}{\binom{n}{k}} \sum_{i=m}^{\min(n_1,k)} \binom{n_1}{i}\binom{n-n_1}{k-i}.$$

Esta respuesta es exacta. Para un cálculo rápido se puede expresar (en forma cerrada) en términos de funciones hipergeométricas generalizadas los detalles de esta expresión pueden ser proporcionados por un programa de álgebra simbólica como Mathematica. La respuesta en este caso concreto es $3.8057078557887\ldots \times 10^{-1515}$ .

También podemos utilizar una aproximación Normal . Codificando las A como 1 y las no A como 0, como de costumbre, la media de la urna es $p = 23000/61000 \sim 0.377$ . La desviación típica de la urna es $\sigma = \sqrt{p(1-p)}$ . Por lo tanto, el error estándar de la proporción observada, $u = 10000/15000 \sim 0.667$ es

$$se(u) = \sigma \sqrt{(1 - \frac{15000-1}{61000-1})/15000} \sim 0.003436.$$

(véase http://www.ma.utexas.edu/users/parker/sampling/woreplshort.htm ). Así pues, la proporción observada es $z = \frac{u - p}{se(u)} \sim 84.28$ errores estándar mayores de lo esperado. Obviamente, el valor p correspondiente es bajo (se calcula en $1.719\ldots \times 10^{-1545}$ ). Aunque la aproximación Normal ya no es muy precisa en valores de z tan extremos (¡se desvía 30 órdenes de magnitud!), sigue proporcionando una orientación excelente.

6voto

Nikos Alexandris Puntos 764

Tienes una muestra lo suficientemente grande como para que una prueba de Chi-cuadrado sea razonable. Si está utilizando R, entonces chisq.test() es la función que debe utilizarse; su página de ayuda puede consultarse en ?chisq.test .

5voto

pkaeding Puntos 12935

Aunque sólo sea por simulación:

Extraiga 23000 elementos aleatorios de 61000 y extraiga 15000 elementos aleatorios de los mismos 61000. Ahora cuenta el número de elementos superpuestos.

Repítalo 100000 veces (no debería llevar demasiado tiempo): ahora tiene una distribución empírica del número de elementos solapados, y puede encontrar fácilmente un valor p empírico para 10000 elementos.

Código como el siguiente hará esto:

countOverlap<-function(total=61000, numgA=23000, numgB=15000, replace=FALSE){
    groupA<-sample.int(total, numgA, replace=replace)
    groupB<-sample.int(total, numgB, replace=replace)
    return(length(intersect(groupA, groupB)))
}

tmpres<-replicate(1000, countOverlap(total=100, numgA=20, numgB=30))

#if your true observed value was 10:
pval<-mean(tmpres >= 10)
pval

Sin embargo, es posible que exista una solución analítica y que no sea necesaria la simulación. Quizá otra persona pueda proporcionársela.

0voto

neilh Puntos 26

El enfoque correcto depende de lo que se fije. Si el tamaño de los 2 conjuntos es "fijo", entonces se hace simplemente mediante una prueba chi-cuadrado de independencia en la que la tabla 2x2 es "en/no en" cada conjunto. Si sólo se fija el número total de elementos, la prueba ji-cuadrado no es correcta.

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