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