Fisherの正確確率検定

library(exact2x2)

サンプル(tab3)を使用して3つのp値についてまとめます

R
tab3 <- matrix(c(16, 4, 4, 6), 2, 2)
tab3
R
a <- 20
b <- 10
n <- 20
X <- c(19:10)
確率  <- dhyper(x = 19:10, m = a, n = b, k = n)
累積1  <- phyper(q = 18:9, m = a, n = b, k = n, lower.tail=F)
累積2  <- phyper(q = 19:10, m = a, n = b, k = n)
df3 <- data.frame(X, 確率, 累積1, 累積2)
round(df3,6)
tsmethod=”minlike”

観測されたクロス表の確率以下の確率を全て合計したもの(Sterne の方法)

fisher.testで算出されるP値です

R
exact2x2(tab3, tsmethod="minlike")
R
sum(df3[c(1:4,10), 2])
tsmethod=”central”

片側(小さい方) p 値の 2 倍

R
exact2x2(tab3, tsmethod="central")

赤塗り部分の合計の2倍(=青塗り部分の2倍)

R
df3[4, 3]*2
tsmethod=”blaker”

観測された裾の確率に、裾の確率よりも大きくない反対側の裾の最大の裾の確率を加えた合計

R
exact2x2(tab3, tsmethod="blaker")

赤塗り部分の合計(この例ではminlikeと同じ値になりますが書いておきます)

R
sum(df3[c(1:4,10), 2])

p値と信頼区間の整合性

fisher.test では、p 値は tsmethod=“minlike” 、信頼区間はtsmethod=“central” に基づいて求められており、整合性に問題が生じます

上記の例teb3をfisher.testで検定した場合

R
fisher.test(tab3, alternative = "two.sided")

p<0.05なので信頼区間が1を跨いでしまっています

ですので上述したtsmethod=”minlike”で実行することでp値と信頼区間の整合性が担保されます

コメント欄 『間違い』や『分かりにくい部分』などのご意見もお寄せください

タイトルとURLをコピーしました