Multivariate Discrete Distributions

The multivariate discrete distributions are over multiple integer values, which are expressed in Stan as arrays.

Multinomial distribution

Probability mass function

If KN, NN, and θK-simplex, then for yNK such that k=1Kyk=N, Multinomial(y|θ)=(Ny1,,yK)k=1Kθkyk, where the multinomial coefficient is defined by (Ny1,,yk)=N!k=1Kyk!.

Distribution statement

y ~ multinomial(theta)

Increment target log probability density with multinomial_lupmf(y | theta).

Available since 2.0

Stan functions

real multinomial_lpmf(array[] int y | vector theta)
The log multinomial probability mass function with outcome array y of size K given the K-simplex distribution parameter theta and (implicit) total count N = sum(y)

Available since 2.12

real multinomial_lupmf(array[] int y | vector theta)
The log multinomial probability mass function with outcome array y of size K given the K-simplex distribution parameter theta and (implicit) total count N = sum(y) dropping constant additive terms

Available since 2.25

array[] int multinomial_rng(vector theta, int N)
Generate a multinomial variate with simplex distribution parameter theta and total count N; may only be used in transformed data and generated quantities blocks

Available since 2.8

Multinomial distribution, logit parameterization

Stan also provides a version of the multinomial probability mass function distribution with the K-simplex for the event count probabilities per category given on the unconstrained logistic scale.

Probability mass function

If KN, NN, and softmax(θ)K-simplex, then for yNK such that k=1Kyk=N, MultinomialLogit(yγ)=Multinomial(ysoftmax(γ))=(Ny1,,yK)k=1K[softmax(γk)]yk, where the multinomial coefficient is defined by (Ny1,,yk)=N!k=1Kyk!.

Distribution statement

y ~ multinomial_logit(gamma)

Increment target log probability density with multinomial_logit_lupmf(y | gamma).

Available since 2.24

Stan functions

real multinomial_logit_lpmf(array[] int y | vector gamma)
The log multinomial probability mass function with outcome array y of size K given the log K-simplex distribution parameter γ and (implicit) total count N = sum(y)

Available since 2.24

real multinomial_logit_lupmf(array[] int y | vector gamma)
The log multinomial probability mass function with outcome array y of size K given the log K-simplex distribution parameter γ and (implicit) total count N = sum(y) dropping constant additive terms

Available since 2.25

array[] int multinomial_logit_rng(vector gamma, int N)
Generate a variate from a multinomial distribution with probabilities softmax(gamma) and total count N; may only be used in transformed data and generated quantities blocks.

Available since 2.24

Dirichlet-multinomial distribution

Stan also provides the Dirichlet-multinomial distribution, which generalizes the Beta-binomial distribution to more than two categories. As such, it is an overdispersed version of the multinomial distribution.

Probability mass function

If KN, NN, and αR+K, then for yNK such that k=1Kyk=N, the PMF of the Dirichlet-multinomial distribution is defined as DirMult(y|θ)=Γ(α0)Γ(N+1)Γ(N+α0)k=1KΓ(yk+αk)Γ(αk)Γ(yk+1), where α0 is defined as α0=k=1Kαk.

Distribution statement

y ~ dirichlet_multinomial(alpha)

Increment target log probability density with dirichlet_multinomial_lupmf(y | alpha).

Available since 2.34

Stan functions

real dirichlet_multinomial_lpmf(array[] int y | vector alpha)
The log multinomial probability mass function with outcome array y with K elements given the positive K-vector distribution parameter alpha and (implicit) total count N = sum(y).

Available since 2.34

real dirichlet_multinomial_lupmf(array[] int y | vector alpha)
The log multinomial probability mass function with outcome array y with K elements, given the positive K-vector distribution parameter alpha and (implicit) total count N = sum(y) dropping constant additive terms.

Available since 2.34

array[] int dirichlet_multinomial_rng(vector alpha, int N)
Generate a multinomial variate with positive vector distribution parameter alpha and total count N; may only be used in transformed data and generated quantities blocks. This is equivalent to multinomial_rng(dirichlet_rng(alpha), N).

Available since 2.34
Back to top