28 votos

Prueba no paramétrica si dos muestras se extraen de la misma distribución

Me gustaría probar la hipótesis de que dos muestras se extraen de la misma población, sin hacer ninguna suposición sobre las distribuciones de las muestras o de la población. ¿Cómo debo hacerlo?

De la Wikipedia mi impresión es que la prueba U de Mann Whitney debería ser adecuada, pero no parece que me funcione en la práctica.

Para concretar he creado un conjunto de datos con dos muestras (a, b) que son grandes (n=10000) y extraídas de dos poblaciones que no son normales (bimodales), son similares (misma media), pero son diferentes (desviación estándar alrededor de las "jorobas"). Estoy buscando una prueba que reconozca que estas muestras no son de la misma población.

Vista del histograma:

bimodal samples

Código R:

a <- tibble(group = "a",
            n = c(rnorm(1e4, mean=50, sd=10),
                  rnorm(1e4, mean=100, sd=10)))
b <- tibble(group = "b",
            n = c(rnorm(1e4, mean=50, sd=3),
                  rnorm(1e4, mean=100, sd=3)))
ggplot(rbind(a,b), aes(x=n, fill=group)) +
  geom_histogram(position='dodge', bins=100)

Aquí está la prueba de Mann Whitney sorprendentemente (?) fallando en rechazar la hipótesis nula de que las muestras son de la misma población:

> wilcox.test(n ~ group, rbind(a,b))

        Wilcoxon rank sum test with continuity correction

data:  n by group
W = 199990000, p-value = 0.9932
alternative hypothesis: true location shift is not equal to 0

Ayuda ¿Cómo debo actualizar el código para detectar las diferentes distribuciones? (Me gustaría especialmente un método basado en la aleatorización genérica / remuestreo si está disponible).

EDITAR:

Gracias a todos por las respuestas. Estoy aprendiendo con entusiasmo más sobre el Kolmogorov-Smirnov, que parece muy adecuado para mis fines.

Entiendo que la prueba KS está comparando estas ECDF de las dos muestras:

ECDFs

Aquí puedo ver visualmente tres características interesantes. (1) Las muestras proceden de distribuciones diferentes. (2) A está claramente por encima de B en algunos puntos. (3) A está claramente por debajo de B en otros puntos.

La prueba KS parece ser capaz de comprobar la hipótesis de cada una de estas características:

> ks.test(a$n, b$n)

        Two-sample Kolmogorov-Smirnov test

data:  a$n and b$n
D = 0.1364, p-value < 2.2e-16
alternative hypothesis: two-sided

> ks.test(a$n, b$n, alternative="greater")

        Two-sample Kolmogorov-Smirnov test

data:  a$n and b$n
D^+ = 0.1364, p-value < 2.2e-16
alternative hypothesis: the CDF of x lies above that of y

> ks.test(a$n, b$n, alternative="less")

        Two-sample Kolmogorov-Smirnov test

data:  a$n and b$n
D^- = 0.1322, p-value < 2.2e-16
alternative hypothesis: the CDF of x lies below that of y

¡Esto es realmente genial! Tengo un interés práctico en cada una de estas características, por lo que es genial que la prueba KS pueda comprobar cada una de ellas.

0 votos

No es demasiado sorprendente que MW no rechace. Para una prueba unilateral prueba si Pr(a>b) < 0,05 donde a y b son miembros elegidos al azar de sus poblaciones.

1 votos

A veces se dice que la hipótesis de Mann-Whitney se refiere a la "localización" de los dos grupos, o algo parecido a una diferencia estocástica sistemática. En el caso de sus datos, ambos grupos están distribuidos simétricamente en torno a 75, por lo que M-W no debería encontrar una diferencia.

6 votos

Este es un buen ejemplo de la confusión que sembramos cuando no tenemos clara la hipótesis de una prueba. Por desgracia, a la gente se le enseña a utilizar una t -prueba para comparar dos grupos, sin pensar realmente que esta prueba compara dos significa mientras que hay una prueba de la mediana para comparar dos medianas , Mann-Whitney que compara otra cosa, regresión cuantílica para comparar otros percentiles, pruebas para comparar varianzas, Kolmogorov-Smirnov para comparar las distribuciones, etc... A veces nos limitamos a decir que queremos comparar dos "poblaciones" sin tener claro qué hipótesis queremos probar realmente.

