To understand the HyperGeometric distribution, consider a set of \(r\) objects, of which \(m\) are of the type I and \(n\) are of the type II. A sample with size \(k\) (\(k<r\)) with no replacement is randomly chosen. The number of observed type I elements observed in this sample is set to be our random variable \(X\). For example, consider that in a set of 20 car parts, there are 4 that are defective (type I). If we take a sample of size 5 from those car parts, the probability of finding 2 that are defective will be given by the HyperGeometric distribution (needs double checking).

HyperGeometric(m, n, k)



The number of type I elements available.


The number of type II elements available.


The size of the sample taken.


A HyperGeometric object.


We recommend reading this documentation on, where the math will render with additional detail and much greater clarity.

In the following, let \(X\) be a HyperGeometric random variable with success probability p = \(p = m/(m+n)\).

Support: \(x \in { \{\max{(0, k-(n-m)}, \dots, \min{(k,m)}}\}\)

Mean: \(\frac{km}{n+m} = kp\)

Variance: \(\frac{km(n)(n+m-k)}{(n+m)^2 (n+m-1)} = kp(1-p)(1 - \frac{k-1}{m+n-1})\)

Probability mass function (p.m.f):

$$ P(X = x) = \frac{{m \choose x}{n \choose k-x}}{{m+n \choose k}} $$

Cumulative distribution function (c.d.f):

$$ P(X \le k) \approx \Phi\Big(\frac{x - kp}{\sqrt{kp(1-p)}}\Big) $$ Moment generating function (m.g.f):

Not useful.

See also


set.seed(27) X <- HyperGeometric(4, 5, 8) X
#> HyperGeometric distribution (m = 4, n = 5, k = 8)
random(X, 10)
#> [1] 3 4 3 4 4 4 4 4 4 4
pdf(X, 2)
#> [1] 0
log_pdf(X, 2)
#> [1] -Inf
cdf(X, 4)
#> [1] 1
quantile(X, 0.7)
#> [1] 4