Java Mailing List Archive

http://www.r-help.com/

Home » R Help for Statistical Computing »

Re: [R] generate random numbers from a multivariate distribution
with specified correlation matrix

Dennis Murphy

2010-08-24

Replies: Find Java Web Hosting

Author LoginPost Reply
Hi Jane:

On Mon, Aug 23, 2010 at 8:05 PM, rusers.sh <rusers.sh@(protected):

> Hi,
>  If you see the link http://www.stata.com/help.cgi?drawnorm, and you can
> see an example,
> #draw a sample of 1000 observations from a bivariate standard
> normal distribution, with correlation 0.5.
> #drawnorm x y, n(1000) corr(0.5)
> This is what Stata software did. What i hope to do in R should be similar
> as that.
>

Using an example adapted from package mvtnorm:

library(mvtnorm)
sigma <- matrix(c(1, 0.5, 0.5, 0.5, 1, 0.5, 0.5, 0.5, 1), ncol = 3)
sigma
  [,1] [,2] [,3]
[1,] 1.0 0.5 0.5
[2,] 0.5 1.0 0.5
[3,] 0.5 0.5 1.0
x <- rmvnorm(n = 1000, mean = c(1, 5, 10), sigma = sigma)
head(x, 2)
      [,1]   [,2]    [,3]
[1,] 1.1830181 6.730525 10.687912
[2,] 2.2911587 5.978146 9.493432

cov(x)
      [,1]    [,2]    [,3]
[1,] 0.9725893 0.4894247 0.4902096
[2,] 0.4894247 0.9782143 0.4572949
[3,] 0.4902096 0.4572949 0.9656340
colMeans(x)
[1] 0.9901327 5.0008999 10.0162695

# Same example using mvrnorm() from MASS:

library(MASS)
x2 <- mvrnorm(n = 1000, mu = c(1, 5, 10), Sigma = sigma)
head(x2, 2)
      [,1]   [,2]    [,3]
[1,] -0.1559149 3.449327 7.967966
[2,] -0.7961951 4.636752 8.580032
cov(x2)
      [,1]    [,2]    [,3]
[1,] 1.0786150 0.4719868 0.5082440
[2,] 0.4719868 0.9608204 0.4819515
[3,] 0.5082440 0.4819515 1.0264072
colMeans(x2)
[1] 1.042077 5.011792 10.025397

Package mvtnorm also has a function to obtain samples from multivariate-t
distributions (rmvt). See the help pages of these functions for examples and
further details.

For simulating random fields, there are two packages of which I'm aware:
RandomFields and FieldSim. It might also be worth checking out the Spatial
Task View @ CRAN to see if anything else is available to help you.

HTH,
Dennis

It will be better to only need us to specify the correlation matrix, mean
> values and possible variances. One of my aim is to simulate random fields.
>  Thanks.
>
>
> 2010/8/23 Ben Bolker <bbolker@(protected)>
>
> rusers.sh <rusers.sh <at> gmail.com> writes:
>>
>> >  rmvnorm()can be used to generate the random numbers from a
>> multivariate
>> > normal distribution with specified means and covariance matrix, but i
>> want
>> > to specify the correlation matrix instead of covariance matrix for the
>> > multivariate
>> > normal distribution.
>> > Does anybody know how to generate the random numbers from a multivariate
>> > normal distribution with specified correlation matrix? What about
>> > other non-normal
>> > distribution?
>>
>>  What do you want the variances to be? If you don't mind that they're
>> all equal to 1, then using your correlation matrix as the Sigma argument
>> to the mvrnorm() [sic] function in MASS should work fine. They have to
>> be defined as *something* ....
>> If you want multivariate distributions with non-normal marginal
>> distributions, consider the 'copula' package, but be prepared to do
>> some reading -- this is a fairly big/deep topic.
>>
>> good luck.
>>
>> ______________________________________________
>> R-help@(protected)
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide
>> http://www.R-project.org/posting-guide.html
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
>
>
> --
> -----------------
> Jane Chang
> Queen's
>

 [[alternative HTML version deleted]]

______________________________________________
R-help@(protected)
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.
©2008 r-help.com - Jax Systems, LLC, U.S.A.