rmn
generates random number vectors given alpha
.
The function rmn(n, size, alpha)
calls rmultinom(n, size, prob)
after converting alpha
to probability.
dmn
computes the log of multinomial probability mass function.
rmn(n, size, alpha)dmn(Y, prob)
number of random vectors to generate.
a scalar or a vector.
a vector or a matrix.
the multivariate count matrix with dimension \(n \times d\), where \(n = 1,2,\ldots\) is number of observations and \(d=2,\ldots\) is number of categories.
the probability parameter of the multinomial distribution. prob
can be either a vector of length \(d\) or a matrix with matching
size of Y
. If prob
is a vector, it will be replicated \(n\)
times to match the dimension of Y
. If the sum(s) of prob
is not 1, it will be automatically scaled to have sum 1.
The function dmn
returns the value of \(\log(P(y|p))\).
When Y
is a matrix of \(n\) rows, the function returns a
vector of length \(n\).
The function rmn
returns multinomially distributed random number vectors
A multinomial distribution models the counts of \(d\) possible outcomes. The counts of categories are negatively correlated. \(y=(y_1, \ldots, y_d)\) is a \(d\) category count vector. Given the parameter vector \(p = (p_1, \ldots, p_d)\), \(0 < p_j < 1\), \(\sum_{j=1}^d p_j = 1\), the function calculates the log of the multinomial pmf $$ P(y|p) = C_{y_1, \ldots, y_d}^{m} \prod_{j=1}^{d} p_j^{y_j}, $$ where \(m=\sum_{j=1}^d y_j\). Here, \(C_k^n\), often read as "\(n\) choose \(k\)", refers the number of \(k\) combinations from a set of \(n\) elements.
The parameter \(p\) can be one vector, like the result from the distribution fitting function; or, \(p\) can be a matrix with \(n\) rows, like the estimate from the regression function, $$p_j = \frac{exp(X \beta_j)}{1 + sum_{j'=1}^{d-1} exp(X\beta_{j'})},$$ where \(j=1,\ldots,d-1\) and \(p_d = \frac{1}{1 + \sum_{j'=1}^{d-1} exp(X\beta_{j'})}\). The \(d\)-th column of the coefficient matrix \(\beta\) is set to \(0\) to avoid the identifiability issue.
# NOT RUN {
m <- 20
prob <- c(0.1, 0.2)
dm.Y <- rdirmn(n=10, m, prob)
pdfln <- dmn(dm.Y, prob)
# }
Run the code above in your browser using DataLab