Sprawdź, czy dwa rozkłady dwumianowe różnią się statystycznie od siebie


37

Mam trzy grupy danych, każda z rozkładem dwumianowym (tj. Każda grupa ma elementy, które są albo sukcesem, albo porażką). Nie mam przewidywanego prawdopodobieństwa sukcesu, ale zamiast tego mogę polegać jedynie na współczynniku sukcesu każdego z nich jako przybliżeniu prawdziwego wskaźnika sukcesu. Znalazłem tylko to pytanie , które jest bliskie, ale nie wydaje się, aby dokładnie dotyczyło tego scenariusza.

Aby uprościć test, powiedzmy, że mam 2 grupy (3 można rozszerzyć z tego podstawowego przypadku).

  • Badania grupy 1: = 2455n1
  • Badania grupy 2: = 2730n2

  • Sukces grupy 1: = 1556k1
  • Sukces grupy 2: = 1671k2

Nie mam spodziewanego prawdopodobieństwa sukcesu, tylko to, co wiem z próbek. Mój dorozumiany wskaźnik sukcesu dla dwóch grup wynosi:

  • Wskaźnik powodzenia grupy 1: = 1556/2455 = 63,4%p1
  • Wskaźnik powodzenia grupy 2: = 1671/2730 = 61,2%p2

Wskaźnik powodzenia każdej próbki jest dość zbliżony. Jednak moje rozmiary próbek są również dość duże. Jeśli sprawdzę CDF rozkładu dwumianowego, aby zobaczyć, jak różni się on od pierwszego (gdzie zakładam, że pierwszy jest testem zerowym), mam bardzo małe prawdopodobieństwo, że drugi może zostać osiągnięty.

W programie Excel:

1-BINOM.DIST (1556,2455,61.2%, PRAWDA) = 0,012

Nie uwzględnia to jednak żadnej wariancji pierwszego wyniku, zakłada jedynie, że pierwszym wynikiem jest prawdopodobieństwo testu.

Czy istnieje lepszy sposób na sprawdzenie, czy te dwie próbki danych różnią się między sobą statystycznie?


Kolejne pytanie, na które się natknąłem, nie bardzo pomogło: stats.stackexchange.com/questions/82059/...
Scott


2
W R, można użyć prop.test: prop.test(c(1556, 1671), c(2455, 2730)).
COOLSerdash

1
Można to zrobić jako test proporcji dwóch próbek (dwumianowy) lub 2x2 chi-kwadrat
Glen_b

1
Rozszerzenie przypadku podstawowego z dwóch grup do trzech może być problematyczne, ponieważ testy będą współzależne: do obsługi tego potrzebna będzie dwumianowa wersja ANOVA.
whuber

Odpowiedzi:


36

Rozwiązanie jest proste w Google: http://en.wikipedia.org/wiki/Statistic_hypothesis_testing

Więc chciałbyś przetestować następującą hipotezę zerową względem podanej alternatywy

H A : p 1p 2H0:p1=p2 kontraHA:p1p2

Musisz tylko obliczyć statystykę testową, która jest

z=p^1p^2p^(1p^)(1n1+1n2)

gdzie . p^=n1p^1+n2p^2n1+n2

Zatem teraz w twoim problemie , , i P 2=0,612n1=2455N2=2730.p^1=.634p^2=.612n1=2455n2=2730.

Po obliczeniu statystyki testowej wystarczy obliczyć odpowiednią wartość regionu krytycznego, aby porównać również statystyki testowe. Na przykład, jeśli testujesz tę hipotezę na poziomie ufności 95%, musisz porównać swoją statystykę testową z wartością regionu krytycznego (dla tego testu dwustronnego).zα/2=1.96

Teraz, jeśli , możesz odrzucić hipotezę zerową, w przeciwnym razie nie możesz odrzucić hipotezy zerowej. z>zα/2

Cóż, to rozwiązanie działa w przypadku, gdy porównujesz dwie grupy, ale nie uogólnia się do przypadku, w którym chcesz porównać 3 grupy.

Możesz jednak użyć testu Chi Squared, aby sprawdzić, czy wszystkie trzy grupy mają równe proporcje, jak sugeruje @Eric w swoim komentarzu powyżej: „Czy to pytanie pomaga? Stats.stackexchange.com/questions/25299/… - Eric”


6
Dzięki @Dan. Jak wiele razy w Google, znajomość właściwego terminu do wyszukiwania jest pierwszą przeszkodą. Rzuciłem okiem na test chi-kwadrat. Problem, podobnie jak w przypadku pierwszego utknięcia, polega na tym, że moje oczekiwane obliczenia są oparte na próbce. Nie mogę zatem podać oczekiwanej wartości, ponieważ moje próbki służą do ustalenia tej oczekiwanej wartości.
Scott

@ Scott, jeśli twoje hipotetyczne proporcje dla trzech grup są takie, że wszystkie są równe, oczekiwana wartość powinna wynosić 1/3 dla każdej grupy.
Dan

1
Powiązane wyjaśnienie korzystania z tego testu można znaleźć tutaj: itl.nist.gov/div898/handbook/prc/section3/prc33.htm (obecnie strona Wikipedii nie zawiera przykładu przejścia).
wwwilliam

