2026年10月8日に、statsmodelsの多重検定補正とASAのp値声明を再読しました。仮説族、FWER/FDR、補正法、依存構造、主要指標を先に固定し、補正後の棄却フラグを発見・効果量・因果・実務重要性とは分けて報告します。
30秒で要点
多重比較問題は、同じ判断のために多数の検定を行うと、偶然の小さいp値を拾いやすくなる問題です。「有意になった地域だけ」「反応がよかった年代だけ」を結果の後から選んでも、そこまでに調べた検定が消えるわけではありません。
表が収まらない場合は、横にスクロールできます
| 守りたい判断 | 指標と選択肢 | 注意点 |
|---|---|---|
| 1件でも誤って採用する危険を抑える | FWER。BonferroniやHolmを検討 | 各p値が妥当で、検定の集合を定めていること |
| 多数の候補から次の調査対象を探す | FDR。BH法などを検討 | 独立性・依存条件、再検証の費用を確認 |
| 探索で見つけた仮説を確かめる | 新しいデータで確認計画を立てる | 後付け探索を、当初から決めた検証に見せない |
補正は「好きなだけ切ってよい」という許可ではありません。主指標、対象期間、セグメント、検定の集合を定め、探索した経路も残すことが先です。
「何回の検定か」を先に数える
5地域で同じ購入率を比べるなら5検定です。さらに3指標と2期間を別々に調べれば、設計によっては30検定になります。どこまでを同じ意思決定の集合、つまり検定ファミリーとするかを記録します。見栄えのよい5件だけを取り出して、分母を5に戻してはいけません。
帰無仮説がすべて真で、各検定の第1種過誤率がちょうど5%なら、誤棄却数の期待値は20検定で1件、30検定で1.5件です。これは繰り返したときの平均であり、毎回その件数になるという意味ではありません。この期待値の足し算に独立性は不要ですが、個々の検定が保守的なら値は上限側になります。
さらに検定が独立なら、1件以上の誤棄却が生じる確率は 1−(1−0.05)^m。20検定で約64.15%、30検定で約78.54%です。重なる顧客のセグメントなど、検定が依存する場合にこの式をそのまま当てはめることはできません。これらは条件を固定した計算例で、実際のマーケティング分析の誤り率を測った数値ではありません。
FWERとFDRは、分母と平均の取り方が違う
Vを誤って棄却した仮説の数、Rを棄却した全仮説の数とします。FWERは P(V≥1)。FDRは E[V/max(R,1)] で、何も棄却しない場合の割合を0として平均します。
例えば、ある1回で10件を棄却し、そのうち2件が誤りなら、実現した誤発見割合FDPは20%です。「FDRを5%に制御する手続き」は、すべての回でFDPが5%以下になるという保証でも、個々の仮説が95%正しいという意味でもありません。実データではどれが誤棄却か分からないことも、方法を選ぶ理由になります。
SciPyのFDR資料は、この期待割合とBH法・BY法の条件を区別しています。1件の誤採用の損失が大きい判断と、再調査を前提にした候補探索とで、管理したい誤りを先に決めます。架空の5検定で、BonferroniとBHを比べる
同じファミリーに属する5検定の、すでに妥当な方法で計算されたp値を使う架空教材です。検定自体のデータや効果量は用意していないので、商品の採用や因果効果の判断には使えません。有意水準・FDR目標をともに0.05とします。
表が収まらない場合は、横にスクロールできます
| 小さい順の順位i | 元のp値 | Bonferroniの境界 | BHの境界 i×0.05/5 | Bonferroni補正p値 | BH補正p値 |
|---|---|---|---|---|---|
| 1 | 0.004 | 0.010 | 0.010 | 0.020 | 0.020000 |
| 2 | 0.013 | 0.010 | 0.020 | 0.065 | 0.032500 |
| 3 | 0.028 | 0.010 | 0.030 | 0.140 | 0.046667 |
| 4 | 0.060 | 0.010 | 0.040 | 0.300 | 0.075000 |
| 5 | 0.200 | 0.010 | 0.050 | 1.000 | 0.200000 |
Bonferroniは元のp値を 0.05/5=0.01 と比べ、1件を棄却します。補正p値は min(1, 5×p) です。各検定の妥当なp値を前提に、検定間の独立性を要求せずFWERを抑えます。
BH法は、小さい順のp値について p(i) ≤ i×q/m を満たす最大の順位kを見つけ、1〜kをまとめて棄却します。この例では最後に条件を満たすのが順位3なので、3件を棄却します。各行を独立に合否判定する方法ではありません。条件を満たす順位がなければ棄却は0件です。
BHの補正p値を読む
ソート後の順位iについて、後ろの順位を含めた min(m×p(j)/j) を求め、1で上限を切ります。これが単純な m×p(i)/i の列だけではなく、後ろから累積最小値を取る理由です。最後に元の仮説の順序へ戻します。Rのp.adjust資料と公式実装のBH部分で、この補正の対応を確認できます。
Pythonで補正と元の順序を確かめる
ここでは入力をわざと並べ替えています。multipletests の既定の is_sorted=False は入力順に対応する結果を返すため、仮説名とp値をずらさず記録できます。statsmodelsの資料で引数と戻り値を確認してください。
import numpy as np
from statsmodels.stats.multitest import multipletests
# Fictional p-values; every tested hypothesis in this family is included
names = ["C", "A", "E", "B", "D"]
p = np.array([0.028, 0.004, 0.200, 0.013, 0.060])
bonf = multipletests(p, alpha=0.05, method="bonferroni")
bh = multipletests(p, alpha=0.05, method="fdr_bh")
for name, raw, pb, ph, rb, rh in zip(
names, p, bonf[1], bh[1], bonf[0], bh[0]):
print(name, f"{raw:.3f}", f"{pb:.6f}", f"{ph:.6f}", rb, rh)
assert bonf[0].sum() == 1 and bh[0].sum() == 3
assert np.allclose(bh[1], [0.0466666667, 0.02, 0.2, 0.0325, 0.075])
棄却した件数が多いことだけでBHを選ぶのは、目的と順序が逆です。先にFWERとFDRのどちらを管理するか決め、想定される依存構造も確認します。
手法を選ぶときに残す条件
表が収まらない場合は、横にスクロールできます
| 手法 | 管理するもの | 主な確認点 |
|---|---|---|
| Bonferroni | FWER | 妥当なp値と検定数。計算が単純だが保守的になりやすい |
| Holm | FWER | 段階的な補正。任意の依存構造でも使える選択肢 |
| BH(fdr_bh) | FDR | 独立、または真の帰無仮説に関するPRDSなどの条件 |
| BY(fdr_by) | FDR | より一般的な依存に対応するが、BHより保守的 |
「正の相関がありそう」という印象だけでPRDSの条件を満たすとは言えません。繰り返し測定、同じ利用者が重なる比較、指標の選び直しなど、p値を作った設計を確認します。Sidak、Holm–Sidak、Hochberg、Hommelなどもライブラリにありますが、名前を取り替えるだけで同じ保証になるわけではありません。
補正は欠測、交絡、不適切な検定、結果に合わせた停止、隠した分析経路を自動で修復しません。効果量や区間推定、対象者の違いも別に報告します。
Ioannidisの論考を、この判断にどう使うか
Ioannidis(2005)のEssayは、事前の見込み、検出力、バイアスなどを置く分析的枠組みを使った論考です。新しいマーケティング実験で、誤り率を測った報告ではありません。Corollary 3は、多くの関係を弱い選別で調べる状況を、結果の信頼性との関係で論じています。Corollary 4は、設計・定義・アウトカム・解析の自由度が大きい状況を扱います。ここから、調べた比較を隠さず、主指標や確認用データを先に定めるという注意につなげます。「自由度を減らせば必ず補正より効く」という普遍的な性能比較にはしません。
2022年の訂正はTable 2の括弧欠落についてです。本記事ではその表の式を再利用していません。上の20・30・5検定の数値は、条件を明示した別の架空教材です。解析前から報告までの手順
- 意思決定と主指標を決め、検定ファミリー・対象期間・セグメントを記録する。
- FWERかFDRか、許容する水準、依存構造に合う方法を事前に選ぶ。
- 探索で追加した比較も記録し、都合のよい結果だけを分母から切り離さない。
- 元のp値、補正p値、効果量、区間推定、全検定数と方法を一緒に報告する。
- 探索で得た候補は、可能なら独立した新しいデータで確認してから重要な施策に採用する。
補正後に有意でなかった結果も、「効果がない証明」とは限りません。重要な差を検出できる設計だったか、不確実性がどれほど残っているかを確認します。実装する前に手法と前提を整理したい場合は、分析の道具箱も入口にできます。