Статистические поправки для мульти-вариантных тестов. Часть 1. FWER.

В случае проведения A/B/../N теста возникает проблема множественной проверки гипотез. Грубо говоря, если мы фиксируем уровень значимости как 0.05, то вероятность ошибки первого года (отклонение верной нулевой гипотезы) будет 5%. И если мы проводим сотню таких экспериментов, то раз 5 мы получим ошибочное принятие альтернативы. Такие проблемы возникают, например, если мы проверяем у людей наличие разных болезней. Берем выборку, берем сто болезней, получаем, что наши люди 5% болезней будто бы болеют. И, чтобы избежать таких оплошностей, математики придумали несколько фокусов.

Одну из иллюстраций проблемы подглядела тут и вот как она выглядит:

На что заменить уровень значимости?

Введем несколько обозначений. Предположим, что мы тестируем m разных гипотез. Посчитаем правильные решения и ошибки I и II рода и обозначим их разными буквами (см. таблицу).

\(H_0\) верна \(H_0\) неверна Всего
Принимаем \(H_0\) \(U\) \(T\) (ошибки II рода) \(W\)
Отвергаем \(H_0\) \(V\) (ошибки I рода) \(S\) \(R\)
Всего \(m_0\) \(m-m_0\) \(m\)

При проверке единичной гипотезы мы все так же можем оперировать уровнем значимости и сравнивать его с полученным p-value. Ошибка I рода корректируется уровнем значимости, ошибка II рода может корректироваться размером выборки.
Напомним, что:

Но если гипотез много, то нам нужно придумать некую новую меру, с которой мы можем сравнивать некий набор p-value — по одному на каждую гипотезу. Таких мер обычно используется две:

  1. Familywise Error Rate, вероятность, что хотя бы одна \(H_0\) будет ложно отвергнута \(FWER = P(V>=1) \)
  2. False Discovery Rate, средняя доля ложно отвергнутых \(H_0\) среди всех отвергнутых \(H_0\), \(FDR = E(\frac{V}{R} | R>0)\)

Интуитивно понятно, что первая мера более жесткая, чем вторая. Зато работать с ней попроще.

\(FWER = P(V>=1) = 1 — P(V=0) = 1- (1-\alpha)^m\), где \(\alpha\) — уровень значимости для единичных гипотез.

Поправка Бонферонни

Поправка Бонфенонни предлагает сравнивать полученное p-value не с исходным \(\alpha\), а с \(\frac {\alpha}{m}\), где \(m\) — количество проверяемых гипотез. на тему поправки Бонферони можно почитать историю про мертвого лосося.
Приведем краткое доказательство законности метода:
\(FWER = P(V \geq 1) = P(\cup_{i=1}^{m} p_i \leq \frac{\alpha}{m}) \leq \sum_{i=1}^{m} P(p_i \leq \frac{\alpha}{m}) \leq m \frac{\alpha}{m} \)
Таким образом, для всего семейства гипотез уровень значимости фиксируется на уровне \(\alpha\)
Есть недостатки: при увеличении \(m\) начинает резко уменьшаться мощность, соответственно падают шансы отклонить неверные гипотезы.

Метод Холма-Бонферонни

Раз есть недостатки, то придумали новый метод. Он похож на предыдущий, но является итеративным и не портит мощность так сильно. Опишем, что нужно сделать по методу Холма-Бонферонни. Предположим, что гипотезы \(H_1, H_2, … H_m\) отсортированы по неубыванию их p-value \(p_1, p_2, … p_m\)

  1. Рассмотрим \(H_1\). Если \( p_1 \geq \frac {\alpha} {m} \), принимаем все гипотезы \(H_1, H_2, … H_m\) и останавливаемся. Иначе отвергаем \(H_1\) и переходим к проверке оставшихся гипотез с уровнем значимости \(\frac {\alpha}{m-1}\)
  2. Переходим к \(H_2\). Если \( p_2 \geq \frac {\alpha}{m-1}\), принимаем все гипотезы \(H_1, H_2, … H_m\) и останавливаемся. Иначе отвергаем \(H_2\) и переходим к проверке оставшихся гипотез с уровнем значимости \(\frac {\alpha}{m-2}\)
  3. Продолжаем, пока не кончатся гипотезы.

Доказано (Холмом), что такая процедура обеспечивает \(FWER \leq \alpha \)

Поправка Шидака

Как и в поправке Бонферонни, поправка Шидака корректирует \(\alpha\) (уровни значимости для проверки единичных гипотез). Она также сохраняет \(FWER \leq \alpha \)
Посчитаем, чему равна поправка Шидака.
\(P(V \leq 1) = 1 — P(V=0) \leq 1 -(1-\alpha_1)^m = \alpha \), где \(\alpha\) — заданный нами уровень значимости для семейства гипотез и \(\alpha_1\) — искомый уровень значимости для проверки каждой единичной гипотезы.
Выразим \(\alpha_1\) через \(\alpha\) и получим \(\alpha_1 = 1 — (1-\alpha)^{1/m}\)

Метод Шидака-Холма

Как и в предыдущем методе, где отметился Холм, используется итерационная корректировка p-value. Аналогично сортируем наши p-value по возрастанию и корректируем их согласно поправке Шидака:
\( \alpha_1 = 1 — (1-\alpha)^\frac {\alpha} {m} \)

\( \alpha_i = 1 — (1-\alpha)^\frac {\alpha} {m-i+1} \)

\( \alpha_m = \alpha \)
Обладает несколькими свойствами:

  1. Контролирует FWER на уровне значимости \(\alpha\), если статистики независимы в совокупности.
  2. Если статистики независимы в совокупности, нельзя построить контролирующую FWER на уровне \(\alpha\) процедуру мощнее, чем метод Шидака-Холма.
  3. При больших \(m\) мало отличается от метода Холма

Описанные методы реализованы в славной библиотеке statmodels.

 
 
from statsmodels.stats.multitest import multipletests
reject, p_value_corrected, sidak_corr, bonf_corr = multipletests(p_values, alpha=0.05, method='Sidak')

В методе можно выбрать любой из описанных выше:

  • method=’bonferroni’
  • method=’holm’
  • method=’sidak’
  • method=’holm-sidak’

Метод возвращает:

  1. reject — булевский массив длины \(m\), в котором True — нулевую гипотезу можно отвергнуть и False — если нельзя
  2. pvals_corrected — массив длины \(m\) со скорректированными p-value
  3. alphacSidak — поправка Шидака
  4. alphacBonf — поправка Бонферонни

Продолжение следует…

Добавить комментарий