Comment trouver la valeur P du coefficient de corrélation chez les pandas



Le coefficient de corrélation de Pearson peut être utilisé pour mesurer l’association linéaire entre deux variables.

Ce coefficient de corrélation prend toujours une valeur comprise entre -1 et 1 où :

  • -1 : Corrélation linéaire parfaitement négative entre deux variables.
  • 0 : Aucune corrélation linéaire entre deux variables.
  • 1 : Corrélation linéaire parfaitement positive entre deux variables.

Pour déterminer si un coefficient de corrélation est statistiquement significatif, vous pouvez calculer le score t et la valeur p correspondants.

La formule pour calculer le t-score d’un coefficient de corrélation (r) est :

t = r√ n-2 / √ 1-r 2

La valeur p est calculée comme la valeur p bilatérale correspondante pour la distribution t avec n-2 degrés de liberté.

Pour calculer la valeur p d’un coefficient de corrélation de Pearson chez les pandas, vous pouvez utiliser la fonction pearsonr() de la bibliothèque SciPy :

from scipy.stats import pearsonr

pearsonr(df['column1'], df['column2'])

Cette fonction renverra le coefficient de corrélation de Pearson entre les colonnes colonne1 et colonne2 ainsi que la valeur p correspondante qui nous indique si le coefficient de corrélation est statistiquement significatif ou non.

Si vous souhaitez calculer la valeur p pour le coefficient de corrélation de Pearson de chaque combinaison possible de colonnes par paire dans un DataFrame, vous pouvez utiliser la fonction personnalisée suivante pour ce faire :

def r_pvalues(df):
    cols = pd.DataFrame(columns=df.columns)
    p = cols.transpose().join(cols, how='outer')
    for r in df.columns:
        for c in df.columns:
            tmp = df[df[r].notnull() & df[c].notnull()]
            p[r][c] = round(pearsonr(tmp[r], tmp[c])[1], 4)
    return p

Les exemples suivants montrent comment calculer les valeurs p pour les coefficients de corrélation en pratique avec le DataFrame pandas suivant :

import pandas as pd

#create DataFrame
df = pd.DataFrame({'x': [4, 5, 5, 7, 8, 10, 12, 13, 14, 15],
                   'y': [10, 12, 14, 18, np.nan, 19, 13, 20, 14, np.nan],
                   'z': [20, 24, 24, 23, 19, 15, 18, 14, 10, 12]})

#view DataFrame
print(df)

    x     y   z
0   4  10.0  20
1   5  12.0  24
2   5  14.0  24
3   7  18.0  23
4   8   NaN  19
5  10  19.0  15
6  12  13.0  18
7  13  20.0  14
8  14  14.0  10
9  15   NaN  12

Exemple 1 : Calculer la valeur P pour le coefficient de corrélation entre deux colonnes dans Pandas

Le code suivant montre comment calculer le coefficient de corrélation de Pearson et la valeur p correspondante pour les colonnes x et y du DataFrame :

from scipy.stats import pearsonr

#drop all rows with NaN values
df_new = df.dropna()

#calculation correlation coefficient and p-value between x and y
pearsonr(df_new['x'], df_new['y'])

PearsonRResult(statistic=0.4791621985883838, pvalue=0.22961622926360523)

À partir du résultat, nous pouvons voir :

  • Le coefficient de corrélation de Pearson est de 0,4792 .
  • La valeur p correspondante est de 0,2296 .

Puisque le coefficient de corrélation est positif, cela indique qu’il existe une relation linéaire positive entre les deux variables.

Cependant, puisque la valeur p du coefficient de corrélation n’est pas inférieure à 0,05, la corrélation n’est pas statistiquement significative.

Notez que nous pouvons également utiliser la syntaxe suivante pour extraire la valeur p du coefficient de corrélation :

#extract p-value of correlation coefficient
pearsonr(df_new['x'], df_new['y'])[1]

0.22961622926360523

La valeur p pour le coefficient de corrélation est de 0,2296 .

Cela correspond à la valeur p de la sortie précédente.

Exemple 2 : Calculer la valeur P pour le coefficient de corrélation entre toutes les colonnes de Pandas

Le code suivant montre comment calculer le coefficient de corrélation de Pearson et la valeur p correspondante pour chaque combinaison par paire de colonnes dans le DataFrame pandas :

#create function to calculate p-values for each pairwise correlation coefficient
def r_pvalues(df):
    cols = pd.DataFrame(columns=df.columns)
    p = cols.transpose().join(cols, how='outer')
    for r in df.columns:
        for c in df.columns:
            tmp = df[df[r].notnull() & df[c].notnull()]
            p[r][c] = round(pearsonr(tmp[r], tmp[c])[1], 4)
    return p

#use custom function to calculate p-values
r_pvalues(df)

             x	     y	     z
x	   0.0	0.2296	0.0005
y	0.2296	   0.0	0.4238
z	0.0005	0.4238	   0.0

À partir du résultat, nous pouvons voir :

  • La valeur p pour le coefficient de corrélation entre x et y est 0,2296 .
  • La valeur p pour le coefficient de corrélation entre x et z est 0,0005 .
  • La valeur p pour le coefficient de corrélation entre y et z est 0,4238 .

Notez que nous avons arrondi les valeurs p à quatre décimales dans notre fonction personnalisée.

N’hésitez pas à remplacer le 4 de la dernière ligne de la fonction par un nombre différent pour arrondir à un nombre différent de décimales.

Remarque : Vous pouvez trouver la documentation complète de la fonction SciPy pearsonr() ici .

Ressources additionnelles

Les didacticiels suivants expliquent comment effectuer d’autres tâches courantes chez les pandas :

Comment calculer la corrélation par groupe chez Pandas
Comment calculer la corrélation glissante chez les pandas
Comment calculer la corrélation de rang Spearman chez les pandas

Ajouter un commentaire

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