MNIW: Generate samples from the Matrix-Normal Inverse-Wishart...

MNIWR Documentation

Generate samples from the Matrix-Normal Inverse-Wishart distribution.

Description

Generate samples from the Matrix-Normal Inverse-Wishart distribution.

Usage

rMNIW(n, Lambda, Sigma, Psi, nu, prec = FALSE)

rmniw(n, Lambda, Omega, Psi, nu)

Arguments

n

number of samples.

Lambda

A mean matrix of size p x q or an array of size p x q x n. Defaults to matrix of zeros when missing.

Sigma

A row-wise variance or precision matrix of size p x p, or an array of size p x p x n. Defaults to the identity matrix when missing.

Psi

A scale matrix of size q x q, or an array of size q x q x n. Defaults to identity matrix when missing.

nu

Scalar degrees-of-freedom parameter.

prec

Logical; whether or not Sigma is on the variance or precision scale.

Omega

A between-row precision matrix of size p x p, or an array of size p x p x n. Defaults to the identity matrix when missing.

Details

The Matrix-Normal Inverse-Wishart (MNIW) distribution (X, V) ~ MNIW(Λ, Σ, Ψ, ν) on random matrices X_(p x q) and symmetric positive-definite V_(q x q) is defined as

V ~ Inverse-Wishart(Ψ, ν) X | V ~ Matrix-Normal(Λ, Σ, V),

where the Matrix-Normal distribution is defined as the multivariate normal

vec(X) ~ N(vec(Λ), V %x% Σ),

where vec(X) is a vector stacking the columns of X, and V %x% Σ denotes the Kronecker product.

rmniw is a convenience wrapper to rMNIW(Sigma = Omega, prec = TRUE), for the common situation in Bayesian inference with conjugate priors when between-row variances are naturally parametrized on the precision scale.

Value

A list with elements:

X

Array of size p x q x n random samples from the Matrix-Normal component (see Details).

V

Array of size q x q x n of random samples from the Inverse-Wishart component.

Examples

# problem dimensions
p <- 2
q <- 3
n <- 10 # number of samples
# parameter specification
Lambda <- matrix(rnorm(p*q),p,q) # single argument
Sigma <- rwish(n, Psi = diag(p), nu = p + rexp(1)) # vectorized argument
Psi <- rwish(n = 1, Psi = diag(q), nu = q + rexp(1)) # single argument
nu <- q + rexp(1)
# simulate n draws
rMNIW(n, Lambda = Lambda, Sigma = Sigma, Psi = Psi, nu = nu)

mniw documentation built on Aug. 22, 2022, 5:05 p.m.