org.apache.commons.math.distribution

## Class HypergeometricDistributionImpl

- java.lang.Object
- - org.apache.commons.math.distribution.AbstractDistribution
  - - org.apache.commons.math.distribution.AbstractIntegerDistribution
    - - org.apache.commons.math.distribution.HypergeometricDistributionImpl

All Implemented Interfaces:
  Serializable, DiscreteDistribution, Distribution, HypergeometricDistribution, IntegerDistribution

    public class HypergeometricDistributionImpl
    extends AbstractIntegerDistribution
    implements HypergeometricDistribution, Serializable

The default implementation of `HypergeometricDistribution`.

Version:
  $Revision: 1054524 $ $Date: 2011-01-03 05:59:18 +0100 (lun. 03 janv. 2011) $
See Also:
  Serialized Form

### Field Summary

Fields
`private int` `numberOfSuccesses` The number of successes in the population.
`private int` `populationSize` The population size.
`private int` `sampleSize` The sample size.
`private static long` `serialVersionUID` Serializable version identifier

### Fields inherited from class org.apache.commons.math.distribution.AbstractIntegerDistribution

`randomData`

### Constructor Summary

Constructors
Constructor and Description
`HypergeometricDistributionImpl(int populationSize, int numberOfSuccesses, int sampleSize)` Construct a new hypergeometric distribution with the given the population size, the number of successes in the population, and the sample size.

### Method Summary

Methods
`double` `cumulativeProbability(int x)` For this distribution, X, this method returns P(X ≤ x).
`private int[]` `getDomain(int n, int m, int k)` Return the domain for the given hypergeometric distribution parameters.
`protected int` `getDomainLowerBound(double p)` Access the domain value lower bound, based on `p`, used to bracket a PDF root.
`protected int` `getDomainUpperBound(double p)` Access the domain value upper bound, based on `p`, used to bracket a PDF root.
`private int` `getLowerDomain(int n, int m, int k)` Return the lowest domain value for the given hypergeometric distribution parameters.
`int` `getNumberOfSuccesses()` Access the number of successes.
`protected double` `getNumericalMean()` Returns the mean.
`double` `getNumericalVariance()` Returns the variance.
`int` `getPopulationSize()` Access the population size.
`int` `getSampleSize()` Access the sample size.
`int` `getSupportLowerBound()` Returns the lower bound for the support for the distribution.
`int` `getSupportUpperBound()` Returns the upper bound for the support of the distribution.
`private int` `getUpperDomain(int m, int k)` Return the highest domain value for the given hypergeometric distribution parameters.
`private double` `innerCumulativeProbability(int x0, int x1, int dx, int n, int m, int k)` For this distribution, X, this method returns P(x0 ≤ X ≤ x1).
`double` `probability(int x)` For this distribution, X, this method returns P(X = x).
`private double` `probability(int n, int m, int k, int x)` For the distribution, X, defined by the given hypergeometric distribution parameters, this method returns P(X = x).
`void` `setNumberOfSuccesses(int num)` Deprecated. as of 2.1 (class will become immutable in 3.0)
`private void` `setNumberOfSuccessesInternal(int num)` Modify the number of successes.
`void` `setPopulationSize(int size)` Deprecated. as of 2.1 (class will become immutable in 3.0)
`private void` `setPopulationSizeInternal(int size)` Modify the population size.
`void` `setSampleSize(int size)` Deprecated. as of 2.1 (class will become immutable in 3.0)
`private void` `setSampleSizeInternal(int size)` Modify the sample size.
`double` `upperCumulativeProbability(int x)` For this distribution, X, this method returns P(X ≥ x).

### Methods inherited from class org.apache.commons.math.distribution.AbstractIntegerDistribution

`cumulativeProbability, cumulativeProbability, cumulativeProbability, inverseCumulativeProbability, isSupportLowerBoundInclusive, isSupportUpperBoundInclusive, probability, reseedRandomGenerator, sample, sample`

### Methods inherited from class java.lang.Object

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

### Methods inherited from interface org.apache.commons.math.distribution.IntegerDistribution

