The distributions package provide a framework for some commonly used probability distributions.
The distribution framework provides the means to compute probability density function (PDF) probabilities and cumulative distribution function (CDF) probabilities for common probability distributions. Along with the direct computation of PDF and CDF probabilities, the framework also allows for the computation of inverse PDF and inverse CDF values.
In order to use the distribution framework, first a distribution object must
be created. It is encouraged that all distribution object creation occurs via
the org.apache.commons.math.distribution.DistributionFactory
class. DistributionFactory
is a simple factory used to create all
of the distribution objects supported by Commons-Math. The typical usage of
DistributionFactory
to create a distribution object would be:
The distributions that can be instantiated via the DistributionFactory
are detailed below:
Distribution | Factory Method | Parameters |
---|---|---|
Binomial | createBinomialDistribution | Number of trials Probability of success |
Cauchy | createCauchyDistribution | Median Scale |
Chi-Squared | createChiSquaredDistribution | Degrees of freedom |
Exponential | createExponentialDistribution | Mean |
F | createFDistribution | Numerator degrees of freedom Denominator degrees of freedom |
Gamma | createGammaDistribution | Alpha Beta |
Hypergeometric | createHypogeometricDistribution | Population size Number of successes in population Sample size |
Normal (Gaussian) | createNormalDistribution | Mean Standard Deviation |
Poisson | createPoissonDistribution | Mean |
t | createTDistribution | Degrees of freedom |
Using a distribution object, PDF and CDF probabilities are easily computed
using the cumulativeProbability
methods. For a distribution X
,
and a domain value, x
, cumulativeProbability
computes
P(X <= x)
(i.e. the lower tail probability of X
).
The inverse PDF and CDF values are just as easily computed using the
inverseCumulativeProbability
methods. For a distribution X
,
and a probability, p
, inverseCumulativeProbability
computes the domain value x
, such that:
P(X <= x) = p
, for continuous distributionsP(X <= x) <= p
, for discrete distributions
Since there are numerous distributions and Commons-Math only directly supports a handful,
it may be necessary to extend the distribution framework to satisfy individual needs. It
is recommended that the Distribution
, ContinuousDistribution
,
DiscreteDistribution
, and IntegerDistribution
interfaces serve as
base types for any extension. These serve as the basis for all the distributions directly
supported by Commons-Math and using those interfaces for implementation purposes will
insure any extension is compatible with the remainder of Commons-Math. To aid in
implementing a distribution extension, the AbstractDistribution
,
AbstractContinuousDistribution
, and AbstractIntegerDistribution
provide implementation building blocks and offer a lot of default distribution
functionality. By extending these abstract classes directly, a good portion of the
repetitive distribution implementation is already developed and should save time and effort
in developing user defined distributions.