Graphe de réseau de corrélation en R avec corrr

Visualiser une matrice de corrélation sous forme de réseau de variables reliées

Data Visualization

Apprenez à tracer un graphe de réseau de corrélation en R avec le paquet corrr — calculez une matrice de corrélation, puis affichez-la comme un réseau où les variables sont des nœuds et les fortes corrélations des arêtes pondérées. Une alternative claire à la heatmap de corrélation.

Auteur·rice
Date de publication

8 juillet 2026

Modifié

16 juillet 2026

AstuceCe que vous apprendrez
  • Transformer une matrice de corrélation en graphe de réseau avec le paquet corrr — les nœuds sont les variables, les arêtes sont les corrélations.
  • Lire le graphique d’un coup d’œil : arêtes azur = positif, rouge = négatif, plus large/plus foncé = plus fort, et les nœuds regroupés = variables corrélées.
  • Maîtriser l’encombrement avec min_cor, recolorer les arêtes aux couleurs de votre marque, et vous concentrer sur une seule variable avec focus().
  • Chaque graphique est produit à partir de vrai code R copiable — vous n’avez besoin que de corrr.

Une heatmap de corrélation répond à la question « quelle est la force de chaque paire ? », une case à la fois. Un graphe de réseau de corrélation répond à une question différente, plus structurelle : « quelles variables évoluent ensemble en groupe ? » Il dispose vos variables sous forme de points et trace une arête pondérée pour chaque corrélation, si bien que les regroupements de variables apparentées se rassemblent littéralement sur la page. C’est le moyen le plus rapide de voir la structure en blocs d’une matrice de corrélation.

Le paquet corrr en fait une opération en deux temps : correlate() pour obtenir un data frame de corrélation bien rangé, puis network_plot() pour le tracer. Nous utiliserons le jeu de données intégré mtcars (32 voitures, 11 mesures numériques) — ses corrélations fortes et bien connues entre moteur et poids en font un réseau exceptionnellement lisible.

Des données à une matrice de corrélation avec correlate()

corrr est l’interface tidy de stats::cor(). Chargez-le et appelez correlate() sur n’importe quel data frame numérique — il renvoie un data frame de corrélation (un tibble avec une colonne term et une colonne par variable), c’est-à-dire ce qu’attend tout autre verbe de corrr.

library(corrr)

res_cor <- correlate(mtcars)
res_cor
# A tibble: 11 × 12
   term     mpg    cyl   disp     hp    drat     wt    qsec     vs      am
   <chr>  <dbl>  <dbl>  <dbl>  <dbl>   <dbl>  <dbl>   <dbl>  <dbl>   <dbl>
 1 mpg   NA     -0.852 -0.848 -0.776  0.681  -0.868  0.419   0.664  0.600 
 2 cyl   -0.852 NA      0.902  0.832 -0.700   0.782 -0.591  -0.811 -0.523 
 3 disp  -0.848  0.902 NA      0.791 -0.710   0.888 -0.434  -0.710 -0.591 
 4 hp    -0.776  0.832  0.791 NA     -0.449   0.659 -0.708  -0.723 -0.243 
 5 drat   0.681 -0.700 -0.710 -0.449 NA      -0.712  0.0912  0.440  0.713 
 6 wt    -0.868  0.782  0.888  0.659 -0.712  NA     -0.175  -0.555 -0.692 
 7 qsec   0.419 -0.591 -0.434 -0.708  0.0912 -0.175 NA       0.745 -0.230 
 8 vs     0.664 -0.811 -0.710 -0.723  0.440  -0.555  0.745  NA      0.168 
 9 am     0.600 -0.523 -0.591 -0.243  0.713  -0.692 -0.230   0.168 NA     
10 gear   0.480 -0.493 -0.556 -0.126  0.700  -0.583 -0.213   0.206  0.794 
11 carb  -0.551  0.527  0.395  0.750 -0.0908  0.428 -0.656  -0.570  0.0575
# ℹ 2 more variables: gear <dbl>, carb <dbl>

Deux choses à remarquer. La diagonale est vide (NA) — la corrélation d’une variable avec elle-même vaut toujours 1 et n’apporte aucune information, donc corrr la supprime. Et les valeurs manquantes sont gérées pour vous : correlate() utilise par défaut use = "pairwise.complete.obs", si bien que les colonnes contenant des NA contribuent tout de même par chaque paire complète.

Pour un affichage rapide et lisible, passez le résultat dans fashion() — il arrondit, supprime les zéros de tête et aligne les colonnes :

res_cor |> fashion()
   term  mpg  cyl disp   hp drat   wt qsec   vs   am gear carb
