[R] [SPAM] - constructing arbitrary (positive definite) covariance matrix - Found word(s) list error in the Text body

Patrick Burns pburns at pburns.seanet.com
Thu Jun 26 19:15:47 CEST 2008


To make David's approach a little more concrete:
You can always have correlations all equal to 1 --
the variables are all the same, except for the names
you've given them.  You can have two variables
with correlation -1, but you can't get a third variable
that has -1 correlation to both of the first two.


Patrick Burns
patrick at burns-stat.com
+44 (0)20 8525 0696
http://www.burns-stat.com
(home of S Poetry and "A Guide for the Unwilling S User")

davidr at rhotrading.com wrote:
> Well, if you think about the geometry, all correlations equal usually
> won't work. Think of the SDs as the sides of a simplex and the
> correlations as the cosines of the angles between the sides (pick one
> variable as the 'origin'.) Only certain values will give a valid
> covariance or correlation matrix.
> HTH,
> David L. Reiner, PhD
> Head Quant
> Rho Trading Securities, LLC
> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
> On Behalf Of Mizanur Khondoker
> Sent: Thursday, June 26, 2008 11:11 AM
> To: r-help at r-project.org
> Subject: [SPAM] - [R] constructing arbitrary (positive definite)
> covariance matrix - Found word(s) list error in the Text body
>
> Dear list,
>
> I am trying to use the  'mvrnorm'  function from the MASS package for
> simulating multivariate Gaussian data with given covariance matrix.
> The diagonal elements of my covariance matrix should be the same,
> i.e., all variables have the same marginal variance. Also all
> correlations between all pair of variables should be identical, but
> could be any value in [-1,1]. The problem I am having is that the
> matrix I create is not always positive definite (and hence mvrnorm
> fails).
>
> Is there any simple way of constructing covariance matrix of the above
> structure (equal variance, same pairwise correlation from [-1, 1])
> that will always be positive definite?
> I have noticed that covraince matrices created using the following COV
> function are positive definite for  -0.5 < r <1. However, for  r <
> -0.5, the matrix is not positive definite.
> Does anyone have any idea why this is the case?  For my simualtion, I
> need to generate multivariate data for the whole range of r,  [-1, 1]
> for a give value of sd.
>
> Any help/ suggestion would be greatly appreciated.
>
> Examples
> ########
> COV<-function (p = 3, sd = 1, r= 0.5){
>     cov <- diag(sd^2, ncol=p, nrow=p)
>     for (i in 1:p) {
>         for (j in 1:p) {
>             if (i != j) {
>                 cov[i, j] <- r * sd*sd
>             }
>         }
>     }
>    cov
> }
>
>   
>> library(MASS)
>> ### Simualte multivarite gaussin data (works OK)
>> Sigma<-COV(p = 3, sd = 2, r= 0.5)
>> mu<-1:3
>> mvrnorm(5, mu=mu, Sigma=Sigma)
>>     
>           [,1]     [,2]     [,3]
> [1,] 1.2979984 1.843248 4.460891
> [2,] 2.1061054 1.457201 3.774833
> [3,] 2.1578538 2.761939 4.589977
> [4,] 0.8775056 4.240710 2.203712
> [5,] 0.2698180 2.075759 2.869573
>   
>> ### Simualte multivarite gaussin data ( gives Error)
>> Sigma<-COV(p = 3, sd = 2, r= -0.6)
>> mu<-1:3
>> mvrnorm(5, mu=mu, Sigma=Sigma)
>>     
> Error in mvrnorm(5, mu = mu, Sigma = Sigma) :
>   'Sigma' is not positive definite
>
>



More information about the R-help mailing list