Prüfen Sie, ob sich zwei Binomialverteilungen statistisch voneinander unterscheiden


37

Ich habe drei Gruppen von Daten, jede mit einer Binomialverteilung (dh jede Gruppe hat Elemente, die entweder Erfolg oder Misserfolg haben). Ich habe keine vorhergesagte Erfolgswahrscheinlichkeit, sondern kann mich nur auf die Erfolgsrate jedes Einzelnen als Annäherung an die wahre Erfolgsrate stützen. Ich habe nur diese Frage gefunden , die nahe liegt, sich aber nicht genau mit diesem Szenario zu befassen scheint.

Um den Test zu vereinfachen, sagen wir einfach, dass ich 2 Gruppen habe (3 können von diesem Basisfall aus erweitert werden).

  • Versuche der Gruppe 1: = 2455n1
  • Versuche der Gruppe 2: = 2730n2

  • Erfolg Gruppe 1: = 1556k1
  • Erfolg Gruppe 2: = 1671k2

Ich habe keine erwartete Erfolgswahrscheinlichkeit, nur das, was ich aus den Proben weiß. Meine implizite Erfolgsquote für die beiden Gruppen ist also:

  • Erfolgsquote Gruppe 1: = 1556/2455 = 63,4%p1
  • Erfolgsquote Gruppe 2: = 1671/2730 = 61,2%p2

Die Erfolgsrate jeder Stichprobe liegt ziemlich nahe. Meine Stichproben sind jedoch auch ziemlich groß. Wenn ich die CDF der Binomialverteilung überprüfe, um festzustellen, wie unterschiedlich sie von der ersten ist (wobei ich davon ausgehe, dass die erste der Nulltest ist), erhalte ich eine sehr geringe Wahrscheinlichkeit, dass die zweite erreicht werden kann.

In Excel:

1-BINOM.DIST (1556,2455,61,2%, WAHR) = 0,012

Hierbei wird jedoch keine Varianz des ersten Ergebnisses berücksichtigt, sondern nur davon ausgegangen, dass das erste Ergebnis die Testwahrscheinlichkeit ist.

Gibt es eine bessere Möglichkeit zu testen, ob sich diese beiden Datenmuster statistisch voneinander unterscheiden?


Eine andere Frage, auf die ich gestoßen
Scott


2
In R, könnten Sie verwenden prop.test: prop.test(c(1556, 1671), c(2455, 2730)).
COOLSerdash

1
Könnte als Zwei-Stichproben-Test (Binomial-Proportionen) oder als 2x2-Chi-Quadrat-Test durchgeführt werden
Glen_b

1
Die Erweiterung des Basisfalls von zwei auf drei Gruppen kann problematisch sein, da die Tests voneinander abhängig sind: Sie benötigen eine Binomialversion von ANOVA, um dies zu handhaben.
Whuber

Antworten:


36

Die Lösung ist ein einfaches google entfernt: http://en.wikipedia.org/wiki/Statistical_hypothesis_testing

Sie möchten also die folgende Nullhypothese mit der angegebenen Alternative vergleichen

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

Sie müssen also nur die Teststatistik berechnen, die ist

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

Dabei gilt . p^=n1p^1+n2p^2n1+n2

Also, jetzt, in Ihrem Problem, , , und p 2=0,612n1=2455n2=2730.p^1=.634p^2=.612n1=2455n2=2730.

Nachdem Sie die Teststatistik berechnet haben, müssen Sie nur den entsprechenden Wert für den kritischen Bereich berechnen, um auch Ihre Teststatistik zu vergleichen. Wenn Sie diese Hypothese beispielsweise auf dem Konfidenzniveau von 95% testen, müssen Sie Ihre Teststatistik mit dem Wert für den kritischen Bereich von (für diesen Test mit zwei Endpunkten) vergleichen.zα/2=1.96

Wenn nun ist, können Sie die Nullhypothese ablehnen, andernfalls müssen Sie die Nullhypothese nicht ablehnen. z>zα/2

Nun, diese Lösung funktioniert für den Fall, dass Sie zwei Gruppen vergleichen, aber sie lässt sich nicht auf den Fall verallgemeinern, in dem Sie drei Gruppen vergleichen möchten.

Sie können jedoch einen Chi-Quadrat-Test verwenden, um zu testen, ob alle drei Gruppen die gleichen Anteile haben, wie von @Eric in seinem obigen Kommentar vorgeschlagen: "Hilft diese Frage? Stats.stackexchange.com/questions/25299/… - Eric"


