Analysieren von A / B-Testergebnissen, die nicht normal verteilt sind, unter Verwendung eines unabhängigen T-Tests

13

Ich habe eine Reihe von Ergebnissen aus einem A / B-Test (eine Kontrollgruppe, eine Merkmalsgruppe), die nicht zu einer Normalverteilung passen. Tatsächlich ähnelt die Verteilung eher der Landau-Verteilung.

Ich glaube, dass der unabhängige T-Test erfordert, dass die Stichproben mindestens annähernd normal verteilt sind, was mich davon abhält, den T-Test als gültige Methode für Signifikanztests zu verwenden.

Aber meine Frage ist: Wann kann man sagen, dass der t-Test keine gute Methode für Signifikanztests ist?

Oder anders ausgedrückt: Wie kann man die Zuverlässigkeit der p-Werte eines t-Tests bei alleiniger Angabe des Datensatzes beurteilen?

teebszet
quelle

Antworten:

8

Die Verteilung Ihrer Daten muss nicht normal sein, sondern die Stichprobenverteilung muss nahezu normal sein. Wenn Ihre Stichprobengröße groß genug ist, sollte die Stichprobenverteilung der Mittelwerte aus der Landau-Verteilung aufgrund des zentralen Grenzwertsatzes nahezu normal sein .

Das bedeutet, dass Sie t-test sicher mit Ihren Daten verwenden können sollten.

Beispiel

Betrachten wir dieses Beispiel: Nehmen wir an, wir haben eine Population mit Lognormalverteilung mit mu = 0 und sd = 0,5 (es sieht Landau ein bisschen ähnlich).

lognormale Dichte

Aus dieser Verteilung werden 30 Beobachtungen 5000-mal abgetastet und jeweils der Mittelwert der Stichprobe berechnet

Und das bekommen wir

Stichprobenverteilung

Sieht ganz normal aus, oder? Wenn wir die Stichprobe vergrößern, wird dies noch deutlicher

Stichprobenverteilung

R-Code

x = seq(0, 4, 0.05)
y = dlnorm(x, mean=0, sd=0.5)
plot(x, y, type='l', bty='n')


n = 30
m = 1000

set.seed(0)
samp = rep(NA, m)

for (i in 1:m) {
  samp[i] = mean(rlnorm(n, mean=0, sd=0.5))
}

hist(samp, col='orange', probability=T, breaks=25, main='sample size = 30')
x = seq(0.5, 1.5, 0.01)
lines(x, dnorm(x, mean=mean(samp), sd=sd(samp)))


n = 300
samp = rep(NA, m)

for (i in 1:m) {
  samp[i] = mean(rlnorm(n, mean=0, sd=0.5))
}

hist(samp, col='orange', probability=T, breaks=25, main='sample size = 300')
x = seq(1, 1.25, 0.005)
lines(x, dnorm(x, mean=mean(samp), sd=sd(samp)))
Alexey Grigorev
quelle
Hallo Alexei! Es scheint, dass Sie R beherrschen, und ich frage mich, ob Sie Ratschläge zu dem Problem haben, bei dem ich gerade stecke: stackoverflow.com/questions/25101444/… . Darüber hinaus würde ich mich freuen, mit Ihnen in Kontakt zu treten (siehe aleksandrblekh.com für meine Profile in professionellen sozialen Netzwerken), da wir anscheinend einige gemeinsame Interessen haben (einschließlich der Muttersprache :-).
Aleksandr Blekh
Dies ist eine großartige Erklärung und in der Tat die Methode, die ich letztendlich benutzte. Ich stelle mir diese Methode gerne vor, als würde man den gesamten Stichprobensatz in kleinere Teilstichproben aufteilen und das Mittel (Durchschnitt mit CLT) jeder Teilstichprobe als Verteilung des Datensatzes verwenden. Danke für die Antwort!
Teebszet
1

Grundsätzlich wird ein unabhängiger t-Test oder ein 2-Stichproben-t-Test verwendet, um zu überprüfen, ob die Mittelwerte der beiden Stichproben signifikant unterschiedlich sind. Oder anders ausgedrückt, wenn es einen signifikanten Unterschied zwischen den Mitteln der beiden Stichproben gibt.

Das Mittel dieser 2 Stichproben sind nun zwei Statistiken, die nach CLT eine Normalverteilung haben, wenn genügend Stichproben zur Verfügung gestellt werden. Beachten Sie, dass CLT unabhängig von der Verteilung funktioniert, aus der die Durchschnittsstatistik erstellt wird.

Normalerweise kann man einen Z-Test verwenden, aber wenn die Varianzen anhand der Stichprobe geschätzt werden (da dies nicht bekannt ist), wird eine zusätzliche Unsicherheit eingeführt, die in die t-Verteilung eingeht. Deshalb gilt hier der 2-Stichproben-T-Test.

rapaio
quelle