Come trovare il valore p del coefficiente di correlazione nei panda


Il coefficiente di correlazione di Pearson può essere utilizzato per misurare l’associazione lineare tra due variabili.

Questo coefficiente di correlazione assume sempre un valore compreso tra -1 e 1 dove:

  • -1 : correlazione lineare perfettamente negativa tra due variabili.
  • 0 : Nessuna correlazione lineare tra due variabili.
  • 1: Correlazione lineare perfettamente positiva tra due variabili.

Per determinare se un coefficiente di correlazione è statisticamente significativo, è possibile calcolare il punteggio t e il valore p corrispondenti.

La formula per calcolare il t-score di un coefficiente di correlazione (r) è:

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

Il valore p viene calcolato come il corrispondente valore p a due code per la distribuzione t con n-2 gradi di libertà.

Per calcolare il valore p di un coefficiente di correlazione di Pearson nei panda, puoi utilizzare la funzione Pearsonr() dalla libreria SciPy :

 from scipy. stats import pearsonr

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

Questa funzione restituirà il coefficiente di correlazione di Pearson tra le colonne colonna1 e colonna2 insieme al corrispondente valore p che ci dice se il coefficiente di correlazione è statisticamente significativo o meno.

Se desideri calcolare il valore p per il coefficiente di correlazione Pearson di ogni possibile combinazione di colonne a coppie in un DataFrame, puoi utilizzare la seguente funzione personalizzata per farlo:

 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

I seguenti esempi mostrano come calcolare i valori p per i coefficienti di correlazione in pratica con i seguenti DataFrame panda:

 import pandas as pd

#createDataFrame
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

Esempio 1: calcolare il valore P per il coefficiente di correlazione tra due colonne in Panda

Il codice seguente mostra come calcolare il coefficiente di correlazione Pearson e il corrispondente valore p per le colonne xey del 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)

Dal risultato possiamo vedere:

  • Il coefficiente di correlazione di Pearson è 0,4792 .
  • Il valore p corrispondente è 0,2296 .

Poiché il coefficiente di correlazione è positivo, ciò indica che esiste una relazione lineare positiva tra le due variabili.

Tuttavia, poiché il valore p del coefficiente di correlazione non è inferiore a 0,05, la correlazione non è statisticamente significativa.

Si noti che possiamo anche utilizzare la seguente sintassi per estrarre il valore p dal coefficiente di correlazione:

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

0.22961622926360523

Il valore p per il coefficiente di correlazione è 0,2296 .

Questo corrisponde al valore p dell’output precedente.

Esempio 2: calcolare il valore P per il coefficiente di correlazione tra tutte le colonne in Pandas

Il codice seguente mostra come calcolare il coefficiente di correlazione di Pearson e il corrispondente valore p per ciascuna combinazione di colonne a coppie nel DataFrame panda:

 #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

Dal risultato possiamo vedere:

  • Il valore p per il coefficiente di correlazione tra xey è 0,2296 .
  • Il valore p per il coefficiente di correlazione tra xez è 0,0005 .
  • Il valore p per il coefficiente di correlazione tra yez è 0,4238 .

Tieni presente che abbiamo arrotondato i valori p a quattro cifre decimali nella nostra funzione personalizzata.

Sentiti libero di sostituire il 4 nell’ultima riga della funzione con un numero diverso da arrotondare a un numero diverso di cifre decimali.

Nota : puoi trovare la documentazione completa per la funzione SciPy Pearsonr() qui .

Risorse addizionali

I seguenti tutorial spiegano come eseguire altre attività comuni dei panda:

Come calcolare la correlazione per gruppo in Pandas
Come calcolare la correlazione mobile nei panda
Come calcolare la correlazione del rango di Spearman nei panda

Aggiungi un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *