Jakiego testu statystycznego użyć do testu A / B?

12

Mamy dwie kohorty po 1000 próbek każda. Mierzymy 2 wielkości dla każdej kohorty. Pierwszy to zmienna binarna. Druga to liczba rzeczywista, która następuje po rozkładzie ciężkiego ogona. Chcemy ocenić, która grupa najlepiej sprawdza się w przypadku każdej metryki. Do wyboru jest wiele testów statystycznych: ludzie sugerują test z, inni używają testu t, a inni Mann – Whitney U.

  • Który test lub testy powinniśmy wybrać dla każdej metryki dla naszego przypadku?
  • Co się stanie, jeśli jeden test sugeruje znaczącą różnicę między kohortami, a inny test sugeruje nieistotną różnicę?
iliasfl
źródło

Odpowiedzi:

12

Biorąc pod uwagę, że twoje dwie metryki są 1) binarne i 2) gruboogoniaste, powinieneś unikać testu t, który zakłada normalne rozkłady.

Myślę, że Mann-Whitney U jest twoim najlepszym wyborem i powinien być wystarczająco wydajny, nawet jeśli twoje rozkłady były prawie normalne.

Jeśli chodzi o twoje drugie pytanie:

Co się stanie, jeśli jeden test sugeruje znaczącą różnicę między kohortami, a inny test sugeruje nieistotną różnicę?

Nie jest to rzadkie, jeśli różnica statystyczna jest na granicy, a dane mają „niechlujny” rozkład próbek. Sytuacja ta wymaga od analityka uważnego rozważenia wszystkich założeń i ograniczeń każdego testu statystycznego oraz nadania największej wagi testowi statystycznemu, który ma najmniejszą liczbę naruszeń założeń.

Przyjmij założenie rozkładu normalnego. Istnieją różne testy normalności, ale to nie koniec historii. Niektóre testy działają całkiem dobrze na rozkładach symetrycznych, nawet jeśli występują pewne odchylenia od normalności, ale nie działają dobrze na rozkładach pochylenia.

Jako ogólną zasadę sugeruję, aby nie przeprowadzać żadnych testów, w przypadku których którekolwiek z jego założeń zostałyby wyraźnie naruszone.

EDYCJA: W przypadku drugiej zmiennej może być wykonalne przekształcenie zmiennej w zmienną, która jest normalnie rozłożona (lub przynajmniej blisko), o ile transformacja zachowuje porządek. Musisz mieć pewność, że transformacja daje rozkład normalny dla obu kohort. Jeśli dopasujesz drugą zmienną do rozkładu log-normal, funkcja log przekształca ją w rozkład normalny. Ale jeśli rozkładem jest Pareto (prawo mocy), to nie ma transformacji do rozkładu normalnego.

EDYCJA: Jak zasugerowano w tym komentarzu , zdecydowanie powinieneś rozważyć estymację bayesowską jako alternatywę dla testów t i innych testów istotności hipotezy zerowej (NHST).

MrMeritology
źródło
Dzięki za informację. Nie byłem wystarczająco jasny, mam dwie wielkości, z których jedna jest binarna, a druga jest liczbą rzeczywistą po rozłożeniu ciężkiego ogona. Zredagowałem pytanie, aby to wyjaśnić.
iliasfl
Tak, myślę, że rozumiem. Chcesz uruchomić test dwa razy, raz na zmiennej binarnej i raz na zmiennej rzeczywistej (rozkład ciężki). Polecam uruchomić Mann-Whitney U dla obu.
Dlaczego Mann-Whitney nadaje się do danych binarnych?
Glen_b
Mann-Whitney U jest skuteczny w przypadku rozkładów niestandardowych, w tym rozkładów dyskretnych o dwóch wartościach (tj. Binarnych). Gdyby wszystkie dane były binarne, być może kolejny test działałby lepiej.
MrMeritology
Czy ktoś może potwierdzić, czy to prawda? ...
7

