为corrplot输入自己的相关矩阵

时间:2018-01-22 13:46:02

标签: r ggplot2 graphing r-corrplot

我想绘制一个相关矩阵图,类似于corrplot的输出。

然而,我使用带有MCMCglmm的多变量混合模型来估计我的相关矩阵(因为我想考虑一些固定效应和一些缺失的数据点)所以我希望能够输入我自己的相关性corrplot使用的矩阵估计(和相关的置信区间)。据我所知,corrplot从您的数据中估算出相关矩阵 - 我不希望它这样做。

作为corrplot的替代方案,我知道我可以使用ggplotgeom_tile构建关联热图。但我真的很喜欢椭圆' corrplot附带的选项。

library(reshape2)
library(corrplot)
library(ggplot2)

#my correlation matrix looks something like this
car.cor <- cor(mtcars)
melted_cormat <- melt(car.cor)
melted_cormat$upper <- melted_cormat$value+0.10
melted_cormat$lower <- melted_cormat$value-0.10

# with corrplot
car.cor <- cor(mtcars)
corrplot.mixed(car.cor, upper = "ellipse")

# with ggplot and geom_tile
ggplot(data = melted_cormat, aes(x=Var1, y=Var2, fill=value)) + 
  geom_tile()

所以我的问题是 - 如何输入我自己的corrplot使用的相关矩阵,或者我如何使用ggplot得到漂亮的小椭圆?

1 个答案:

答案 0 :(得分:1)

修改

鉴于您的数据

library(tidyverse)
library(reshape2)
library(corrplot)
library(magrittr)

car.cor <- cor(mtcars)
melted_cormat <- melt(car.cor)
melted_cormat$upper <- melted_cormat$value + 0.10
melted_cormat$lower <- melted_cormat$value - 0.10

您可以执行以下操作来生成三个矩阵的列表,以便能够使用corrplot

M <- melted_cormat %>% 
  gather(key, r, 3:5) %>% 
  spread(key = Var2, value = r) %>% 
  split(.$key) %>%
  map(., .f = set_rownames, value = NULL) %>%
  map(., .f = column_to_rownames, var = 'Var1') %>%
  map(., .f = select, -key) %>% 
  map(., as.matrix)

现在,您可以使用参数corrplotupp致电low

corrplot(M$value, low = M$lower, upp = M$upper, method = "ellipse")

enter image description here

似乎此方法不显示置信区间。将此与下图比较。

corrplot(M$value, low = M$lower, upp = M$upper)

enter image description here

经过一些实验(n = 1),函数corrplot.mixed的事情失控了

corrplot.mixed(corr = M$value, lower = "number", upper = "ellipse", low = M$lower, upp = M$upper)

enter image description here

我希望这会有所帮助。