Test nieparametryczny, jeżeli dwie próbki są pobierane z tego samego rozkładu

19

Chciałbym przetestować hipotezę, że dwie próbki pochodzą z tej samej populacji, nie przyjmując żadnych założeń dotyczących rozkładu próbek lub populacji. Jak mam to zrobić?

Z Wikipedii mam wrażenie, że test U Manna Whitneya powinien być odpowiedni, ale wydaje mi się, że nie działa w praktyce.

Dla konkretności stworzyłem zestaw danych z dwoma próbkami (a, b), które są duże (n = 10000) i pochodzą z dwóch populacji, które są nienormalne (bimodalne), są podobne (ta sama średnia), ale są różne (odchylenie standardowe wokół „garbów”). Szukam testu, który rozpozna, że ​​próbki nie pochodzą z tej samej populacji.

Widok histogramu:

próbki bimodalne

Kod 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)

Oto zaskakująco (?) Test Manna Whitneya, który nie odrzucił hipotezy zerowej, że próbki pochodzą z tej samej populacji:

> 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

Wsparcie! Jak zaktualizować kod, aby wykrył różne dystrybucje? (Chciałbym szczególnie metodę opartą na ogólnej randomizacji / ponownym próbkowaniu, jeśli jest dostępna).

EDYTOWAĆ:

Dziękuję wszystkim za odpowiedzi! Z podekscytowaniem dowiaduję się więcej o Kołmogorowie – Smirnowie, który wydaje się bardzo odpowiedni do moich celów.

Rozumiem, że test KS porównuje te ECDF dwóch próbek:

ECDF

Tutaj mogę wizualnie zobaczyć trzy interesujące funkcje. (1) Próbki pochodzą z różnych dystrybucji. (2) A jest wyraźnie powyżej B w niektórych punktach. (3) A jest wyraźnie poniżej B w niektórych innych punktach.

Test KS wydaje się być w stanie sprawdzić hipotezę każdej z tych cech:

> 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

To jest naprawdę fajne! Praktycznie interesuję się każdą z tych funkcji, więc świetnie, że test KS może sprawdzić każdą z nich.

Luke Gorrie
źródło
Nic dziwnego, że MW nie odrzuca. W przypadku testu jednostronnego sprawdza się, czy Pr (a> b) <0,05, gdzie aib są losowo wybranymi członkami populacji.
mdewey
1
Mówi się czasem, że hipoteza Manna-Whitneya dotyczy „lokalizacji” dwóch grup lub czegoś w rodzaju systematycznej różnicy stochastycznej. W przypadku twoich danych obie grupy są symetrycznie rozmieszczone wokół 75, więc MW zdecydowanie nie powinno znaleźć różnicy.
Sal Mangiafico
4
To dobry przykład zamieszania, które zasiewamy, gdy nie jesteśmy pewni co do hipotezy testu. Niestety, ludzie uczą się używać testu t do porównywania dwóch grup, nie myśląc tak naprawdę, że ten test porównuje dwa sposoby , podczas gdy istnieje test mediany do porównania dwóch median , Mann-Whitney, który porównuje coś innego, regresja kwantylowa do porównania innych percentyli , testy w celu porównania wariancji, Kołmogorow-Smirnov w celu porównania rozkładów itd. Czasami po prostu mówimy, że chcemy porównać dwie „populacje” bez wyjaśnienia, którą hipotezę naprawdę chcemy przetestować.
Sal Mangiafico
Po zastanowieniu wydaje się, że strona Wikipedii do testu MW bardzo jasno stwierdza hipotezę i moim błędem było pomyśleć, że hipoteza ta sugeruje również, że próbki pochodzą z tego samego rozkładu. Rzeczywiście problem staje się oczywisty przy porównywaniu dwóch różnych rozkładów, które są symetryczne wokół tego samego punktu centralnego.
Luke Gorrie,

Odpowiedzi:

17

Test Kołmogorowa-Smirnowa jest najczęstszym sposobem, aby to zrobić, ale są też inne opcje.

Testy oparte są na empirycznych funkcjach skumulowanego rozkładu. Podstawowa procedura to:

  • L.p
  • Sprawdź rozkład statystyki testowej pod hipotezą zerową, że próbki pochodzą z tego samego rozkładu (na szczęście ludzie zrobili to już dla najczęstszych odległości!)
  • αα%

L.

ks.test(a,b)

p

L.2)dgofcvm.test()

EDYTOWAĆ:

nm

Aby przekształcić to w procedurę typu próbkowania, możemy wykonać następujące czynności:

  1. nmnm
  2. Oblicz metrykę odległości dla próbek. W przypadku testu KS jest to tylko maksimum. różnica między empirycznymi CDF.
  3. Zapisz wynik i wróć do kroku 1.

Ostatecznie stworzysz wiele próbek z rozkładu statystyki testowej pod hipotezą zerową, których kwantyli możesz użyć do przeprowadzenia testu hipotezy na dowolnym poziomie istotności. W przypadku statystyki testu KS rozkład ten nazywa się rozkładem Kołmogorowa.

Zauważ, że w przypadku testu KS jest to tylko strata wysiłku obliczeniowego, ponieważ kwantyle są bardzo prosto scharakteryzowane teoretycznie, ale procedura ma ogólne zastosowanie do każdego testu hipotez.

Wola
źródło
Dziękuję Ci! Test Kołmogorowa-Smirnowa faktycznie odrzuca hipotezę zerową, że próbki te pochodzą z tej samej populacji. I intuicyjnie sensowne jest porównywanie ECDF, ponieważ mniej więcej to robię wizualnie z histogramem. Pytanie: Załóżmy, że musiałem wdrożyć ten test od podstaw bez żadnych narzędzi takich jak R. Czy istnieje prosta metoda, która by wystarczyła? (Być może opiera się na ładowaniu początkowym?) Pytam, ponieważ moim doświadczeniem jest programowanie komputerowe i uważam, że metody oparte na symulacji są znacznie łatwiejsze do zrozumienia.
Luke Gorrie
Powinieneś przyjrzeć się randomizacji lub permutacjom. Wolę te do niestandardowych testów. Spełniają również
twoje
2
@JamesAdamCampbell, czy mógłbyś rozwinąć tę kwestię w innej odpowiedzi?
Czy
1
L.
1
Nie widzę z tym żadnego problemu. Chciałbym zobaczyć wyniki, jeśli spróbujesz tych rzeczy! Byłoby fajnie sprawdzić, czy podejście CI i prosty test KS zawsze dają tę samą odpowiedź. Podejrzewam, że tak :)
Will