The RANDMVT function is part of the IMLMLIB library . The RANDMVT function returns an 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:
is the number of desired observations sampled from the multivariate Student’s t distribution.
is a scalar value that represents the degrees of freedom for the t distribution.
is a vector of means.
is a symmetric positive definite variance-covariance matrix.
If X follows a multivariate t distribution with degrees of freedom, mean vector , and variance-covariance matrix , then
the probability density function for x is
if , the probability density function reduces to a univariate Student’s t distribution.
the expected value of is .
the covariance of and is when .
The following example generates 1,000 samples from a two-dimensional t distribution with 7 degrees of freedom, mean vector , 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}; Cov = DF/(DF-2) * S; /* population covariance */ x = RandMVT( N, DF, Mean, S ); SampleMean = mean(x); SampleCov = cov(x); print SampleMean Mean, SampleCov Cov;
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).