Test de corrélation en R : Pearson, Spearman & Kendall
Tester si deux variables sont significativement corrélées — rstatix à la manière moderne, base R pour les classiques — en direct dans votre navigateur
Apprenez à réaliser un test de corrélation entre deux variables en R. Utilisez cor_test() de rstatix pour un résultat ordonné (coefficient, intervalle de confiance et p-value) et cor.test() de base R pour la sortie classique — Pearson (paramétrique), Spearman et Kendall (basés sur les rangs), avec les vérifications d’hypothèses qui vous disent laquelle utiliser, et un nuage de points ggpubr qui affiche le coefficient sur le panneau. Modifiez et exécutez chaque exemple en direct.
Date de publication
22 juin 2026
Modifié
17 juillet 2026
AstucePoints clés
Un test de corrélation mesure si deux variables numériques évoluent ensemble — et si ce lien est statistiquement significatif.
Utilisez cor_test() de rstatix pour un résultat ordonné (cor, intervalle de confiance, p) ou base R cor.test() pour l’affichage classique. Les deux enveloppent les mêmes statistiques.
Choisissez la méthode selon vos données : Pearson pour une relation linéaire entre des variables distribuées normalement ; Spearman ou Kendall (basés sur les rangs) lorsque la normalité ou la linéarité fait défaut.
Lisez trois nombres : le coefficient (−1 à +1, force + direction), la p-value (est-il significatif ?), et l’intervalle de confiance (quelle précision).
Visualisez-le avec ggpubr::ggscatter() + stat_cor() — le nuage de points avec le coefficient affiché sur le panneau.
Introduction
Un test de corrélation répond à une question que les chercheurs se posent constamment : ces deux variables sont-elles liées, et la relation est-elle réelle ou n’est-ce que du bruit ? Par exemple — le poids d’une voiture est-il lié à sa consommation de carburant ? L’âge maternel est-il lié au poids de naissance d’un bébé ?
Le test vous donne un coefficient de corrélation entre −1 et +1 (son signe est la direction, sa magnitude la force) et une p-value qui vous indique si l’association est statistiquement significative. Cette leçon réalise le test de deux façons — la moderne, conviviale avec les pipes, rstatixcor_test() et la classique base R cor.test() — en utilisant les données intégrées mtcars, et montre les vérifications des hypothèses qui décident quelle méthode est digne de confiance.
Les trois méthodes de corrélation
Il existe trois méthodes standard. Elles diffèrent par ce qu’elles supposent à propos de vos données :
Méthode
Ce qu’elle mesure
À utiliser quand
Pearson (r)
Association linéaire
Les deux variables sont à peu près normales et la relation est linéaire (paramétrique)
Spearman (ρ)
Association monotone des rangs
La normalité/linéarité fait défaut, ou vous avez des données ordinales (non paramétrique)
Kendall (τ)
Concordance des rangs
Petits échantillons ou nombreux rangs ex æquo ; une alternative robuste basée sur les rangs
Pearson est la méthode par défaut et la plus courante. Lorsque ses hypothèses ne tiennent pas, passez à une méthode basée sur les rangs (Spearman ou Kendall) — le même argument method = sélectionne les trois.
NoteLes mathématiques derrière le coefficient (optionnel)
Vous ne les calculez jamais à la main — cor_test() le fait — mais les formules expliquent pourquoi les méthodes par rang résistent aux valeurs aberrantes et à la non-normalité. Le r de Pearson est la covariance standardisée des deux variables :
et le τ de Kendall est construit à partir des paires concordantes moins discordantes, \(\tau = (n_c - n_d) / \tfrac{1}{2}n(n-1)\). La p-value provient d’une statistique t, \(t = r\sqrt{n-2}\,/\sqrt{1-r^2}\), à \(df = n-2\) degrés de liberté — exactement les t et df que vous verrez dans la sortie base R ci-dessous.
Regardez d’abord les données
Tracez toujours la relation avant de la tester. ggpubr::ggscatter() dessine le nuage, une droite de régression ajustée et sa bande de confiance en un seul appel — ici, le poids de la voiture (wt) en fonction des miles par gallon (mpg) :
library(ggpubr)ggscatter( mtcars, x ="wt", y ="mpg",add ="reg.line", conf.int =TRUE,color ="#3a86d4",add.params =list(color ="#1f4e79"),xlab ="Weight (1000 lbs)", ylab ="Miles per gallon") +stat_cor(method ="pearson") # prints R and the p-value on the panel
Les points s’alignent le long d’une nette droite descendante : les voitures plus lourdes consomment plus de carburant. La relation paraît linéaire, donc Pearson est un point de départ raisonnable — mais vérifions son hypothèse avant de faire confiance au nombre.
Vérifiez l’hypothèse : les variables sont-elles normales ?
La corrélation de Pearson suppose que chaque variable est approximativement distribuée normalement. Testez-la avec le test de Shapiro-Wilk (p > 0.05 → pas d’écart significatif à la normale) et un Q-Q plot. Avec rstatix, shapiro_test() vérifie plusieurs colonnes à la fois :
library(rstatix)mtcars %>%shapiro_test(wt, mpg)
# A tibble: 2 × 3
variable statistic p
<chr> <dbl> <dbl>
1 mpg 0.948 0.123
2 wt 0.943 0.0927
Les deux p-values sont au-dessus de 0.05, donc nous ne pouvons pas rejeter la normalité — Pearson est approprié. Une vérification visuelle avec ggpubr::ggqqplot() devrait montrer des points qui épousent la ligne de référence :
library(ggpubr)ggarrange(ggqqplot(mtcars, "wt", title ="wt"),ggqqplot(mtcars, "mpg", title ="mpg"),ncol =2)
Note
Si les points s’éloignent fortement de la ligne, ou si le nuage de points montre un motif courbé, les données ne conviennent pas à Pearson — utilisez plutôt Spearman ou Kendall (montrés ci-dessous). Consultez la leçon dédiée au test de normalité pour le flux de travail complet des hypothèses.
Réaliser le test de corrélation
Avec rstatix (recommandé)
cor_test() prend les données et les deux colonnes et renvoie un tibble ordonné — une seule ligne, chaque nombre dont vous avez besoin, prêt à être passé dans un rapport ou un graphique :
Les colonnes sont : cor (le coefficient), statistic et p (la statistique t et sa p-value), conf.low/conf.high (l’intervalle de confiance à 95 %) et method. Ici, le coefficient vaut environ −0,87 avec une p-value très inférieure à 0,05, donc le poids et la consommation de carburant sont significativement, fortement et négativement corrélés. L’intervalle de confiance à 95 % s’étend d’environ −0,93 à −0,74, une bande étroite qui confirme une estimation précise — rapportez-le toujours aux côtés du coefficient.
Astuce
Exécutez-le sur vos propres données. Chargez d’abord votre fichier — mydata <- read.csv("my-file.csv") — puis passez-le en utilisant vos propres noms de colonnes : mydata %>% cor_test(var1, var2). Pour les valeurs manquantes, ajoutez use = "complete.obs".
Avec base R
cor.test() calcule le même test et affiche le rapport classique, plus complet :
res <-cor.test(mtcars$wt, mtcars$mpg, method ="pearson")res
Pearson's product-moment correlation
data: mtcars$wt and mtcars$mpg
t = -9.559, df = 30, p-value = 1.294e-10
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.9338264 -0.7440872
sample estimates:
cor
-0.8676594
Lisez la sortie : cor (sample estimates) est le coefficient, t/df sont la statistique de test et les degrés de liberté (ils ne servent qu’à calculer la p-value — vous rapportez le coefficient et la p-value), p-value est la significativité, et 95 percent confidence interval encadre la vraie corrélation. Récupérez les valeurs individuelles directement depuis l’objet résultat :
res <-cor.test(mtcars$wt, mtcars$mpg, method ="pearson")res$estimate # the correlation coefficient
cor
-0.8676594
res$p.value # the p-value
[1] 1.293959e-10
Astuce
Coefficient vs. test. Le cor(x, y) de base R renvoie seulement le coefficient — pas de p-value, pas d’intervalle. Utilisez cor.test() (ou rstatix cor_test()) chaque fois que vous avez besoin de savoir si la corrélation est significative. Pour les valeurs manquantes en base R, ajoutez use = "complete.obs".
Spearman et Kendall (quand Pearson ne convient pas)
Si la normalité ou la linéarité fait défaut, changez de méthode avec un seul argument — l’appel rstatix reste identique par ailleurs :
Les deux méthodes basées sur les rangs concordent avec Pearson ici — une forte association négative — ce qui est rassurant. L’équivalent base R est le même argument method = : cor.test(mtcars$wt, mtcars$mpg, method = "spearman").
Interpréter le coefficient de corrélation
Le coefficient se situe toujours entre −1 et +1 :
+1 — corrélation positive parfaite : quand x augmente, y augmente.
0 — aucune association linéaire/monotone.
−1 — corrélation négative parfaite : quand x augmente, y diminue.
Un repère de force approximatif : |r| ≈ 0.1 faible, 0.3 modérée, 0.5+ forte (cela dépend de votre domaine). Notre −0,87 est une forte corrélation négative. Associez toujours le coefficient à la p-value — un grand coefficient issu d’un échantillon minuscule peut ne pas être significatif, et un résultat significatif issu d’un énorme échantillon peut tout de même être trivialement petit.
Il est utile d’habituer votre œil à l’allure de chaque valeur — un nuage serré orienté vers le bas (forte négative), une tache informe (aucune association) et un nuage serré orienté vers le haut (forte positive) :
Corrélation n’est pas causalité. Une corrélation significative signifie que deux variables évoluent ensemble — non que l’une cause l’autre. Une troisième variable cachée (ici, la taille du moteur entraîne à la fois le poids et la consommation de carburant) peut produire une corrélation sans lien causal direct.
Essayez en direct
Exécutez le flux de travail complet sur une autre paire — la puissance du moteur (hp) vs. le temps sur un quart de mile (qsec). Modifiez les colonnes ou la méthode et relancez ; le bac à sable démarre au premier Run.
🟢 Avec un agent IA
Demandez à Prova« la corrélation entre ces deux colonnes de mes données est-elle significative, et devrais-je utiliser Pearson ou Spearman ? » — elle répond avec du code rstatix que vous pouvez exécuter sur vos propres données, puis vous aide à lire le coefficient et la p-value. The runtime is the judge.Demander à Prova →
Problèmes courants
cor_test() could not find function / object. Chargez d’abord rstatix — library(rstatix) — qui fournit aussi le pipe %>% utilisé dans ces exemples.
La p-value est significative mais le coefficient est minuscule. Avec un grand échantillon, même une corrélation quasi nulle peut être « significative ». Jugez l’importance pratique à partir du coefficient et de son intervalle de confiance, pas de la p-value seule.
Un nuage courbé avec un r de Pearson quasi nul. Pearson ne détecte que l’association linéaire. Une relation en U ou courbée peut avoir r ≈ 0 tout en étant fortement liée — passez à Spearman, ou modélisez la courbe directement.
Questions fréquentes
NoteQuelle est la différence entre cor() et cor.test() en R ?
cor(x, y) renvoie seulement le coefficient de corrélation — un seul nombre. cor.test(x, y) (et rstatix cor_test()) réalisent le test statistique complet : le coefficient plus la statistique t, les degrés de liberté, la p-value et un intervalle de confiance. Utilisez cor.test()/cor_test() chaque fois que vous avez besoin de savoir si la corrélation est statistiquement significative.
NoteDevrais-je utiliser la corrélation de Pearson, Spearman ou Kendall ?
Utilisez Pearson lorsque les deux variables sont approximativement distribuées normalement et que leur relation est linéaire. Utilisez Spearman ou Kendall (basés sur les rangs, non paramétriques) lorsque la normalité ou la linéarité fait défaut, lorsque vous avez des données ordinales, ou avec de petits échantillons et de nombreuses valeurs ex æquo. Vérifiez la normalité avec shapiro_test() et regardez le nuage de points avant de décider.
NoteComment interpréter le coefficient de corrélation ?
Le coefficient varie de −1 à +1. Son signe est la direction (+ signifie que les deux augmentent ensemble, − signifie que l’un augmente quand l’autre diminue) et sa magnitude est la force (0 = aucune association, 1 = parfaite). À titre indicatif, |r| autour de 0.1 est faible, 0.3 modérée, et 0.5 ou plus forte — mais interprétez-le toujours en parallèle de la p-value et des normes de votre domaine.
NoteQu’est-ce qui est considéré comme un coefficient de corrélation fort ou bon ?
Il n’existe pas de seuil universel — ce qui compte comme « fort » dépend de votre domaine. À titre indicatif, |r| autour de 0,1 est faible, 0,3 modéré et 0,5 ou plus fort ; dans des données biologiques ou sociales bruitées, un r de 0,4 peut être notable, tandis qu’un étalonnage en physique peut exiger 0,99. Surtout, la significativité n’est pas la force : avec une grande taille d’échantillon, même un r minuscule (disons 0,1) peut être statistiquement significatif, alors jugez l’importance d’après le coefficient et son intervalle de confiance, pas la p-value seule.
NoteQue signifie une p-value de corrélation significative ?
Une p-value inférieure à votre seuil de signification (couramment 0.05) signifie que la corrélation observée a peu de chances d’être apparue par hasard si la vraie corrélation était nulle — en moyenne, des échantillons tirés sous cette hypothèse produiraient rarement un lien aussi fort. Vous concluez donc que les variables sont significativement associées. Elle ne mesure pas la force de la relation (c’est le coefficient qui le fait) et elle n’implique pas la causalité.
NoteLa corrélation implique-t-elle la causalité ?
Non. Une corrélation montre que deux variables évoluent ensemble, non que l’une cause l’autre. L’ association peut être due à une troisième variable non mesurée, ou être entièrement fortuite. Établir la causalité requiert une expérience contrôlée ou une conception soignée d’inférence causale, pas un test de corrélation seul.
Testez vos connaissances
ImportantPratique
Exécutez-le. Dans la cellule en direct ci-dessous, calculez la corrélation entre drat (rapport de pont arrière) et mpg dans mtcars. Est-elle positive ou négative ? Significative ?
Conceptuel. Un nuage de points montre une nette forme en U, pourtant cor_test() renvoie r ≈ 0.02 avec p = 0.9. Que se passe-t-il, et quelle méthode (s’il y en a une) aiderait ?
NoteIndice
Remplissez les deux blancs avec les noms de colonnes drat et mpg. Regardez la colonne cor pour la direction (signe) et la colonne p pour la significativité. Pour la question 2, rappelez-vous quel type d’ association Pearson peut et ne peut pas détecter.
NoteSolution
library(rstatix)mtcars %>%cor_test(drat, mpg)#> cor ≈ 0.68, p ≈ 1.8e-05 → a strong, significant POSITIVE correlation.
Pour la question 2 : une relation en U est non linéaire, et Pearson ne mesure que l’association linéaire — il rapporte donc r ≈ 0 même si les variables sont clairement liées. Aucune méthode de corrélation ne capture pleinement une forme en U (Spearman/Kendall détectent les tendances monotones, pas les courbes) ; le bon réflexe est de modéliser la courbure (par ex. un terme quadratique) plutôt que de se fier à un seul coefficient de corrélation.
Conclusion
Vous savez maintenant réaliser et interpréter un test de corrélation en R de deux façons : le rstatix cor_test() ordonné et le classique base R cor.test(), avec Pearson, Spearman et Kendall sélectionnés par un seul argument et les hypothèses qui vous disent à laquelle vous fier. Lisez le coefficient pour la force et la direction, la p-value pour la significativité, et l’intervalle de confiance pour la précision — et regardez toujours d’abord le nuage de points.
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.