生成具有固定相关性但不同标准差的相关变量

Generate correlated variables with fixed correlation but varying standard deviation

我想从多元正态分布中生成 k 个变量,其中 k 个变量具有预先指定的均值、标准差和固定相关性。

我尝试执行以下操作:

set.seed(10)
library(MASS)

k=10 #number of variables
mu <- rep(1,k) #mean of each variable
nobs <- 10000 #number of observations
sd <- rep(c(1,5),each=5) #standard deviation of each variable
cor <- 0.9 #correlation across variables

M <- matrix(cor,nrow=k,ncol=k) #variance covariance matrix
diag(M) <- sd^2 #desired standard deviations

data <- mvrnorm(nobs,mu,Sigma=M) #generate data

我的问题是我得到了期望的均值和标准差,但相关性与期望值相去甚远。

 mean(cor(data))
[1] 0.3774926

我想施加特定的标准差限制了我可以获得的可能相关性。

真的是这样吗?

如果是这样,有没有办法更接近所需的相关性?

试试这个(根据您的要求生成协方差矩阵,根据定义,cov(x,y)=cor(x,y)*sigma_x*sigma_y):

M <- matrix(cor,nrow=k,ncol=k)*outer(sd,sd) # covariance matrix
diag(M) <- sd^2 #desired standard deviations

data <- mvrnorm(nobs,mu,Sigma=M) #generate data
mean(cor(data))
#[1] 0.9102620391642199