[R] simulate data from multivariate normal with pre-specified correlation matrix
Thomas Harte
thomas.harte at yahoo.com
Wed Aug 15 01:34:28 CEST 2007
# here's your example correlation matrix:
sigma<- matrix(c(1.00, 0.75, 0,
0.75, 1.00, 0,
0.00, 0.00, 0), nr=3, byrow=TRUE)
chol(sigma)
# Error in chol(sigma) : the leading minor of order 3 is not positive definite
# DUH!
# let's chop off that dangling row and column:
sigma<- sigma[1:2, 1:2]
N<- 1000
set.seed(1)
samp<- matrix(rnorm(N*nrow(sigma)), N, nrow(sigma))%*% chol(sigma)
# check if the empirical correlation is close to the theoretical sigma:
cor(samp)
# [,1] [,2]
#[1,] 1.0000000 0.7502607
#[2,] 0.7502607 1.0000000
# not bad!
> Message: 50
> Date: Mon, 13 Aug 2007 17:15:12 -0400
> From: Jiao Yang <yj316 at gwu.edu>
> Subject: [R] simulate data from multivariate normal with pre-specified
> correlation matrix
> To: r-help at stat.math.ethz.ch
> Message-ID: <de6a933c4844.46c091a0 at gwu.edu>
> Content-Type: text/plain; charset=us-ascii
> For example, the correlation matrix is 3x3 and looks like
> 1 0.75 0 0 0
> 0.75 1 0 0 0
> 0 0 0 0 0
> Can I write the code like this?
> p<- 3 > number of variables per observation
> N<- 10 > number of samples
> > define population correlation matrix sigma
> sigma<-matrix(0,p,p) > creates a px p matrix of 0
> rank<-2
> for (i in 1:rank){
> for (j in 1:rank){
> rho<-0.75
> sigma[i,j]<-rho^abs(i-j)
> sigma[i,i]<-1
> }
> }
> > create a data set of 10 observations from multivariate normalcovariance matrix
sigma
> library(MASS)
> Xprime<-mvrnorm(N,rep(1,p), sigma )
> Also, if I calculate
> S<- cov(Xprime)
> will S be the sample correlation matrix?
> Thank you very much for your time!
More information about the R-help
mailing list