File Exchange

image thumbnail


version by Giuseppe Cardillo
A very compact routine to compute Fisher's exact test on a 2x4 matrix


Updated 06 Apr 2018

View Version History

GitHub view license on GitHub

Fisher's exact test of 2x4 contingency tables permits calculation of precise probabilities in situation where, as a consequence of small cell frequencies, the much more rapid normal approximation and chi-square calculations are liable to be inaccurate. The Fisher's exact test involves the computations of several factorials to obtain the probability of the observed and each of the more extreme tables. Factorials growth quickly, so it's necessary use logarithms of factorials. This computations is very easy in Matlab because x!=gamma(x+1) and log(x!)=gammaln(x+1). This function is now fully vectorized to speed up the computation. Actually, the function also computes the mid-P correction to make the test less conservative.

Cite As

Giuseppe Cardillo (2020). MyFisher24 (, GitHub. Retrieved .

Comments and Ratings (7)

moyoko tomiyasu

Dr. Cardillo.,
Thank you for your reply!
I am sorry, I didn't notice your reply until today.
I downloaded "MyFisher24" this month (Oct. 2019) from here.
But it is no longer the problem because I could get the answer.
I appreciate you to make this program.

Giuseppe Cardillo

yes but you have an old version. The version in GitHub has this bug correction since many time...

moyoko tomiyasu

I found the comment exchange on similar problem in MyFisher23 webpage.
So I added "[I ~]=find(Tables<0); Tables(I,:)=[];" before line 127, and got the following result:
2x4 matrix Fisher's exact test
Tables two_tails_p_value Mid_p_correction
______ _________________ ________________

6283 0.064522 0.06438

Is it the correct answer ?

moyoko tomiyasu

I got error message for my data.
>> myfisher24([3 18 16 11;9 25 14 4])

Error using gammaln
Input must be nonnegative.

Error in myfisher24 (line 127)
zf=gammaln(Tables+1); %compute log(x!)

Could you tell me the way to solve it?


Giuseppe thank you for your quick response.
Your routine takes all my data now.

Giuseppe Cardillo

Jon was right. I have fixed the bug and uploaded the new version


I get error messages for some data.
For instance:
y =
27 13 9 15
12 10 3 16
>> myfisher24(y)
??? Attempted to access idxBstart(15); index out of bounds because
Error in ==> myfisher24 at 116

I hope this can be fixed?

MATLAB Release Compatibility
Created with R2014b
Compatible with any release
Platform Compatibility
Windows macOS Linux

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!