超幾何分布
超幾何分布から\(P(X)\)を算出します
Fisherの正確検定のp値の求め方
\(P(X=12)=0.03949341\)
ということが分かりました
つまり数あるパターンの中から上の分割表のパターンになる確率のことです
Rでやってみましょう
dhyperは幾何分布の確率密度を求めるための関数です(”d
” gives the probability density)
R
# dhyperは超幾何分布の確率密度関数
a <- 15
b <- 14
n <- 18
x <- 12
dhyper(
x = x, m = a, n = b, k = n
)
以下のように表示されていれば成功です
さきほど求めた解と同じ確率が算出されます
X≧12やX≦12となる確率はどうなるでしょうか?
X=0~15の確率を直接求めるのです!
全て足せばよいのでやってみましょう
$$ P(X≧12) = P(X=12) + P(X=13) + P(X=14) + P(X=15) $$
なかなか大変です・・・
なのでnが大きくなると昔は計算が大変だった思います・・・
でも今はRですぐに計算できるので感謝です
fisher.test(tab, alternative = “greater”) のp値
R
# sumは集計結果を算出する関数です
a <- 15
b <- 14
n <- 18
x <- c(12:15)
sum(
dhyper(x = x, m = a, n = b, k = n)
)
以下のように表示されていれば成功です
fisher.test(tab, alternative = “two.sided”) のp値
Rでやってみましょう
R
tab <- matrix(c(12, 6, 3, 8), 2, 2)
tab
fisher.test(tab, alternative = "two.sided")
R
a <- 15
b <- 14
n <- 18
X <- c(15:4)
確率 <- dhyper(x = 15:4, m = a, n = b, k = n)
累積1 <- phyper(q = 14:3, m = a, n = b, k = n, lower.tail=F)
累積2 <- phyper(q = 15:4, m = a, n = b, k = n)
df <- data.frame(X, 確率, 累積1, 累積2)
round(df,6)
赤塗り部分の合計がfisher.testのp値
R
sum(df[c(1:4,10:12),2])
累積確率で考えたら間違いますので注意が必要です
例1:これまで使用してきた例では累積確率と同じ値になる場合
赤の合計と青の合計が同じ値になります
R
#赤部分=確率の和
sum(df[c(1:4,10:12),2])
#青部分=累積確率の和
df[4, 3]+df[10, 4]
累積確率と異なる値になる場合もあるので注意が必要です
例2:累積確率と異なる値になる
R
tab2 <- matrix(c(7, 2, 8, 10), 2, 2)
tab2
R
fisher.test(tab2, alternative = "two.sided")
赤の合計と青の合計が異なる値になります
黒木玄様(@genkuroki)よりご助言いただき、サンプルも使用させていただきました。ありがとうございました。
コメント欄 『間違い』や『分かりにくい部分』などのご意見もお寄せください