RANDMVT Function

RANDMVT (N, DF, Mean, Cov ) ;

The RANDMVT function is part of the IMLMLIB library. The RANDMVT function returns an $N \times p$ matrix that contains $N$ random draws from the Student’s $t$ distribution with DF degrees of freedom, mean vector Mean, and covariance matrix Cov.

The inputs are as follows:

N

is the number of desired observations sampled from the multivariate Student’s $t$ distribution.

DF

is a scalar value that represents the degrees of freedom for the $t$ distribution.

Mean

is a $1 \times p$ vector of means.

Cov

is a $p \times p$ symmetric positive definite variance-covariance matrix.

If $X$ follows a multivariate $t$ distribution with $\nu $ degrees of freedom, mean vector $\mu $, and variance-covariance matrix $\Sigma $, then

  • the probability density function for $x$ is

    \[  f(x; \nu , \mu , \Sigma ) = \frac{\Gamma ((\nu +p)/2)}{|\Sigma |^{1/2} (\pi \nu )^{p/2}\Gamma (\nu /2)} \left( 1+ \frac{(x-\mu ) \Sigma ^{-1} (x-\mu )^ T}{\nu } \right)^{-(\nu +p)/2}  \]
  • if $p=1$, the probability density function reduces to a univariate Student’s $t$ distribution.

  • the expected value of $X_ i$ is $\mu _ i$.

  • the covariance of $X_ i$ and $X_ j$ is $\frac{\nu }{\nu -2}\Sigma _{ij}$ when $\nu >2$.

The following example generates 1,000 samples from a two-dimensional $t$ distribution with 7 degrees of freedom, mean vector $(1 \,  2)$, and covariance matrix S. Each row of the returned matrix x is a row vector sampled from the $t$ distribution. The example computes the sample mean and covariance and compares them with the expected values.

call randseed(1);
N = 1000;
DF = 4;
Mean = {1 2};
S = {1 1, 1 5};
x = RandMVT( N, DF, Mean, S );
SampleMean = x[:,];
y = x - SampleMean;
SampleCov = y`*y / (n-1);
Cov = (DF/(DF-2)) * S;
print SampleMean Mean, SampleCov Cov;

Figure 24.301: Estimated Mean and Covariance Matrix

SampleMean   Mean  
1.0109905 1.9372765 1 2

SampleCov   Cov  
1.9556572 2.2581732 2 2
2.2581732 10.437216 2 10


In the preceding example, the columns (marginals) of x do not follow univariate $t$ distributions. If you want a sample whose marginals are univariate $t$, then you need to scale each column of the output matrix:

x = RandMVT( N, DF, Mean, S );
StdX = x / sqrt(T(vecdiag(S))); /* StdX columns are univariate t */

Equivalently, you can generate samples whose marginals are univariate $t$ by passing in a correlation matrix instead of a general covariance matrix.

For further details about sampling from the multivariate $t$ distribution, see Kotz and Nadarajah (2004).