相关 - 协方差矩阵与方差 - 协方差矩阵

时间:2014-03-20 04:18:32

标签: r matrix covariance correlation

有没有一种简单的方法可以将相关协方差矩阵转换为方差 - 协方差矩阵?我总是使用嵌套的for-loops,如下所示,但我一直认为基础R中可能存在内置函数。

my.matrix <- matrix(c(0.64901,  0.76519, -0.63620, -0.01923,
                      0.02114,  0.00118, -0.43198,  0.02480,
                     -0.21811, -0.00630,  0.18109,  0.05964,
                     -0.00710,  0.00039,  0.01162,  0.20972), nrow=4, byrow=TRUE)

new.matrix <- my.matrix

for(i in 1:nrow(my.matrix)) {  
   for(j in 1:ncol(my.matrix)) { 
      new.matrix[i,j] = ifelse(i<j, my.matrix[j,i], new.matrix[i,j])
   }
}

new.matrix

#          [,1]     [,2]     [,3]     [,4]
# [1,]  0.64901  0.02114 -0.21811 -0.00710
# [2,]  0.02114  0.00118 -0.00630  0.00039
# [3,] -0.21811 -0.00630  0.18109  0.01162
# [4,] -0.00710  0.00039  0.01162  0.20972

我知道lower.triupper.tri函数,但似乎无法通过它们和t()的组合完成任务。

1 个答案:

答案 0 :(得分:2)

我认为您可能需要使用which获取索引,然后交换行和列。试试这个。

k <- which(lower.tri(my.matrix), arr.ind=TRUE)
my.matrix[k[,c(2,1)]] <- my.matrix[k]