# Class FisherExactTest

java.lang.Object
org.snpeff.probablility.FisherExactTest

public class FisherExactTest extends Object
Calculate Fisher's exact test (based on hypergeometric distribution)

Author:
  pcingola

## Method Summary

Modifier and Type
Method
Description
`boolean`
`canUseChiSquareApproximation(int k, int N, int D, int n)`
Can ChiSquare approximation be used? A rule of the thumb says it can be used if every expected frequency is more than 10
`double`
`chiSquareApproximation(int k, int N, int D, int n)`
Chi-Square approximation for Fisher's exact test
`double`
`chiSquareCDF(double chiSquare, int nu)`
Chi-Square Cumulative Distribution Function probability that an observed chi-square value for a correct model should be less than chiSquare nu = the degrees of freedom
`double`
`chiSquareCDFComplementary(double chiSquare, int nu)`
Chi-Square Complementary of Cumulative Distribution Function: 1 - chiSquareCDF(x, nu) probability that an observed chi-square value for a correct model should be greater than chiSquare nu = the degrees of freedom
`double`
`fisherExactTestDown(int k, int N, int D, int n)`
Fisher's exact test for 'k' or less (lower tail)
`double`
`fisherExactTestDown(int k, int N, int D, int n, double threshold)`
Fisher's exact test for less than 'k' (lower tail) It also compares to a 'threshold' value to speedup the process.
`double`
`fisherExactTestUp(int k, int N, int D, int n)`
Fisher's exact test for 'k' or more (upper tail)
`double`
`fisherExactTestUp(int k, int N, int D, int n, double threshold)`
Fisher's exact test for 'k' or more It also compares to a 'threshold' value to speedup the process.
`static FisherExactTest`
`get()`
`double`
`mean(int k, int N, int D, int n)`
Calculate the mean References: http://en.wikipedia.org/wiki/Hypergeometric_distribution
`double`
`pValueDown(int k, int N, int D, int n)`
`double`
`pValueDown(int k, int N, int D, int n, double threshold)`
Pvalue for 'k' or less Note: Includes 'k' It also compares to a 'threshold' value to speedup the process.
`double`
`pValueUp(int k, int N, int D, int n)`
`double`
`pValueUp(int k, int N, int D, int n, double threshold)`
Fisher's exact test for more than 'k' It also compares to a 'threshold' value to speedup the process.
`String`
`toR(int k, int N, int D, int n, boolean lowerTail)`
Convert values to Fisher's 'R' command
`double`
`variance(int k, int N, int D, int n)`
Calculate the variance References: http://en.wikipedia.org/wiki/Hypergeometric_distribution

### Methods inherited from class Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Method Details

### get

public static FisherExactTest get()

### canUseChiSquareApproximation

public boolean canUseChiSquareApproximation(int k, int N, int D, int n)
Can ChiSquare approximation be used? A rule of the thumb says it can be used if every expected frequency is more than 10

Parameters:
  `k` - : white marbles drawn
  `N` - : Total marbles
  `D` - : White marbles => N-D : Black marbles
  `n` - : marbles drawn => N-n : not drawn
Returns:
  Chi-Square approximation

### chiSquareApproximation

public double chiSquareApproximation(int k, int N, int D, int n)
Chi-Square approximation for Fisher's exact test

Parameters:
  `k` - : white marbles drawn
  `N` - : Total marbles
  `D` - : White marbles => N-D : Black marbles
  `n` - : marbles drawn => N-n : not drawn
Returns:
  Chi-Square approximation

### chiSquareCDF

public double chiSquareCDF(double chiSquare, int nu)
Chi-Square Cumulative Distribution Function probability that an observed chi-square value for a correct model should be less than chiSquare nu = the degrees of freedom

Parameters:
  `chiSquare` -
  `nu` -
Returns:

### chiSquareCDFComplementary

