ChatGPTと一緒に統計学に関わる事象について直感的な理解を目指すシリーズ。
Bonferroni補正(Bonferroni correction)とは何か
簡単に言うと、
検定を何回もやったとき、偶然の「有意」をどう防ぐか
という問題への対処法である。
「p < 0.05」の意味から考える
通常、
$$ \alpha=0.05 $$を有意水準にする。
詳しくは 【統計解説】中心極限定理ってなによ?
これは、
帰無仮説が正しいのに、それを間違って棄却してしまう確率を5%まで許す
という基準である。
つまり1回だけ検定するなら、
| |
ということ。
この誤りを
$$ \text{Type I error} $$第一種過誤という。
6回検定したらどれくらい危ない?
ある論文で、年齢を以下の4群にしている。
$$ 0,\ 1,\ 2,\ 3 $$4群から2群ずつ比較すると、
$$ {4 \choose 2} =\frac{4!}{2!2!} =6 $$通りある。
具体的には、
| |
である。
全部本当は差がないとして、それぞれで
$$ \alpha=0.05 $$を使ったら、
6回のうち最低1回でもfalse positiveになる確率
はどれくらいになるだろうか?
仮に6回の検定が互いに独立だとすると、「1回もfalse positiveにならない確率」は、
$$ 0.95^6 $$である。
計算すると、
$$ 0.95^6\approx0.735 $$したがって、
$$ P(\text{1回以上false positive})=1-0.95^6 $$$$ \approx1-0.735 $$$$ \approx0.265 $$つまり、
$$ \color{red}{\boxed{26.5\%}} $$になる。
これは無視できない確率である。
ただし、これは6つの検定が互いに独立である場合の計算である。
実際の多重比較では同じデータを使って複数の比較をすることが多いため、検定同士は独立とは限らない。その場合、実際の確率が必ず26.5%になるわけではない。
重要なのは、検定を繰り返すほど「少なくとも1回は偶然有意になる」危険が大きくなるということである。
Bonferroniの発想
そこで、
6回全部合わせてもfalse positiveの確率を5%以下に抑えたい
と考える。
Bonferroniのやり方は非常に単純で、
$$ \alpha_{\mathrm{new}}=\frac{\alpha}{m} $$とする。
$m$ は検定回数。
今回は、
$$ m=6 $$だから、
$$ \alpha_{\mathrm{new}}=\frac{0.05}{6} $$$$ =0.00833... $$となる。
つまり今までなら、
$$ p<0.05 $$で「有意!」としていたものを、
$$ \boxed{p<0.0083} $$でないと有意と認めない。
かなり厳しくしている。
例えば結果がこうだったとする
| 比較 | p値 |
|---|---|
| 0 vs 1 | 0.30 |
| 0 vs 2 | 0.0004 |
| 0 vs 3 | 0.00001 |
| 1 vs 2 | 0.002 |
| 1 vs 3 | 0.0001 |
| 2 vs 3 | 0.040 |
通常の
$$ p<0.05 $$なら、
- 0 vs 2 ✓
- 0 vs 3 ✓
- 1 vs 2 ✓
- 1 vs 3 ✓
- 2 vs 3 ✓
である。
でもBonferroni後は、
$$ p<0.0083 $$なので、
- 0 vs 2 ✓
- 0 vs 3 ✓
- 1 vs 2 ✓
- 1 vs 3 ✓
- 2 vs 3 ✗
になる。
つまり、
$$ p=0.04 $$は1回の検定だけを見れば「有意」であるが、
6回も比較した中の一つとして見ると、偶然でもこれくらいのp値が出る可能性を無視できない
と判断するわけである。
Bonferroniの数学的な根拠
イベント $A_1,A_2,\ldots,A_m$ を、
各検定でfalse positiveを起こすこと
とする。
少なくとも1つfalse positiveが起きる確率は、
$$ P(A_1\cup A_2\cup\cdots\cup A_m) $$確率論には Boole’s inequality / union bound という、
$$ P(A_1\cup A_2\cup\cdots\cup A_m) \le \sum_{i=1}^{m}P(A_i) $$という性質がある。
べん図を書いて考えてみれば直感的に理解しやすい内容。
そこで各検定について、
$$ P(A_i)\le\frac{0.05}{m} $$にしておけば、
$$ P(\text{1つ以上false positive}) \le m\times\frac{0.05}{m} $$なので、
$$ \le0.05 $$となる。
これがBonferroni補正の核心。
つまり、
$$ \boxed{ \alpha_{\rm each}=\frac{\alpha_{\rm family}}{m} } $$とすることで、
$$ \boxed{ \text{family全体で1回以上false positiveが起こる確率}\le5\% } $$を保証する。
この「family全体で少なくとも1つ第一種過誤を起こす確率」が Family-Wise Error Rate(FWER) である。
ここで重要なのは、先ほどの
$$ 1-0.95^6 $$という計算とは違い、Bonferroni補正は検定同士が独立でなくてもこの上限を保証できるという点である。
p値を補正する書き方もある
論文によっては閾値を
$$ 0.05/6=0.0083 $$に変える代わりに、p値そのものを6倍することもある。
例えば、
$$ p=0.006 $$なら、
$$ p_{\rm adjusted} = 0.006\times6 =0.036 $$なので、
$$ 0.036<0.05 $$→ 有意。
一方、
$$ p=0.04 $$なら、
$$ p_{\rm adjusted} = 0.04\times6 =0.24 $$→ 非有意。
つまり、
- 方法A:$p<\frac{0.05}{6}$ を見る。
- 方法B:$6p<0.05$ を見る。
数学的には同じこと。
なお補正後p値が1を超えたら、
$$ p_{\rm adjusted}=1 $$とする。
より正確には、
$$ \boxed{ p_{\rm adjusted}=\min(mp,1) } $$である。
注意点
Bonferroniはかなり保守的である。
つまりfalse positiveを減らす代わりに、
本当に存在する差まで「有意ではない」としてしまいやすい
という問題がある。
つまり検出力が低下し、結果として第二種過誤、
$$ \text{Type II error} $$が起こりやすくなる。
イメージとしては、
| |
100回検定なら、
$$ \alpha=0.05/100=0.0005 $$であり、ものすごく厳しいことがわかる。
そのため実際には、
- Bonferroni
- Holm
- Hochberg
- Benjamini-Hochberg(FDR)
など、目的によって別の補正法も使われる。
特に探索的なomicsや大量の特徴量解析では、Bonferroniでは厳しすぎることがあるため、FWERではなくFDRを制御するBenjamini-Hochberg法などが使われることも多い。
まとめ
Bonferroni補正を一言でまとめると、
$$ \boxed{ \text{検定を何度もするなら、その回数だけ有意判定を厳しくする} } $$という考え方である。
1回だけの検定なら、
$$ \alpha=0.05 $$でも、$m$ 回検定するなら、それぞれについて
$$ \boxed{ \alpha_{\rm each}=\frac{0.05}{m} } $$とする。
こうすることで、
$$ \boxed{ P(\text{family内で1回以上false positive})\le0.05 } $$となり、複数の検定全体として第一種過誤を起こす確率を5%以下に抑えることができる。
例えば6回検定するなら、
$$ 0.05/6\approx0.0083 $$なので、
$$ p<0.0083 $$となったものだけを有意とする。
直感的には、
| |
という話である。
ただし、その代償として本当に存在する差を見逃しやすくなる。
したがってBonferroni補正とは、
偽陽性をできるだけ確実に防ぐ代わりに、検出力をある程度犠牲にする方法
と理解すると直感的にわかりやすい。