【多重比較法】検定をむやみに繰り返してはいけない

こんにちは、たくろー(@takuro_data )です!

前回は、3群以上の分散分析について学びました。

【分散分析】3群以上の平均の差を検定しよう

分散分析では、群間の平均に差があるかはわかるものの、どの群間の平均に差があるのかまではわかりません。何度か検定を繰り返したくなりますが問題点があり、多重比較法を用いる必要あります。今回は、多重比較法について学びます。

要点
  1. Bonferroni法は、あらかじめ繰り返し数(対比較の数)で割った有意水準で検定する方法。
  2. Tukey-Kramer法は、2群のt検定を多群にも使えるようにした方法。
  3. Dunnett法は、対照群と処理群との比較だけを行う。

多重比較とは

多重比較とは、どの群間に有意差があるのか、1対ずつ平均を比較して、有意差のある対を特定することです。

検定の多重性の問題

検定を繰り返すということは、同時にそれらの帰無仮説が棄却されることが求めらます。同時というのは確率論的に乗算を意味するので、第1種の過誤を犯す確率が大きくなります。

多重性の補正のタイプ

検定の多重性の補正対象によって20種類以上ありますが、大きく3つに分類することができます。

  • 有意水準補正型:繰り返し数に応じて有意水準を小さくすることで、棄却域が広がらないようにする(代表的手法:Bonferroni法)
  • 検定統計量補正型:群数に応じて検定統計量を小さくして、棄却域に入り難しくする(代表的手法:Scheffe法)
  • 分布補正型:繰り返し数が増えても有意水準が大きくならない独自の分布から限界値を読み取って判定(代表的手法:Tukey法、Dunnett法)

多重比較法1:Bonferroni法

有意水準を補正するタイプの多重比較法で、あらかじめ繰り返し数(対比較の数)で割った有意水準で検定する方法です。

前回、分散分析で使ったRのサンプルデータInsectSprays(昆虫スプレーの有効性)で実行してみます。

#データ準備
data("InsectSprays")
str(InsectSprays)
plot(count ~ spray, data = InsectSprays)
InsectSprays_cde <- rbind(InsectSprays[InsectSprays$spray == "C",],InsectSprays[InsectSprays$spray == "D",],InsectSprays[InsectSprays$spray == "E",])
#分散分析
anova(aov(count ~ spray, InsectSprays_cde))
Analysis of Variance Table

Response: count
          Df  Sum Sq Mean Sq F value   Pr(>F)   
spray      2  48.167 24.0833  5.4873 0.008763 **
Residuals 33 144.833  4.3889                    
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

C、D、Eを抽出し、分散分析を行い、3群の母平均が等しいという帰無仮説は棄却されたことを確認しました。

#bonferroni法のt検定
attach(InsectSprays_cde)
pairwise.t.test(count,spray, p.adj="bonferroni")
detach()
> pairwise.t.test(count,spray, p.adj="bonferroni")

	Pairwise comparisons using t tests with pooled SD 

data:  count and spray 

  C      D     
D 0.0067 -     
E 0.3214 0.3214

P value adjustment method: bonferroni 

有意水準5%でCとEの母平均が等しいという帰無仮説が棄却されました。

多重比較法2:Scheffe法

検定統計量を補正するタイプの多重比較法です。Bonferroni法のように群間を一対ずつ比較(対比較)するのではなく、複数群をまとめて2つのグループにして、それらの比較をします(対比)。Rで簡単なコマンドはなかったので、ここでは割愛します。

多重比較法3:Tukey-Kramer法

分布補正型の多重比較法です。2群のt検定を多群にも使えるようにした方法です。検定統計量であるt値を、スチューデント化された範囲の分布からのq(限界値)と比較します。スチューデント化とは、t分布で出てきた準標準化のことです。

#Tukey-Kramer法
TukeyHSD(aov(count~spray,data=InsectSprays_cde))
> TukeyHSD(aov(count~spray,data=InsectSprays_cde))
  Tukey multiple comparisons of means
    95% family-wise confidence level

Fit: aov(formula = count ~ spray, data = InsectSprays_cde)

$spray
         diff        lwr       upr     p adj
D-C  2.833333  0.7346841 4.9319826 0.0061970
E-C  1.416667 -0.6819826 3.5153159 0.2369848
E-D -1.416667 -3.5153159 0.6819826 0.2369848

diffは群間の平均の差です。lwr、uprは信頼区間の下限値、上限値です。この区間に0を含まない場合、比較した2群間の差は少なくとも0ではないといえるので、2群間の平均値に有意差があります。p adjはp値です。CとDに有意差がある結果です。

多重比較法4:Dunnett法

分布補正型の多重比較法です。基本はTukey-Kramer法と同じだが、対照群と処理群との比較だけを行います。比較する対が減るので、多重性が軽減されます。

#Dunnett法
library(multcomp)
summary(glht(aov(count~spray, data = InsectSprays_cde),linfct=mcp(spray="Dunnett")))
> summary(glht(aov(count~spray, data = InsectSprays_cde),linfct=mcp(spray="Dunnett")))

	 Simultaneous Tests for General Linear Hypotheses

Multiple Comparisons of Means: Dunnett Contrasts


Fit: aov(formula = count ~ spray, data = InsectSprays_cde)

Linear Hypotheses:
           Estimate Std. Error t value Pr(>|t|)   
D - C == 0   2.8333     0.8553   3.313  0.00431 **
E - C == 0   1.4167     0.8553   1.656  0.18581   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Adjusted p values reported -- single-step method)

Cを対照群として、処理群D、Eと比較しています。Tukey-Kramer法から、比較数が3から2に減ります。CとDに有意差がある結果です。

さいごに

今回は、どの群間に有意差があるのか、1対ずつ平均を比較して、有意差のある対を特定する多重比較法について学習しました。

全12回で「母集団が特定の確率分布に従っている」場合のパラメトリック手法について一通り学び終えました。ノンパラメトリック手法もありますが、統計学入門は終了です。お疲れ様でした!

【Rで実践 統計学入門 全12回】ゼロから実践的統計学

Rで統計学入門