ggplot2 : heatmap d'une matrice de corrélation - Logiciel R et visualisation de données
- Préparer les données
- Calculer la matrice de corrélation
- Créer le heatmap de corrélation avec ggplot2
- Obtenir les triangles inférieur et supérieur de la matrice de corrélation
- Heatmap de matrice de corrélation personnalisé
- Réorganiser la matrice de corrélation
- Ajouter les coefficients de corrélation sur le heatmap
- Infos
Ce tutoriel décrit comment calculer et visualiser une matrice de corrélation en utilisant le logiciel R et le package ggplot2.
Préparer les données
Le jeu de données mtcars est utilisé dans les exemples ci-dessous.
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
Calculer la matrice de corrélation
La matrice de corrélation peut être créée en utilisant la fonction cor() de R:
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
Lire plus sur la visualisation des données de matrice de corrélation : visualisation de matrice de corrélation dans R
Créer le heatmap de corrélation avec ggplot2
Le package reshape est nécessaire pour “fondre” la matrice de corrélation:
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
La fonction geom_tile() [ package ggplot2] est utilisée pour visualiser la matrice de corrélation:
library(ggplot2)
ggplot(data = melted_cormat, aes(x=Var1, y=Var2, fill=value)) +
geom_tile()
Le graphique par défaut est très laid. Nous verrons dans les prochaines sections, comment changer l’apparence du heatmap.
Notez que, si vous avez beaucoup de données, il est préférable d’utiliser la fonction geom_raster() qui peut être beaucoup plus rapide.
Obtenir les triangles inférieur et supérieur de la matrice de corrélation
Notez qu’une matrice de corrélation contient des informations redondantes. Nous allons utiliser les fonctions ci-dessous pour mettre la moitié à NA.
Fonctions helpers :
# Obtenir le triangle inférieur
get_lower_tri<-function(cormat){
cormat[upper.tri(cormat)] <- NA
return(cormat)
}
# Obtenir le triangle supérieur
get_upper_tri <- function(cormat){
cormat[lower.tri(cormat)]<- NA
return(cormat)
}
Utilisation :
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
Heatmap de matrice de corrélation personnalisé
Fondre les données de corrélations et supprimer les lignes contenant des NA:
# Fondre la matrice de corrélation
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()
Dans la figure ci-dessus :
- Les corrélations négatives sont de couleur bleu et les corrélations positives en rouge. La fonction scale_fill_gradient2 est utilisé avec l’argument limit = c(-1,1) étant donnée que le coefficient de corrélation varie entre -1 et 1.
- coord_fixed(): cette fonction assure qu’une unité sur l’axe des x représente la même longueur qu’une unité sur l’axe des y.
Réorganiser la matrice de corrélation
Cette section décrit comment réorganiser la matrice de corrélation en fonction du coefficient de corrélation. Ceci est utile pour identifier des profils cachés dans la matrice. La fonction hclust pour hierarchical clustering est utilisée dans l’exemple ci-dessous.
Fonction helper pour réorganiser la matrice de corrélation:
reorder_cormat <- function(cormat){
# Utiliser la corrélation entre les variables
# comme mésure de distance
dd <- as.dist((1-cormat)/2)
hc <- hclust(dd)
cormat <-cormat[hc$order, hc$order]
}
Visualisation de la matrice de corrélation réordonnée:
# Reordonner la matrice de corrélation
cormat <- reorder_cormat(cormat)
upper_tri <- get_upper_tri(cormat)
# Fondre la matrice de corrélation
melted_cormat <- melt(upper_tri, na.rm = TRUE)
# Créer un 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()
# Afficher heatmap
print(ggheatmap)
Ajouter les coefficients de corrélation sur le heatmap
- Utiliser geom_text() pour ajouter les coefficients de corrélation sur le graphe
- Utiliser un thème vierge (enlever les étiquettes des axes, les grilles, le fond et la graduation des axes)
- Utiliser guides() pour changer la position du titre de la légende
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))
Lire plus sur la visualisation des données de matrice de corrélation : visualisation de matrice de corrélation dans R
Infos
Cette analyse a été faite en utilisant le logiciel R (ver. 3.2.1) et le package ggplot2 (ver. 1.0.1)
Show me some love with the like buttons below... Thank you and please don't forget to share and comment below!!
Montrez-moi un peu d'amour avec les like ci-dessous ... Merci et n'oubliez pas, s'il vous plaît, de partager et de commenter ci-dessous!