p^(1p^)(1n1+1n2)=p^1(1p^1)n1+p^2(1p^2)n2

odpowiedź na moje pytanie można znaleźć tutaj: stats.stackexchange.com/questions/361015/…
Tanguy

10

W R odpowiedź jest obliczana jako:

fisher.test(rbind(c(1556,2455-1556), c(1671,2730-1671)), alternative="less")

8
Czy zastanowiłbyś się, czy nie napisać czegoś więcej niż funkcji R? Nazwanie funkcji nie pomaga w zrozumieniu problemu i nie wszyscy używają R, więc nie byłoby dla nich żadnej pomocy.
Tim

1
Jest to najdokładniejsza odpowiedź statystyczna i działa w przypadku niewielkiej liczby obserwacji (patrz: itl.nist.gov/div898/handbook/prc/section3/prc33.htm ).
Andrew Mao,


3

Tylko podsumowanie:

Odpowiedzi Dana i Abaumanna sugerują testowanie w modelu dwumianowym, w którym hipoteza zerowa jest zunifikowanym pojedynczym modelem dwumianowym, którego średnia jest szacowana na podstawie danych empirycznych. Ich odpowiedzi są teoretycznie poprawne, ale wymagają one przybliżenia przy użyciu rozkładu normalnego, ponieważ rozkład statystyki testowej nie jest dokładnie zgodny z rozkładem normalnym. Dlatego jest poprawny tylko dla dużej wielkości próbki.

Ale odpowiedź Davida wskazuje na test nieparametryczny z wykorzystaniem testu Fishera. Informacje są tutaj: https://en.wikipedia.org/wiki/Fisher%27s_exact_test . Można go zastosować do małych próbek, ale trudno je obliczyć dla dużych próbek.

Który test zastosować i jak bardzo ufasz wartości p, jest zagadką. Ale zawsze istnieje tendencja do wyboru dowolnego testu.


2
1/2

1
W tym przypadku myślę, że można użyć metody Dana, ale obliczyć wartość p w sposób dokładny (dwumianowy) i przybliżony (normalny Z> Φ − 1 (1 α / 2) Z> Φ − 1 (1 α / 2) i Z <Φ − 1 (α / 2)), aby porównać, czy są wystarczająco blisko.
Dr_Hope

1

Z=p1^p2^p^(1p^)(1/n1+1/n2)p^=n1p1^+n2p2^n1+n2

Z>Φ1(1α/2)Z<Φ1(α/2)


1

W Pythonie statsmodels ma funkcję o nazwie proportions_ztest. Oto przykład jego użycia:

import statsmodels.api as sm
import numpy as np
import rpy2.robjects.packages as rpackages
import rpy2.robjects as robjects
rstats = rpackages.importr('stats')

s1 = 1556
n1 = 2455

s2 = 1671
n2 = 2730

# manual calculation
p1 = s1 / n1
p2 = s2 / n2
p = (s1 + s2) / (n1 + n2)

z = (p1 - p2) / (p*(1-p)*((1/n1)+(1/n2)))**0.5

# using R in Python with rpy2
rmatrix = robjects.r.matrix(robjects.IntVector([s1, n1-s1, s2,n2-s2]), nrow=2)
fisher_test = rstats.fisher_test(rmatrix, alternative="two.sided")

zscore, pval = sm.stats.proportions_ztest([s1, s2], [n1, n2], alternative='two-sided')

print('Manual calculation of z: {:.6f}'.format(z))
print('Z-score from statsmodels: {:.6f}'.format(zscore))
print('R pvalue from fisher.test: {:.6f}'.format(fisher_test[0][0]))
print('Statsmodels pvalue: {:.6f}'.format(pval))

To drukuje:

Manual calculation of z: 1.610825
Z-score from statsmodels: 1.610825
R pvalue from fisher.test: 0.108268
Statsmodels pvalue: 0.107218

-1

Oryginalny post: odpowiedź Dana jest w rzeczywistości niepoprawna, aby nikogo nie urazić. Test Z jest stosowany tylko wtedy, gdy dane są zgodne ze standardowym rozkładem normalnym. W takim przypadku dane mają rozkład dwumianowy, dlatego należy zastosować test chi-kwadrat, jeśli próbka jest duża, lub test Fishera, jeśli próbka jest mała.

Edycja: Mój błąd, przepraszam @Dan. Test Z jest ważny tutaj, jeśli twoje zmienne są niezależne. Jeśli to założenie nie jest spełnione lub nieznane, test Z może być nieważny.


2
χ2

Jeśli wierzysz w CLT, zwykle istnieje normalny rozkład.
Ryan

2
@ Ryan Cóż, wierzę w CLT, ale nie mówi nic o n = 30 lub n = 300 lub n = 5000. Tak naprawdę nie dostajesz normalności, chyba że w jakiś sposób uda ci się uzyskać nieskończoną liczbę próbek lub w jakiś sposób zaczniesz od normalności. Pytania dotyczące tego, jak blisko jesteśmy do normalności przy przyjmowaniu średnich, nie są uwzględniane przez CLT. (Możemy rozważyć te pytania, ale nie używamy CLT, aby dowiedzieć się, czy przybliżenie jest dobre.)
Glen_b
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.