Learn R Programming

mnormt (version 1.5-2)

dmt: Multivariate t distribution

Description

The probability density function, the distribution function and random number generation for the multivariate Student's t distribution

Usage

dmt(x, mean = rep(0, d), S, df=Inf, log = FALSE) 
pmt(x, mean = rep(0, d), S, df=Inf, ...) 
rmt(n = 1, mean = rep(0, d), S, df=Inf, sqrt=NULL) 
sadmvt(df, lower, upper, mean, S, maxpts = 2000*d, abseps = 1e-06, releps = 0) 
biv.nt.prob(df, lower, upper, mean, S)

Arguments

x
either a vector of length d or a matrix with d columns, where d=ncol(S), giving the coordinates of the point(s) where the density must be evaluated; for pmt, d cannot exceed
mean
either a vector of length d, representing the location parameter (equal to the mean vector when df>1), or (except for rmt) a matrix whose rows represent different location vectors; if it is a ma
S
a symmetric positive-definite matrix representing the scale matrix of the distribution, such that S*df/(df-2) is the variance-covariance matrix when df>2; a vector of length 1 is also allowed (in th
df
degrees of freedom; it must be a positive integer for pmt, sadmvt and biv.nt.prob, otherwise a positive number. If df=Inf (default value), the corresponding *mnorm function
log
a logical value(default value is FALSE); if TRUE, the logarithm of the density is computed
sqrt
if not NULL (default value is NULL), a square root of the intended scale matrix S; see Details for a detailed description
...
parameters passed to sadmvt, among maxpts, absrel, releps
n
the number of random vectors to be generated
lower
a numeric vector of lower integration limits of the density function; must be of maximal length 20; +Inf and -Inf entries are allowed
upper
a numeric vector of upper integration limits of the density function; must be of maximal length 20; +Inf and -Inf entries are allowed
maxpts
the maximum number of function evaluations (default value: 2000*d)
abseps
absolute error tolerance (default value: 1e-6)
releps
relative error tolerance (default value: 0)

Value

  • dmt returns a vector of density values (possibly log-transformed); pmt and sadmvt return a single probability with attributes giving details on the achieved accuracy, provided x of pmnorm is a vector; rmt returns a matrix of n rows of random vectors

Details

The functions sadmvt and biv.nt.prob are interfaces to Fortran-77 routines by Alan Genz, and available from his web page; they makes uses of some auxiliary functions whose authors are documented in the Fortran code. The routine sadmvt uses an adaptive integration method. The routine biv.nt.prob is specific for the bivariate case; if df<1< code=""> or df=Inf, it computes the bivariate normal distribution function using a non-iterative method described in a reference given below. If pmt is called with d>2, this is converted into a suitable call to sadmvt; if d=2, a call to biv.nt.prob is used; if d=1, then pt is used. If sqrt=NULL (default value), the working of rmt involves computation of a square root of S via the Cholesky decomposition. If a non-NULL value of sqrt is supplied, it is assumed that it represents a square root of the scale matrix, otherwise represented by S, whose value is ignored in this case. This mechanism is intended primarily for use in a sequence of calls to rmt, all sampling from a distribution with fixed scale matrix; a suitable matrix sqrt can then be computed only once beforehand, avoiding that the same operation is repeated multiple times along the sequence of calls. Another use of sqrt is to supply a different form of square root of the scale matrix, in place of the Cholesky factor.

If sqrt=NULL (default value), the working of rmnorm involves computation of a square root of S via the Cholesky decomposition. If a non-NULL value of sqrt is supplied, it is assumed that it represents a matrix, R say, such that R' R represents the required scale matrix of the distribution; in this case, the argument S is ignored. This mechanism is intended primarily for use in a sequence of calls to rmt, all sampling from a distribution with fixed scale matrix; a suitable matrix sqrt can then be computed only once beforehand, avoiding that the same operation is repeated multiple times along the sequence of calls. Another use of sqrt is to supply a different form of square root of the scale matrix, in place of the Cholesky factor. For efficiency reasons, rmt performs limited check on the supplied arguments.

References

Genz, A.: Fortran code in files mvt.f and mvtdstpack.f available at http://www.math.wsu.edu/math/faculty/genz/software/ Dunnett, C.W. and Sobel, M. (1954). A bivariate generalization of Student's t-distribution with tables for certain special cases. Biometrika 41, 153--169.

See Also

dt, dmnorm for use of argument sqrt

Examples

Run this code
x <- seq(-2,4,length=21)
y <- 2*x+10
z <- x+cos(y) 
mu <- c(1,12,2)
Sigma <- matrix(c(1,2,0,2,5,0.5,0,0.5,3), 3, 3)
df <- 4
f  <- dmt(cbind(x,y,z), mu, Sigma,df)
p1 <- pmt(c(2,11,3), mu, Sigma, df)
p2 <- pmt(c(2,11,3), mu, Sigma, df, maxpts=10000, abseps=1e-8)
x  <- rmt(10, mu, Sigma, df)
p  <- sadmvt(df, lower=c(2,11,3), upper=rep(Inf,3), mu, Sigma) # upper tail
#
p0 <- pmt(c(2,11), mu[1:2], Sigma[1:2,1:2], df=5)
p1 <- biv.nt.prob(5, lower=rep(-Inf,2), upper=c(2, 11), mu[1:2], Sigma[1:2,1:2])
p2 <- sadmvt(5, lower=rep(-Inf,2), upper=c(2, 11), mu[1:2], Sigma[1:2,1:2]) 
c(p0, p1, p2, p0-p1, p0-p2)

Run the code above in your browser using DataLab