Matrice de corrélation en R : calcul, visualisation et p-values
Toutes les corrélations par paires d’un coup — rstatix à la manière tidy, base R pour les classiques — en direct dans votre navigateur
Apprenez à calculer et visualiser une matrice de corrélation en R. Utilisez cor_mat() de rstatix pour une matrice tidy avec p-values, base R cor() + Hmisc rcorr() pour la voie classique, réorganisez en table longue, marquez les corrélations significatives, et tracez un corrélogramme avec corrplot — chaque exemple s’exécute en direct dans votre navigateur.
Date de publication
22 juin 2026
Modifié
7 juillet 2026
AstucePoints clés
Une matrice de corrélation affiche le coefficient de corrélation pour chaque paire de variables numériques dans un même tableau — le moyen rapide de repérer les relations dans un jeu de données entier.
Calculez-la avec cor_mat() de rstatix (tidy, transporte les p-values) ou base R cor() (coefficients seuls) + Hmisc::rcorr() pour les seuils de signification.
Transformez la matrice carrée en table longue (cor_gather()), ne gardez qu’un seul triangle, et marquez les corrélations significatives (cor_mark_significant()).
Visualisez-la sous forme de corrélogramme avec corrplot() — la couleur et la taille encodent la force et la direction, et les cellules non significatives peuvent être laissées vides.
Traduisez la prose seule entre les moteurs : cor(), cor_mat(), rcorr() et corrplot() décrivent tous la même matrice.
Introduction
Un test de corrélation répond à la relation entre deux variables. Une matrice de corrélation passe à l’échelle : elle calcule le coefficient pour chaque paire de variables numériques d’un coup, en renvoyant un tableau carré que vous pouvez parcourir ou tracer pour trouver les relations les plus fortes dans un jeu de données entier.
Cette leçon construit la matrice de deux façons — le workflow tidy rstatixcor_mat() (qui transporte les p-values avec lui) et le classique base R cor() + Hmisc::rcorr() — puis la transforme, la filtre et la visualise sous forme de corrélogramme. Nous utilisons six colonnes numériques du jeu de données intégré mtcars tout au long.
cor() comme cor_mat() utilisent par défaut la corrélation de Pearson. Pour les coefficients non paramétriques fondés sur les rangs — lorsque la relation est monotone mais non linéaire, ou que les données sont ordinales ou non normales — passez method = "spearman" ou method = "kendall" (cor(mydata, method = "spearman"), cor_mat(method = "spearman")). Le choix reflète celui du test de corrélation : Pearson pour le linéaire, Spearman/Kendall pour les rangs.
Avec rstatix (recommandé)
cor_mat() renvoie une matrice de corrélation tidy — un data frame que vous pouvez enchaîner par pipe, et qui se souvient des p-values pour les étapes ultérieures :
Vous pouvez vous concentrer sur quelques variables (cor_mat(mpg, hp, wt)) ou en exclure certaines (cor_mat(-mpg, -hp)) — la même grammaire de sélection que dplyr::select().
Avec base R
Le cor() de base R ne donne que les coefficients (arrondissez-les pour la lisibilité). Utilisez use = "complete.obs" si vos données comportent des valeurs manquantes :
Les coefficients proches de +1 (p. ex. disp–wt) évoluent ensemble ; proches de −1 (p. ex. mpg–wt) évoluent en sens opposé ; proches de 0 sont sans relation.
Obtenir les p-values (signification)
cor() seul ne vous dira pas si une corrélation est significative. Deux voies :
library(rstatix)mydata <- mtcars[, c("mpg", "disp", "hp", "drat", "wt", "qsec")]# rstatix: pull the p-value matrix straight from the tidy correlation matrixmydata %>%cor_mat() %>%cor_get_pval()
Lisez-la comme la matrice des coefficients : chaque cellule est la p-value de la paire correspondante, et tout ce qui est inférieur à 0,05 signale une corrélation statistiquement significative au seuil de 5 %. La diagonale fait exception — une variable est parfaitement corrélée avec elle-même, donc sa significativité n’est pas définie.
La voie classique en base R est Hmisc::rcorr(), qui renvoie les coefficients ($r), les tailles d’échantillon ($n) et les p-values ($P) dans un même objet :
mpg disp hp drat wt
mpg NA 9.380328e-10 1.787835e-07 1.776240e-05 1.293958e-10
disp 9.380328e-10 NA 7.142679e-08 5.282022e-06 1.222311e-11
hp 1.787835e-07 7.142679e-08 NA 9.988772e-03 4.145827e-05
drat 1.776240e-05 5.282022e-06 9.988772e-03 NA 4.784260e-06
wt 1.293958e-10 1.222311e-11 4.145827e-05 4.784260e-06 NA
qsec 1.708199e-02 1.314404e-02 5.766253e-06 6.195826e-01 3.388683e-01
qsec
mpg 1.708199e-02
disp 1.314404e-02
hp 5.766253e-06
drat 6.195826e-01
wt 3.388683e-01
qsec NA
rcorr() laisse la diagonale à NA (la corrélation d’une variable avec elle-même n’est pas testée) — c’est pourquoi, avant de passer la matrice des p-value à corrplot() ci-dessous, on fixe diag(p.mat) <- 0 pour que la diagonale soit considérée comme significative et ne soit pas effacée.
Transformer en table tidy
Une matrice carrée devient difficile à lire dès qu’elle grandit. cor_gather() la réduit à une table longue — une ligne par paire, avec le coefficient et la p-value côte à côte (c’est le remplaçant tidy des fonctions auxiliaires faites maison de style flattenCorrMatrix() que vous avez peut-être vues). Extrayez d’abord un seul triangle pour supprimer les doublons et les entrées de la diagonale :
Les étoiles suivent la convention habituelle : * p<0.05, ** p<0.01, *** p<0.0001.
Visualiser la matrice de corrélation
Corrélogramme avec corrplot (recommandé)
Un corrélogramme transforme la matrice en image : la couleur et la taille encodent le coefficient. Réordonnez par regroupement pour que les variables apparentées soient côte à côte, et n’affichez que le triangle supérieur :
Les corrélations positives sont bleues, les négatives rouges ; plus un cercle est grand et foncé, plus la relation est forte. Pour laisser vides les cellules non significatives, passez la matrice de p-value :
La vue la plus dense en information associe chaque variable à toutes les autres. GGally::ggpairs() trace la distribution de chaque variable sur la diagonale, les nuages de points bivariés en dessous, et le coefficient de corrélation avec les étoiles de significativité au-dessus — toute la matrice en une seule image :
Les coefficients les plus grands (et le plus d’étoiles) au-dessus de la diagonale marquent les relations les plus fortes et les plus significatives, et le nuage de points en dessous permet de juger d’un coup d’œil la linéarité que Pearson suppose avant de vous fier au coefficient. psych::pairs.panels() et PerformanceAnalytics::chart.Correlation() tracent la même disposition distribution-sur-la-diagonale / nuage de points / coefficient en graphiques de base.
Autres vues rapides
rstatix::cor_plot() est un wrapper tidy autour de corrplot() qui prend directement un résultat cor_mat() — plus besoin de redescendre au cor() de base :
La légende indique les seuils : un blanc pour |r|<0.3, . à B pour des corrélations progressivement plus fortes. Pour une personnalisation poussée du corrélogramme (ordonnancement, méthodes mixtes, gestion de la non-signification), voir la leçon dédiée au corrélogramme.
Essayez en direct
Construisez et tracez une matrice de corrélation sur un autre ensemble de colonnes de mtcars — ajoutez carb et gear, ou changez la palette. Le bac à sable démarre au premier Run.
🟢 Avec un agent IA
Demandez à Prova« construis une matrice de corrélation de mes colonnes numériques et montre-moi lesquelles sont significatives » — elle répond avec du code rstatix que vous pouvez exécuter sur vos propres données, puis vous aide à lire le corrélogramme. The runtime is the judge.Demander à Prova →
Problèmes courants
cor() provoque une erreur sur un data frame avec des colonnes texte. Une matrice de corrélation a besoin d’une entrée numérique — sélectionnez d’abord uniquement les colonnes numériques (mydata[, sapply(mydata, is.numeric)]) ou avec dplyr::select().
La matrice est remplie de NA. Les valeurs manquantes se propagent. Ajoutez use = "complete.obs" à cor() (suppression cas par cas) ou nettoyez les données avant le calcul.
corrplot ne peut pas laisser vides les cellules non significatives.corrplot() a besoin d’une matrice de p-value via p.mat = ; cor() n’en produit pas — obtenez-la avec ggpubr::cor_pmat(), rstatix::cor_mat() |> cor_get_pval(), ou Hmisc::rcorr()$P.
Questions fréquentes
NoteComment créer une matrice de corrélation en R ?
Utilisez cor() de base R pour les coefficients — cor(mydata) sur un data frame numérique — ou mydata %>% cor_mat() de rstatix pour une matrice tidy qui transporte aussi les p-values. Arrondissez la sortie de base R avec round(cor(mydata), 2) pour la lisibilité.
NoteComment obtenir les p-values d’une matrice de corrélation ?
cor() de base ne renvoie que les coefficients. Utilisez Hmisc::rcorr(as.matrix(mydata)) (son élément $P est la matrice de p-value), ggpubr::cor_pmat(mydata), ou rstatix cor_mat() %>% cor_get_pval(). Pour combiner coefficients et signification dans un même tableau, utilisez rstatix::cor_mark_significant().
NoteQu’est-ce qu’un corrélogramme en R ?
Un corrélogramme est une représentation graphique d’une matrice de corrélation où la couleur — et, avec corrplot, la taille des cercles — encode la corrélation de chaque paire, ce qui permet de repérer les relations les plus fortes et les plus significatives d’un coup d’œil au lieu de lire un tableau de chiffres. corrplot::corrplot() est l’outil standard ; rstatix::cor_plot() est un wrapper tidy qui en trace un directement à partir d’un résultat de cor_mat().
NoteComment visualiser une matrice de corrélation en R ?
La façon la plus populaire est un corrélogramme avec corrplot::corrplot(cor(mydata), type = "upper") — la couleur et la taille des cercles encodent les corrélations. Les autres options sont rstatix::cor_plot() (un wrapper tidy), heatmap() de base, et symnum() pour une vue symbolique compacte.
NoteQuelle est la différence entre un test de corrélation et une matrice de corrélation ?
Un test de corrélation évalue la relation entre deux variables précises (coefficient + p-value + intervalle de confiance). Une matrice de corrélation calcule le coefficient pour chaque paire de variables numériques d’un coup, donnant un tableau carré que vous parcourez ou tracez pour comparer de nombreuses relations.
NoteComment calculer une matrice de corrélation de Spearman en R ?
Ajoutez l’argument method : cor(mydata, method = "spearman") en base R, ou mydata %>% cor_mat(method = "spearman") avec rstatix (utilisez "kendall" pour le tau de Kendall). Spearman et Kendall travaillent sur les rangs, ils capturent donc les relations monotones et sont robustes aux données non normales ou ordinales — le même choix paramétrique-vs-rangs que pour le test de corrélation à deux variables.
NoteComment réordonner ou regrouper une matrice de corrélation ?
Passez order = "hclust" à corrplot() pour réordonner les variables par classification hiérarchique, afin que les variables fortement apparentées soient côte à côte. Pour la forme tabulaire, rstatix::cor_reorder() réordonne un résultat cor_mat() de la même manière.
Testez vos connaissances
ImportantPratique
Exécutez-le. Dans la cellule en direct, calculez une matrice de corrélation de mpg, wt, hp et qsec, puis marquez les corrélations significatives. Quelle paire est la plus forte ?
Conceptuel. Votre corrélogramme affiche un cercle bleu intense entre deux variables, mais en laissant vide selon sig.level = 0.05 cette cellule reste vide. Comment un coefficient élevé peut-il être non significatif ?
NoteIndice
Remplissez les quatre blancs avec mpg, wt, hp, qsec. La corrélation la plus forte a le coefficient le plus proche de ±1 et le plus d’étoiles. Pour la question 2, pensez à la taille d’échantillon — la signification dépend à la fois du coefficient et du nombre d’observations dont vous disposez.
NoteSolution
library(rstatix)mtcars %>%select(mpg, wt, hp, qsec) %>%cor_mat() %>%cor_mark_significant()#> mpg–wt is the strongest (r ≈ -0.87, ***).
Pour la question 2 : la signification dépend de la taille d’échantillon, pas seulement du coefficient. Avec peu d’observations, même un r élevé peut avoir une p-value supérieure à 0.05 (l’intervalle de confiance est large), de sorte que corrplot le laisse vide. Collectez plus de données, ou rapportez le coefficient avec son intervalle plutôt que de vous fier à la seule étoile.
Conclusion
Vous savez désormais calculer une matrice de corrélation en R à la façon tidy de rstatix (cor_mat(), avec p-values, transformation et marques de signification) et à la façon classique de base (cor() + Hmisc::rcorr()), puis la transformer en corrélogramme avec corrplot() qui met en évidence les relations les plus fortes et significatives.
Chaque résultat de cette page a été produit par le code montré, exécuté au moment du build contre un environnement R figé — modifiez n’importe quel bloc et faites Run pour le reproduire vous-même.
@online{2026,
author = {},
title = {Matrice de corrélation en R : calcul, visualisation et
p-values},
date = {2026-06-22},
url = {https://www.datanovia.com/learn/biostatistics/correlation/correlation-matrix-in-r},
langid = {fr}
}