本R教程描述了如何使用R软件和ggplot2包可视化相关矩阵。
以下示例中mtcars的数据被使用。
mydata <- mtcars[, c(1,3,4,5,6,7)]
head(mydata)
输出结果如下:
mpg disp hp drat wt qsec
Mazda RX4 21.0 160 110 3.90 2.620 16.46
Mazda RX4 Wag 21.0 160 110 3.90 2.875 17.02
Datsun 710 22.8 108 93 3.85 2.320 18.61
Hornet 4 Drive 21.4 258 110 3.08 3.215 19.44
Hornet Sportabout 18.7 360 175 3.15 3.440 17.02
Valiant 18.1 225 105 2.76 3.460 20.22
可以使用R语言中的cor()函数创建相关矩阵:
cormat <- round(cor(mydata),2)
head(cormat)
输出结果如下:
mpg disp hp drat wt qsec
mpg 1.00 -0.85 -0.78 0.68 -0.87 0.42
disp -0.85 1.00 0.79 -0.71 0.89 -0.43
hp -0.78 0.79 1.00 -0.45 0.66 -0.71
drat 0.68 -0.71 -0.45 1.00 -0.71 0.09
wt -0.87 0.89 0.66 -0.71 1.00 -0.17
qsec 0.42 -0.43 -0.71 0.09 -0.17 1.00
使用reshape2包中的melt()函数将数据“融合”:
library(reshape2)
melted_cormat <- melt(cormat)
head(melted_cormat)
输出结果:
Var1 Var2 value
1 mpg mpg 1.00
2 disp mpg -0.85
3 hp mpg -0.78
4 drat mpg 0.68
5 wt mpg -0.87
6 qsec mpg 0.42
ggplot2包中的geom_tile()函数可用于可视化相关矩阵:
library(ggplot2)
ggplot(data = melted_cormat, aes(x=Var1, y=Var2, fill=value)) +
geom_tile()
默认的绘图很不美观,将在下一节中看到如何更改热图的外观。
请注意,如果您有大量数据,则最好使用geom_raster()函数,运行更快。
注意,相关矩阵具有冗余信息。可使用下面的函数将其中的一半设置为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 qsec
mpg 1 -0.85 -0.78 0.68 -0.87 0.42
disp NA 1.00 0.79 -0.71 0.89 -0.43
hp NA NA 1.00 -0.45 0.66 -0.71
drat NA NA NA 1.00 -0.71 0.09
wt NA NA NA NA 1.00 -0.17
qsec NA NA NA NA NA 1.00
融合相关数据并删除具有NA值的行:
# Melt the correlation matrix
library(reshape2)
melted_cormat <- melt(upper_tri, na.rm = TRUE)
# Heatmap
library(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="Pearson\nCorrelation") +
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轴上的一个单位的长度相同。
本节介绍如何根据相关系数对相关矩阵进行重新排序。这对于识别矩阵中的隐藏模式很有用。下面的示例中使用了分层聚类的hclust()函数对相关矩阵进行重新排序。
对相关矩阵重新排序的辅助函数:
reorder_cormat <- function(cormat){
# Use correlation between variables as distance
dd <- as.dist((1-cormat)/2)
hc <- hclust(dd)
cormat <-cormat[hc$order, hc$order]
}
重新排序的相关数据可视化:
# Reorder the correlation matrix
cormat <- reorder_cormat(cormat)
upper_tri <- get_upper_tri(cormat)
# Melt the correlation matrix
melted_cormat <- melt(upper_tri, na.rm = TRUE)
# Create a ggheatmap
ggheatmap <- 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="Pearson\nCorrelation") +
theme_minimal()+ # minimal theme
theme(axis.text.x = element_text(angle = 45, vjust = 1,
size = 12, hjust = 1))+
coord_fixed()
# Print the heatmap
print(ggheatmap)
ggheatmap +
geom_text(aes(Var2, Var1, label = value), color = "black", size = 4) +
theme(
axis.title.x = element_blank(),
axis.title.y = element_blank(),
panel.grid.major = element_blank(),
panel.border = element_blank(),
panel.background = element_blank(),
axis.ticks = element_blank(),
legend.justification = c(1, 0),
legend.position = c(0.6, 0.7),
legend.direction = "horizontal")+
guides(fill = guide_colorbar(barwidth = 7, barheight = 1,
title.position = "top", title.hjust = 0.5))
http://www.sthda.com/english/wiki/ggplot2-quick-correlation-matrix-heatmap-r-software-and-data-visualization