フィッシャーの正確確率検定(直接確率)
分割表において,期待値が 5 以下の桝目が全体の桝目の 20% 以上あるか,期待値が 1 以下の桝目が 1 つでもある場合には,「$\chi^2$ 分布を利用する独立性の検定」は不適当である1。
そのような場合には本法により独立性の検定を行う2。
- 帰無仮説 $H_0$:「2 要因は独立である」,または「比率に差がない」。
- 対立仮説 $H_1$:「2 要因は独立でない」,または「比率に差がある」。
- 2 変数 A,B についての分割表を以下のように定義する。
2 群の比率の差の検定を行うと解釈する場合には要因 A(または要因 B)が群になる。
$B_{1}$ | $B_{2}$ | 合計 | |
---|---|---|---|
$A_{1}$ | $a$ | $b$ | $e$ |
$A_{2}$ | $c$ | $d$ | $f$ |
合計 | $g$ | $h$ | $n$ |
- 周辺度数 $e$,$f$,$g$,$h$ を固定した分割表は複数個考えられるが,観察された分割表が得られる確率(生起確率)は次式のようになる。
P_{a} = \displaystyle \frac{{}_{e}C_{a} \times {}_{f}C_{c}} {{}_{n}C_{g}} = \frac{e!\ f!\ g!\ h!} {n!\ a!\ b!\ c!\ d!}
-
周辺度数を固定したとき,$2 \times 2$ 分割表の自由度は $1$ であり,4 つの桝目のどれか 1 つを決めれば,残りの桝目は自動的に決る。
-
$a$ が取りうるすべての値をとった場合の分割表それぞれについての生起確率 $P_{a}$ を計算する。
-
観察された $2 \times 2$ 分割表の生起確率を $P_{o}$ とする。
-
検定(両側検定)は,得られた分割表のうち,観察された分割表における生起確率 $P_{o}$ 以下の生起確率 $P_{a}$ を合計したものを $p$ 値とする3。
プログラム例
using SpecialFunctions
function fisher(a, b, c, d)
lchoose(n, k) = logfactorial(n) - logfactorial(k) - logfactorial(n - k)
Stats(i, e, f, g, n) = exp(lchoose(e, i) + lchoose(f, g - i) - lchoose(n, g))
e, f, g, h, n = a + b, c + d, a + c, b + d, a + b + c + d
mi = max(0, e + g - n)
length = min(e, g) - mi
prob = [Stats(mi + i, e, f, g, n) for i in 0:length]
println("Fisher's Exact Test for Count Data (two tailed)")
println("p value =", sum(prob[prob .<= Stats(a, e, f, g, n)]))
end;
使用例
四分表の a, b, c, d を与える。
fisher(10, 13, 16, 61)
Fisher's Exact Test for Count Data (two tailed)
p value =0.055089906063581565
fisher(20, 80, 13, 87)
Fisher's Exact Test for Count Data (two tailed)
p value =0.2528171706994786
fisher(13, 4, 6, 14)
Fisher's Exact Test for Count Data (two tailed)
p value =0.008138143815466493
HypothesisTests パッケージの FisherExactTest との比較
HypothesisTests パッケージの FisherExactTest の両側検定結果は,デフォルトでは上述のプログラムによる結果と異なる。
using HypothesisTests
result = FisherExactTest(13, 4, 6, 14)
Fisher's exact test
-------------------
Population details:
parameter of interest: Odds ratio
value under h_0: 1.0
point estimate: 7.11326
95% confidence interval: (1.44, 43.82)
Test summary:
outcome with 95% confidence: reject h_0
two-sided p-value: 0.0117
Details:
contingency table:
13 4
6 14
ここで得られる両側検定の $p$ 値は,該当する片側検定の $p$ 値を 2 倍するものである。
このような計算方法は R や matlab などの他の統計ソフトと違う。
同じ結果を得るためには,オプション設定 method=:minlike としなければならない。
pvalue(result, method=:minlike)
0.008138143815466445