2016-05-11 6 views
1

ランダムな変数の個数を生成したいと思います。ランダムな変数のそれぞれには固定の相関係数pがあります。特定の標準偏差を持つ相関ランダム変数を生成する

変数がmean = 1std = 5

N=10 #number of variables 
mu <- rep(1,N) #means 
p=0.7 #correlation 
Sigma <- matrix(p,ncol=N,nrow=N) #variance covariance matrix 
diag(Sigma) <- 5 #standard deviations 


library(MASS) 
set.seed(12) 
data <- mvrnorm(10000,mu,Sigma) 

は、しかし、結果の標準偏差は5

apply(data,2,sd) 

[1] 2.264853 2.219811 2.224703 2.245595 2.216712 2.236484 2.240794 2.220532 2.227445 
[10] 2.247943 

ではありませんているはずは一方で、私は標準偏差を変える可能性がある中で体系的な方法はあります他のパラメータを固定したままにしますか?

+1

私はシグマが分散共分散行列であることを確信しています。したがって、標準偏差5を求めたい場合は、それを 'diag(Sigma)< - 25'にしてください。 '2.264853^2'は5.129559で、これは5に非常に近いことに注意してください。 – lmo

答えて

1

行列Sigmaを作成しましたが、対角要素は5ですが、mvnormは共分散行列(標準偏差行列ではない)をSigmaとしたいとします。したがって、対角要素を25にする必要があります.p = 0.7の値を正しく使用していないので、これらは相関であり、共分散はありません。相関を共分散に変える必要があります。

参照:

http://blogs.sas.com/content/iml/2010/12/10/converting-between-correlation-and-covariance-matrices.html

https://math.stackexchange.com/questions/446093/generate-correlated-normal-random-variables

2

あなたの分散共分散(VCV)行列が正しくありません。対角線は標準偏差ではなく分散でなければなりません。あなたは

apply(data,2,var) 

を行うなら、あなたはを差異ことがわかります〜5です。標準偏差を5にするには、オフ対角を25にする必要があります。

また、VCV行列の非対角線に相関を入力すると、それらは共分散でなければなりません。 correlations to covariancesから取得するには、相関関係にある2つの変数の標準偏差で相関を掛ける必要があります。あなたの場合、両方の変数の標準偏差が5であると仮定すると、あなたのVCVの共分散はp = 0.7 * 5 * 5でなければなりません。だからあなたの最終VCVは、結果のN確率変数は手段1を持っています

p <- 0.7 * 5 * 5 
Sigma <- matrix(p,ncol=N,nrow=N) 
diag(Sigma) <- 25 

する必要があり、Pを共分散、およびP/25を相関。