Comment calculer une corrélation partielle en Python
En statistique, on utilise souvent le coefficient de corrélation de Pearson pour mesurer la relation linéaire entre deux variables. Cependant, nous souhaitons parfois comprendre la relation entre deux variables tout en contrôlant une troisième variable .
Par exemple, supposons que nous souhaitions mesurer l’association entre le nombre d’heures d’études d’un étudiant et la note obtenue à l’examen final, tout en contrôlant la note actuelle de l’étudiant dans la classe. Dans ce cas, nous pourrions utiliser une corrélation partielle pour mesurer la relation entre les heures étudiées et la note à l’examen final.
Ce tutoriel explique comment calculer une corrélation partielle en Python.
Exemple : corrélation partielle en Python
Supposons que nous ayons le Pandas DataFrame suivant qui affiche la note actuelle, le nombre total d’heures étudiées et la note de l’examen final pour 10 étudiants :
import numpy as np import panda as pd data = {'currentGrade': [82, 88, 75, 74, 93, 97, 83, 90, 90, 80], 'hours': [4, 3, 6, 5, 4, 5, 8, 7, 4, 6], 'examScore': [88, 85, 76, 70, 92, 94, 89, 85, 90, 93], } df = pd.DataFrame(data, columns = ['currentGrade','hours', 'examScore']) df currentGrade hours examScore 0 82 4 88 1 88 3 85 2 75 6 76 3 74 5 70 4 93 4 92 5 97 5 94 6 83 8 89 7 90 7 85 8 90 4 90 9 80 6 93
Pour calculer la corrélation partielle entre les heures et examScore tout en contrôlant currentGrade , nous pouvons utiliser la fonction partial_corr() du package pingouin , qui utilise la syntaxe suivante :
partial_corr (données, x, y, covar)
où:
- data : nom de la trame de données
- x, y : noms des colonnes dans le dataframe
- covar : le nom de la colonne de covariable dans le dataframe (par exemple la variable que vous contrôlez)
Voici comment utiliser cette fonction dans cet exemple particulier :
#install and import pingouin package pip install pingouin import pingouin as pg #find partial correlation between hours and exam score while controlling for grade pg.partial_corr(data=df, x='hours', y='examScore', covar='currentGrade') n r CI95% r2 adj_r2 p-val BF10 power pearson 10 0.191 [-0.5, 0.73] 0.036 -0.238 0.598 0.438 0.082
Nous pouvons voir que la corrélation partielle entre les heures étudiées et la note à l’examen final est de 0,191 , ce qui est une petite corrélation positive. À mesure que le nombre d’heures d’étude augmente, les résultats à l’examen ont également tendance à augmenter, en supposant que la note actuelle reste constante.
Pour calculer la corrélation partielle entre plusieurs variables à la fois, nous pouvons utiliser la fonction .pcorr() :
#calculate all pairwise partial correlations, rounded to three decimal places
df.pcorr().round(3)
currentGrade hours examScore
currentGrade 1.000 -0.311 0.736
hours -0.311 1.000 0.191
examScore 0.736 0.191 1.000
La façon d’interpréter le résultat est la suivante :
- La corrélation partielle entre la note actuelle et les heures étudiées est de -0,311 .
- La corrélation partielle entre la note actuelle et la note à l’examen 0,736 .
- La corrélation partielle entre les heures étudiées et la note à l’examen 0,191 .