Rでガンマ関数を使ったFisher's exact testをしていたのだが,
ガンマ関数が200!とかの階乗の計算では発散して,出来なくなった.
困ったなぁと思っていたら,Rで2×2の分割表をそのまま読み込んで,
Fisher's exact testが出来ることが分かった.

> c1 <- matrix(c(v1,v3,v2,v4),ncol=2,byrow=T)
> c1(分割表は以下の構造で読み込まれるので注意)
     [,1] [,2]
[1,]   v1   v3
[2,]   v2   v4
>fisher.test(c1,alternative="greater")$p.value

fisher.testのデフォルトはalternative="two.sided"なので,よく教科書に載っている,
起こりうる,さらに小さい確率の場合を足し上げるには,greaterオプションが必要なのに注意.


しかし,なぜ手動のガンマ関数ではできなくて,fisher.testだとできないのだろうか...
ソースを見たところ,ガンマ関数を使ってないからっぽい.


ちなみに,「逆引き統計学」のFisher's exact testの項によると,

一般的に,観測値の数が少ない,もしくは分割表のセルのいずれかの期待値が4以下であるときに適用される.


こういう場合には,カイ2乗検定を使えとのこと.ただし,

2つの標本サイズが十分に大きい,すなわち,ふたつの標本の度数の合計が20より大きく,かつ分割表におけるすべてのセルの度数が4以上でなければならない.


ただ,あまりに大きい階乗の場合には,結局p値が1か0に収束しているだけだから,階乗の計算の計算ができていないだけで,分布表などから判定することは十分可能か.Rの場合にはそうやっていると信じたい...