1   mpg      -.85 -.85 -.78  .68 -.87  .42  .66  .60  .48 -.55
2   cyl -.85       .90  .83 -.70  .78 -.59 -.81 -.52 -.49  .53
3  disp -.85  .90       .79 -.71  .89 -.43 -.71 -.59 -.56  .39
4    hp -.78  .83  .79      -.45  .66 -.71 -.72 -.24 -.13  .75
5  drat  .68 -.70 -.71 -.45      -.71  .09  .44  .71  .70 -.09
6    wt -.87  .78  .89  .66 -.71      -.17 -.55 -.69 -.58  .43
7  qsec  .42 -.59 -.43 -.71  .09 -.17       .74 -.23 -.21 -.66
8    vs  .66 -.81 -.71 -.72  .44 -.55  .74       .17  .21 -.57
9    am  .60 -.52 -.59 -.24  .71 -.69 -.23  .17       .79  .06
10 gear  .48 -.49 -.56 -.13  .70 -.58 -.21  .21  .79       .27
11 carb -.55  .53  .39  .75 -.09  .43 -.66 -.57  .06  .27     

Vous pouvez déjà lire l’histoire dans les chiffres : mpg est fortement négatif avec wt, cyl, disp et hp (les voitures plus lourdes, à plus gros moteur, consomment plus de carburant), tandis que wt, disp et cyl sont fortement positifs entre eux. Le graphe de réseau n’est qu’une façon de voir ce bloc d’un coup d’œil plutôt que de parcourir une grille.

Tracer le réseau de corrélation avec network_plot()

network_plot() prend le data frame de corrélation et en calcule l’agencement. Chaque nœud est une variable ; chaque arête est une corrélation entre les deux variables qu’elle relie. Les positions des nœuds proviennent d’un positionnement multidimensionnel (MDS) des corrélations absolues, de sorte que les variables fortement corrélées (positivement ou négativement) sont rapprochées.

L’unique option que vous solliciterez est min_cor — la corrélation absolue minimale requise pour qu’une arête soit tracée. Commencez à 0.3 pour ne conserver que les liens significatifs :

res_cor |> network_plot(min_cor = 0.3)

Correlation network of the 11 mtcars variables drawn with corrr network_plot at min_cor 0.3: mpg, drat, am and gear on one side connected by red edges to a tight cluster of wt, disp, cyl, hp on the other, which are joined by blue edges.

Voici comment le lire :

  • La couleur de l’arête = le signe. Les arêtes bleues sont des corrélations positives, les rouges des négatives — la même convention que la plupart des heatmaps de corrélation.
  • La largeur et l’opacité de l’arête = la force. Les tracés plus larges et plus opaques sont des corrélations plus fortes ; les tracés fins et pâles sont faibles.
  • La proximité des nœuds = un comportement partagé. wt, disp, cyl et hp se rassemblent d’un côté — le bloc « gros moteur lourd et gourmand ». mpg se situe du côté opposé, relié à ce bloc par de fortes arêtes rouges (négatives), car la consommation de carburant baisse à mesure que ces variables augmentent. Son lien le plus fort est avec le poids (wt, r = -0.87).

Cette seule image encode ce qui exigerait une lecture attentive de toute la matrice.

Maîtriser l’encombrement avec min_cor

À min_cor = 0.3, presque chaque paire franchit la barre, si bien que le graphe est chargé. Relevez le seuil pour ne conserver que les relations les plus fortes et laisser respirer la structure :

res_cor |> network_plot(min_cor = 0.7)

The same mtcars correlation network with min_cor raised to 0.7, showing far fewer edges: only the strongest links remain, with wt, disp, cyl and hp tightly clustered and mpg attached by strong red edges.

Désormais, seules survivent les corrélations d’au moins 0.7 en valeur absolue, et la structure centrale est sans équivoque : le regroupement wtdispcylhp (avec la paire la plus forte de la matrice, cyldisp à r = 0.90) domine, mpg s’y accroche par de fortes arêtes négatives, et les variables de transmission am, gear et drat forment leur propre groupe faiblement relié. Régler min_cor est le principal levier pour arbitrer entre exhaustivité et lisibilité.

Recolorer les arêtes aux couleurs de votre marque

network_plot() expose un argument colours : un gradient à trois couleurs c(negative, midpoint, positive). Remplacez-le par l’azur Datanovia pour les liens positifs et un rouge net pour les négatifs, afin que la figure s’accorde au reste de votre rapport :

res_cor |> network_plot(
  min_cor = 0.4,
  colours = c("#d1495b", "white", "#3a86d4")
)

The mtcars correlation network recoloured with a red-to-azure gradient: positive edges are brand azure, negative edges red, over the same clustered layout.

L’agencement est identique — seule la palette change. Le gradient va du rouge à −1 au blanc à 0 puis à l’azur à +1, si bien qu’un lien positif d’intensité moyenne s’affiche en bleu doux et un lien fort en azur saturé.

Se concentrer sur une seule variable avec focus()

Lorsque vous vous intéressez à une seule réponse — par exemple, ce qui détermine la consommation de carburant — n’examinez pas le réseau entier à l’œil nu. Utilisez focus() de corrr pour ne conserver que les corrélations de cette variable :

