前阵子,做了一些纵向数据的模拟,其中都牵涉到
多元正态分布的模拟。
与一元分布相比,多元分布主要加入了不同随机变量
之间的相关关系,即协方差矩阵。
这里介绍一下,以SAS/iml生成多元正态分布数据;
iml中提供直接生成多元正态分布的函数,
当然我们也可以根据多元正态的定义,来生成随机序列,
其结果是一样的。
proc iml;
call randseed(1);/*设定随机数的seed,方便下面比较*/
N=5; /*随机序列的数目,即观测数*/
mu={1 2 3}; /*多元正态分布的均值*/
cov={4 1 2,
1 9 -3,
2 -3 25};
res=randnormal(n,mu,cov);/*通过randnormal函数,生成多元正态分布序列*/
/*作为比较,下面通过多元正态分布的定义,来生成序列*/
std_n=j(N,3,0);
call randseed(1,1); /*令seed重置,即重复上述的随机数序列*/
call randgen(std_n,'normal',0,1); /*将std_n变为标准正态分布序列,
此时,列与列之间是相互独立的*/
sig=root(cov); /*对协方差矩阵进行cholesky分解,生成非奇异
上三角矩阵矩阵sig,且sig'*sig=cov */
res1=std_n*sig+repeat(mu,N,1); /*通过定义生成多元正态分布序列*/
print res res1; /*res与res1是一样的*/
quit;