# Multinom

##### The Multinomial Distribution

Generate multinomially distributed random number vectors and compute multinomial probabilities.

- Keywords
- distribution

##### Usage

```
rmultinom(n, size, prob)
dmultinom(x, size = NULL, prob, log = FALSE)
```

##### Arguments

- x
- vector of length \(K\) of integers in
`0:size`

. - n
- number of random vectors to draw.
- size
- integer, say \(N\), specifying the total number
of objects that are put into \(K\) boxes in the typical multinomial
experiment. For
`dmultinom`

, it defaults to`sum(x)`

. - prob
- numeric non-negative vector of length \(K\), specifying the probability for the \(K\) classes; is internally normalized to sum 1. Infinite and missing values are not allowed.
- log
- logical; if TRUE, log probabilities are computed.

##### Details

If `x`

is a \(K\)-component vector, `dmultinom(x, prob)`

is the probability
$$P(X_1=x_1,\ldots,X_K=x_k) = C \times \prod_{j=1}^K
\pi_j^{x_j}$$
where \(C\) is the ‘multinomial coefficient’
\(C = N! / (x_1! \cdots x_K!)\)
and \(N = \sum_{j=1}^K x_j\). By definition, each component \(X_j\) is binomially distributed as
`Bin(size, prob[j])`

for \(j = 1, \ldots, K\). The `rmultinom()`

algorithm draws binomials \(X_j\) from
\(Bin(n_j,P_j)\) sequentially, where
\(n_1 = N\) (N := `size`

),
\(P_1 = \pi_1\) (\(\pi\) is `prob`

scaled to sum 1),
and for \(j \ge 2\), recursively,
\(n_j = N - \sum_{k=1}^{j-1} X_k\)
and
\(P_j = \pi_j / (1 - \sum_{k=1}^{j-1} \pi_k)\).

##### Value

For `rmultinom()`

,
an integer \(K \times n\) matrix where each column is a
random vector generated according to the desired multinomial law, and
hence summing to `size`

. Whereas the *transposed* result
would seem more natural at first, the returned matrix is more
efficient because of columnwise storage.

##### Note

`dmultinom`

is currently *not vectorized* at all and has
no C interface (API); this may be amended in the future.

##### See Also

Distributions for standard distributions, including
`dbinom`

which is a special case conceptually.

##### Examples

`library(stats)`

```
rmultinom(10, size = 12, prob = c(0.1,0.2,0.8))
pr <- c(1,3,6,10) # normalization not necessary for generation
rmultinom(10, 20, prob = pr)
## all possible outcomes of Multinom(N = 3, K = 3)
X <- t(as.matrix(expand.grid(0:3, 0:3))); X <- X[, colSums(X) <= 3]
X <- rbind(X, 3:3 - colSums(X)); dimnames(X) <- list(letters[1:3], NULL)
X
round(apply(X, 2, function(x) dmultinom(x, prob = c(1,2,5))), 3)
```

*Documentation reproduced from package stats, version 3.3.3, License: Part of R 3.3.3*