ggplot2 : heatmap d'une matrice de corrélation - Logiciel R et visualisation de données


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()

ggplot2 : heatmap d'une matrice de corrélation - Logiciel R et visualisation de données

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()

ggplot2 : heatmap d'une matrice de corrélation - Logiciel R et visualisation de données

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)

ggplot2 : heatmap d'une matrice de corrélation - Logiciel R et visualisation de données

Ajouter les coefficients de corrélation sur le heatmap

  1. Utiliser geom_text() pour ajouter les coefficients de corrélation sur le graphe
  2. Utiliser un thème vierge (enlever les étiquettes des axes, les grilles, le fond et la graduation des axes)
  3. 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))

ggplot2 : heatmap d'une matrice de corrélation - Logiciel R et visualisation de données

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)









Want to Learn More on R Programming and Data Science?

Follow us by Email

by FeedBurner

On Social Networks:


 Get involved :
  Click to follow us on and Google+ :   
  Comment this article by clicking on "Discussion" button (top-right position of this page)
  Sign up as a member and post news and articles on STHDA web site.
Cette page a été vue 10034 fois