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.
Réponses:
Le test de Kolmogorov-Smirnov est le moyen le plus courant de le faire, mais il existe également d'autres options.
Les tests sont basés sur les fonctions empiriques de distribution cumulative. La procédure de base est la suivante:
dgof
cvm.test()
ÉDITER:
Pour en faire une procédure de type échantillonnage, nous pouvons procéder comme suit:
Finalement, vous accumulerez de nombreux échantillons à partir de la distribution de la statistique de test sous l'hypothèse nulle, dont vous pourrez utiliser les quantiles pour effectuer votre test d'hypothèse au niveau de signification que vous souhaitez. Pour la statistique de test KS, cette distribution est appelée la distribution de Kolmogorov.
Notez que pour le test KS, ce n'est qu'un gaspillage d'effort de calcul car les quantiles sont caractérisés très simplement théoriquement, mais la procédure est généralement applicable à tout test d'hypothèse.
la source