public double chiSquareCDFComplementary(double chiSquare, int nu)
Chi-Square Complementary of Cumulative Distribution Function: 1 - chiSquareCDF(x, nu) probability that an observed chi-square value for a correct model should be greater than chiSquare nu = the degrees of freedom

Parameters:
  `chiSquare` -
  `nu` -
Returns:

### fisherExactTestDown

public double fisherExactTestDown(int k, int N, int D, int n)
Fisher's exact test for 'k' or less (lower tail)

Parameters:
  `k` - : white marbles drawn
  `N` - : Total marbles
  `D` - : White marbles => N-D : Black marbles
  `n` - : marbles drawn => N-n : not drawn
Returns:

### fisherExactTestDown

public double fisherExactTestDown(int k, int N, int D, int n, double threshold)
Fisher's exact test for less than 'k' (lower tail) It also compares to a 'threshold' value to speedup the process. Whenever cumulative probability is over the threshold, 1.0 is returned

Parameters:
  `k` - : white marbles drawn
  `N` - : Total marbles
  `D` - : White marbles => N-D : Black marbles
  `n` - : marbles drawn => N-n : not drawn
  `theshold` - Threshold value
Returns:
  Cumulative probability or 1.0 (if cumulative is over the threshold)

### fisherExactTestUp

public double fisherExactTestUp(int k, int N, int D, int n)
Fisher's exact test for 'k' or more (upper tail)

Parameters:
  `k` - : white marbles drawn
  `N` - : Total marbles
  `D` - : White marbles => N-D : Black marbles
  `n` - : marbles drawn => N-n : not drawn
Returns:

### fisherExactTestUp

public double fisherExactTestUp(int k, int N, int D, int n, double threshold)
Fisher's exact test for 'k' or more It also compares to a 'threshold' value to speedup the process. Whenever cumulative probability is over the threshold, 1.0 is returned

Parameters:
  `k` - : white marbles drawn
  `N` - : Total marbles
  `D` - : White marbles => N-D : Black marbles
  `n` - : marbles drawn => N-n : not drawn
  `theshold` - Threshold value
Returns:
  Cumulative probability or 1.0 (if cumulative is over the threshold)

### mean

public double mean(int k, int N, int D, int n)
Calculate the mean References: http://en.wikipedia.org/wiki/Hypergeometric_distribution

### pValueDown

public double pValueDown(int k, int N, int D, int n)

### pValueDown

public double pValueDown(int k, int N, int D, int n, double threshold)
Pvalue for 'k' or less Note: Includes 'k' It also compares to a 'threshold' value to speedup the process. Whenever cumulative probability is over the threshold, 1.0 is returned This is useful when we are interested on very small p-values

Parameters:
  `k` - : white marbles drawn
  `N` - : Total marbles
  `D` - : White marbles => N-D : Black marbles
  `n` - : marbles drawn => N-n : not drawn
  `theshold` - Threshold value
Returns:
  Cumulative probability or 1.0 (if cumulative is over the threshold)

### pValueUp

public double pValueUp(int k, int N, int D, int n)

### pValueUp

public double pValueUp(int k, int N, int D, int n, double threshold)
Fisher's exact test for more than 'k' It also compares to a 'threshold' value to speedup the process. Whenever cumulative probability is over the threshold, 1.0 is returned This is useful when we are interested on very small p-values

Parameters:
  `k` - : white marbles drawn
  `N` - : Total marbles
  `D` - : White marbles => N-D : Black marbles
  `n` - : marbles drawn => N-n : not drawn
  `theshold` - Threshold value
Returns:
  Cumulative probability or 1.0 (if cumulative is over the threshold)

### toR

public String toR(int k, int N, int D, int n, boolean lowerTail)
Convert values to Fisher's 'R' command

Returns:

### variance

public double variance(int k, int N, int D, int n)
Calculate the variance References: http://en.wikipedia.org/wiki/Hypergeometric_distribution