barnard_exact#
- scipy.stats.barnard_exact(table, alternative='two-sided', pooled=True, n=32)[Quelle]#
Führt einen Barnard-Exakttest für eine 2x2-Kontingenztafel durch.
- Parameter:
- tablearray_like von ints
Eine 2x2-Kontingenztafel. Elemente sollten nicht-negative ganze Zahlen sein.
- alternative{‘zweiseitig’, ‘kleiner’, ‘größer’}, optional
Definiert die Null- und Alternativhypothesen. Standard ist 'two-sided'. Bitte siehe Erläuterungen im Abschnitt "Hinweise" unten.
- pooledbool, optional
Ob die Score-Statistik mit gepoolter Varianz (wie z. B. im t-Test nach Student) oder ungepoolter Varianz (wie im t-Test nach Welch) berechnet werden soll. Standard ist
True.- nint, optional
Anzahl der Abtastpunkte, die bei der Konstruktion der Stichprobenmethode verwendet werden. Beachten Sie, dass dieses Argument automatisch auf die nächsthöhere Zweierpotenz konvertiert wird, da
scipy.stats.qmc.Sobolzur Auswahl der Stichprobenpunkte verwendet wird. Standard ist 32. Muss positiv sein. In den meisten Fällen sind 32 Punkte ausreichend, um eine gute Genauigkeit zu erreichen. Mehr Punkte erhöhen die Rechenzeit.
- Rückgabe:
- berBarnardExactResult
Ein Ergebnisobjekt mit den folgenden Attributen.
- statisticfloat
Die Wald-Statistik mit gepoolter oder ungepoolter Varianz, abhängig von der Benutzerwahl von pooled.
- pvaluefloat
p-Wert, die Wahrscheinlichkeit, eine Verteilung zu erhalten, die mindestens so extrem ist wie die tatsächlich beobachtete, unter der Annahme, dass die Nullhypothese wahr ist.
Siehe auch
chi2_contingencyChi-Quadrat-Test auf Unabhängigkeit von Variablen in einer Kontingenztafel.
fisher_exactFisher-Exakttest für eine 2x2-Kontingenztafel.
boschloo_exactBoschloo's Exakttest für eine 2x2-Kontingenztafel, der eine gleichmäßig mächtigere Alternative zum exakten Fisher-Test ist.
Hinweise
Der Barnard-Test ist ein Exakttest zur Analyse von Kontingenztafeln. Er untersucht die Assoziation zweier kategorialer Variablen und ist eine mächtigere Alternative zum exakten Fisher-Test für 2x2-Kontingenztafeln.
Definieren wir \(X_0\) als eine 2x2-Matrix, die die beobachtete Stichprobe darstellt, wobei jede Spalte das binomiale Experiment enthält, wie im folgenden Beispiel gezeigt. Definieren wir auch \(p_1, p_2\) als die theoretischen Binomialwahrscheinlichkeiten für \(x_{11}\) und \(x_{12}\). Bei Verwendung des Barnard-Exakttests können wir drei verschiedene Nullhypothesen aufstellen:
\(H_0 : p_1 \geq p_2\) versus \(H_1 : p_1 < p_2\), mit alternative = "less"
\(H_0 : p_1 \leq p_2\) versus \(H_1 : p_1 > p_2\), mit alternative = "greater"
\(H_0 : p_1 = p_2\) versus \(H_1 : p_1 \neq p_2\), mit alternative = "two-sided" (Standard)
Zur Berechnung des Barnard-Exakttests verwenden wir die Wald-Statistik [3] mit gepoolter oder ungepoolter Varianz. Unter der Standardannahme, dass beide Varianzen gleich sind (
pooled = True), wird die Statistik berechnet als\[T(X) = \frac{ \hat{p}_1 - \hat{p}_2 }{ \sqrt{ \hat{p}(1 - \hat{p}) (\frac{1}{c_1} + \frac{1}{c_2}) } }\]wobei \(\hat{p}_1, \hat{p}_2\) und \(\hat{p}\) die Schätzer von \(p_1, p_2\) und \(p\) sind, wobei letzteres die kombinierte Wahrscheinlichkeit unter der Annahme ist, dass \(p_1 = p_2\).
Wenn diese Annahme ungültig ist (
pooled = False), ist die Statistik:\[T(X) = \frac{ \hat{p}_1 - \hat{p}_2 }{ \sqrt{ \frac{\hat{p}_1 (1 - \hat{p}_1)}{c_1} + \frac{\hat{p}_2 (1 - \hat{p}_2)}{c_2} } }\]Der p-Wert wird dann berechnet als
\[\sum \binom{c_1}{x_{11}} \binom{c_2}{x_{12}} \pi^{x_{11} + x_{12}} (1 - \pi)^{t - x_{11} - x_{12}}\]wobei die Summe über alle 2x2-Kontingenztafeln \(X\) gebildet wird, so dass: * \(T(X) \leq T(X_0)\) für alternative = "less", * \(T(X) \geq T(X_0)\) für alternative = "greater", oder * \(T(X) \geq |T(X_0)|\) für alternative = "two-sided". Oben sind \(c_1, c_2\) die Summen der Spalten 1 und 2 und \(t\) die Gesamtsumme (Summe der 4 Elemente der Stichprobe).
Der zurückgegebene p-Wert ist der maximale p-Wert über den Störparameter \(\pi\), wobei \(0 \leq \pi \leq 1\) gilt.
Die Komplexität dieser Funktion beträgt \(O(n c_1 c_2)\), wobei n die Anzahl der Stichprobenpunkte ist.
Referenzen
[1]Barnard, G. A. "Significance Tests for 2x2 Tables". Biometrika. 34.1/2 (1947): 123-138. DOI:dpgkg3
[2] (1,2)Mehta, Cyrus R., und Pralay Senchaudhuri. "Conditional versus unconditional exact tests for comparing two binomials." Cytel Software Corporation 675 (2003): 1-5.
[3]"Wald Test". Wikipedia. https://en.wikipedia.org/wiki/Wald_test
Beispiele
Ein Beispiel für die Anwendung des Barnard-Tests wird in [2] vorgestellt.
Betrachten Sie das folgende Beispiel einer Impfstoffwirksamkeitsstudie (Chan, 1998). In einer randomisierten klinischen Studie mit 30 Probanden erhielten 15 eine rekombinante DNA-Influenza-Impfung und 15 ein Placebo. Zwölf der 15 Probanden in der Placebo-Gruppe (80%) infizierten sich schließlich mit Influenza, während in der Impfstoffgruppe nur 7 von 15 Probanden (47%) infiziert wurden. Die Daten werden als 2x2-Tabelle dargestellt
Vaccine Placebo Yes 7 12 No 8 3
Bei der Arbeit mit statistischen Hypothesentests verwenden wir normalerweise eine Schwellenwahrscheinlichkeit oder ein Signifikanzniveau, auf dessen Basis wir entscheiden, die Nullhypothese \(H_0\) zu verwerfen. Angenommen, wir wählen das übliche Signifikanzniveau von 5 %.
Unsere Alternativhypothese ist, dass der Impfstoff die Wahrscheinlichkeit einer Virusinfektion senkt, d. h. die Wahrscheinlichkeit \(p_1\), sich mit dem Impfstoff zu infizieren, *geringer ist* als die Wahrscheinlichkeit \(p_2\), sich ohne Impfstoff zu infizieren. Daher rufen wir
barnard_exactmit der Optionalternative="less"auf.>>> import scipy.stats as stats >>> res = stats.barnard_exact([[7, 12], [8, 3]], alternative="less") >>> res.statistic -1.894 >>> res.pvalue 0.03407
Unter der Nullhypothese, dass der Impfstoff die Wahrscheinlichkeit einer Infektion nicht senkt, beträgt die Wahrscheinlichkeit, Testergebnisse zu erhalten, die mindestens so extrem sind wie die beobachteten Daten, etwa 3,4 %. Da dieser p-Wert kleiner als unser gewähltes Signifikanzniveau ist, haben wir Beweise, um \(H_0\) zugunsten der Alternative zu verwerfen.
Angenommen, wir hätten stattdessen den exakten Fisher-Test verwendet:
>>> _, pvalue = stats.fisher_exact([[7, 12], [8, 3]], alternative="less") >>> pvalue 0.0640
Mit dem gleichen Schwellenwert von 5 % hätten wir die Nullhypothese zugunsten der Alternative nicht verwerfen können. Wie in [2] angegeben, ist der Barnard-Test gleichmäßig mächtiger als der exakte Fisher-Test, da der Barnard-Test nicht an Randbedingungen gebunden ist. Der Fisher-Test sollte nur verwendet werden, wenn beide Ränder fixiert sind.