scipy.stats.multinomial — SciPy v1.15.3 Manual (original) (raw)

scipy.stats.multinomial = <scipy.stats._multivariate.multinomial_gen object>[source]#

A multinomial random variable.

Parameters:

nint

Number of trials

parray_like

Probability of a trial falling into each category; should sum to 1

seed{None, int, np.random.RandomState, np.random.Generator}, optional

Used for drawing random variates. If seed is None, the RandomState singleton is used. If seed is an int, a new RandomState instance is used, seeded with seed. If seed is already a RandomState or Generator instance, then that object is used. Default is None.

Notes

n should be a nonnegative integer. Each element of p should be in the interval \([0,1]\) and the elements should sum to 1. If they do not sum to 1, the last element of the p array is not used and is replaced with the remaining probability left over from the earlier elements.

The probability mass function for multinomial is

\[f(x) = \frac{n!}{x_1! \cdots x_k!} p_1^{x_1} \cdots p_k^{x_k},\]

supported on \(x=(x_1, \ldots, x_k)\) where each \(x_i\) is a nonnegative integer and their sum is \(n\).

Added in version 0.19.0.

Examples

from scipy.stats import multinomial rv = multinomial(8, [0.3, 0.2, 0.5]) rv.pmf([1, 3, 4]) 0.042000000000000072

The multinomial distribution for \(k=2\) is identical to the corresponding binomial distribution (tiny numerical differences notwithstanding):

from scipy.stats import binom multinomial.pmf([3, 4], n=7, p=[0.4, 0.6]) 0.29030399999999973 binom.pmf(3, 7, 0.4) 0.29030400000000012

The functions pmf, logpmf, entropy, and cov support broadcasting, under the convention that the vector parameters (x andp) are interpreted as if each row along the last axis is a single object. For instance:

multinomial.pmf([[3, 4], [3, 5]], n=[7, 8], p=[.3, .7]) array([0.2268945, 0.25412184])

Here, x.shape == (2, 2), n.shape == (2,), and p.shape == (2,), but following the rules mentioned above they behave as if the rows[3, 4] and [3, 5] in x and [.3, .7] in p were a single object, and as if we had x.shape = (2,), n.shape = (2,), andp.shape = (). To obtain the individual elements without broadcasting, we would do this:

multinomial.pmf([3, 4], n=7, p=[.3, .7]) 0.2268945 multinomial.pmf([3, 5], 8, p=[.3, .7]) 0.25412184

This broadcasting also works for cov, where the output objects are square matrices of size p.shape[-1]. For example:

multinomial.cov([4, 5], [[.3, .7], [.4, .6]]) array([[[ 0.84, -0.84], [-0.84, 0.84]], [[ 1.2 , -1.2 ], [-1.2 , 1.2 ]]])

In this example, n.shape == (2,) and p.shape == (2, 2), and following the rules above, these broadcast as if p.shape == (2,). Thus the result should also be of shape (2,), but since each output is a \(2 \times 2\) matrix, the result in fact has shape (2, 2, 2), where result[0] is equal to multinomial.cov(n=4, p=[.3, .7]) andresult[1] is equal to multinomial.cov(n=5, p=[.4, .6]).

Alternatively, the object may be called (as a function) to fix the n and_p_ parameters, returning a “frozen” multinomial random variable:

rv = multinomial(n=7, p=[.3, .7])

Frozen object with the same methods but holding the given

degrees of freedom and scale fixed.

Methods

pmf(x, n, p) Probability mass function.
logpmf(x, n, p) Log of the probability mass function.
rvs(n, p, size=1, random_state=None) Draw random samples from a multinomial distribution.
entropy(n, p) Compute the entropy of the multinomial distribution.
cov(n, p) Compute the covariance matrix of the multinomial distribution.