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.
Respuestas:
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:
dgof
cvm.test()
EDITAR:
Para convertir esto en un procedimiento de tipo de muestreo, podemos hacer lo siguiente:
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.
fuente