Fisher's exact testについて。
【目次】
Fisher's Exact testは 検定と同じく、カテゴリーデータの独立性を評価する手法。
帰無仮説、対立仮設
- 帰無仮説
- 対立仮設
要因と結果の間に関係がないか(独立であるか)を評価する。
計算式等
次のクロス表で考える。
■ 観測度数
Outcome | Total | |||
(+) | (-) | |||
Factor | 1 | a | b | AB |
2 | c | d | CD | |
Total | AC | BD | N |
計算例
検定では、
統計量(期待度数と観測度数のズレ)を算出し、
分布を使って p値を導出する。一方、Fisher's exact test は、統計量を算出して確率分布に近似するのではなく、直接 p値を求める方法。そのため直接確率検定とも呼ばれる。
簡単なデータを用いて計算方法を確認。 検定の記事で使った次のクロス表を用いる。
■ 観測度数
肺がん | Total | |||
(+) | (-) | |||
喫煙 | 有 | 28 | 12 | 40 |
無 | 17 | 25 | 42 | |
Total | 45 | 37 | 82 |
先ず、この観測度数が起きる確率を求める。
当該確率は、次のステップでカットオフ値として用いる。
次に、周辺度数(AB、CD、AC、BD)を固定した場合に観測度数が取り得る全パターンを列挙し、生起確率を求める。
今回は次のパターンが列挙される。このうち、( ) が "Y" になっている部分(背景ピンク色の行)が、カットオフ値以下の確率(観測パターンとそれより珍しいパターン)。
最後に、カットオフ値以下の確率を総和することでp値を導出する。
なお、上表の黄色セルが上下にあるとおり本計算は両側検定。
Rでの実行:
> mtx1 <- matrix(c(28, 12, 17, 25), nrow=2, byrow=TRUE)
> fisher.test(mtx1)
Fisher's Exact Test for Count Data
data: mtx1
p-value = 0.008564
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
1.256537 9.512684
sample estimates:
odds ratio
3.377065
SASでの実行:
data ads;
input FACTOR OUTCOME CNT;
datalines;
1 1 28
1 0 12
0 1 17
0 0 25
;
run;
proc freq data=ads;
table FACTOR * OUTCOME / chisq exact nocol nopercent;
weight CNT / zeros;
output out=Outds chisq exact;
run;
プログラムコード
■ Rのコード
fisher.test(mtx1)
■ SASのコード
proc freq data=[InputDS];
table Factor * Outcome / fisher nocol nopercent;
weight Count / zeros;
exact fisher; /* 2*2以上の表に検定を要求できる */
output out=[OutputDS] fisher; /* XP2_FISHを取得。*/
run;
■ Pythonのコード
整備中
参考
https://mathworld.wolfram.com/FishersExactTest.html