医療統計学・医療情報学・遠隔医療 · 09
多重比較 — 多重性の問題・Bonferroni法・FDR
The Multiplicity Problem: Bonferroni, Holm, and the False Discovery Rate
🧠 全体像:検定を1回行うたびに、「偶然chance 偶然(chance)chance(偶然) の有意」を引く抽選券を1枚買っている。 なら20枚に1枚が当たる。20回検定すれば、真実がすべて「差なし」でも、およそ1回は有意になる。問題の本質は数学ではなく報告にある。当たった券だけが論文になり、外れた19枚は誰にも見えない。だから読者には「何枚買ったのか」が分からない。
検定を重ねると何が起こるか
回の互いに独立な検定を、すべて H0 が真の状況で行うとする。
| 確率 | |
|---|---|
| 1回の検定で誤って有意とする | |
| 1回の検定で誤らない | |
| 回すべてで誤らない | |
| 回のうち少なくとも1回誤る |
⭐ この最後の量を family-wise error rate(FWER、族単位の過誤率) と呼ぶ。
のときの値を並べると、増え方の速さが見て取れる。
| 検定数 | 1 | 2 | 3 | 5 | 10 | 18 | 20 | 50 | 100 |
|---|---|---|---|---|---|---|---|---|---|
| FWER | 5.0% | 9.8% | 14.3% | 22.6% | 40.1% | 60.3% | 64.2% | 92.3% | 99.4% |
💡 で FWER が 64% になるのは直感に反するが、「20回に1回当たる」は「20回引けば必ず1回当たる」ではないからである。1回も当たらない確率は なので、当たる確率は 64.2%。 で既に 50% を超える。
xychart-beta
title "検定回数と、少なくとも1つ誤って有意になる確率"
x-axis "検定の回数 m" [1, 2, 3, 5, 10, 15, 20, 30, 50, 100]
y-axis "FWER" 0 --> 1
line [0.05, 0.098, 0.143, 0.226, 0.401, 0.537, 0.642, 0.785, 0.923, 0.994]
line [0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05, 0.05]
立ち上がる線が無補正の FWER、水平のままの線が Bonferroni 補正後(定義上つねに 以下に抑えられる)。
曲線が最初の数回で最も急に立つことに注意する。 が 1 から 5 に増えるだけで 5% → 22.6% と4倍以上になる。「たった数回の検定だから補正は要らない」という感覚は、この立ち上がり upstroke 立ち上がり(upstroke) upstroke(立ち上がり) の部分を見ていない。逆に が大きい領域では曲線は 1 に貼りついて平らになる——すでに「ほぼ確実に誤りが混じる」状態なので、そこから検定を足しても事態は変わらない。
独立性の仮定について
この式は検定どうしが独立であることを前提にしている。「検定が独立でないので、FWER はさらに高くなりうる」と説明されることがあるが、正の相関を持つ検定どうしでは、むしろ独立の場合より低くなるのがふつうである。極端な例として、まったく同じ検定を 回繰り返せば結果は完全に一致するので FWER は のままである。
⚠️ ただし結論conclusion 結論(conclusion)conclusion(結論) は変わらない。検定を増やすほど「少なくとも1つ誤って有意になる」確率が上がることは、相関の有無にかかわらず成り立つ。 は独立を仮定した目安であり、正確な値ではない。
具体例 — 「チョコレートで痩せる」
2015年、「低炭水化物ダイエット中に毎日チョコレートを食べた人は、10% 速く痩せた」という研究がヨーロッパ最大の日刊紙の1面を飾った。研究者本人は「報告した統計的に有意な効果は、実際のデータにもとづいている」と述べている。データも検定も捏造されていない。 では何が起きたのか。
| 研究の構成 | 数 |
|---|---|
| 被験者study participant / subject被験者(study participant / subject)study participant / subject(被験者) | 15人(低炭水化物群/低炭水化物+チョコレート群/対照群の3群に無作為割付 randomized allocation無作為割付(randomized allocation) randomized allocation(無作為割付)) |
| 測定項目 | 18項目(体重、コレステロール、ナトリウム、血中タンパク、睡眠の質、well-being など) |
のとき FWER は 60.3% である。つまり効果がまったく存在しなくても、6割の確率でどれか1つは「有意」になる。研究者は当たった1つ(体重減少)だけを報告した。
flowchart TD
A["15人・18項目を測る"] --> B["18回の検定を行う"]
B --> C["どれか1つは有意になる<br>(確率 60%)"]
C --> D["有意だった1項目だけを報告する"]
D --> E["読者には<br>「1回の検定で p < 0.05」<br>にしか見えない"]
E --> F["⚠️ 検定の総数が隠れると<br>p値は意味を失う"]
⚠️ 問題は「18回検定したこと」ではなく「18回検定したと書かなかったこと」である。 探索的に18項目を見ること自体は正当な研究行為である。悪いのは、選んだあとの p値を、選ぶ前の p値であるかのように提示することである。米国統計学会が「解析の全体を報告せよ」を原則の1つに掲げるのは、これを指している1。
多重性はどこに潜んでいるか
⚠️ 「複数のアウトカム all-or-none outcomes アウトカム(all-or-none outcomes) all-or-none outcomes(アウトカム) を検定した」以外にも、多重性は日常的 routine 日常的(routine) routine(日常的) な解析手順の中に紛れ込む。自覚awareness (subjective) 自覚(awareness (subjective))awareness (subjective)(自覚) されないものほど危険である。
| 潜んでいる場所 | 中身 |
|---|---|
| 複数のアウトカム all-or-none outcomesアウトカム(all-or-none outcomes) all-or-none outcomes(アウトカム) | 18項目を測る。最も分かりやすい形 |
| サブグループ解析subgroup analysisサブグループ解析(subgroup analysis)subgroup analysis(サブグループ解析) | 全体では有意でなかったので、性別・年齢層・重症度で切り直す |
| 中間解析interim analysis中間解析(interim analysis)interim analysis(中間解析) | 試験の途中で何度も検定し、有意になった時点で止める |
| 複数の時点 | 3か月・6か月・12か月で同じアウトカム all-or-none outcomes アウトカム(all-or-none outcomes) all-or-none outcomes(アウトカム) を検定する |
| 3群以上の総当たり比較 | 群なら 回。4群で6回、5群で10回 |
| 前提条件の事前検定 | t検定の前に正規性検定、Welch の前に F検定。それ自体が1回の検定である |
| 解析方針の分岐 | 外れ値を除くか、変数variables 変数(variables)variables(変数) を対数変換 logarithmic transformation 対数変換(logarithmic transformation) logarithmic transformation(対数変換) するか、共変量を入れるか。選択肢の数だけ「見えない検定」が増える |
💡 最後の2つが特に重要である。講義が t検定 の説明で繰り返し「正規性を検定するな」「分散を検定するな」と述べているのは、多重性が理由である。データを見てから解析方法を選ぶ行為はすべて、暗黙の多重検定になる。
3群以上を比べたいときに t検定を総当たりで繰り返さない。 3群なら3回、4群なら6回の検定になり FWER が急上昇 surge 急上昇(surge) surge(急上昇) する。まず分散分析(ANOVA)で「どこかに差があるか」を1回で判定し、そのうえで補正付きの事後比較に進むのが標準的な手順である。
出版バイアス — 多重性を見えなくする仕組み
⚠️ 有意でない結果は投稿されず、投稿されても採択されにくい。したがって科学界全体としては、何回の検定が行われたのか誰にも分からない。分かるのは何回が有意だったかだけである。
flowchart TD
A["世界中で同じ仮説が<br>20の研究室で検定される"] --> B["19研究室:有意でない"]
A --> C["1研究室:<span class='jp-term jp-term-diagram' title='chance'>偶然</span> p < 0.05"]
B --> D["⚠️ 発表されない<br>(ファイルの引き出しに眠る)"]
C --> E["発表される"]
E --> F["文献を読むと<br>「この効果は再現されている」<br>ように見える"]
💡 これが file drawer problem(引き出し問題) である。個々の研究者が誠実でも、発表という選択フィルタが系統的な偏りを作る。事前登録(clinical trial registration、プレレジストレーション)が求められるようになったのは、この仕組みを断ち切るためである。
補正の方法
FWER を制御する方法
| 方法 | やること | 性質 |
|---|---|---|
| Bonferroni | 各検定を と比べる(または各 p値を 倍する) | 最も単純。保守的。検定の独立性を仮定しない |
| Šidák | 各検定を と比べる | Bonferroni よりわずかに緩い。独立性を仮定する |
| Holm(逐次的 Bonferroni) | p値を小さい順に並べ、 番目を と比べる。初めて超えた時点で以降すべて非棄却 | Bonferroni より必ず強い(等しいか、より多く棄却する)。仮定も同じ |
Bonferroni 補正はこう書ける。
💡 なぜこれで足りるのか。Boole の不等式(和事象の確率は各事象の確率の和以下)から、次の関係が相関の有無によらず成り立つ。
⭐ 仮定を一切置かないぶん、必ず余裕 reserve 余裕(reserve) reserve(余裕) を取りすぎる。これが Bonferroni が保守的である理由そのものである。
Holm 法は Bonferroni 法を無条件に置き換えてよい。 同じ仮定のもとで、棄却する仮説の集合は必ず Bonferroni 以上になる。「Bonferroni は保守的すぎる」という批判の一部は、Holm を使うだけで解消する。
FDR を制御する方法
⭐ 発想の転換がある。「1つでも偽陽性を出したくない」(FWER)のではなく、「有意と判定したものの中に偽陽性が何割混じるかを抑えたい」(FDR) と考える。
| FWER | FDR(偽発見率) | |
|---|---|---|
| 制御する量 | 偽陽性を少なくとも1つ出す確率 | 棄却した仮説のうち偽陽性が占める割合の期待値 |
| 適する場面 | 検定が数個〜数十個。1つの誤りが重大(確認的試験) | 検定が数百〜数万個。探索的(遺伝子発現、画像のボクセル、多数のバイオマーカー Biomarkersバイオマーカー(Biomarkers) Biomarkers(バイオマーカー)) |
| 検出力 | 低い( が大きいと壊滅的) | 高い |
Benjamini–Hochberg 法(BH法) の手続きは次のとおり2。p値を昇順に と並べ、
を求め、 をすべて棄却する。
💡 閾値が に比例して緩んでいくのがポイントである。1番小さい p値には Bonferroni と同じ を課すが、順位が下がるにつれて閾値が上がる。だから「本物の効果がたくさんある」状況で、Bonferroni より多くを拾える。
3つの手続きの比較
個の p値 、 で比べる。
| 順位 | p値 | Bonferroni の閾値 | Holm の閾値 | BH の閾値 |
|---|---|---|---|---|
| 1 | 0.001 | 0.00833 ✓ | 0.00833 ✓ | 0.00833 ✓ |
| 2 | 0.009 | 0.00833 ✗ | 0.01000 ✓ | 0.01667 ✓ |
| 3 | 0.011 | 0.00833 ✗ | 0.01250 ✓ | 0.02500 ✓ |
| 4 | 0.030 | 0.00833 ✗ | 0.01667 ✗ 停止 | 0.03333 ✓ |
| 5 | 0.048 | 0.00833 ✗ | — | 0.04167 ✗ |
| 6 | 0.200 | 0.00833 ✗ | — | 0.05000 ✗ |
| 棄却数 | 1 | 3 | 4 |
⭐ 同じデータ・同じ で棄却数が 1・3・4 と変わる。 どの補正を使うかをデータを見る前に決めておく必要があるのは、このためである。
⚠️ BH法の注意点。(p = 0.048)は閾値 0.04167 を超えるので棄却されないが、 までは棄却される。BH法は「初めて超えたところで止める」のではなく「条件を満たす最大の を探し、そこまで全部棄却する」手続きである。Holm と逆向きに走る点を取り違えないこと。
from statsmodels.stats.multitest import multipletests
p = [0.001, 0.009, 0.011, 0.030, 0.048, 0.200]
for m in ("bonferroni", "holm", "fdr_bh"):
rej, p_adj, _, _ = multipletests(p, alpha=0.05, method=m)
print(m, rej.sum(), p_adj.round(4)) # 棄却数と補正後p値 → 1, 3, 4
補正は万能ではない
Bonferroni 補正には強い批判がある3。
| 批判 | 中身 |
|---|---|
| 第2種の過誤が増える | を に下げれば検出力が落ちる。実在する効果を見逃す確率が上がる。 が大きいと実質的に何も検出できなくなる |
| 「族」の定義が恣意的 | どこまでを1つの比較族とみなすのか。1つの論文の中の検定? その研究プロジェクト全体? その研究者が生涯に行った全検定? 論理的な境界がない |
| 解釈が転倒する | 「同じ p値でも、一緒に検定した項目が多かったという理由だけで有意でなくなる」。ある結果の意味が、無関係unrelated 無関係(unrelated)unrelated(無関係) な他の検定の数に左右されてしまう |
⭐ したがって多重性への第一の対処は補正ではなく設計である。
flowchart TD
A["多重性への対処"] --> B["⭐ 第一:設計で防ぐ"]
B --> C["<span class='jp-term jp-term-diagram' title='primary endpoint'>主要評価項目</span>を<br>ただ1つ事前に決める"]
B --> D["解析計画を事前登録する<br>(何をどう検定するか)"]
B --> E["副次項目は<br>探索的と明示する"]
A --> F["第二:補正で調整する"]
F --> G["検定が少数<br>→ Holm(Bonferroniより常に強い)"]
F --> H["検定が多数・探索的<br>→ Benjamini–Hochberg(FDR)"]
A --> I["第三:報告で守る"]
I --> J["行った検定の総数を書く"]
I --> K["補正前と補正後の<br>両方の p値を示す"]
⚠️ 事前に主要評価項目 primary endpoint 主要評価項目(primary endpoint) primary endpoint(主要評価項目) を1つ決めておけば、多重性の問題は主要評価項目 primary endpoint 主要評価項目(primary endpoint) primary endpoint(主要評価項目) については発生しない。 残りは「仮説を生成するための探索的解析」と明記する。探索的な有意所見は次の研究で確認されるまで結論 conclusion 結論(conclusion) conclusion(結論) にならない。これが臨床試験 clinical trial (clinical study) 臨床試験(clinical trial (clinical study)) clinical trial (clinical study)(臨床試験) で primary endpoint を1つに絞る理由である。
論文と出力をどう読むか
💡 多数の p値が並んでいるときの読む順序
- 主要評価項目primary endpoint 主要評価項目(primary endpoint)primary endpoint(主要評価項目) はどれか — 事前に1つ決められていたか。決められていなければ、以下の p値はすべて探索的である
- 検定は全部で何回行われたか — アウトカムall-or-none outcomes アウトカム(all-or-none outcomes)all-or-none outcomes(アウトカム) 数 × 時点数 × サブグループ数。書かれていなければ、それ自体が警告 warnings 警告(warnings) warnings(警告) である
- 効果量とその信頼区間 confidence interval信頼区間(confidence interval) confidence interval(信頼区間) — 補正は p値を動かすが、効果量は動かさない。効果量と CI は多重性に汚染されていない
- 臨床的relevance — 有意になった項目の効果は、そもそも意味のある大きさか
- 補正の有無と方法 — 補正前の p値だけが示されていないか
- p値 — 最後
⚠️ 「20項目のうち1つだけが p = 0.04 で有意だった」という結果は、何も示していないと読むのが正しい。
補正は p値を変えるが、効果量と信頼区間 confidence interval 信頼区間(confidence interval) confidence interval(信頼区間) は変えない(信頼水準を調整しない限り)。だから多重性の疑いがある論文でも、効果量と CI を見れば「何がどれくらい起きたのか」は読み取れる。p値を追いかけるのをやめると、多重性の害の大部分が自動的に消える。これが 仮説検定の論理 と 統計的議論の組み立て を貫く一本の筋である。
まとめ
- 検定を 回行うと、H0 がすべて真でも の確率で少なくとも1回は誤って有意になる。 で なら 60%、 なら 64%。
- この式は独立を仮定した目安である。正の相関があればふつう FWER はこれより低いが、増えること自体は変わらない。
- 「チョコレートで痩せる」の例:15人・18項目。捏造ではなく、18回検定して当たった1つだけを報告した。問題は検定の数ではなく、その数を書かなかったこと。
- 多重性はサブグループ解析subgroup analysisサブグループ解析(subgroup analysis)subgroup analysis(サブグループ解析)・中間解析interim analysis中間解析(interim analysis)interim analysis(中間解析)・複数時点・総当たり比較・前提条件の事前検定・解析方針の分岐にも潜む。t検定の前に正規性や分散を検定しないのは、これが理由である。
- 出版バイアスpublication bias出版バイアス(publication bias)publication bias(出版バイアス)が多重性を見えなくする。有意でない結果は発表されないので、文献からは検定の総数が読み取れない。
- Bonferroni()は仮定を置かないぶん保守的。Holm 法は同じ仮定で必ず Bonferroni 以上に棄却するので、無条件に置き換えてよい。
- 検定数が多いときは Benjamini–Hochberg 法(FDR)。 を満たす最大の まで棄却する。「1つも間違えない」から「間違いの割合を抑える」への発想の転換。
- Bonferroni 批判:検出力が落ちる、「族」の定義が恣意的、無関係unrelated 無関係(unrelated)unrelated(無関係) な検定の数で結論 conclusion 結論(conclusion) conclusion(結論) が変わる。
- 第一の防御は補正ではなく設計 — 主要評価項目primary endpoint 主要評価項目(primary endpoint)primary endpoint(主要評価項目) を1つ事前に決め、解析計画を事前登録する。
- 補正は p値を変えるが、効果量と信頼区間 confidence interval 信頼区間(confidence interval) confidence interval(信頼区間) は変えない。 効果量と CI を中心に読めば、多重性の害の大部分は避けられる。
出典
- 1.The ASA Statement on p-Values: Context, Process, and Purpose(The American Statistician (American Statistical Association)・2016)実施した解析と検定の全数を報告せずに有意な結果だけを選んで示すこと(選択的報告・p-hacking)がp値を無意味にすること、およびp値が解析の恣意性から独立ではないこと閲覧 2026-08-17
- 2.Controlling the False Discovery Rate: A Practical and Powerful Approach to Multiple Testing(Journal of the Royal Statistical Society Series B (Statistical Methodology)・1995)偽発見率(FDR)=棄却した仮説のうち誤って棄却したものの期待割合という概念の定義と、それを制御する逐次的手続き(Benjamini–Hochberg法)。検定数が多いときFWER制御より検出力が高いこと閲覧 2026-08-17
- 3.What's wrong with Bonferroni adjustments(BMJ・1998)Bonferroni補正が第2種の過誤を増やし検出力を著しく下げること、および「どこまでを1つの比較族とみなすか」の定義が恣意的であるという批判閲覧 2026-08-17