Vorrei testare l'ipotesi che due campioni siano prelevati dalla stessa popolazione, senza fare ipotesi sulla distribuzione dei campioni o della popolazione. Come dovrei farlo?
Da Wikipedia la mia impressione è che il test di Mann Whitney U dovrebbe essere adatto, ma in pratica non sembra funzionare per me.
Per concretezza ho creato un set di dati con due campioni (a, b) che sono grandi (n = 10000) e disegnati da due popolazioni non normali (bimodali), simili (stessa media), ma diversi (deviazione standard intorno alle "gobbe".) Sto cercando un test che riconoscerà che questi campioni non appartengono alla stessa popolazione.
Vista istogramma:
Codice 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)
Qui il test di Mann Whitney sorprendentemente (?) Non riesce a respingere l'ipotesi nulla che i campioni provengano dalla stessa popolazione:
> 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
Aiuto! Come devo aggiornare il codice per rilevare le diverse distribuzioni? (Vorrei in particolare un metodo basato sulla randomizzazione / ricampionamento generico se disponibile.)
MODIFICARE:
Grazie a tutti per le risposte! Sto eccitando di saperne di più sul Kolmogorov – Smirnov che sembra molto adatto ai miei scopi.
Comprendo che il test KS sta confrontando questi ECDF dei due campioni:
Qui posso vedere visivamente tre caratteristiche interessanti. (1) I campioni provengono da diverse distribuzioni. (2) A è chiaramente sopra B in determinati punti. (3) A è chiaramente inferiore a B in alcuni altri punti.
Il test KS sembra essere in grado di verificare l'ipotesi di ciascuna di queste caratteristiche:
> 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
È davvero pulito! Ho un interesse pratico per ognuna di queste funzionalità ed è quindi grandioso che il test KS sia in grado di controllarle.