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


19

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

Desde Wikipedia, mi impresión es que la prueba U de Mann Whitney debería ser adecuada, pero en la práctica no parece funcionar para mí.

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 (bimodal), son similares (la 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 de histograma:

muestras bimodales

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 (?) Al no 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 aleatorización genérica / remuestreo si está disponible).

EDITAR:

¡Gracias a todos por las respuestas! Estoy entusiasmado aprendiendo más sobre el Kolmogorov – Smirnov que parece muy adecuado para mis propósitos.

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

ECDF

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

La prueba KS parece ser capaz de verificar hipótesis 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

Eso 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 verificar cada una de ellas.


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.
mdewey

1
A veces se dice que la hipótesis de Mann-Whitney se refiere a la "ubicación" de los dos grupos, o algo similar a la diferencia estocástica sistemática. En el caso de sus datos, ambos grupos están distribuidos simétricamente alrededor de 75, por lo que MW definitivamente no debería encontrar una diferencia.
Sal Mangiafico

44
Este es un buen ejemplo de la confusión que sembramos cuando no tenemos clara la hipótesis de una prueba. Desafortunadamente, a las personas se les enseña a usar una prueba t para comparar dos grupos, sin pensar realmente que esta prueba compara dos medios , mientras que hay una prueba mediana para comparar dos medianas , Mann-Whitney que compara otra cosa, regresión cuantil para comparar otros percentiles , pruebas para comparar las variaciones, Kolmogorov-Smirnov para comparar las distribuciones, y así sucesivamente ... A veces simplemente decimos que queremos comparar dos "poblaciones" sin tener claro qué hipótesis realmente queremos probar.
Sal Mangiafico

Reflexionando, parece que la página de Wikipedia para la prueba MW establece la hipótesis muy claramente y fue un malentendido (salto infundado) de mi parte pensar que esta hipótesis también implica que las muestras provienen de la misma distribución. De hecho, el problema se vuelve obvio cuando se comparan dos distribuciones diferentes que son simétricas alrededor del mismo punto central.
Luke Gorrie

Respuestas:


17

La prueba 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 las funciones empíricas de distribución acumulativa. El procedimiento básico es:

  • Lpag
  • Calcule la distribución del estadístico de prueba bajo la hipótesis nula de que las muestras provienen de la misma distribución (¡afortunadamente la gente ya lo ha hecho para las distancias más comunes!)
  • αα%

L

ks.test(a,b)

pag

L2dgofcvm.test()

EDITAR:

nortemetro

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

  1. nortemetronortemetro
  2. Calcule su distancia métrica para las muestras. Para la prueba KS, esto es solo el máximo. diferencia entre los CDF empíricos.
  3. Almacene el resultado y regrese al paso 1.

Eventualmente, acumulará muchas muestras de la distribución del estadístico de prueba bajo la hipótesis nula, cuyos cuantiles puede usar para realizar su prueba de hipótesis al nivel de significación que desee. Para la estadística de prueba KS, esta distribución se llama distribución de Kolmogorov.

Tenga en cuenta que para la prueba KS, esto es solo una pérdida de esfuerzo computacional porque los cuantiles se caracterizan de manera muy simple en teoría, pero el procedimiento generalmente es aplicable a cualquier prueba de hipótesis.


¡Gracias! La prueba de Kolmogorov-Smirnov de hecho rechaza la hipótesis nula de que estas muestras son de la misma población. E intuitivamente tiene sentido comparar los ECDF porque eso es más o menos lo que estoy haciendo visualmente con el histograma. Pregunta: Suponga que necesito implementar esta prueba desde cero sin ninguna herramienta como R. ¿Existe un método simple que sea suficiente? (¿Quizás basado en bootstrapping?) Pregunto porque mi experiencia es en programación de computadoras y encuentro que los métodos basados ​​en simulación son mucho más fáciles de entender.
Luke Gorrie el

Debes estudiar la aleatorización o las permutaciones. Prefiero estos para pruebas no normales. También cumplen con sus criterios de simulación en lugar de estadísticas
RTbecard 02 de

2
@JamesAdamCampbell, ¿podría ampliar eso un poco en una respuesta diferente?
Será el

1
L

1
No veo ningún problema con eso. ¡Me interesaría ver los resultados si prueba algunas de estas cosas! Sería genial ver si el enfoque CI y la prueba KS directa siempre le dan la misma respuesta. Sospecho que sí :)
Will
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.