複数回の検定をおこなってはいけない理由
3標本以上の比較する時に注意すること
t検定を紹介してきたときは、2標本の比較について統計解析の検討を行ってきたが、今回は3標本以上の比較をすることを考えよう。t検定が対応している比較標本数は2標本までだ。そこで真っ先に思いつくのは、2標本のt検定を複数回をおこなって3標本以上の比較を行うというものだ。例えば、3標本X、Y、Zがあるときは、XとY、YとZ、ZとXという3組を作って、それぞれでt検定を行う。つまり、3回、t検定を行うことになる。これで形式上は、比較が可能だ。
しかし、検定は帰無仮説や対立仮説が100%正しいことを保証してくれるものではなかった。有意水準を5%と定めれば、1回の検定ごとに5%の確率で第1種の過誤、帰無仮説が正しいのに棄却してしまう間違いを犯してしまう。では、3標本の平均値がみな等しいとして、5%の確率で間違う検定を3回行うとどうなってしまうだろうか?
この3回の検定で、1回も間違わない確率は、(0.95)^3 ≒ 0.857、約86%ということになる。逆に1回でも間違ってしまう確率は、この確率を100%から引けば求まるので、約14%となる。有意水準を5%としたにもかかわらず、危険率(どこかの標本に差があると判定してしまう確率)が14%となってしまった。これは複数回、検定を行うことで間違いを犯しやすくなったということだ。このような問題を検定の多重性問題という。こういう理由で、補正や工夫無しに、複数回検定を行うのは悪手となってしまうので、気を付けよう。これは3標本以上の比較以外にも、等分散性や正規性を確認してから検定法を選ぶというときにも問題になる。
複数回検定を行った時の危険率
次回以降に3標本以上の比較を行うときの工夫を紹介するとして、今回は本当に複数回検定を行うことで危険率が増加してしまうかを確認してみよう。3標本の平均がみな等しいと仮定して、t検定を3回行い、p値を求める。これを10000回繰り返そう。コードを以下に示す。
------------------------------------------------------
library(plotn)
nA <- 30
nB <- 30
nC <- 30
meA <- 50
meB <- 50
meC <- 50
s <- 20
pAB <- NULL
pBC <- NULL
pCA <- NULL
for (i in 1:10000){
mA <- rnorm(nA, mean = meA, sd = s)
mB <- rnorm(nB, mean = meB, sd = s)
mC <- rnorm(nC, mean = meC, sd = s)
#上記はすべて平均50、標準偏差20の標本
pAB <- c(pAB, t.test(mA, mB, var.equal = F)$p.value)#標本AとBのt検定
pBC <- c(pBC, t.test(mB, mC, var.equal = F)$p.value)#標本BとCのt検定
pCA <- c(pCA, t.test(mC, mA, var.equal = F)$p.value)#標本CとAのt検定
#計3回t検定を行う
}
p <- data.frame(pAB = pAB, pBC = pBC, pCA = pCA)
head(p) #中身の確認
## pAB pBC pCA
## 1 0.8861918 0.1912299 0.18148137
## 2 0.3143670 0.4071585 0.07567012
## 3 0.6712171 0.5198597 0.84156316
## 4 0.5065951 0.7982920 0.66515219
## 5 0.4986153 0.2822420 0.73337946
## 6 0.2649570 0.2434146 0.96368301
histn(p$pAB, xlab = "P value", ylab = "頻度") #図1の描画
histn(p$pBC, xlab = "P value", ylab = "頻度") #図2の描画
histn(p$pCA, xlab = "P value", ylab = "頻度") #図3の描画
sum(p$pAB < 0.05)
## [1] 487
sum(p$pBC < 0.05)
## [1] 470
sum(p$pCA < 0.05)
## [1] 510
------------------------------------------------------
図1 標本AとBのt検定のp値の分布
図2 標本BとCのt検定のp値の分布
図3 標本CとAのt検定のp値の分布
当然であるが、各2標本のt検定それぞれでは、大体危険率が5%程度になっていることがわかる。では、今同時に3標本生成し、3回t検定を行っている。この3回のt検定で算出されたp値のうち、最小のものを選ぶとしよう。この最小のp値が0.05を下回っていれば、3回のt検定のうち1回でもp値が0.05を下回った場合を算出することができる。
------------------------------------------------------
p$pmin <- apply(p, MARGIN = 1, min)
#この関数は行列やデータフレームに対して行ごとや列ごとに計算することができる。
#Margin = 1とすれば行、2とすれば列ごとの計算
#minは最小値を返す関数なので、このコマンドの意味は、
#行に対して最小値を返せ、ということになる。
head(p)#pminにpAB、pBC、pCAの最小値が入っていることを確認
## pAB pBC pCA pmin
## 1 0.8861918 0.1912299 0.18148137 0.18148137
## 2 0.3143670 0.4071585 0.07567012 0.07567012
## 3 0.6712171 0.5198597 0.84156316 0.51985973
## 4 0.5065951 0.7982920 0.66515219 0.50659510
## 5 0.4986153 0.2822420 0.73337946 0.28224203
## 6 0.2649570 0.2434146 0.96368301 0.24341456
histn(p$pmin, xlab = "P value", ylab = "頻度") #図4の描画
sum(p$pmin < 0.05)
## [1] 1190
------------------------------------------------------
図4 3回のt検定のp値の最小値の分布
以上の計算から、3回のt検定のうち1回でもp値が0.05を下回った回数は1190回、つまり今回の危険率は、約12%になったということを意味している。このように複数回検定を行うときには注意が必要となる。