`cumulativeProbability, inverseCumulativeProbability`

### Methods inherited from interface org.apache.commons.math.distribution.DiscreteDistribution

`probability`

### Methods inherited from interface org.apache.commons.math.distribution.Distribution

`cumulativeProbability, cumulativeProbability`

### Field Detail

#### serialVersionUID

    private static final long serialVersionUID

Serializable version identifier

See Also:
  Constant Field Values

#### numberOfSuccesses

    private int numberOfSuccesses

The number of successes in the population.

#### populationSize

    private int populationSize

The population size.

#### sampleSize

    private int sampleSize

The sample size.

### Constructor Detail

#### HypergeometricDistributionImpl

    public HypergeometricDistributionImpl(int populationSize,
                                  int numberOfSuccesses,
                                  int sampleSize)

Construct a new hypergeometric distribution with the given the population size, the number of successes in the population, and the sample size.

Parameters:
  `populationSize` - the population size.
  `numberOfSuccesses` - number of successes in the population.
  `sampleSize` - the sample size.

### Method Detail

#### cumulativeProbability

    public double cumulativeProbability(int x)

For this distribution, X, this method returns P(X ≤ x).

Specified by:
  `cumulativeProbability` in interface `IntegerDistribution`
Specified by:
  `cumulativeProbability` in class `AbstractIntegerDistribution`
Parameters:
  `x` - the value at which the PDF is evaluated.
Returns:
  PDF for this distribution.

#### getDomain

    private int[] getDomain(int n,
                  int m,
                  int k)

Return the domain for the given hypergeometric distribution parameters.

Parameters:
  `n` - the population size.
  `m` - number of successes in the population.
  `k` - the sample size.
Returns:
  a two element array containing the lower and upper bounds of the hypergeometric distribution.

#### getDomainLowerBound

    protected int getDomainLowerBound(double p)

Access the domain value lower bound, based on `p`, used to bracket a PDF root.

Specified by:
  `getDomainLowerBound` in class `AbstractIntegerDistribution`
Parameters:
  `p` - the desired probability for the critical value
Returns:
  domain value lower bound, i.e. P(X < lower bound) < `p`

#### getDomainUpperBound

    protected int getDomainUpperBound(double p)

Access the domain value upper bound, based on `p`, used to bracket a PDF root.

Specified by:
  `getDomainUpperBound` in class `AbstractIntegerDistribution`
Parameters:
  `p` - the desired probability for the critical value
Returns:
  domain value upper bound, i.e. P(X < upper bound) > `p`

#### getLowerDomain

    private int getLowerDomain(int n,
                     int m,
                     int k)

Return the lowest domain value for the given hypergeometric distribution parameters.

Parameters:
  `n` - the population size.
  `m` - number of successes in the population.
  `k` - the sample size.
Returns:
  the lowest domain value of the hypergeometric distribution.

#### getNumberOfSuccesses

    public int getNumberOfSuccesses()

Access the number of successes.

Specified by:
  `getNumberOfSuccesses` in interface `HypergeometricDistribution`
Returns:
  the number of successes.

#### getPopulationSize

    public int getPopulationSize()

Access the population size.

Specified by:
  `getPopulationSize` in interface `HypergeometricDistribution`
Returns:
  the population size.

#### getSampleSize

    public int getSampleSize()

Access the sample size.

Specified by:
  `getSampleSize` in interface `HypergeometricDistribution`
Returns:
  the sample size.

#### getUpperDomain

    private int getUpperDomain(int m,
                     int k)

Return the highest domain value for the given hypergeometric distribution parameters.

Parameters:
  `m` - number of successes in the population.
  `k` - the sample size.
Returns:
  the highest domain value of the hypergeometric distribution.

#### probability

    public double probability(int x)

For this distribution, X, this method returns P(X = x).

Specified by:
  `probability` in interface `IntegerDistribution`
Parameters:
  `x` - the value at which the PMF is evaluated.
Returns:
  PMF for this distribution.

#### probability

    private double probability(int n,
                     int m,
                     int k,
                     int x)

For the distribution, X, defined by the given hypergeometric distribution parameters, this method returns P(X = x).

Parameters:
  `n` - the population size.
  `m` - number of successes in the population.
  `k` - the sample size.
  `x` - the value at which the PMF is evaluated.
Returns:
  PMF for the distribution.

#### setNumberOfSuccesses

    @Deprecated
    public void setNumberOfSuccesses(int num)

Deprecated. as of 2.1 (class will become immutable in 3.0)
Modify the number of successes.

Specified by:
  `setNumberOfSuccesses` in interface `HypergeometricDistribution`
Parameters:
  `num` - the new number of successes.
Throws:
  `IllegalArgumentException` - if `num` is negative.

#### setNumberOfSuccessesInternal

    private void setNumberOfSuccessesInternal(int num)

Modify the number of successes.

Parameters:
  `num` - the new number of successes.
Throws:
  `IllegalArgumentException` - if `num` is negative.

#### setPopulationSize

    @Deprecated
    public void setPopulationSize(int size)

Deprecated. as of 2.1 (class will become immutable in 3.0)
Modify the population size.

Specified by:
  `setPopulationSize` in interface `HypergeometricDistribution`
Parameters:
  `size` - the new population size.
Throws:
  `IllegalArgumentException` - if `size` is not positive.

#### setPopulationSizeInternal

    private void setPopulationSizeInternal(int size)

Modify the population size.

Parameters:
  `size` - the new population size.
Throws:
  `IllegalArgumentException` - if `size` is not positive.

#### setSampleSize

    @Deprecated
    public void setSampleSize(int size)

Deprecated. as of 2.1 (class will become immutable in 3.0)
Modify the sample size.

Specified by:
  `setSampleSize` in interface `HypergeometricDistribution`
Parameters:
  `size` - the new sample size.
Throws:
  `IllegalArgumentException` - if `size` is negative.

#### setSampleSizeInternal

    private void setSampleSizeInternal(int size)

Modify the sample size.

Parameters:
  `size` - the new sample size.
Throws:
  `IllegalArgumentException` - if `size` is negative.

#### upperCumulativeProbability

    public double upperCumulativeProbability(int x)

For this distribution, X, this method returns P(X ≥ x).

Parameters:
  `x` - the value at which the CDF is evaluated.
Returns:
  upper tail CDF for this distribution.
Since:
  1.1

#### innerCumulativeProbability

    private double innerCumulativeProbability(int x0,
                                    int x1,
                                    int dx,
                                    int n,
                                    int m,
                                    int k)

For this distribution, X, this method returns P(x0 ≤ X ≤ x1). This probability is computed by summing the point probabilities for the values x0, x0 + 1, x0 + 2, ..., x1, in the order directed by dx.

Parameters:
  `x0` - the inclusive, lower bound
  `x1` - the inclusive, upper bound
  `dx` - the direction of summation. 1 indicates summing from x0 to x1. 0 indicates summing from x1 to x0.
  `n` - the population size.
  `m` - number of successes in the population.
  `k` - the sample size.
Returns:
  P(x0 ≤ X ≤ x1).

#### getSupportLowerBound

    public int getSupportLowerBound()

Returns the lower bound for the support for the distribution. For population size `N`, number of successes `m`, and sample size `n`, the lower bound of the support is `max(0, n + m - N)`

Returns:
  lower bound of the support
Since:
  2.2

#### getSupportUpperBound

    public int getSupportUpperBound()

Returns the upper bound for the support of the distribution. For number of successes `m` and sample size `n`, the upper bound of the support is `min(m, n)`

Returns:
  upper bound of the support
Since:
  2.2

#### getNumericalMean

    protected double getNumericalMean()

Returns the mean. For population size `N`, number of successes `m`, and sample size `n`, the mean is `n * m / N`

Returns:
  the mean
Since:
  2.2

#### getNumericalVariance

    public double getNumericalVariance()

Returns the variance. For population size `N`, number of successes `m`, and sample size `n`, the variance is `[ n * m * (N - n) * (N - m) ] / [ N^2 * (N - 1) ]`

Returns:
  the variance
Since:
  2.2