2016-05-11 4 views
1

Ich möchte N Anzahl der Zufallsvariablen generieren, die jeweils eine feste Korrelation p miteinander haben.Generierte korrelierte Zufallsvariablen mit bestimmten Standardabweichungen

Die Variablen mean = 1 und ein std = 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) 

Allerdings haben sollte, sind die resultierenden Standardabweichungen nicht 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 

Gibt es in dem eine systematische Art und Weise ich die Standardabweichungen variieren können, während die anderen Parameter beibehalten?

+1

Ich bin mir ziemlich sicher, dass Sigma die Varianz-Kovarianz-Matrix ist. Wenn Sie also Standardabweichungen von 5 wollen, sollten Sie es "diag (Sigma) <- 25" füttern. Beachten Sie, dass '2.264853^2' 5.129559 ist, was ziemlich nahe bei 5 ist ... – lmo

Antwort

1

Sie haben eine Matrix Sigma erstellt, in der die diagonalen Elemente 5 sind, aber die mvnorm möchte eine Kovarianzmatrix (keine Standardabweichungsmatrix) wie Sigma. Also müssen Sie die diagonalen Elemente gleich 25 haben. Es wird auch nicht der Wert von p = 0,7 richtig verwendet, das sind Korrelationen, keine Kovarianzen. Sie müssen die Korrelationen in Kovarianzen umwandeln.

See:

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

Ihre Varianz-Kovarianz (VCV) Matrix ist falsch. Die Diagonalen sollten die Varianzen sein, nicht die Standardabweichungen. Wenn Sie

apply(data,2,var) 

tun Dann werden Sie sehen, dass die Varianzen sind ~ 5. Wenn die Standardabweichung 5 sein soll, müssen die Off-Diagonalen 25 sein.

Zusätzlich geben Sie Korrelationen in die Off-Diagonalen der VCV-Matrix ein, und diese sollten Kovarianzen sein. Um von correlations to covariances zu erhalten, müssen Sie die Korrelation mit den Standardabweichungen der beiden korrelierten Variablen multiplizieren. Wenn in Ihrem Fall die Standardabweichung beider Variablen 5 ist, sollten die Kovarianzen in Ihrem VCV p = 0.7 * 5 * 5 sein. So soll Ihre letzte VCV

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

Der resultierende N Zufallsvariablen 1 Mittel hat, Kovarianzen p und Korrelationen p/25.

Verwandte Themen