本R教程描述了如何使用R软件和ggplot2包可视化相关矩阵。
1. 数据准备以下示例中mtcars的数据被使用。
mydata <- mtcars[, c(1,3,4,5,6,7)]head(mydata)输出结果如下:
mpg disp hp drat wt qsecMazda RX4 21.0 160 110 3.90 2.620 16.46Mazda RX4 Wag 21.0 160 110 3.90 2.875 17.02Datsun 710 22.8 108 93 3.85 2.320 18.61Hornet 4 Drive 21.4 258 110 3.08 3.215 19.44Hornet Sportabout 18.7 360 175 3.15 3.440 17.02Valiant 18.1 225 105 2.76 3.460 20.22 2. 计算相关矩阵可以使用R语言中的cor()函数创建相关矩阵:
cormat <- round(cor(mydata),2)head(cormat)输出结果如下:
mpg disp hp drat wt qsecmpg 1.00 -0.85 -0.78 0.68 -0.87 0.42disp -0.85 1.00 0.79 -0.71 0.89 -0.43hp -0.78 0.79 1.00 -0.45 0.66 -0.71drat 0.68 -0.71 -0.45 1.00 -0.71 0.09wt -0.87 0.89 0.66 -0.71 1.00 -0.17qsec 0.42 -0.43 -0.71 0.09 -0.17 1.00 3. 使用ggplot2创建相关矩阵的热图使用reshape2包中的melt()函数将数据“融合”:
library(reshape2)melted_cormat <- melt(cormat)head(melted_cormat)输出结果:
Var1 Var2 value1 mpg mpg 1.002 disp mpg -0.853 hp mpg -0.784 drat mpg 0.685 wt mpg -0.876 qsec mpg 0.42ggplot2包中的geom_tile()函数可用于可视化相关矩阵:
library(ggplot2)ggplot(data = melted_cormat, aes(x=Var1, y=Var2, fill=value)) + geom_tile()输出结果:
默认的绘图很不美观,将在下一节中看到如何更改热图的外观。
请注意,如果您有大量数据,则最好使用geom_raster()函数,运行更快。
4. 获取相关矩阵的下三角和上三角注意,相关矩阵具有冗余信息。可使用下面的函数将其中的一半设置为NA。
# 获得相关矩阵的下三角元素# Get lower triangle of the correlation matrix get_lower_tri<-function(cormat){ cormat[upper.tri(cormat)] <- NA return(cormat) }# 获得相关矩阵的上三角元素 # Get upper triangle of the correlation matrix get_upper_tri <- function(cormat){ cormat[lower.tri(cormat)]<- NA return(cormat) }使用方法:
# 获取相关矩阵cormat的上三角元素upper_tri <- get_upper_tri(cormat)upper_tri输出结果:
mpg disp hp drat wt qsecmpg 1 -0.85 -0.78 0.68 -0.87 0.42disp NA 1.00 0.79 -0.71 0.89 -0.43hp NA NA 1.00 -0.45 0.66 -0.71drat NA NA NA 1.00 -0.71 0.09wt NA NA NA NA 1.00 -0.17qsec NA NA NA NA NA 1.00 5. 绘制相关矩阵的上三角元素为热图融合相关数据并删除具有NA值的行:
# Melt the correlation matrixlibrary(reshape2)melted_cormat <- melt(upper_tri, na.rm = TRUE)# Heatmaplibrary(ggplot2)ggplot(data = melted_cormat, aes(Var2, Var1, fill = value))+ geom_tile(color = "white")+ scale_fill_gradient2(low = "blue", high = "red", mid = "white", midpoint = 0, limit = c(-1,1), space = "Lab", name="PearsonnCorrelation") + theme_minimal()+ theme(axis.text.x = element_text(angle = 45, vjust = 1, size = 12, hjust = 1))+ coord_fixed()输出结果:
上图中:
负值显示为为蓝色,正值显示为红色。
scale_fill_gradient2与参数limit = c(-1,1)一起使用,限制显示的相关系数范围从-1到1。
coord_fixed()的功能可确保x轴上的一个单位与y轴上的一个单位的长度相同。
6. 对相关矩阵重新排序本节介绍如何根据相关系数对相关矩阵进行重新排序。这对于识别矩阵中的隐藏模式很有用。下面的示例中使用了分层聚类的hclust()函数对相关矩阵进行重新排序。
对相关矩阵重新排序的辅助函数:
reorder_cormat <- function(cormat){# Use correlation between variables as distancedd <- as.dist((1-cormat)/2)hc <- hclust(dd)cormat <-cormat[hc$order, hc$order]}重新排序的相关数据可视化:
# Reorder the correlation matrixcormat <- reorder_cormat(cormat)upper_tri <- get_upper_tri(cormat)# Melt the correlation matrixmelted_cormat <- melt(upper_tri, na.rm = TRUE)# Create a ggheatmapggheatmap <- ggplot(melted_cormat, aes(Var2, Var1, fill = value))+ geom_tile(color = "white")+ scale_fill_gradient2(low = "blue", high = "red", mid = "white", midpoint = 0, limit = c(-1,1), space = "Lab", name="PearsonnCorrelation") + theme_minimal()+ # minimal theme theme(axis.text.x = element_text(angle = 45, vjust = 1, size = 12, hjust = 1))+ coord_fixed()# Print the heatmapprint(ggheatmap)输出结果:
输出结果:
http://www.sthda.com/english/wiki/ggplot2-quick-correlation-matrix-heatmap-r-software-and-data-visualization