false_discovery_control#
- scipy.stats.false_discovery_control(ps, *, ось=0, метод='bh')[источник]#
Корректировка p-значений для контроля уровня ложных открытий.
Частота ложных открытий (FDR) — это ожидаемая доля отвергнутых нулевых гипотез, которые на самом деле верны. Если нулевая гипотеза отвергается, когда скорректированный p-значение падает ниже заданного уровня, уровень ложных открытий контролируется на этом уровне.
- Параметры:
- ps1D array_like
p-значения для корректировки. Элементы должны быть вещественными числами от 0 до 1.
- осьint
Ось, вдоль которой выполняется корректировка. Корректировка выполняется независимо вдоль каждого среза оси. Если ось равно None, ps преобразуется в одномерный массив перед выполнением корректировки.
- метод{‘bh’, ‘by’}
Процедура контроля уровня ложных открытий для применения:
'bh'предназначен для Benjamini-Hochberg [1] Yosshi999 (1) +'by'используется для Benjaminini-Yekutieli [2] (Теорема 1.3). Последнее более консервативно, но оно гарантирует контроль FDR даже когда p-значения не из независимых тестов.
- Возвращает:
- ps_adustedarray_like
Скорректированные p-значения. Если нулевая гипотеза отвергается там, где эти значения опускаются ниже заданного уровня, то частота ложных открытий контролируется на этом уровне.
Смотрите также
Примечания
При множественном тестировании гипотез процедуры контроля ложных открытий, как правило, предлагают большую мощность, чем процедуры контроля семейной ошибки (например, поправка Бонферрони [1]).
Если p-значения соответствуют независимым тестам (или тестам с "положительными регрессионными зависимостями" [2]), отклоняя нулевые гипотезы соответствующие скорректированным по Бенджамини-Хохбергу p-значениям ниже \(q\) контролирует частоту ложных открытий на уровне, не превышающем \(q m_0 / m\), где \(m_0\) — это количество истинных нулевых гипотез и \(m\) — это общее количество проверяемых нулевых гипотез. Это верно даже для зависимых тестов, когда p-значения корректируются в соответствии с более консервативной процедурой Бенджамини-Йекутиели.
Скорректированные p-значения, полученные этой функцией, сопоставимы с теми, которые производит функция R
p.adjustи функция statsmodels statsmodels.stats.multitest.multipletests. Пожалуйста, рассмотрите последний для более продвинутых методов коррекции множественных сравнений.Ссылки
[1] (1,2,3,4,5)Бенджамини, Йоав и Йосеф Хохберг. «Контроль частоты ложных открытий: практичный и мощный подход к множественному тестированию». Journal of the Royal statistical society: series B (Methodological) 57.1 (1995): 289-300.
[2] (1,2)Бенджамини, Йоав и Даниэль Йекутиели. "Контроль частоты ложных открытий при множественном тестировании в условиях зависимости." Анналы статистики (2001): 1165-1188.
[3]TileStats. FDR - Benjamini-Hochberg объяснено - 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.
Примеры
Мы следуем примеру из [1].
Тромболизис с рекомбинантным тканевым активатором плазминогена (rt-PA) и анизоилированным активатором плазминогена стрептокиназой (APSAC) при инфаркте миокарда доказанно снижает смертность. [4] исследовал эффекты новой фронтально-нагруженной администрации rt-PA по сравнению с полученными при стандартном режиме APSAC, в рандомизированном многоцентровом исследовании с 421 пациентом с острым инфарктом миокарда.
В исследовании тестировались четыре семейства гипотез, последнее из которых было «сердечные и другие события после начала тромболитического лечения». Контроль FDR может быть желателен в этом семействе гипотез, потому что было бы некорректно делать вывод, что фронтальная нагрузка лечения лучше, если она лишь эквивалентна предыдущему лечению.
p-значения, соответствующие 15 гипотезам в этом семействе, были
>>> 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]
Если выбранный уровень значимости равен 0.05, мы можем быть склонны отвергнуть нулевые гипотезы для тестов, соответствующих первым девяти p-значениям, поскольку первые девять p-значений ниже выбранного уровня значимости. Однако это игнорирует проблему "множественности": если мы не скорректируем факт выполнения множественных сравнений, мы с большей вероятностью ошибочно отвергнем истинные нулевые гипотезы.
Один из подходов к проблеме множественности — контроль уровня ошибок семейства (FWER), то есть частоты отклонения нулевой гипотезы, когда она на самом деле верна. Общей процедурой такого рода является поправка Бонферрони [1]. Мы начинаем с умножения p-значений на количество проверяемых гипотез.
>>> 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])
. Это означает, что [1], эти три гипотезы касались «аллергической реакции» и «двух различных аспектов кровотечения».
Альтернативный подход — контроль частоты ложных открытий: ожидаемая доля отвергнутых нулевых гипотез, которые на самом деле верны. Преимущество этого подхода в том, что он обычно обеспечивает большую мощность: повышенную частоту отвержения нулевой гипотезы, когда она действительно ложна. Чтобы контролировать частоту ложных открытий на уровне 5%, мы применяем поправку p-значения Бенджамини-Хохберга.
>>> 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. ])
Теперь, первый четыре скорректированные p-значения опускаются ниже 0.05, поэтому мы отвергаем нулевые гипотезы, соответствующие этим четыре p-значения. Отклонение четвёртой нулевой гипотезы было особенно важно для оригинального исследования, так как привело к выводу, что новое лечение имеет "существенно более низкий уровень внутрибольничной смертности".