W przypadku danych o wartościach rzeczywistych warto rozważyć utworzenie własnej statystyki testowej na podstawie bootstrapu danych. Takie podejście zwykle daje dokładne wyniki, gdy mamy do czynienia z nietypowymi rozkładami populacji lub próbujemy opracować przedział ufności wokół parametru, który nie ma dogodnego rozwiązania analitycznego. (To pierwsze jest prawdziwe w twoim przypadku. Wspominam o drugim tylko w kontekście).

W przypadku danych o wartościach rzeczywistych możesz wykonać następujące czynności:

  1. Połącz swoje dwie kohorty.
  2. Z puli próbkuj dwie grupy 1000 elementów z zamiennikiem.
  3. Obliczyć różnicę w średniej próby między dwiema grupami.
  4. Powtórz kroki 2 i 3 kilka tysięcy razy, aby opracować rozkład tych różnic.

Po uzyskaniu tego rozkładu obliczyć różnicę średnich dla rzeczywistych próbek i obliczyć wartość p.

Nathan Gould
źródło
Dzięki, więc otrzymujesz rozkład, który powinien być normalny z pewnym średnim i standardowym odchyleniem. Jak obliczyłbyś z tego wartość p, a może przedziały ufności, aby wybrać zwycięzcę (jeśli taki istnieje)?
iliasfl
Rozkład niekoniecznie byłby normalny. Miałby z grubsza rozkład tego, z czego pobrano próbki. Na tym polega piękno używania bootstrapu. W każdym razie wartość p uzyskuje się, obliczając statystyki testowe na podstawie rzeczywistych wyników. Tj. Różnica średnich dla każdej kohorty. Następnie porównaj ten numer z rozkładem. Otrzymany percentyl jest wartością p dla jednostronnego testu na różnicę średniej.
Nathan Gould
4
To, co opisuje Nathan, jest również podstawą bayesowskich metod testowania istotności. Użyłem (i obecnie używam) estymacji bayesowskiej zastępuje podejście T-Test (BEST). Powinieneś spojrzeć na te ramy, jeśli zamierzasz wdrożyć metodę łączenia.
cwharland
0

Po drugie: odpowiedź @ MrMeritology. Właściwie zastanawiałem się, czy test MWU byłby mniej skuteczny niż test niezależnych proporcji, ponieważ podręczniki, których się nauczyłem i których użyłem, mówiły, że MWU można zastosować tylko do danych porządkowych (lub przedziałów / proporcji).

Ale moje wyniki symulacji, przedstawione na wykresie poniżej, wskazują, że test MWU jest rzeczywiście nieco silniejszy niż test proporcji, jednocześnie dobrze kontrolując błąd typu I (przy proporcji populacji w grupie 1 = 0,50).

wprowadź opis zdjęcia tutaj

Udział populacji w grupie 2 utrzymuje się na poziomie 0,50. Liczba iteracji wynosi 10 000 w każdym punkcie. Powtórzyłem symulację bez korekty Yate'a, ale wyniki były takie same.

library(reshape)

MakeBinaryData <- function(n1, n2, p1){
  y <- c(rbinom(n1, 1, p1), 
        rbinom(n2, 1, 0.5))
  g_f <- factor(c(rep("g1", n1), rep("g2", n2)))
  d <- data.frame(y, g_f)
  return(d)
}

GetPower <- function(n_iter, n1, n2, p1, alpha=0.05, type="proportion", ...){
  if(type=="proportion") {
    p_v <- replicate(n_iter, prop.test(table(MakeBinaryData(n1, n1, p1)), ...)$p.value)
  }

  if(type=="MWU") {
    p_v <- replicate(n_iter, wilcox.test(y~g_f, data=MakeBinaryData(n1, n1, p1))$p.value)
  }

  empirical_power <- sum(p_v<alpha)/n_iter
  return(empirical_power)
}

p1_v <- seq(0.5, 0.6, 0.01)
set.seed(1)
power_proptest <- sapply(p1_v, function(x) GetPower(10000, 1000, 1000, x))
power_mwu <- sapply(p1_v, function(x) GetPower(10000, 1000, 1000, x, type="MWU"))
Masato Nakazawa
źródło
twój wynik jest cały czarny
Ooker