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.
Respostas:
O teste de Kolmogorov-Smirnov é a maneira mais comum de fazer isso, mas também existem outras opções.
Os testes são baseados nas funções de distribuição cumulativa empírica. O procedimento básico é:
dgof
cvm.test()
EDITAR:
Para transformar isso em um procedimento do tipo amostragem, podemos fazer o seguinte:
Eventualmente, você criará muitas amostras a partir da distribuição da estatística de teste sob a hipótese nula, cujos quantis você pode usar para realizar seu teste de hipótese no nível de significância que desejar. Para a estatística do teste KS, essa distribuição é chamada de distribuição Kolmogorov.
Observe que, para o teste KS, isso é apenas um desperdício de esforço computacional, porque os quantis são muito simplesmente caracterizados teoricamente, mas o procedimento é geralmente aplicável a qualquer teste de hipótese.
fonte