Module Library |
generates a random sample from a multivariate
Student's distribution
The following example generates 1000 samples from a two-dimensional
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
distribution.
The example then computes the sample mean and covariance and compares
them with the expected values. Here are the code and the output:
call randseed(1); N=1000; DF = 4; Mean = {1 2}; S = {1 1, 1 5}; x = RandMVT( N, DF, Mean, S ); SampleMean = x[:,]; n = nrow(x); y = x - repeat( SampleMean, n ); SampleCov = y`*y / (n-1); Cov = (DF/(DF-2)) * S; print SampleMean Mean, SampleCov Cov; SampleMean Mean 1.0768636 2.0893911 1 2 SampleCov Cov 1.8067811 1.8413406 2 2 1.8413406 9.7900638 2 10
In the preceding example, the columns (marginals) of x do
not follow univariate distributions. If you want a sample whose
marginals are univariate
, then you need to scale each column of
the output matrix:
x = RandMVT( N, DF, Mean, S ); StdX = x / sqrt(diag(S)); /* StdX columns are univariate t */
Equivalently, you can generate samples whose marginals are univariate
by passing in a correlation matrix instead of a general covariance matrix.
For further details about sampling from the multivariate distribution, see
Kotz and Nadarajah (2004, pp. 1 - 11).
Copyright © 2009 by SAS Institute Inc., Cary, NC, USA. All rights reserved.