対数を用いてFisherの直接確率検定を計算するには

 四分表を用いて2つの比率が等しいか異なるかを検定する方法としてはχ二乗検定が知られています.しかしχ二乗検定は総数が20未満の場合や期待値が5未満のマスがある場合には用いてはならないとされています.

 そのような場合でも,Fisherの直接確率検定を用いれば正確なp値が求まります.ただし階乗計算を要するために,オーバーフローを起こす可能性があります.実際 EXCEL のワークシート関数でも階乗の引数は 170 までです.これは EXCEL に限った問題ではなく,数値のデータ型の定義域の限界と考えられます.

 この問題法は対数を用いて乗除の計算を加減に変換することです.

  1. 階乗の乗除の対数をとる
  2. 対数により乗除が加減に変換されるため実際の計算をここで行う
  3. 得られた結果を指数に戻す
  TRUE FALSE Marginal total
POSITIVE a b a + b
NEGATIVE c d c + d
Marginal total a + c b + d N 
\displaystyle \begin{array} {rcl} P &=& \frac{(a+b)!(c+d)!(a+c)!(b+d)!}{N!a!b!c!d!}\vspace{0.2in}\\&=& \exp\left[LN \left( \frac{(a+b)!(c+d)!(a+c)!(b+d)!}{N!a!b!c!d!} \right) \right]\vspace{0.2in}\\ &=& \exp [LN((a+b)!) +LN((c+d)!) +LN((a+c)!) +LN((b+d)!)\vspace{0.2in}\\& & -LN(N!) -LN(a!) -LN(b!) -LN(c!) -LN(d!) ]\end{array}