On 21 Dec, 2004, at 13:09, Haynes, Maurice (NIH/NICHD) wrote:

Dear list members,

Where can I find code for computing the p*p variance-covariance
matrix given a vector of p variances (ordered varA, varB, ...,
varp) and a vector of all possible correlations (ordered corAB,
corAC, ..., corp-1,p)?

Something like this (not tested):

        sd.vec <- sqrt(var.vec)
        n <- length(sd.vec)
        cor.mat <- matrix(1, n, n)
        for (i in 2:n){
            for (j in 1:i-1){
                cor.mat[i,j] <- cor.vec[(i-1)*(i-2)/2 + j]
                cor.mat[j,i] <- cor.mat[i,j]}}
        cov.mat <- cor.mat * outer(sd.vec, sd.vec)

I hope that helps.

David



I know that the covariance between 2 variables is equal to the product of their correlation and their standard deviations: corAB * varA^.5 * varB^.5 and so: covAB <- function(corAB, varA, varB) { corAB * varA^.5 * varB^.5 }

If the vector of variances were
var.vec <- c(14, 12, 7)
and the vector of correlations were
cor.vec <- c(.4, .2, .5),
then the vector of covariances would be:
covAB(c(.4, .2, .5),c(14, 14, 12), c(12, 7, 7))
[1] 5.184593 1.979899 4.582576

and the variance-covariance matrix with covariances rounded to
the first decimal place would be:
vmat <- matrix(c(14, 5.2, 2.0, 5.2, 12, 4.6, 2.0, 4.6, 7),
+ nrow=3)
vmat
     [,1] [,2] [,3]
[1,] 14.0  5.2  2.0
[2,]  5.2 12.0  4.6
[3,]  2.0  4.6  7.0


So the question is: How can I generate a p*p variance-covariance matrix from a vector of variances and a vector of correlations without resorting to a construction like: vmat <- matrix(rep(0, p*p), nrow=p) if (p == 2) { vmat[1,1] <- var[1] vmat[1,2] <- cor[1] * (var[1]^.5 * var[2]^.5) vmat[2,1] <- cor[1] * (var[2]^.5 * var[1]^.5) vmat[2,2] <- var[2] } if (p == 3) { vmat[1,1] <- var[1] vmat[1,2] <- cor[1] * (var[1]^.5 * var[2]^.5) vmat[1,3] <- cor[2] * (var[1]^.5 * var[3]^.5) vmat[2,1] <- cor[1] * (var[2]^.5 * var[1]^.5) vmat[2,2] <- var[2] vmat[2,3] <- cor[3] * (var[2]^.5 * var[3]^.5) vmat[3,1] <- cor[2] * (var[3]^.5 * var[1]^.5) vmat[3,2] <- cor[3] * (var[3]^.5 * var[2]^.5) vmat[3,3] <- var[3] } and so forth?

Thanks,

Maurice Haynes
National Institute of Child Health and Human Development
Child and Family Research Section
6705 Rockledge Drive, Suite 8030
Bethesda, MD  20892
Voice: 301-496-8180
Fax: 301-496-2766
E-mail: [EMAIL PROTECTED]

______________________________________________
[EMAIL PROTECTED] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

______________________________________________ [EMAIL PROTECTED] mailing list https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html

Reply via email to