Learn R Programming

LaplacesDemon (version 16.1.1)

dist.Multivariate.t.Precision.Cholesky: Multivariate t Distribution: Precision-Cholesky Parameterization

Description

These functions provide the density and random number generation for the multivariate t distribution, otherwise called the multivariate Student distribution. These functions use the precision and Cholesky parameterization.

Usage

dmvtpc(x, mu, U, nu=Inf, log=FALSE)
rmvtpc(n=1, mu, U, nu=Inf)

Arguments

x

This is either a vector of length \(k\) or a matrix with a number of columns, \(k\), equal to the number of columns in precision matrix \(\Omega\).

n

This is the number of random draws.

mu

This is a numeric vector representing the location parameter, \(\mu\) (the mean vector), of the multivariate distribution (equal to the expected value when df > 1, otherwise represented as \(\nu > 1\)). It must be of length \(k\), as defined above.

U

This is a \(k \times k\) upper-triangular of the precision matrix that is Cholesky fator \(\textbf{U}\) of precision matrix \(\Omega\).

nu

This is the degrees of freedom \(\nu\), which must be positive.

log

Logical. If log=TRUE, then the logarithm of the density is returned.

Value

dmvtpc gives the density and rmvtpc generates random deviates.

Details

  • Application: Continuous Multivariate

  • Density: $$p(\theta) = \frac{\Gamma((\nu+k)/2)}{\Gamma(\nu/2)\nu^{k/2}\pi^{k/2}} |\Omega|^{1/2} (1 + \frac{1}{\nu} (\theta-\mu)^T \Omega (\theta-\mu))^{-(\nu+k)/2}$$

  • Inventor: Unknown (to me, anyway)

  • Notation 1: \(\theta \sim \mathrm{t}_k(\mu, \Omega^{-1}, \nu)\)

  • Notation 2: \(p(\theta) = \mathrm{t}_k(\theta | \mu, \Omega^{-1}, \nu)\)

  • Parameter 1: location vector \(\mu\)

  • Parameter 2: positive-definite \(k \times k\) precision matrix \(\Omega\)

  • Parameter 3: degrees of freedom \(\nu > 0\)

  • Mean: \(E(\theta) = \mu\), for \(\nu > 1\), otherwise undefined

  • Variance: \(var(\theta) = \frac{\nu}{\nu - 2} \Omega^{-1}\), for \(\nu > 2\)

  • Mode: \(mode(\theta) = \mu\)

The multivariate t distribution, also called the multivariate Student or multivariate Student t distribution, is a multidimensional extension of the one-dimensional or univariate Student t distribution. A random vector is considered to be multivariate t-distributed if every linear combination of its components has a univariate Student t-distribution.

It is usually parameterized with mean and a covariance matrix, or in Bayesian inference, with mean and a precision matrix, where the precision matrix is the matrix inverse of the covariance matrix. These functions provide the precision parameterization for convenience and familiarity. It is easier to calculate a multivariate t density with the precision parameterization, because a matrix inversion can be avoided. The precision matrix is replaced with an upper-triangular \(k \times k\) matrix that is Cholesky factor \(\textbf{U}\), as per the chol function for Cholesky decomposition.

This distribution has a mean parameter vector \(\mu\) of length \(k\), and a \(k \times k\) precision matrix \(\Omega\), which must be positive-definite. When degrees of freedom \(\nu=1\), this is the multivariate Cauchy distribution.

In practice, \(\textbf{U}\) is fully unconstrained for proposals when its diagonal is log-transformed. The diagonal is exponentiated after a proposal and before other calculations. Overall, the Cholesky parameterization is faster than the traditional parameterization. Compared with dmvtp, dmvtpc must additionally matrix-multiply the Cholesky back to the precision matrix, but it does not have to check for or correct the precision matrix to positive-definiteness, which overall is slower. Compared with rmvtp, rmvtpc is faster because the Cholesky decomposition has already been performed.

See Also

chol, dwishartc, dmvc, dmvcp, dmvtc, dst, dstp, and dt.

Examples

Run this code
# NOT RUN {
library(LaplacesDemon)
x <- seq(-2,4,length=21)
y <- 2*x+10
z <- x+cos(y) 
mu <- c(1,12,2)
Omega <- matrix(c(1,2,0,2,5,0.5,0,0.5,3), 3, 3)
U <- chol(Omega)
nu <- 4
f <- dmvtpc(cbind(x,y,z), mu, U, nu)
X <- rmvtpc(1000, c(0,1,2), U, 5)
joint.density.plot(X[,1], X[,2], color=TRUE)
# }

Run the code above in your browser using DataLab