- こちらの続き
- 普通の場合(1つの帰無仮説と1つの対立仮説を想定した場合)
- 帰無仮説ではm.null、対立仮説ではm.altであるとする
- 今から、調べようとしているのだが、帰無仮説が成り立つ確率をpnull、対立仮説が成り立つ仮説をpalt (pnull + palt = 1)と考えているとする(事前確率)
- その様子を絵で描くとこんな感じ(黒と赤の長さの和は1)
hs <- seq(from=-10,to=10,by=1)
x <- seq(from=-10,to=10,by=0.01)
m.null <- 0
m.alt <- 1
alt.v <- m.alt-0.1
cut.v <- m.alt/2
col <- rep(1,length(hs))
col[which(hs>=alt.v)] <- 2
h.preprob <- rep(0,length(hs))
pnull <- 0.6
palt <- 1-pnull
h.preprob[which(hs==m.null)] <- pnull
h.preprob[which(hs==m.alt)] <- palt
plot(hs,h.preprob,type="h",main = "Pre-probability",col = col)
- ここで実際にデータを取ると、帰無仮説の場合に統計量が正規分布をとり、対立仮説も正規分布を取って、以下に示すようになる
- 帰無仮説・対立仮説の場合のそれぞれの正規分布が黒・赤で描かれている。2つの正規分布の下面積はそれぞれpnullとpaltである。足し合わせると、もちろん、1。カットオフが緑の垂直線。
s <- 1
X <- matrix(0,length(hs),length(x))
for(i in 1:length(hs)){
tmp <- dnorm(x,hs[i],s)
X[i,] <- tmp/sum(tmp) * h.preprob[i]
}
matplot(x,t(X),type="l",col=col)
abline(v=m.null,col=1)
abline(v=alt.v,col=2)
abline(v=cut.v,col=3)
X.4 <- matrix(0,2,length(x))
for(i in 1:length(hs)){
X.4[col[i],] <- X.4[col[i],] + X[i,]
}
matplot(x,t(X.4),type="l",col=c(1,2))
abline(v=m.null,col=1)
abline(v=alt.v,col=2)
abline(v=cut.v,col=3)
- 閾値cut.vを定めれば、帰無仮説が成り立っていて、かつ、陰性の確率(黒の正規分布で緑より左側の下面積:BL)、帰無仮説が成り立っていて、かつ、陽性の確率(黒の正規分布で緑より右側の下面積:BR)、対立仮説が成り立っていて、かつ、陰性の確率(赤の正規分布で緑より左側の下面積:RL)、対立仮説が成り立っていて、かつ、陽性の確率の4つの確率(赤の正規分布で緑より右側の下面積:RR)が求められる(その和は1)
- 2x2表
- を作る
- BL + BR = pnull = 0.6
- RL + RR = palt = 0.4 になっている
two.by.two.1 <- matrix(0,2,2)
for(i in 1:length(x)){
if(x[i] <= cut.v){
two.by.two.1[,1] <- two.by.two.1[,1] + X.4[,i]
}else{
two.by.two.1[,2] <- two.by.two.1[,2] + X.4[,i]
}
}
two.by.two.1
> two.by.two.1
[,1] [,2]
[1,] 0.4159328 0.1840672
[2,] 0.1241197 0.2758803
-
- 感度・パワーはRR/(RL + RR)
- 特異度はBL/(BL+BR)
- タイプ1エラーはBR/(BL+BR)
- タイプ2エラーはRL/(RL+RR)
- 陽性の場合に、対立仮説が占める割合 PPV はRR/(RR+BR)
- 陽性の場合に、帰無仮説が占める割合 FDR はBR/RR+BR)
m1.1 <- apply(two.by.two.1,1,sum)
m2.1 <- apply(two.by.two.1,2,sum)
sens.spec.1 <- t(t(two.by.two.1)/m1.1)
sens.spec.1
ppv.fdr.1 <- two.by.two.1/m2.1
ppv.fdr.1
-
- 実際、感度・パワーは0.6897、特異度は0.6932、タイプ1エラーは0.4602、タイプ2エラーは0.2369、PPVは0.5998、FDRは0.3408
> two.by.two.1
[,1] [,2]
[1,] 0.4159328 0.1840672
[2,] 0.1241197 0.2758803
> sens.spec.1
[,1] [,2]
[1,] 0.6932213 0.4601680
[2,] 0.2068662 0.6897007
> ppv.fdr.1 <- two.by.two.1/m2.1
> ppv.fdr.1
[,1] [,2]
[1,] 0.7701710 0.3408320
[2,] 0.2698563 0.5998082
- ここで、帰無仮説・対立仮説を連続的な分布にしてみる
- 離散的なグラフにしてあるが、なめらかにつながっているものとする
- 黒は、「意味のあるような関連はない〜帰無仮説とみなせるような仮説」、赤は「意味のある関連がある〜対立仮説とみなせるような仮説」
s2 <- 2
h.preprob.2 <- dnorm(hs,0,s2)
h.preprob.2 <- h.preprob.2/sum(h.preprob.2)
plot(hs,h.preprob.2,type="h",main = "Pre-probability",col = col)
-
- いくつかの仮説だけを取り出して、その仮説について観察される統計量の分布を描いている。仮説の事前確率に応じて、下面積は小さくなっている。また、黒と赤の意味は「帰無仮説相当」「対立仮説相当」のことである
- もとの仮説の分布よりも、仮説に基づいてばらつきを持って観察される統計量分布は、幅広の分布となっている。分散がインフレーションしている(〜この幅広になる具合がジェノミックコントロールの分散インフレに相当する)
- 検定のカットオフの緑の線とそれぞれの仮説の位置関係を見れば、「帰無仮説相当」かつ緑線より右・左、「対立仮説相当」かつ緑線より右・左、という分け方ができる
s <- 1
X.2 <- matrix(0,length(hs),length(x))
for(i in 1:length(hs)){
tmp <- dnorm(x,hs[i],s)
X.2[i,] <- tmp/sum(tmp) * h.preprob.2[i]
}
matplot(x,t(X.2),type="l",col=col)
abline(v=cut.v,col=3)
- たくさんの分布が重なっていると見にくいので、「帰無仮説相当」と「対立仮説相当」とでまとめて描くこととする
-
- 黒・赤の2つの分布が得られて、その下面積の和は1であり、また、それぞれの分布曲線の下面積は、「帰無仮説相当」の事前確率、「対立仮説相当」の事前確率となる
- また、気づくことは、黒の分布のピークは0よりも左に寄っていること、赤の分布のピークは相対的に右にシフトしていることである(これは、全体の分布が0を中心に左右対称であったところを、片方側だけをとりのけたからである
X.3 <- matrix(0,2,length(x))
for(i in 1:length(hs)){
X.3[col[i],] <- X.3[col[i],] + X.2[i,]
}
matplot(x,t(X.3),type="l",col=c(1,2))
abline(v=cut.v,col=3)
- ここから、2x2表を作るのも同じことで、感度・特異度・PPV・FDRの算出も同じ
- 感度・パワーは0.8421、特異度は0.87729、タイプ1エラーは0.1839、タイプ2エラーは0.0632、PPVは0.82078、FDRは0.1249
two.by.two <- matrix(0,2,2)
for(i in 1:length(x)){
if(x[i] <= cut.v){
two.by.two[,1] <- two.by.two[,1] + X.3[,i]
}else{
two.by.two[,2] <- two.by.two[,2] + X.3[,i]
}
}
two.by.two
m1 <- apply(two.by.two,1,sum)
m2 <- apply(two.by.two,2,sum)
sens.spec <- t(t(two.by.two)/m1)
sens.spec
ppv.fdr <- two.by.two/m2
ppv.fdr
> two.by.two
[,1] [,2]
[1,] 0.52613995 0.07359563
[2,] 0.06319832 0.33706610
> sens.spec
[,1] [,2]
[1,] 0.8772865 0.1838675
[2,] 0.1053770 0.8421086
> ppv.fdr <- two.by.two/m2
> ppv.fdr
[,1] [,2]
[1,] 0.8927639 0.1248784
[2,] 0.1538939 0.8207877