Условие
Опишите α-spending функции Pocock и O'Brien-Fleming. Когда какую использовать?
Решение
Подход
Запланировано K interim looks в моменты t_k = k/K (информационная доля). На каждом looke тратим часть α:
- Pocock:
α(t) = α · ln(1 + (e−1)·t)≈ равномерно. Порог на каждый look один и тот же z_P. - O'Brien-Fleming:
α(t) = 2·(1 − Φ(z_{α/2}/√t)). Очень строгие пороги в начале, послабляющиеся к концу. Финальный порог почти как fixed-horizon.
Реализация
import numpy as np
from scipy.stats import norm
def pocock_threshold(K, alpha=0.05):
"""Один порог для всех K looks (упрощённо, через симуляцию)."""
# Из таблиц: для K=5, alpha=0.05 двусторонний: z_P ≈ 2.413
table = {1: 1.960, 2: 2.178, 3: 2.289, 4: 2.361, 5: 2.413,
10: 2.555, 20: 2.672}
return table.get(K, None)
def obrien_fleming_thresholds(K, alpha=0.05):
"""Пороги O'Brien-Fleming для K interim looks."""
# z_k = z_OBF / √(k/K)
obf_z = {1: 1.960, 2: 1.977, 3: 1.987, 4: 1.992, 5: 1.994}
z_obf = obf_z.get(K, 2.0)
return [z_obf * np.sqrt(K/k) for k in range(1, K+1)]
print("Pocock K=5:", pocock_threshold(5)) # 2.413 на каждом look
print("OBF K=5:", obrien_fleming_thresholds(5))
# [4.46, 3.15, 2.57, 2.23, 1.99] — почти fixed-horizon в концеКогда что
- Pocock: хочется быстро отлавливать сильные ранние эффекты. Платим N в финале (final порог ≈ 2.4 вместо 1.96, мощность падает).
- O'Brien-Fleming: основная решающая точка в конце, ранние looks только для очень больших эффектов. Final почти не теряет мощности vs fixed-horizon.
Lan-DeMets
Обобщение: если фактические информационные доли отличаются от плана, спендим α через monotone функцию α*(t). Стандартно используется в clinical trials.
Подводные камни
- Заранее планируйте K и моменты looks. Ad-hoc «давайте посмотрим раньше» — нарушение α-spending.
- После отвергнутой H0 на interim — стоп тест. Не «давайте посмотрим, что будет в финале».
- CI на interim тоже корректируется (repeated CI), не обычный 95%.
- Для O'Brien-Fleming на первом look нужен z=4+, это эффект 4σ — почти никогда не срабатывает в реальных экспериментах. Это фича, не баг.
Эталонный ответ
Pocock: равномерные пороги ~2.4 на каждый look, мощно ловит ранние эффекты, теряет мощность в финале. O'Brien-Fleming: строгие пороги в начале, финал почти как fixed-horizon. OBF — стандарт когда главное — финальное решение; Pocock — когда важна ранняя остановка.