検証試験において、三群以上の平均値を比較したいときに、単純に二群比較を繰り返すと有意水準が甘くなる。
有意水準の調整によって簡単に処理する方法がBonferroni ボンフェローニ の方法とその進化版だ。
RでBonferroni型のP値調整で多重比較を行ってみた。
- Bonferroniの方法とは?
- Bonferroniの改良版、Holmの方法、Hochbergの方法
- RでBonferroni型のP値調整を実際にやってみる
- まとめ
- EZRで多重比較【無料統計ソフトEZRで簡単統計】【動画】
- 参考書籍
Bonferroniの方法とは?
Bonferroniの方法とは、比較のペア数で有意水準を割り、統計学的有意の基準を厳しくする方法。
三群を総当たりで比較すると三ペアできる。
- グループ1とグループ2
- グループ2とグループ3
- グループ3とグループ1
この三つだ。
二群であれば一回の計算で有意水準5%のところ、三回あるので0.05を3で割って0.0167を有意水準にするというのがBonferroniの方法。
一見理屈が通っているのだけれど、基準が厳しくなりすぎている。
三ペアの比較は完全に独立ではない(少し関係ある)ので、全部のペアの水準を一律ペア数で割るのは厳しすぎる。
そこで考えられたのがBonferroniの改良版だ。
Bonferroniの改良版、Holmの方法、Hochbergの方法
Holmの方法とは?
Holm ホルム はBonferroniの厳しすぎる問題点を、だんだんに緩くしていく方法で解決する提案をした。
P値を小さい順にならべて、もっとも小さいp値は最も小さい有意水準と比較する。
だんだんに有意水準は大きくしていって、最終的には0.05と比較する。
例えば、三ペアの比較であれば、もっとも小さいp値を0.05÷3=0.0167と比較し、二番目に小さいp値は0.05÷2=0.025と比較する。最も大きいP値は0.05と比較する。
比較する水準よりも大きいp値になった時点で比較は終了する。
Rでは、例えば三ペアなら、もっとも小さいp値を3倍、次を2倍、最も大きいp値はそのままという風にして、すべてを0.05と比較する形式をとっている。
これがHolmの方法だ。
Hochbergの方法とは?
Hochberg ホックバーグ の方法は、Holmの方法よりも検出力が高い方法で、統計学的有意な差をよりよく検出してくれる。
Holmの方法とは逆に、大きいp値から有意水準と比較していく。
たとえば三ペアあったとすると、一番大きいp値を0.05と比較し、二番目に大きいp値を0.05÷2=0.025と比較し、一番小さいp値を0.05÷3=0.0167と比較する。
どこかで有意水準を下回ったら、それ以上は比較しない。
つまり、一番大きいp値が0.05を下回ったら、それ以外はすべて統計学的有意とする。
逆に上回ったら、二番目のP値と0.05÷2と比較する。
二番目で0.025÷2より下回ったら、三番目を見ずして、二番目のペア、三番目のペアはともに有意として終了。
Rでは、大きいP値から1倍、2倍、3倍として、0.05と比較すればいいようになっている。
RでBonferroni型のP値調整を実際にやってみる
Rで実際にやってみる。
warpbreaksというデータを使う。
以下でも使用している。
pairwise.t.test()という関数を使う。
等分散かどうかを気にしなくていいように、プールした分散を使わない設定で計算する。
分散をプールするには、分散が大体同じであるという前提が必要だ。
それを考えなくていいようにプールした分散を使わない設定でいく。
Rで二群比較の繰り返しをするとどうなる?
多重比較をする前に、二群比較を繰り返してやってみる。
pariwise.t.test()を使って、p値の調整をなしにすると、二群比較を繰り返した時のp値が計算される。
- LとHはp値
- LとMはp値
- HとMはp値
LとM、LとHはともに有意水準5%で統計学的有意に見える。
> with(warpbreaks, (pairwise.t.test(breaks, tension, pool.sd=F, p.adj="none"))) Pairwise comparisons using t tests with non-pooled SD data: breaks and tension L M M 0.0325 - H 0.0023 0.1146 P value adjustment method: none
RでBonferroniの方法を行うとどうなるか?
すべてのp値が3倍されて出力されている。
LH間だけ有意となる。
- LとHはp値
- LとMはp値
- HとMはp値
> with(warpbreaks, (pairwise.t.test(breaks, tension, pool.sd=F, p.adj="bonferroni"))) Pairwise comparisons using t tests with non-pooled SD data: breaks and tension L M M 0.098 - H 0.007 0.344 P value adjustment method: bonferroni
RでHolmの方法を行うとどうなるか?
こちらもLH間だけ有意。
LH間だけが統計学的有意に異なるという結果になる。
LM間は0.05を上回ったので、この時点で有意水準との比較は終了。
しかし、Bonferroniの方法よりもLM間は惜しい結果になる。
これがBonferroniの方法ほど厳しくないゆえんだ。
- LとHはp値 3倍
- LとMはp値 2倍
- HとMはp値 1倍
> with(warpbreaks, (pairwise.t.test(breaks, tension, pool.sd=F))) Pairwise comparisons using t tests with non-pooled SD data: breaks and tension L M M 0.065 - H 0.007 0.115 P value adjustment method: holm
RでHochbergの方法を行うとどうなる?
HM間は0.05を上回っているので、次に大きいp値のLM間に移り、LM間のp値は2倍されて、0.05より大きいので、最後にLH間に移る。
LH間は3倍されても0.007で、初めて0.05を下回り、LH間だけが統計学的有意な差があるという結果になる。
- HとMはp値 1倍
- LとMはp値 2倍
- LとHはp値 3倍
> with(warpbreaks, (pairwise.t.test(breaks, tension, pool.sd=F, p.adj="hochberg"))) Pairwise comparisons using t tests with non-pooled SD data: breaks and tension L M M 0.065 - H 0.007 0.115 P value adjustment method: hochberg
もしも三番目のp値が3倍すると0.05を超えてしまっていても、二番目のp値が2倍で0.05を下回っていれば、二番目、三番目のp値ともに統計学的有意になる。
この点がHochbergの方法が検出力が高いゆえんだ。
まとめ
RでBonferroni調整を行う方法を紹介した。
二群の比較をWelchの方法で行い、
- 小さいp値にペア数をかけて、だんだん基準を緩めていくのがHolmの方法。
- 大きいp値からだんだん基準をきつくしていくのがHochbergの方法。
Holmより検出力が高いHochbergの方法がおすすめ。
いずれの方法もRなら簡単にできる。
EZRで多重比較【無料統計ソフトEZRで簡単統計】【動画】
EZRなら、Rを簡単に使える。
参考書籍
丹後俊郎著 無作為化比較試験 朝倉書店
7 複数のエンドポイントの評価
コメント