Shapiro-Wilk検定Holm修正

Shapiro-Wilk検定でHolmの修正をする目的

3群以上の差の検定で,通常の2群の対比較検定をすると{群の数×(群の数-1)}/2回の検定を繰り返します.ゆえに多重比較が発生します.これに対して,Tukey法を代表とした多重比較法が考案され活用されています.
それでは,3変数以上の差の検定を行いたいときはどうするかです.術前の血圧データ,術後1時間の血圧データ,術後半日の血圧データに対して,2変数間で差を検定したいときは,対応のあるt検定やWilcoxon検定を適用しますが,当然,多重検定の問題が発生します.しかし,対応のある変数間の差に対する多重比較法は存在しません.Tukey法は多群の比較に限ります.
以上以外の検定でも同様で,多重検定の問題が起これば(Tukey法のようなものは存在しませんので),通常の検定を行って(その検定自体は多重検定の問題),その後にp値を修正する方法が必要となってきます.

 

Bonferroniの修正

2つの変数なりの検定を行ってp値が出力されたとき,多重検定の問題があればp値を修正しなければなりません.Bonferroniの修正は多用されている多重検定の問題が発生したときのp値の修正法です.以下で述べる全ての修正法は,あらゆる検定に適用できます(2標本の差の検定でも良い).以降では,差の検定を例に挙げて説明します.

術前の血圧データ,術後1時間の血圧データ,術後半日の血圧データの差を知りたいとします.術前の血圧と術後1時間の血圧の差について対応のあるt検定を行ったら,p=0.009だったとします.術前の血圧と術後半日の血圧の差はp=0.01,術前の血圧と術後半日の血圧の差は,p=0.03でした.

 

対応のあるt検定の結果
1.術前の血圧と術後1時間の血圧の差 p=0.009 →p<0.01で有意差あり
2.術前の血圧と術後半日の血圧の差  p=0.01 →p<0.05で有意差あり
3.術前の血圧と術後半日の血圧の差  p=0.03 →p<0.05で有意差あり

 

この時点では,全ての期間で有意差ありです.しかし,このままだと多重比較が発生しているのです.
そこで強引ですが,「多重比較によって,これらのp値が低く出ているなら,p値に検定した数を掛けて修正してやろう.それでもp<0.05なら有意差ありと判断しよう」というわけです.上の例で検定した数は3です.

 

対応のあるt検定の結果をBonferroniの修正
1.術前の血圧と術後1時間の血圧の差 p=0.009×3=0.027  →p<0.05で有意差あり
2.術前の血圧と術後半日の血圧の差  p=0.01×3=0.03 →p<0.05で有意差あり
3.術前の血圧と術後半日の血圧の差  p=0.03×3=0.09  →有意差なし

 

これで終了です.なぜp値に検定した数=3を掛けるかの理由はともかく,大雑把な方法であることは間違いありません.群数が多くなると掛ける数も大きくなり,pはどんどん上がっていきます.つまり,有意差がでなくなっていきます(これを保守的といいます).

 

Holmの修正

 

Holmの修正はBonferroniの修正の改良版です.改良版なので,「有意差が出にくくなる」欠点を補っています.Bonferroniの修正は,とにかくp値に検定した数を掛けるという強引な方法でp値を上げ,それが問題視されていました.まずは計算方法を,説明します.

①最初に,対応のあるt検定の結果でp値の小さい順に並べます
②最も小さいp値に検定数を掛けます.これはBonferroniの修正と同一
③-1 最も小さいp値に検定数を掛けて,それがp<0.05なら次の小さいp値を見ます
③-2 最も小さいp値に検定数を掛けて,それが0.05以上なら残り全て同じp値として有意差なしです
④-1 次に小さいp値に検定数-1を掛けて,それがp<0.05なら3番目の小さいp値を見ます
④-2 次に小さいp値に検定数-1を掛けて,それが0.05以上なら残り全て同じp値として有意差なし

…と,これを最後まで繰り返します.

 

対応のあるt検定の結果をHolmの修正
1.術前の血圧と術後1時間の血圧の差 p=0.009×3=0.027 →p<0.05で有意差ありなので次へ
2.術前の血圧と術後半日の血圧の差  p=0.01×2=0.02 →p<0.05で有意差ありなので次へ
3.術前の血圧と術後半日の血圧の差  p=0.03×1=0.03 →p<0.05で有意差あり,終了

 

以上のように,掛ける検定数を減らしていくので,p値を必要以上に抑制しなくなります.

 


