Multinomial package:stats R Documentation _T_h_e _M_u_l_t_i_n_o_m_i_a_l _D_i_s_t_r_i_b_u_t_i_o_n _D_e_s_c_r_i_p_t_i_o_n: Generate multinomially distributed random number vectors and compute multinomial probabilities. _U_s_a_g_e: rmultinom(n, size, prob) dmultinom(x, size = NULL, prob, log = FALSE) _A_r_g_u_m_e_n_t_s: 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. log: logical; if TRUE, log probabilities are computed. _D_e_t_a_i_l_s: 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 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) n[k] and P[j]= p[j] / (1 - sum(p[1:(j-1)])). _V_a_l_u_e: 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. _N_o_t_e: 'dmultinom' is currently _not vectorized_ at all and has no C interface (API); this may be amended in the future. _S_e_e _A_l_s_o: 'rbinom' which is a special case conceptually. _E_x_a_m_p_l_e_s: 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)