从相关矩阵生成协方差矩阵

use*_*076 11 r

我有一个相关矩阵:

a <- matrix(c(1, .8, .8, .8, 1, .8, .8, .8, 1), 3)

##      [,1] [,2] [,3]
## [1,]  1.0  0.8  0.8
## [2,]  0.8  1.0  0.8
## [3,]  0.8  0.8  1.0
Run Code Online (Sandbox Code Playgroud)

我现在想从相关矩阵创建一个协方差矩阵.如何在R中完成?

我试过了:

e1.sd <- 3
e2.sd <- 10
e3.sd <- 3
e.cov <- a * as.matrix(c, e1.sd, e2.sd, e3.sd) %*% t(as.matrix(c(e1.sd, e2.sd, e3.sd)))
Run Code Online (Sandbox Code Playgroud)

但我得到错误:

Error in a * as.matrix(c, e1.sd, e2.sd, e3.sd) %*% t(as.matrix(c(e1.sd,  : 
  non-conformable arrays
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

S4M*_*S4M 16

如果您知道各个变量的标准偏差,您可以:

stdevs <- c(e1.sd, e2.sd, e3.sd)
#stdevs is the vector that contains the standard deviations of your variables
b <- stdevs %*% t(stdevs)  
# b is an n*n matrix whose generic term is stdev[i]*stdev[j] (n is your number of variables)
a_covariance <- b * a  #your covariance matrix
Run Code Online (Sandbox Code Playgroud)

另一方面,如果你不知道标准差,那是不可能的.


day*_*yne 6

require(MBESS)
a <- matrix(c(1,.8,.8,.8,1,.8,.8,.8,1),3)
> cor2cov(a,c(3,10,3))
    [,1] [,2] [,3]
[1,]  9.0   24  7.2
[2,] 24.0  100 24.0
[3,]  7.2   24  9.0
Run Code Online (Sandbox Code Playgroud)