res_cor |> focus(mpg) |> fashion()
   term  mpg
1   cyl -.85
2  disp -.85
3    hp -.78
4  drat  .68
5    wt -.87
6  qsec  .42
7    vs  .66
8    am  .60
9  gear  .48
10 carb -.55

La sortie classe mpg par rapport à chaque autre variable dans une seule colonne : le poids (wt, -0.87), le nombre de cylindres (cyl, -0.85) et la cylindrée (disp, -0.85) sont les plus déterminants, tous négatifs. C’est le pendant tabulaire du réseau — le graphe vous montre le voisinage, focus() vous donne les chiffres exacts pour un nœud.

Graphe de réseau ou heatmap de corrélation ?

Les deux sont complémentaires, non rivaux — choisissez selon la question :

  • Le graphe de réseau (cet article) — idéal pour la structure : quelles variables se regroupent, et la forme globale de la matrice. Il passe à l’échelle de nombreuses variables sans devenir un mur de cases.
  • La heatmap de corrélation / le corrélogramme — idéal pour la consultation : lire la force exacte d’une paire donnée. Pour une heatmap en qualité publication, tournez-vous vers ggcorrplot (réordonner, croix de significativité, triangle inférieur/supérieur) — voyez la leçon pas à pas ggcorrplot en R, ou la leçon Corrélogramme en R pour la même figure avec le paquet corrplot. Pour construire et interpréter la matrice sous-jacente, voyez Matrice de corrélation en R.

En pratique, utilisez le réseau pour repérer les blocs intéressants, puis la heatmap (ou focus()) pour en lire les chiffres.

Foire aux questions

min_cor est la corrélation absolue minimale requise pour qu’une arête soit tracée. À min_cor = 0.3, toute paire avec |r| ≥ 0.3 obtient une arête ; relevez-le vers 0.70.8 pour ne conserver que les liens les plus forts et désencombrer le graphe. Il ne filtre que les arêtes — chaque variable apparaît toujours comme un nœud.

La couleur encode le signe de la corrélation (bleu/azur pour positif, rouge pour négatif) et la largeur ainsi que l’opacité en encodent la force — plus large et plus opaque signifie plus fort. Vous pouvez modifier le gradient avec l’argument colours, un vecteur de trois couleurs c(negative, midpoint, positive).

Par défaut, correlate() utilise use = "pairwise.complete.obs", si bien que chaque paire complète d’observations contribue même lorsque d’autres cases de ces lignes valent NA — inutile de supprimer des lignes au préalable. Passez un use = différent (par exemple "complete.obs") ou method = "spearman" si votre analyse l’exige.

corrr fixe délibérément à NA la corrélation de chaque variable avec elle-même (toujours égale à 1), afin que la diagonale ne domine pas les résumés, les tris ou les graphiques. C’est pourquoi network_plot() ne trace jamais de boucle sur soi-même et pourquoi fashion() affiche une diagonale vide.

Utilisez un graphe de réseau pour voir la structure — quelles variables se regroupent — surtout avec de nombreuses variables. Utilisez une heatmap/un corrélogramme (par exemple ggcorrplot) pour consulter la force exacte d’une paire précise. Ils répondent à des questions différentes, si bien que de nombreuses analyses utilisent les deux.

Pour aller plus loin dans /learn

Cet article est la recette ciblée. Pour les leçons complètes, sous contrôle de reproductibilité, sur l’analyse de corrélation et la boîte à outils graphique derrière ces figures, voyez :

  • Matrice de corrélation en R — calculer, formater et interpréter la matrice qui alimente le réseau.
  • ggcorrplot en R — le paquet ggcorrplot du fondateur pour des heatmaps de corrélation en qualité publication.
  • Corrélogramme en R — la même heatmap de corrélation avec le paquet corrplot.
  • ggplot2 en R — la grammaire des graphiques sur laquelle corrr construit ces figures.

Voir aussi

A correlation network graph of the mtcars variables: nodes are variables, azure edges show positive correlations and red edges negative ones, with mpg sitting opposite a tight weight–displacement–cylinder cluster.

Cette page vous a-t-elle été utile ?

Recevez les nouvelles leçons R & Python par e-mail

Pratique, reproductible, sans spam. Désinscription à tout moment.

Double opt-in. Nous ne partageons jamais votre e-mail.

Partager cette pageXLinkedInRedditHN

Citation

BibTeX
@online{kassambara2026,
  author = {Kassambara, Alboukadel},
  title = {Graphe de réseau de corrélation en R avec corrr},
  date = {2026-07-08},
  url = {https://www.datanovia.com/blog/correlation-network-in-r},
  langid = {fr}
}
Veuillez citer ce travail comme suit :
Kassambara, Alboukadel. 2026. “Graphe de réseau de corrélation en R avec corrr.” July 8. https://www.datanovia.com/blog/correlation-network-in-r.