This seems like a lot of extra programming.  A much simpler SPSS program which
will generate a random sample of size n from a multivariate normal population
with covariance matrix r can be found at
http://mba.tuck.dartmouth.edu/pages/faculty/Andrew.Hayes/mvspss.htm



> The SPSS syntax below generates random variables with a specified
> correlation matrix.  I didn't write it, I believe I found it on an
> discussion list (perhaps this one?).  I have used it and it seems to work
> well.  I don't recall the details of how it all works, but I do remember
> that if you ponder it for a while it is not hard to modify to different
> purposes.
> Good Luck
> Brad
>
> input program.
> + loop #i = 1 to 10000.
> + do repeat response=r1 to r5 .
> + compute response = normal(1) .
> + end repeat.
> + end case.
> + end loop.
> + end file.
> end input program.
> correlations r1 to r5 / statistics=descriptives.
> * Factor procedure computes pr1 to pr5, which are standard MVN .
> factor variables = r1 to r5 / print = default det
> /criteria = factors(5) /save=reg (all,pr).
> * use matrix to set corr matrix.
> * x is a 10,000 by 5 matrix of independent standard normals .
> * cor is the target covariance matrix.
> * cho is the Cholesky factor of cor .
> * newx is the 10,000 by 5 data matrix which has target covariance matrix .
> matrix.
> get x / variables=pr1 to pr5.
> compute cor={1, 0.4, 0.3, 0.2, 0.1 ;
> 0.4, 1, 0.4, 0.3, 0.2 ;
> 0.3, 0.4, 1, 0.4, 0.3 ;
> 0.2, 0.3, 0.4, 1, 0.4 ;
> 0.1, 0.2, 0.3, 0.4, 1 }.
> compute deter=det(cor).
> print deter / title "determinant of corr matrix" / format=f10.7 .
> print sval(cor) / title "singular value decomposition of corr".
> print eval(cor) / title "eigenvalues of input corr".
> * In a symmetric matrix sval and eigenvalues are identical - choose 1 .
> compute condnum=mmax(sval(cor))/mmin(sval(cor)).
> print condnum / title "condition number of corr matrix" / format=f10.2 .
> compute cho=chol(cor).
> print cho / title "cholesky factor of corr matrix" .
> compute chochek=t(cho)*cho.
> print chochek / title "chol factor premult by its transpose " /format=f10.2
> .
> compute newx=x*cho.
> compute newx=newx*15 + 100.
> save newx /outfile=* /variables= nr1 to nr5.
> end matrix.
> correlations nr1 to nr5 / statistics=descriptives.


Reply via email to