| Multinom {stats} | R Documentation |
Generate multinomially distributed random number vectors and compute multinomial probabilities.
rmultinom(n, size, prob) dmultinom(x, size = NULL, prob, log = FALSE)
x |
vector of length K of integers in |
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 |
prob |
numeric non-negative vector of length K, specifying the probability for the K classes; is internally normalized to sum 1. |
log |
logical; if TRUE, log probabilities are computed. |
If x is a $K$-component vector, dmultinom(x, prob) is
the probability
P(X[1]=x[1], … , X[K]=x[k]) = C * prod(j=1 , …, K) p[j]^x[j]
where C is the ‘multinomial coefficient’
C = N! / (x[1]! * … * 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, …, K.
The rmultinom() algorithm draws binomials X[j] from
Bin(n[j], P[j]) sequentially, where
n[1] = N (N := size),
P[1] = p[1] (p is prob scaled to sum 1),
and for j ≥ 2, recursively,
n[j] = N - sum(k=1, …, j-1) X[k]
and
P[j] = p[j] / (1 - sum(p[1:(j-1)])).
For rmultinom(),
an integer K x 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.
dmultinom is currently not vectorized at all and has
no C interface (API); this may be amended in the future.
Distributions for standard distributions, including
dbinom which is a special case conceptually.
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)