6
Vielen Dank @ Dan. Wie oft bei Google ist es die erste Hürde, den richtigen Suchbegriff zu kennen. Ich habe mir den Chi-Quadrat-Test angesehen. Das Problem dort, wo ich zum ersten Mal feststeckte, ist, dass meine erwartete Berechnung auf der Stichprobe basiert. Ich kann daher keinen Erwartungswert angeben, da meine Stichproben zur Bestimmung dieses Erwartungswerts verwendet werden.
Scott

@Scott, wenn Sie davon ausgehen, dass alle drei Gruppen gleich sind, sollte der erwartete Wert für jede Gruppe 1/3 betragen.
Dan

1
Eine verwandte Erklärung zur Verwendung dieses Tests finden Sie hier: itl.nist.gov/div898/handbook/prc/section3/prc33.htm (derzeit bietet die Wikipedia-Seite kein Beispiel für eine Kurzanleitung ).
wwwilliam

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

Antwort auf meine Frage finden Sie hier: stats.stackexchange.com/questions/361015/…
Tanguy

10

In R wird die Antwort wie folgt berechnet:

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

8
Würden Sie ein bisschen mehr schreiben als die R-Funktion? Das Benennen der Funktion hilft nicht, das Problem zu verstehen, und nicht jeder verwendet R, sodass es für ihn keine Hilfe wäre.
Tim

1
Dies ist die genaueste statistische Antwort und funktioniert für eine kleine Anzahl von Beobachtungen (siehe: itl.nist.gov/div898/handbook/prc/section3/prc33.htm ).
Andrew Mao


3

Nur eine Zusammenfassung:

Dan und Abaumanns Antworten schlagen vor, Tests unter einem Binomialmodell durchzuführen, bei dem die Nullhypothese ein einheitliches einzelnes Binomialmodell ist, dessen Mittelwert aus den empirischen Daten geschätzt wird. Ihre Antworten sind theoretisch korrekt, aber sie müssen unter Verwendung der Normalverteilung approximiert werden, da die Verteilung der Teststatistik nicht genau der Normalverteilung folgt. Daher ist es nur für große Stichproben geeignet.

Davids Antwort zeigt jedoch einen nichtparametrischen Test mit dem Fisher-Test an. Die Informationen finden Sie hier: https://en.wikipedia.org/wiki/Fisher%27s_exact_test Und er kann auf kleine Stichprobengrößen angewendet werden, ist jedoch für große Stichprobengrößen schwer zu berechnen.

Welcher Test zu verwenden ist und wie sehr Sie Ihrem p-Wert vertrauen, ist ein Rätsel. Aber es gibt immer Vorurteile, bei welchen Tests man sich entscheiden muss.


2
1/2

1
In diesem Fall können Sie die Methode von Dan verwenden, aber den p-Wert genau (binomial) und näherungsweise (normal Z> Φ − 1 (1 − α / 2) Z> Φ − 1 (1 − α / 2) und Z <Φ − 1 (α / 2)), um zu vergleichen, ob sie nahe genug sind.
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

In Python hat statsmodels eine Funktion namens proportions_ztest. Hier ist ein Beispiel für seine Verwendung:

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))

Dies druckt aus:

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

-1

Ursprünglicher Beitrag: Dans Antwort ist tatsächlich falsch, um niemanden zu beleidigen. Ein Z-Test wird nur verwendet, wenn Ihre Daten einer Standardnormalverteilung entsprechen. In diesem Fall folgen Ihre Daten einer Binomialverteilung. Verwenden Sie daher einen Chi-Quadrat-Test, wenn Ihre Stichprobe groß ist, oder einen Fischertest, wenn Ihre Stichprobe klein ist.

Edit: Mein Fehler, entschuldige mich bei @Dan. Ein Z-Test ist hier gültig, wenn Ihre Variablen unabhängig sind. Wenn diese Annahme nicht erfüllt oder unbekannt ist, ist ein Z-Test möglicherweise ungültig.


2
χ2

Wenn Sie an die CLT glauben, gibt es in der Regel die Normalverteilung.
Ryan

2
@ Ryan Nun, ich glaube an das CLT, aber es sagt nichts über n = 30 oder n = 300 oder n = 5000 aus. Normalität tritt nur dann auf, wenn Sie es irgendwie schaffen, unendliche Stichprobengrößen zu erhalten, oder wenn Sie irgendwie mit Normalität begonnen haben. Fragen darüber, wie nah wir an der Normalität sind, wenn Durchschnittswerte genommen werden, werden vom CLT nicht beantwortet. (Wir können diese Fragen berücksichtigen, aber wir verwenden das CLT nicht, um herauszufinden, ob die Annäherung gut ist.)
Glen_b
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.