Nicht parametrischer Test, wenn zwei Proben aus derselben Verteilung gezogen wurden

19

Ich möchte die Hypothese testen, dass zwei Stichproben aus derselben Grundgesamtheit stammen, ohne Annahmen über die Verteilung der Stichproben oder der Grundgesamtheit zu treffen. Wie soll ich das machen?

Aus Wikipedia ist mein Eindruck, dass der Mann Whitney U-Test geeignet sein sollte, aber er scheint in der Praxis nicht für mich zu funktionieren.

Der Vollständigkeit halber habe ich einen Datensatz mit zwei Proben (a, b) erstellt, die groß sind (n = 10000) und aus zwei Populationen stammen, die nicht normal (bimodal), ähnlich (gleicher Mittelwert), aber unterschiedlich sind (Standardabweichung) um die "Höcker".) Ich suche nach einem Test, der erkennt, dass diese Proben nicht aus der gleichen Population stammen.

Histogrammansicht:

bimodale Proben

R-Code:

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)

Hier ist der Mann Whitney-Test, der überraschenderweise (?) Die Nullhypothese, dass die Stichproben aus derselben Population stammen, nicht widerlegt:

> 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

Hilfe! Wie sollte ich den Code aktualisieren, um die verschiedenen Distributionen zu erkennen? (Ich hätte gerne eine Methode, die auf generischer Randomisierung / Resampling basiert, falls verfügbar.)

BEARBEITEN:

Vielen Dank für die Antworten! Ich lerne aufgeregt mehr über den Kolmogorov-Smirnov, der für meine Zwecke sehr geeignet zu sein scheint.

Ich verstehe, dass der KS-Test diese ECDFs der beiden Beispiele vergleicht:

ECDFs

Hier sehe ich drei interessante Features. (1) Die Proben stammen aus unterschiedlichen Verteilungen. (2) A liegt an bestimmten Stellen deutlich über B. (3) A liegt an bestimmten anderen Stellen deutlich unter B.

Der KS-Test scheint in der Lage zu sein, jedes dieser Merkmale einer Hypothese zu unterziehen:

> 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

Das ist wirklich ordentlich! Ich habe ein praktisches Interesse an jeder dieser Funktionen und es ist großartig, dass der KS-Test jede einzelne davon überprüfen kann.

Luke Gorrie
quelle
Es ist nicht verwunderlich, dass MW nicht ablehnt. Bei einem einseitigen Test wird geprüft, ob Pr (a> b) <0,05 ist, wobei a und b zufällig ausgewählte Mitglieder Ihrer Populationen sind.
mdewey
1
Die Hypothese für Mann-Whitney soll sich manchmal auf die "Lokalisierung" der beiden Gruppen beziehen, oder auf etwas im Sinne einer systematischen stochastischen Differenz. Bei Ihren Daten sind beide Gruppen symmetrisch um 75 verteilt, daher sollte MW auf keinen Fall einen Unterschied feststellen.
Sal Mangiafico
4
Dies ist ein gutes Beispiel für die Verwirrung, die wir säen, wenn uns die Hypothese für einen Test nicht klar ist. Leider sind die Menschen gelehrt , eine verwenden t -Test zwei Gruppen zu vergleichen, ohne wirklich darüber nachzudenken , dass dieser Test zwei vergleicht Mittel , während es ein Mediantest ist zum Vergleich zwei Mediane andere Perzentile, Mann-Whitney , die etwas anderes, Quantilsregression im Vergleich zu vergleichen , Tests zum Vergleichen von Varianzen, Kolmogorov-Smirnov zum Vergleichen der Verteilungen und so weiter ... Wir sagen manchmal nur, wir wollen zwei "Populationen" vergleichen, ohne klar zu sein, welche Hypothese wir wirklich testen wollen.
Sal Mangiafico
Nach dem Nachdenken scheint die Wikipedia-Seite für den MW-Test die Hypothese sehr klar zu formulieren, und es war für mich ein Missverständnis (unbegründeter Sprung) zu glauben, dass diese Hypothese auch impliziert, dass die Stichproben aus derselben Verteilung stammen. Tatsächlich wird das Problem offensichtlich, wenn zwei verschiedene Verteilungen verglichen werden, die um denselben Mittelpunkt symmetrisch sind.
Luke Gorrie

Antworten:

17

Der Kolmogorov-Smirnov-Test ist der gebräuchlichste Weg, aber es gibt auch einige andere Möglichkeiten.

Die Tests basieren auf den empirischen kumulativen Verteilungsfunktionen. Das grundlegende Verfahren ist:

  • Lp
  • Berechnen Sie die Verteilung der Teststatistik unter der Nullhypothese, dass die Stichproben aus derselben Verteilung stammen (zum Glück haben die Leute dies bereits für die gängigsten Entfernungen getan!).
  • αα%

L

ks.test(a,b)

p

L2dgofcvm.test()

BEARBEITEN:

nm

Um daraus ein Stichprobenverfahren zu machen, können wir Folgendes tun:

  1. nmnm
  2. Berechnen Sie Ihre Distanzmetrik für die Stichproben. Für den KS-Test ist dies nur die max. Unterschied zwischen den empirischen CDFs.
  3. Speichern Sie das Ergebnis und fahren Sie mit Schritt 1 fort.

Schließlich werden Sie viele Stichproben aus der Verteilung der Teststatistik unter der Nullhypothese aufbauen, deren Quantile Sie verwenden können, um Ihren Hypothesentest auf der von Ihnen gewünschten Signifikanzstufe durchzuführen. Für die KS-Teststatistik wird diese Verteilung als Kolmogorov-Verteilung bezeichnet.

Beachten Sie, dass dies für den KS-Test nur eine Verschwendung von Rechenaufwand ist, da die Quantile theoretisch sehr einfach charakterisiert werden, das Verfahren jedoch im Allgemeinen auf jeden Hypothesentest anwendbar ist.

Wille
quelle
Vielen Dank! Der Kolmogorov-Smirnov-Test weist in der Tat die Nullhypothese zurück, dass diese Stichproben aus derselben Population stammen. Und intuitiv ist es sinnvoll, die ECDFs zu vergleichen, denn das ist mehr oder weniger das, was ich visuell mit dem Histogramm mache. Frage: Angenommen, ich müsste diesen Test von Grund auf ohne Tools wie R implementieren. Gibt es eine einfache Methode, die ausreichen würde? (Vielleicht basierend auf Bootstrapping?), Frage ich, weil mein Hintergrund Computerprogrammierung ist und ich simulationsbasierte Methoden viel einfacher zu verstehen finde.
Luke Gorrie
Sie sollten sich mit Randomisierung oder Permutationen befassen. Ich bevorzuge diese für nicht normale Tests. Sie erfüllen auch unsere Kriterien, eher Simulation als Statistik zu sein
RTbecard
2
@JamesAdamCampbell könntest du das in einer anderen Antwort etwas näher erläutern?
Will
1
LNorm (einfach, indem Sie nur die maximale Differenz nehmen). Es sieht ziemlich einfach aus.
DW
1
Ich sehe kein Problem damit. Ich wäre gespannt auf die Ergebnisse, wenn Sie etwas davon ausprobieren würden! Es wäre cool zu sehen, ob der CI-Ansatz und der direkte KS-Test immer die gleiche Antwort liefern. Ich vermute, dass sie das tun :)
Will