首页 文章

成对列和系数R中的相关矩阵

提问于
浏览
2

我有一个包含三个变量的数据框:a,b,c . 数据集中的前两列是所有可能组合的两个变量的配对,第三列是它们之间的相关性 . 如下所示 .

> var1 <- c("a","a","b")
> var2 <- c("b","c","c")
> r <- c(.55,.25,.75)
> as.data.frame(cbind(var1,var2,r))
  var1 var2    r
1    a    b  0.55
2    a    c  0.25
3    b    c  0.75

我的问题是,是否有可能将包含相关性的数据帧转换为R中的相关矩阵对象?我还想使用R的一些绘图和绘图功能 .

最终我想要的是一个看起来像这样的矩阵

a    b    c
a 1   .55  .25

b .55  1   .25

c .25  .75  .75

2 回答

  • 2

    显然,你有相关矩阵的上三角和下三角部分(由 r 提供),你不需要data.frame用于你的目的 . 为元素为1的矩阵提供下三角和上三角就足够了 .

    var <- unique(c(var1,var2))
    corr <- matrix(1,nrow=length(r),ncol=length(r)) # a matrix with 1s
    corr[lower.tri(corr,diag = FALSE)] <- r # lower triangular matrix to be r
    corr[upper.tri(corr,diag = FALSE)] <- r # upper triangular matrix to be r 
    corr <- as.data.frame(corr) # formatting
    row.names(corr) <- var # row names
    colnames(corr) <- var # column names
    

    corrplot 有一个函数 corrplot 非常适合绘制具有不同选项的相关矩阵(参见参数 method ) . 这是一个例子:

    library(corrplot)
    corrplot(as.matrix(corr),method="circle")
    

    corrplot

  • 1

    试试这个:

    vars <- unique(c(var1, var2))
    df <- cbind.data.frame(var1,var2,r)
    cor.df <- expand.grid(vars, vars)
    cor.df <- rbind(merge(cor.df, df, by.x=c('Var1', 'Var2'), by.y=c('var1', 'var2')),
                    merge(cor.df, df, by.x=c('Var2', 'Var1'), by.y=c('var1', 'var2')),
                    data.frame(Var1=vars, Var2=vars, r=1))
    library(reshape2)
    cor.mat <- dcast(cor.df, Var1~Var2, value.var='r')
    rownames(cor.mat) <- cor.mat[,1]
    cor.mat <- as.matrix(cor.mat[-1])
    cor.mat
    #      a    b    c
    # a 1.00 0.55 0.25
    # b 0.55 1.00 0.75
    # c 0.25 0.75 1.00
    
    # plot the correlation matrix
    library(ggplot2)
    ggplot(data = cor.df, aes(x=Var1, y=Var2, fill=r)) + 
      geom_tile()
    

    enter image description here

相关问题