public class HypergeometricDistribution extends AbstractIntegerDistribution
Modifier and Type | Field and Description |
---|---|
private int |
numberOfSuccesses
The number of successes in the population.
|
private double |
numericalVariance
Cached numerical variance
|
private boolean |
numericalVarianceIsCalculated
Whether or not the numerical variance has been calculated
|
private int |
populationSize
The population size.
|
private int |
sampleSize
The sample size.
|
private static long |
serialVersionUID
Serializable version identifier.
|
random, randomData
Constructor and Description |
---|
HypergeometricDistribution(int populationSize,
int numberOfSuccesses,
int sampleSize)
Construct a new hypergeometric distribution with the specified population
size, number of successes in the population, and sample size.
|
HypergeometricDistribution(RandomGenerator rng,
int populationSize,
int numberOfSuccesses,
int sampleSize)
Creates a new hypergeometric distribution.
|
Modifier and Type | Method and Description |
---|---|
protected double |
calculateNumericalVariance()
Used by
getNumericalVariance() . |
double |
cumulativeProbability(int x)
For a random variable
X whose values are distributed according
to this distribution, this method returns P(X <= x) . |
private int[] |
getDomain(int n,
int m,
int k)
Return the domain for the given hypergeometric distribution parameters.
|
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.
|
double |
getNumericalMean()
Use this method to get the numerical value of the mean of this
distribution.
|
double |
getNumericalVariance()
Use this method to get the numerical value of the variance of this
distribution.
|
int |
getPopulationSize()
Access the population size.
|
int |
getSampleSize()
Access the sample size.
|
int |
getSupportLowerBound()
Access the lower bound of the support.
|
int |
getSupportUpperBound()
Access the upper bound of the support.
|
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)
For this distribution,
X , this method returns
P(x0 <= X <= x1) . |
boolean |
isSupportConnected()
Use this method to get information about whether the support is
connected, i.e.
|
double |
logProbability(int x)
For a random variable
X whose values are distributed according to
this distribution, this method returns log(P(X = x)) , where
log is the natural logarithm. |
double |
probability(int x)
For a random variable
X whose values are distributed according
to this distribution, this method returns P(X = x) . |
double |
upperCumulativeProbability(int x)
For this distribution,
X , this method returns P(X >= x) . |
cumulativeProbability, inverseCumulativeProbability, reseedRandomGenerator, sample, sample, solveInverseCumulativeProbability
private static final long serialVersionUID
private final int numberOfSuccesses
private final int populationSize
private final int sampleSize
private double numericalVariance
private boolean numericalVarianceIsCalculated
public HypergeometricDistribution(int populationSize, int numberOfSuccesses, int sampleSize) throws NotPositiveException, NotStrictlyPositiveException, NumberIsTooLargeException
populationSize
- Population size.numberOfSuccesses
- Number of successes in the population.sampleSize
- Sample size.NotPositiveException
- if numberOfSuccesses < 0
.NotStrictlyPositiveException
- if populationSize <= 0
.NumberIsTooLargeException
- if numberOfSuccesses > populationSize
,
or sampleSize > populationSize
.public HypergeometricDistribution(RandomGenerator rng, int populationSize, int numberOfSuccesses, int sampleSize) throws NotPositiveException, NotStrictlyPositiveException, NumberIsTooLargeException
rng
- Random number generator.populationSize
- Population size.numberOfSuccesses
- Number of successes in the population.sampleSize
- Sample size.NotPositiveException
- if numberOfSuccesses < 0
.NotStrictlyPositiveException
- if populationSize <= 0
.NumberIsTooLargeException
- if numberOfSuccesses > populationSize
,
or sampleSize > populationSize
.public double cumulativeProbability(int x)
X
whose values are distributed according
to this distribution, this method returns P(X <= x)
. In other
words, this method represents the (cumulative) distribution function
(CDF) for this distribution.x
- the point at which the CDF is evaluatedx
private int[] getDomain(int n, int m, int k)
n
- Population size.m
- Number of successes in the population.k
- Sample size.private int getLowerDomain(int n, int m, int k)
n
- Population size.m
- Number of successes in the population.k
- Sample size.public int getNumberOfSuccesses()
public int getPopulationSize()
public int getSampleSize()
private int getUpperDomain(int m, int k)
m
- Number of successes in the population.k
- Sample size.public double probability(int x)
X
whose values are distributed according
to this distribution, this method returns P(X = x)
. In other
words, this method represents the probability mass function (PMF)
for the distribution.x
- the point at which the PMF is evaluatedx
public double logProbability(int x)
X
whose values are distributed according to
this distribution, this method returns log(P(X = x))
, where
log
is the natural logarithm. In other words, this method
represents the logarithm of the probability mass function (PMF) for the
distribution. Note that due to the floating point precision and
under/overflow issues, this method will for some distributions be more
precise and faster than computing the logarithm of
IntegerDistribution.probability(int)
.
The default implementation simply computes the logarithm of probability(x)
.
logProbability
in class AbstractIntegerDistribution
x
- the point at which the PMF is evaluatedx
public double upperCumulativeProbability(int x)
X
, this method returns P(X >= x)
.x
- Value at which the CDF is evaluated.private double innerCumulativeProbability(int x0, int x1, int dx)
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
.x0
- Inclusive lower bound.x1
- Inclusive upper bound.dx
- Direction of summation (1 indicates summing from x0 to x1, and
0 indicates summing from x1 to x0).P(x0 <= X <= x1)
.public double getNumericalMean()
N
, number of successes m
, and sample
size n
, the mean is n * m / N
.Double.NaN
if it is not definedpublic double getNumericalVariance()
N
, number of successes m
, and sample
size n
, the variance is
[n * m * (N - n) * (N - m)] / [N^2 * (N - 1)]
.Double.POSITIVE_INFINITY
or
Double.NaN
if it is not defined)protected double calculateNumericalVariance()
getNumericalVariance()
.public int getSupportLowerBound()
inverseCumulativeProbability(0)
. In other words, this
method must return
inf {x in Z | P(X <= x) > 0}
.
N
, number of successes m
, and sample
size n
, the lower bound of the support is
max(0, n + m - N)
.public int getSupportUpperBound()
inverseCumulativeProbability(1)
. In other words, this
method must return
inf {x in R | P(X <= x) = 1}
.
m
and sample size n
, the upper
bound of the support is min(m, n)
.public boolean isSupportConnected()
true
Copyright (c) 2003-2014 Apache Software Foundation