How to calculate Fisher’s exact test with logarithm?

Chi-square test is known to compare between ratios with two-by-two table. But you couldn’t use chi-square test if total number was smaller than 20 or expected value was smaller than 5.

Even if you couldn’t use chi-square test, you could use Fisher’s exact test and calculate accurate p-value. Although the test has reliability, it requires huge amount of calculation with factorial function and software may overflow. You would easily calculate it with conversion to the logarithm first. Next, you could add or subtract the logarithm. At last, you could convert the result to the power of e, the base of natural logarithm.

  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}

対数を用いて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}