【问题标题】:constructing variance-covariance matrix from pairwise correlation data in R从R中的成对相关数据构造方差 - 协方差矩阵
【发布时间】:2020-07-04 10:52:18
【问题描述】:

我拥有所有成对相关性,并想构建 var-covariance 矩阵,以便对该矩阵进行一些标准分析。这是协方差的示例数据,前两列是“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))

【问题讨论】:

    标签: r dataframe covariance-matrix


    【解决方案1】:

    一个简单的 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
    

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

    【讨论】:

      【解决方案2】:

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-15
        • 1970-01-01
        • 1970-01-01
        • 2020-10-18
        • 2016-05-26
        • 2013-02-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多