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)


Enjoyed this article? I’d be very grateful if you’d help it spread by emailing it to a friend, or sharing it on Twitter, Facebook or Linked In.

Show me some love with the like buttons below... Thank you and please don't forget to share and comment below!!
Avez vous aimé cet article? Je vous serais très reconnaissant si vous aidiez à sa diffusion en l'envoyant par courriel à un ami ou en le partageant sur Twitter, Facebook ou Linked In.

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!





Cette page a été vue 11531 fois
Licence - Pas d?Utilisation Commerciale - Partage dans les M?mes Conditions
Licence Creative Commons