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:
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:
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.
Antworten:
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:
dgof
cvm.test()
BEARBEITEN:
Um daraus ein Stichprobenverfahren zu machen, können wir Folgendes tun:
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.
quelle