in reply to Fisher's Exact Test


Have you checked the results of your code for Fisher's Exact Test? I don't think it produces correct results.

Here's a utility that produces results identical to those I calculate:

This expression at the beginning of your code seems odd:

$test = $a*($a+$b+$c+$d ) - ($a+$b)*($a+$c);
It simplifies to: $test = $a*$d - $b*$c;

I don't follow why you have this:

return 1 if $test < 0 and $ts;
For example, if a = 1, b = 50, c = 10 and d = 5, P(one-sided) = P(two-sided) = 1.4386e-07, not 1.

Nevertheless, thanks for the tip about calculating factorials only once. Let me know if I've misunderstood something.

Replies are listed 'Best First'.
Re^2: Fisher's Exact Test
by Anonymous Monk on Aug 20, 2012 at 23:34 UTC
    I think it is correct. It is justified because $ts implies one-side test, so the p-value is indeed 1. Hao
      I think it is wrong. $ts means two-side, not one-side.