你可以这样做:
library(mvtnorm)
x = 3.3
sig = matrix(c(30,x,x,x,x,1,.7,.7,x,.7,1,.7,x,.7,.7,1),nrow=4)
X = rmvnorm(100,mean=rep(0,4),sigma=sig,method="svd")
round(cor(X),2)
Y = rmvnorm(10000,mean=rep(0,4),sigma=sig,method="svd")
round(cor(Y),2)
不是协方差矩阵的结构:
> sig
[,1] [,2] [,3] [,4]
[1,] 30.0 3.3 3.3 3.3
[2,] 3.3 1.0 0.7 0.7
[3,] 3.3 0.7 1.0 0.7
[4,] 3.3 0.7 0.7 1.0
现在,如您所见,只有 100 个样本,计算出的相关性为:
> X = rmvnorm(100,mean=rep(0,4),sigma=sig,method="svd")
> round(cor(X),2)
[,1] [,2] [,3] [,4]
[1,] 1.00 0.70 0.59 0.67
[2,] 0.70 1.00 0.72 0.73
[3,] 0.59 0.72 1.00 0.74
[4,] 0.67 0.73 0.74 1.00
对于 100,000 个样本,计算出的相关性为:
> Y = rmvnorm(100000,mean=rep(0,4),sigma=sig,method="svd")
> round(cor(Y),2)
[,1] [,2] [,3] [,4]
[1,] 1.0 0.6 0.6 0.6
[2,] 0.6 1.0 0.7 0.7
[3,] 0.6 0.7 1.0 0.7
[4,] 0.6 0.7 0.7 1.0