scipy.stats.

false_discovery_control#

scipy.stats.false_discovery_control(ps, *, axis=0, method='bh')[Quellcode]#

P-Werte anpassen, um die Rate falscher Entdeckungen zu kontrollieren.

Die Rate falscher Entdeckungen (FDR) ist der erwartete Anteil verworfener Nullhypothesen, die tatsächlich wahr sind. Wenn die Nullhypothese verworfen wird, wenn der *angepasste* p-Wert unter einem vorgegebenen Niveau liegt, wird die Rate falscher Entdeckungen auf diesem Niveau kontrolliert.

Parameter:
ps1D array_like

Die anzupassenden p-Werte. Elemente müssen reelle Zahlen zwischen 0 und 1 sein.

axisint

Die Achse, entlang der die Anpassung durchgeführt wird. Die Anpassung wird unabhängig entlang jedes Achsen-Slices durchgeführt. Wenn axis None ist, wird ps vor der Anpassung abgeflacht.

method{‘bh’, ‘by’}

Das anzuwendende Verfahren zur Kontrolle der Rate falscher Entdeckungen: 'bh' steht für Benjamini-Hochberg [1] (Gleichung 1), 'by' steht für Benjamini-Yekutieli [2] (Theorem 1.3). Letzteres ist konservativer, aber es ist garantiert, die FDR zu kontrollieren, auch wenn die p-Werte nicht von unabhängigen Tests stammen.

Rückgabe:
ps_adustedarray_like

Die angepassten p-Werte. Wenn die Nullhypothese dort verworfen wird, wo diese unter einem vorgegebenen Niveau liegen, wird die Rate falscher Entdeckungen auf diesem Niveau kontrolliert.

Hinweise

Bei der multiplen Hypothesentestung bieten Verfahren zur Kontrolle falscher Entdeckungen tendenziell eine höhere Aussagekraft als Verfahren zur Kontrolle der familienweiten Fehlerrate (z.B. Bonferroni-Korrektur [1]).

Wenn die p-Werte mit unabhängigen Tests (oder Tests mit „positiven Regressionsabhängigkeiten“ [2]) übereinstimmen, kontrolliert die Verwerfung von Nullhypothesen, die mit Benjamini-Hochberg-angepassten p-Werten unter \(q\) übereinstimmen, die Rate falscher Entdeckungen auf einem Niveau kleiner oder gleich \(q m_0 / m\), wobei \(m_0\) die Anzahl der wahren Nullhypothesen und \(m\) die Gesamtzahl der getesteten Nullhypothesen ist. Dasselbe gilt auch für abhängige Tests, wenn die p-Werte gemäß dem konservativeren Benjamini-Yekutieli-Verfahren angepasst werden.

Die von dieser Funktion erzeugten angepassten p-Werte sind vergleichbar mit denen der R-Funktion p.adjust und der statsmodels-Funktion statsmodels.stats.multitest.multipletests. Bitte ziehen Sie letztere für fortgeschrittenere Methoden zur Korrektur multipler Vergleiche in Betracht.

Referenzen

[1] (1,2,3,4,5)

Benjamini, Yoav, and Yosef Hochberg. „Controlling the false discovery rate: a practical and powerful approach to multiple testing.“ Journal of the Royal statistical society: series B (Methodological) 57.1 (1995): 289-300.

[2] (1,2)

Benjamini, Yoav, and Daniel Yekutieli. „The control of the false discovery rate in multiple testing under dependency.“ Annals of statistics (2001): 1165-1188.

[3]

TileStats. FDR - Benjamini-Hochberg explained - Youtube. https://www.youtube.com/watch?v=rZKa4tW2NKs.

[4]

Neuhaus, Karl-Ludwig, et al. „Improved thrombolysis in acute myocardial infarction with front-loaded administration of alteplase: results of the rt-PA-APSAC patency study (TAPS).“ Journal of the American College of Cardiology 19.5 (1992): 885-891.

Beispiele

Wir folgen dem Beispiel aus [1].

