Je voudrais tester l'hypothèse que deux échantillons sont tirés de la même population, sans faire d'hypothèses sur la distribution des échantillons ou la population. Comment dois-je procéder?
D'après Wikipédia, j'ai l'impression que le test de Mann Whitney U devrait convenir, mais il ne semble pas fonctionner pour moi dans la pratique.
Pour le concret, j'ai créé un ensemble de données avec deux échantillons (a, b) qui sont grands (n = 10000) et tirés de deux populations qui ne sont pas normales (bimodales), sont similaires (même moyenne), mais sont différentes (écart-type autour des "bosses".) Je recherche un test qui reconnaîtra que ces échantillons ne sont pas issus de la même population.
Vue histogramme:
Code 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)
Voici le test de Mann Whitney de manière surprenante (?) Qui ne rejette pas l'hypothèse nulle selon laquelle les échantillons proviennent de la même population:
> 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
Aidez-moi! Comment dois-je mettre à jour le code pour détecter les différentes distributions? (Je voudrais surtout une méthode basée sur la randomisation / rééchantillonnage générique si disponible.)
ÉDITER:
Merci à tous pour les réponses! J'en apprends avec enthousiasme plus sur le Kolmogorov – Smirnov qui semble très approprié à mes besoins.
Je comprends que le test KS compare ces ECDF des deux échantillons:
Ici, je peux voir visuellement trois fonctionnalités intéressantes. (1) Les échantillons proviennent de différentes distributions. (2) A est clairement au-dessus de B à certains points. (3) A est nettement inférieur à B à certains autres points.
Le test KS semble être capable de vérifier par hypothèse chacune de ces caractéristiques:
> 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
C'est vraiment bien! J'ai un intérêt pratique pour chacune de ces fonctionnalités et il est donc formidable que le test KS puisse vérifier chacune d'elles.