Corrélation deux à deux, corrélation des paires ou pairwise correlations

corrélation deux à deux corrélation par paires avec R

 

 

Aujourd’hui, je vous propose un  article sur les corrélations deux à deux ; on les appelle aussi corrélations par paires, ou encore pairwise correlations en anglais. Je commencerai par expliquer pourquoi on peut être amené à calculer ces corrélations par paires, puis je présenterai les principales fonctions que j’utilise pour les représenter.

 

Table des matières : 

  • 1.Pourquoi calculer les corrélations deux à deux (corrélation par paires ou pairwise correlations) ?
  • 2.Obtenir la matrice de corrélation : fonction cor()
  • 3. Matrice visuelle avec la fonction pairs()
  • 4 Utilisation du package corrplot
  • 5. Utilisation du package corrr

 

1. Pourquoi calculer  les corrélations deux à deux (corrélation par paires ou pairwise correlations) ?

Classiquement, on s’intéresse à ces corrélations par paires lorsqu’on ajuste un modèle de régression linéaire multiple (ou linéaire généralisé multiple), pour évaluer les effets des variables explicatives sur une variable réponse à expliquer.

En effet, lorsque le modèle de régression multiple comporte plusieurs (au moins deux) variables prédictives fortement liées entre elles de façon linéaire, cela entraîne une instabilité du modèle, et le rend in-interprétable. On parle de multicollinéarité.

Il est donc important de repérer ces variables fortement liées entre elles de façon linéaire, afin de ne pas les inclure simultanément dans le modèle.

Et pour cela, on va calculer le coefficient de corrélation de Pearson, entre toutes les variables numériques deux à deux. C’est ce qu’on appelle les pairwise correlations.

Remarque : Certains utilisent une valeur seuil du coefficient de corrélation de Pearson à 0.85 pour retirer une des deux variable du modèle.

Au delà de ce problème de multicollinéarité, il peut également être intéressant pour mieux comprendre son jeu de données, d’étudier comment les variables sont liées entre elles. Et notamment de connaître les variables qui évoluent dans le même sens, celles qui évoluent à l’opposé, ou encore celles qui sont totalement indépendantes. Cela peut vraiment être utile, par exemple, pour bien comprendre les résultats d’un modèle de régression multiple.

On s’intéresse aussi à ces corrélations par paires lorsqu’on souhaite construire un modèle prédictif, car de nombreux algorithmes de Machine Learning sont plus performants lorsque les prédicteurs ne sont pas fortement corrélés.

Je vais alors vous présenter les principales fonctions que j’utilise lorsque je veux étudier les corrélations par paires. Pour les illustrer, je vais utiliser le jeu de données mtcars qui appartient au package datasets (chargé par défaut) en lui retirant les variables am et vs qui sont des variables catégorielles. Je nomme ce nouveau jeu de données mtcars2 :

 

 

2.Obtenir la matrice de corrélation : fonction cor()

Une façon toute simple d‘obtenir les coefficients de corrélation de Pearson pour toutes les paires de variables, est d’utiliser la fonction cor() du package stats, chargé par défaut.

 

Mais comme vous pouvez le voir, la matrice de corrélation obtenue n’est pas très facile à interpréter.

 

3. Matrice visuelle avec la fonction pairs()

Pour avoir une meilleure idée des relations entre les variables, j’aime bien utiliser la fonction pairs() du package graphics (chargé par défaut). Pour que la fonction renvoie une visualisation intéressante, il est nécessaire de copier coller dans la console la fonction panel.cor_simple(). Je l’ai adaptée de la fonction panel.cor disponible ici.

 

Cette fonction panel.cor_simple() entre dans l’argument upper.pannel de la fonction pairs() :

 

pairwise correlation

J’aime bien cette représentation, car dans la partie basse (à gauche), on peut voir la courbe de régression loess (régression de voisinage) entre les deux variables; ca permet d’avoir une idée de la forme de leur relation. Et dans la partie haute (à droite) on retrouve le coefficient de corrélation avec des étoiles pour indiquer la significativité du test d’égalité à zéro du coefficient de corrélation de Pearson.

On peut également obtenir une version plus complète avec le R2 et la p-value du test de l’égalité à zéro du coefficient de corrélation de Pearson, en utilisant la fonction panel.cor() du package “quantable”, en argument de upper.panel.

 

corrélation par paires

 

 

4. Utilisation du package corrplot

Pour obtenir des représentations plus synthétiques et plus visuelles, j’utilise la fonction corrplot(), du package corrplot.

Voici quelques visualisations que j’apprécie particulièrement :

 

corrélation deux à deux

Pour améliorer encore la visualisation, on peut aussi colorier la case en fonction du coefficient de corrélation :

 

pairwise correlation avec R

On peut encore obtenir une permutation des lignes et des colonnes avec l’argument order=”hclust” afin que les variables apparaissent par ensemble selon le sens de leur corrélation.

 

corrélation deux à deux avec R

Il est également possible de passer en blanc les cases correspondant à des corrélations non significatives. Pour cela, on utilise dans un premier temps la fonction cor.mtest(), qu’il faut copier coller dans la console.

 

 

Appliquée sur le jeu de données, cette fonction produit en sortie, non plus une matrice de corrélation, mais une matrice de p-values de tests d’égalité à 0 des coefficients de corrélations de Pearson :

 

Cette matrice est ensuite utilisée en argument de p.mat. Le seuil de significativité peut être modifié.

 

pairwise correlation avec R

Vous trouverez d’autres exemples de l’utilisation du package corrplot dans la vignette,
ainsi que sur ce post.

 

5. Utilisation du package corrr

Un autre package est particulièrement intéressant pour analyser les pairwise corrélations, il s’agit du package corrr. Ce package est compatible avec le tidyverse.

 

Par exemple, on peut rapidement obtenir la matrice de corrélation, avec
un format que je trouve très facile à lire.

 

La fonction rearrange(), permet comme tout à l’heure avec la fonction corrplot de réarranger la matrice pour obtenir des groupes de variables fortement corrélées. Les réarrangements ne sont pas identiques, au moins ici avec ce jeu de données.

 

Si on le souhaite, on peut facilement obtenir la matrice de corrélation de Spearman, ou de Kendall, à l’aide de l’argument méthod :

 

 

On peut aussi obtenir un format plus concis avec la fonction fashion().

 

Mais le vrai plus de ce package, c’est la fonction network_plot(), qui permet un autre type de visualisation qui me semble vraiment très intéressante, même si j’ai très peu de recul sur ce type de graph.

 

correlation deux à deux avec R

 

 

Et vous, que pensez vous de cette nouvelle représentation ?

 

Dans tous les cas, j’espère que ce court post, vous permettra de mieux étudier les corrélations deux à deux (ou par paire ou encore pairwise corrélation) entre vos variables, que cela soit pour identifier d’éventuels problèmes de multicollinéarité, ou simplement pour mieux comprendre vos données.

Si vous utilisez d’autres fonctions, n’hésitez pas à me les indiquer en commentaire. Et si cet article vous a plus, partagez le !

 

Retrouvez ici d’autres articles en lien avec celui que vous venez de lire : 

 

Partager l'article
  •  
  •  
  •  
  •  
  •  
    12
    Partages
  • 12
  •  
  •  
  •  
  •  

1 Commentaire

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *