Code covered by the BSD License  

Highlights from
MyFisher

5.0

5.0 | 1 rating Rate this file 8 Downloads (last 30 days) File Size: 4.23 KB File ID: #26883

MyFisher

by Giuseppe Cardillo

 

08 Mar 2010 (Updated 09 Mar 2010)

the definitive function for the Fisher's exact and conditional test for any RxC matrix

| Watch this File

File Information
Description

Fisher's exact test 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).
Moreover, when the matrix has many Rows and Columns, the computation of all the set of possible matrices is very time expensive.
This function uses this strategy:
1) if the input is a 2x2, 2x3, 2x4 or 3x3 matrix it uses (or download) ad hoc, previously written by me, function;
2) else it uses a Monte Carlo approach.

 Finally, this function uses the Peter J. Acklam rldecode function, and so I want to acknowledge him.

MATLAB release MATLAB 7.6 (R2008a)
Tags for This File  
Everyone's Tags
Tags I've Applied
Add New Tags Please login to tag files.
Comments and Ratings (3)
15 Dec 2011 Ged Ridgway

Seems very useful! Might be worth (if not too much trouble) also returning the p-value from the approximate Chi-square test for comparison, since it seems that neither the Statistics toolbox nor fileexchange have this for general NxM tables.

27 Dec 2011 Giuseppe Cardillo

Considering that chi square is an approximation of Fisher's test, in my opinion it is completely useless to have chi square p-value. Anyway, if you want, you can simply set up it using this code:
C=sum(x,1);
R=sum(x,2);
N=sum(x(:));
[r c]=size(x);
df=(r-1)*(c-1);
Ex=R*C/N;
chi2=sum(sum(((x-Ex-0.5).^2)./Ex));
p-value=1-chi2cdf(chi2,gl)

17 Jan 2012 Giuseppe Cardillo

p-value=1-chi2cdf(chi2,df)

Please login to add a comment or rating.
Updates
09 Mar 2010

change in help section for citation

Tag Activity for this File
Tag Applied By Date/Time
statistics Giuseppe Cardillo 08 Mar 2010 12:38:41
fishers exact conditional test Giuseppe Cardillo 08 Mar 2010 12:38:41
twoway Ged Ridgway 15 Dec 2011 13:06:41
contingency table Ged Ridgway 15 Dec 2011 13:06:41
rxc Ged Ridgway 15 Dec 2011 13:06:41
mxn Ged Ridgway 15 Dec 2011 13:06:41
nxm Ged Ridgway 15 Dec 2011 13:06:41
two way Ged Ridgway 15 Dec 2011 13:07:14
r by c Ged Ridgway 15 Dec 2011 13:07:14
n by m Ged Ridgway 15 Dec 2011 13:07:14
m by n Ged Ridgway 15 Dec 2011 13:07:14

Contact us at files@mathworks.com