25voto

Brian Cauthon Puntos 4031

El test de Kolmogorov-Smirnov es la forma más común de hacer esto, pero también hay algunas otras opciones.

Las pruebas se basan en la evidencia empírica funciones de distribución acumulativa. El procedimiento básico es:

  • Elija una forma de medir la distancia entre el ECDFs. Desde ECDFs son funciones, los candidatos obvios son los $L^p$ normas, que miden la distancia en función de los espacios. Esta distancia es de nuestro estadístico de prueba.
  • Averiguar la distribución de la prueba estadística de la hipótesis nula de que las muestras provienen de la misma distribución (por suerte la gente ya han hecho esto para la mayoría de las distancias!)
  • Elegir un umbral, $\alpha$, para que su hipótesis y rechazar la nula si el estadístico de prueba calculado es en el $\alpha \%$ colas de la distribución en el punto 2.

Para el test de Kolmogorov-Smirnov, el estadístico de prueba es la distancia máxima entre los dos empírica CDFs (o si quieres ser más técnico de la $L^\infty$ norma). Esto es super fácil de implementar en R:

ks.test(a,b)

Si el $p$-valor es menor que el umbral fijado, rechazamos la hipótesis nula de que las muestras provienen de la misma distribución.

Otra opción es la de Cramer-von Mises de la prueba, que utiliza el cuadrado de $L^2$ norma ya que el estadístico de prueba y está implementada en la dgof paquete como cvm.test(). La CVM prueba es "la mejor" en el sentido de que la distancia métrica toma en cuenta el conjunto de los dos ECDFs, en lugar de escoger el mayor distancia.

EDITAR:

Supongamos que tenemos muestras de tamaño $n$$m$, que queremos aplicar a nuestra prueba de hipótesis.

Para convertir esto en un muestreo de tipo procedimiento, podemos hacer lo siguiente:

  1. Generar muestras de tamaño $n$ $m$ a partir de distribuciones idénticas. Para la prueba de KS (notablemente, la OMI) ni siquiera importa si la distribución de los cambios en cada iteración mientras $n$ $m$ siendo la misma.
  2. Calcular la distancia métrica de las muestras. Para la prueba de KS, esto es sólo el max. diferencia entre empírica de la Cdf.
  3. Almacenar el resultado y volver al paso 1.

Eventualmente se va a construir un montón de muestras de la distribución de la prueba estadística de la hipótesis nula, cuyo cuantiles se puede utilizar para llevar a cabo su prueba de hipótesis en cualquiera que sea el nivel de importancia que usted desea. Para el KS estadístico de prueba, esta distribución se llama el test de Kolmogorov distribución.

Tenga en cuenta que para el KS de la prueba, esto es sólo un desperdicio de esfuerzo computacional debido a que los cuantiles son muy simplemente caracterizado teóricamente, pero el procedimiento es aplicable en general a cualquier prueba de hipótesis.

0 votos

Gracias. La prueba de Kolmogorov-Smirnov rechaza efectivamente la hipótesis nula de que estas muestras proceden de la misma población. E intuitivamente tiene sentido comparar las ECDF porque eso es más o menos lo que estoy haciendo visualmente con el histograma. Pregunta: Supongamos que tuviera que implementar esta prueba desde cero sin ninguna herramienta como R. ¿Existe algún método sencillo que sea suficiente? (¿Tal vez basado en el bootstrapping?) Lo pregunto porque mi formación es la programación informática y me parece que los métodos basados en la simulación son mucho más fáciles de entender realmente.

0 votos

Deberías buscar la aleatorización o las permutaciones. Yo los prefiero para las pruebas no normales. También cumplen con el criterio de ser una simulación en lugar de una estadística.

2 votos

@JamesAdamCampbell ¿podrías ampliarlo un poco en otra respuesta?

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