Die Thrombolyse mit rekombinantem gewebeartigem Plasminogenaktivator (rt-PA) und anisoyliertem Plasminogen-Streptokinase-Aktivator (APSAC) bei Herzinfarkt hat nachweislich die Mortalität reduziert. [4] untersuchte die Auswirkungen einer neuen, front-geladenen Verabreichung von rt-PA im Vergleich zu den mit einem Standardregime von APSAC erzielten Ergebnissen in einer randomisierten Multizenterstudie mit 421 Patienten mit akutem Herzinfarkt.

Es gab vier Hypothesenfamilien, die in der Studie getestet wurden, wobei die letzte „kardiale und andere Ereignisse nach Beginn der thrombolytischen Behandlung“ war. In dieser Familie von Hypothesen könnte eine FDR-Kontrolle wünschenswert sein, da es unangemessen wäre zu schlussfolgern, dass die front-geladene Behandlung besser ist, wenn sie lediglich der vorherigen Behandlung entspricht.

Die p-Werte, die mit den 15 Hypothesen dieser Familie korrespondieren, waren

>>> ps = [0.0001, 0.0004, 0.0019, 0.0095, 0.0201, 0.0278, 0.0298, 0.0344,
...       0.0459, 0.3240, 0.4262, 0.5719, 0.6528, 0.7590, 1.000]

Wenn das gewählte Signifikanzniveau 0,05 beträgt, könnten wir versucht sein, die Nullhypothesen für die Tests, die den ersten neun p-Werten entsprechen, zu verwerfen, da die ersten neun p-Werte unter dem gewählten Signifikanzniveau liegen. Dies würde jedoch das Problem der „Multiplizität“ ignorieren: Wenn wir keine Korrektur für die Tatsache vornehmen, dass mehrere Vergleiche durchgeführt werden, ist die Wahrscheinlichkeit, wahre Nullhypothesen falsch zu verwerfen, größer.

Ein Ansatz für das Multiplizitätsproblem ist die Kontrolle der familienweiten Fehlerrate (FWER), d.h. der Rate, mit der die Nullhypothese verworfen wird, obwohl sie tatsächlich wahr ist. Ein übliches Verfahren dieser Art ist die Bonferroni-Korrektur [1]. Wir beginnen damit, die p-Werte mit der Anzahl der getesteten Hypothesen zu multiplizieren.

>>> import numpy as np
>>> np.array(ps) * len(ps)
array([1.5000e-03, 6.0000e-03, 2.8500e-02, 1.4250e-01, 3.0150e-01,
       4.1700e-01, 4.4700e-01, 5.1600e-01, 6.8850e-01, 4.8600e+00,
       6.3930e+00, 8.5785e+00, 9.7920e+00, 1.1385e+01, 1.5000e+01])

Um die FWER auf 5% zu kontrollieren, verwerfen wir nur die Hypothesen, die den angepassten p-Werten kleiner als 0,05 entsprechen. In diesem Fall können nur die Hypothesen verworfen werden, die den ersten drei p-Werten entsprechen. Laut [1] betrafen diese drei Hypothesen „allergische Reaktionen“ und „zwei verschiedene Aspekte von Blutungen“.

Ein alternativer Ansatz ist die Kontrolle der Rate falscher Entdeckungen: des erwarteten Anteils verworfener Nullhypothesen, die tatsächlich wahr sind. Der Vorteil dieses Ansatzes ist, dass er in der Regel eine größere Aussagekraft bietet: eine erhöhte Rate der Verwerfung der Nullhypothese, wenn sie tatsächlich falsch ist. Um die Rate falscher Entdeckungen auf 5% zu kontrollieren, wenden wir die Benjamini-Hochberg-p-Wert-Anpassung an.

>>> from scipy import stats
>>> stats.false_discovery_control(ps)
array([0.0015    , 0.003     , 0.0095    , 0.035625  , 0.0603    ,
       0.06385714, 0.06385714, 0.0645    , 0.0765    , 0.486     ,
       0.58118182, 0.714875  , 0.75323077, 0.81321429, 1.        ])

Nun liegen die ersten *vier* angepassten p-Werte unter 0,05, daher würden wir die Nullhypothesen verwerfen, die diesen *vier* p-Werten entsprechen. Die Verwerfung der vierten Nullhypothese war für die ursprüngliche Studie besonders wichtig, da sie zu dem Schluss führte, dass die neue Behandlung eine „wesentlich niedrigere Sterblichkeitsrate im Krankenhaus“ hatte.