Last chance! 50% off unlimited learning
Sale ends in
rmultinom(n, size, prob)
dmultinom(x, size = NULL, prob, log = FALSE)
0:size
.dmultinom
, it defaults to sum(x)
.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.
x
is a $K$-component vector, dmultinom(x, prob)
is the probability
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] = p[1]$ ($p$ is prob
scaled to sum 1),
and for $j \ge 2$, recursively,
$n[j] = N - sum(k=1, \dots, j-1) X[k]$
and
$P[j] = p[j] / (1 - sum(p[1:(j-1)]))$.
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)
Run the code above in your browser using DataLab