Eu gostaria de testar a hipótese de que duas amostras são retiradas da mesma população, sem fazer nenhuma suposição sobre a distribuição das amostras ou da população. Como devo fazer isso?
Da Wikipedia, minha impressão é que o teste U de Mann Whitney deve ser adequado, mas não parece funcionar para mim na prática.
Para concretude, criei um conjunto de dados com duas amostras (a, b) grandes (n = 10000) e extraídas de duas populações não normais (bimodais), semelhantes (mesma média), mas diferentes (desvio padrão) Estou procurando um teste que reconheça que essas amostras não são da mesma população.
Visualização 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)
Aqui está o teste de Mann Whitney surpreendentemente (?) Falhando em rejeitar a hipótese nula de que as amostras são da mesma população:
> 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
Socorro! Como devo atualizar o código para detectar as diferentes distribuições? (Gostaria especialmente de um método baseado em randomização / reamostragem genérica, se disponível.)
EDITAR:
Obrigado a todos pelas respostas! Estou animadamente aprendendo mais sobre o Kolmogorov – Smirnov, que parece muito adequado para meus propósitos.
Entendo que o teste KS está comparando esses ECDFs das duas amostras:
Aqui eu posso ver visualmente três características interessantes. (1) As amostras são de diferentes distribuições. (2) A está claramente acima de B em determinados pontos. (3) A está claramente abaixo de B em outros pontos.
O teste KS parece capaz de verificar hipóteses cada um desses recursos:
> 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
Isso é realmente legal! Tenho um interesse prático em cada um desses recursos e, portanto, é ótimo que o teste KS possa verificar cada um deles.