2016-10-14 4 views
0

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 

特定の標準偏差を課すと、私が得ることのできる相関関係が制限されると思います。

本当にそうですか?

希望の相関関係に近づく方法があれば、

答えて

3

は、定義により、あなたの要件ごとに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 
+1

'cor_d < - COR(データ); DIAG(cor_d)< - NA;平均(cor_d、NA。 rm = T) 'は対角要素= 1を取り除く – bouncyball