从R中的成对相关数据构造方差-协方差矩阵

constructing variance-covariance matrix from pairwise correlation data in R

我有所有的成对相关性,想构建变协方差矩阵以便对该矩阵进行一些标准分析。这是协方差的示例数据,前两列是 "ids",而第三列显示 "ids".

之间的协方差
data<-data.frame("id1" = c("a","b","c","a","a","b"),
                 "id2" = c("a","b","c","b","c","c"),
                 "cov"=c(1,1,1,0.1,0.3,0.4))

一个简单的 dplyr 解决方案是在 pivot_wider 的帮助下使 data.frame 更宽,即

data<-data.frame("id1" = c("a","b","c","a","a","b"),
                 "id2" = c("a","b","c","b","c","c"),
                 "cov"=c(1,1,1,0.1,0.3,0.4))

tidyr::pivot_wider(data, 
                   id_cols = c(cov, id2), 
                   names_from = id1, 
                   values_from = cov)

产生 输出

id2       a     b     c
      <fct> <dbl> <dbl> <dbl>
    1 a   1    NA      NA
    2 b   0.1   1      NA
    3 c   0.3   0.4     1

因为协方差矩阵是对称的,所以它完成了。

Base-R 解决方案:

nm <- unique(data$id1)   ## row/col names
v <- matrix(NA,length(nm),length(nm),dimnames=list(nm,nm))  ## set up template
v[cbind(data$id1,data$id2)] <- data$cov  ## fill in upper triangle
v[is.na(v)] <- t(v)[is.na(v)]            ## symmetrize