dmt {mnormt}R Documentation

Multivariate t distribution

Description

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

Usage

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

Arguments

x for dmt, this is 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, only a vector of length d is allowed, and d cannot exceed 20
mean a numeric vector representing the location parameter of the distribution (equal to the expected value when df>1); it must be of length d, as defined above
S a 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 this case, d=1 is set)
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 is called, unless d=2; in this case biv.nt.prob is used, If biv.nt.prob is called with df=Inf, it returns the probability of a rectangle assigned by a bivariate normal distribution
log a logical value; if TRUE, the logarithm of the density is computed
... parameters passed to sadmvt, among maxpts, absrel, releps
n the number of random numbers 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)

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 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.

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; rmt returns a matrix of n rows of random vectors

Note

The attributes error and status of the probability returned by pmt and sadmvt indicate whether the function had a normal termination, achieving the required accuracy. If this is not the case, re-run the function with an higher value of maxpts

Author(s)

Fortran code of SADMVT and most auxiliary functions by Alan Genz, some additional auxiliary functions by people referred to within his program. Porting to R and additional R code by Adelchi Azzalini

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

Examples

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)


[Package mnormt version 1.3-3 Index]