なぜ,こんなことをするのかは,比較的単純で,A,B,C群の母平均をμA,μB,μCとすると,
帰無仮説族{μA=μB,μA=μC,μB=μC}
を考えます.帰無仮説が3つあります(だから3回検定を行います).
もし,μA≠μBだとすれば(上述の③-1),残りは帰無仮説族{μA=μC,μB=μC}の2個だけになるのでp値に2を掛けます(上述の④-1).というふうに,繰り返していくだけです.
実際には,Rコマンダーが計算するので,理論・計算法は知らなくても問題ありません

 

Shafferの修正

Shafferの修正は,Holmの修正よりも更に合理的で,適切な修正法です.詳しくは,解説しませんが,基本的なものとして,以下のように計算します.

①最初に,対応のあるt検定の結果でp値の小さい順に並べます.
②最も小さいp値に検定数を掛けます.これはBonferroniの修正と同一
③-1 最も小さいp値にmを掛けて,それがp<0.05なら,次の小さいp値を見ます.
③-2 最も小さいp値にmを掛けて,それが0.05以上なら残り全て同じp値として有意差なしです.

…と,これを繰り返します.

以下の例では,m=1として計算します.

 

対応のあるt検定の結果をShafferの修正
1.術前の血圧と術後1時間の血圧の差 p=0.009×3=0.027 →p<0.05で有意差ありなので次へ
2.術前の血圧と術後半日の血圧の差  p=0.01×1=0.01  →p<0.05で有意差ありなので次へ
3.術前の血圧と術後半日の血圧の差  p=0.03×1=0.03 →p<0.05で有意差あり,終了

 

かなりp値の引き上げを抑制出来ています.ところでmというのは,何なのか?です.
これは,群の数によって異なります

 


Holmの修正と同様に,A,B,C群の母平均をμA,μB,μCとすると,
帰無仮説族{μA=μB,μA=μC,μB=μC}
を考えます.帰無仮説が3つあります(だから3回検定を行います).
もし,μA≠μBだとすれば(上述の③-1),Holmの修正では残り帰無仮説族{μA=μC,μB=μC}の2個だけになるのですが,μA≠μBであればμA=μC,μB=μCの2つは成立しません
μA≠μBであればμCがμAと等しい,かつμCがμBと等しいとは考えられません.どちらか1つだけです.そう考えると,最初は,何もわからないので{μA=μB,μA=μC,μB=μC}の3つが成り立つ可能性はあるものの,どこか1つの組み合わせに有意差があるとわかれば,残りは1つだけです.ゆえにm=1とします.
ただし,これは3群の差の検定なのでわかりやすいですが,4群以上になると複雑になります.Shafferの修正は,この後も様々な改良版が考案されています.

 

いまのところ,Rのパッケージとしては配布されていませんので,改変Rコマンダーでも多くの検定はHolmの修正で修正します.反復測定による分散分析や分割プロットの分散分析では,anovakunという関数を使用していますので,計算可能となっています.

 

その他の修正法

その他にも,p値を修正する方法はたくさんありますどれを用いても間違いとはいえません.ただし,上述したBonferroniの不等式に基づく方法(Bonferroni,Holm,Shaffer)を用いるのが妥当です.それは,他者の報告と比較する際に,できるだけ同じ基準で有意性を判断する方が自然だからです.仮に全く同じデータを解析しても,手法によって微妙に結果が異なるものです.それでは,整合性が成立しません.ある学会ではTukey法を当たり前のように使っていたとして(これが正しいかは別です),私はホランドコペンハーバー法を使って有意差あり,といっても整合性がありません(もちろん,その方法が適切である理論的根拠が明確であればよいですが).
そうした意味では,何が何でも統計解析は常に新しいものを活用すべき,とはいい切れない面もあります.

 

Shapiro-Wilk検定でHolmの修正は必要か?

改変Rコマンダーではシャピロ・ウイルク検定のときにHolmの修正を行う設定になっています.シャピロ・ウイルク検定のときに,Holmの修正は必要か,否か
結論としては,どちらも何ともいえない現状です
身長,体重,年齢のデータに対して,相関係数を見るために,シャピロ・ウイルク検定を適用します.
常識的に,身長,体重,年齢のデータの母集団が同一とは考えられません.cm,kg,歳という単位のデータは同一でしょうか?
しかし,A,B,C群の年齢に対して,シャピロ・ウイルク検定を行い,差の検定や相関を求めるとき,多くのケースで多重検定の問題が発生します(そもそも群間の年代が違うのであれば別です).
従って,Holmの修正を行うか否かは,使い分ける必要があり,修正の必要性は解析する人の考えで決まります.