如何在平方协方差矩阵中组织协方差对列表?

问题描述

我正在R中工作,并且有一个由三列组成的小标题

此小节扩展到n个协方差对的n列上。

我想得到一个看起来像经典协方差矩阵的矩阵,即其中有协方差对的正方形n x n矩阵。

任何想法我该如何实施?

解决方法

您可以构造一个稀疏矩阵:

DF <- data.frame(var1 = c("a","a","b","c"),var2 = c("b","c",cov = c(0.1,0.2,0.3,0.4,0.5,0.6))
DF$var1 <- factor(DF$var1,levels = sort(unique(c(DF$var1,DF$var2))))
DF$var2 <- factor(DF$var2,levels = levels(DF$var1))

library(Matrix)
sparseMatrix(i = as.integer(DF$var1),j = as.integer(DF$var2),x = DF$cov,dimnames = list(levels(DF$var1),levels(DF$var2)),symmetric = TRUE)
#3 x 3 sparse Matrix of class "dsCMatrix"
#    a   b   c
#a 0.4 0.1 0.2
#b 0.1 0.5 0.3
#c 0.2 0.3 0.6 

如果需要,请使用as.matrix创建一个密集矩阵。

,

类似的东西

## find row/column names
n <- unique(c(dd$V1,dd$V2))
## construct matrix  
M <- matrix(NA,length(n),dimnames=list(n,n))
## fill in values
M[cbind(dd$V1,dd$V2)] <- dd$V3

如果初始数据集中只有下/上三角形,则需要M[lower.tri(M)] <- t(M)[upper.tri(M)]之类的符号来对称化...