0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

フィッシャーの正確確率検定(直接確率)

Posted at

フィッシャーの正確確率検定(直接確率)

分割表において,期待値が 5 以下の桝目が全体の桝目の 20% 以上あるか,期待値が 1 以下の桝目が 1 つでもある場合には,「$\chi^2$ 分布を利用する独立性の検定」は不適当である1

そのような場合には本法により独立性の検定を行う2

  • 帰無仮説 $H_0$:「2 要因は独立である」,または「比率に差がない」。
  • 対立仮説 $H_1$:「2 要因は独立でない」,または「比率に差がある」。
  1. 2 変数 A,B についての分割表を以下のように定義する。
    2 群の比率の差の検定を行うと解釈する場合には要因 A(または要因 B)が群になる。
$B_{1}$ $B_{2}$ 合計
$A_{1}$ $a$ $b$ $e$
$A_{2}$ $c$ $d$ $f$
合計 $g$ $h$ $n$
  1. 周辺度数 $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!}
  1. 周辺度数を固定したとき,$2 \times 2$ 分割表の自由度は $1$ であり,4 つの桝目のどれか 1 つを決めれば,残りの桝目は自動的に決る。

  2. $a$ が取りうるすべての値をとった場合の分割表それぞれについての生起確率 $P_{a}$ を計算する。

  3. 観察された $2 \times 2$ 分割表の生起確率を $P_{o}$ とする。

  4. 検定(両側検定)は,得られた分割表のうち,観察された分割表における生起確率 $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
  1. フィッシャの正確確率検定については,「特殊な実験条件下で得られるものであり,どのような場合にも適用できるものではない」,「連続性の補正を行わない独立性の検定(比率の差の検定)を行うべきである」という批判もある。

  2. ここでは $2 \times 2$ 分割表の場合のみについて述べるが,それより大きい分割表を扱うことができる。

  3. Fisher が示した正確確率検定は,観察された分割表の生起確率よりも小さな生起確率を持つ分割表を「極端な分割表」であるとして,その生起確率を加えたものを $p$ 値とするものである。これ以外の方法もある。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?