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

时间:2017-01-09 05:49:10

标签: r matrix correlation

我有一个包含三个变量的数据框: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 个答案:

答案 0 :(得分: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 :(得分: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