Hoe de p-waarde van de correlatiecoëfficiënt bij panda's te vinden


De correlatiecoëfficiënt van Pearson kan worden gebruikt om de lineaire associatie tussen twee variabelen te meten.

Deze correlatiecoëfficiënt heeft altijd een waarde tussen -1 en 1 waarbij:

  • -1 : Perfect negatieve lineaire correlatie tussen twee variabelen.
  • 0 : Geen lineaire correlatie tussen twee variabelen.
  • 1: Perfect positieve lineaire correlatie tussen twee variabelen.

Om te bepalen of een correlatiecoëfficiënt statistisch significant is, kun je de bijbehorende t-score en p-waarde berekenen.

De formule voor het berekenen van de t-score van een correlatiecoëfficiënt (r) is:

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

De p-waarde wordt berekend als de overeenkomstige tweezijdige p-waarde voor de t-verdeling met n-2 vrijheidsgraden.

Om de p-waarde van een Pearson-correlatiecoëfficiënt in panda’s te berekenen, kunt u de functie Pearsonr() uit de SciPy- bibliotheek gebruiken:

 from scipy. stats import pearsonr

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

Deze functie retourneert de Pearson-correlatiecoëfficiënt tussen de kolommen kolom 1 en kolom 2 samen met de bijbehorende p-waarde die ons vertelt of de correlatiecoëfficiënt statistisch significant is of niet.

Als u de p-waarde voor de Pearson-correlatiecoëfficiënt van elke mogelijke paarsgewijze combinatie van kolommen in een DataFrame wilt berekenen, kunt u hiervoor de volgende aangepaste functie gebruiken:

 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

De volgende voorbeelden laten zien hoe u in de praktijk p-waarden voor correlatiecoëfficiënten kunt berekenen met de volgende panda’s DataFrame:

 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

Voorbeeld 1: Bereken de P-waarde voor de correlatiecoëfficiënt tussen twee kolommen in Panda’s

De volgende code laat zien hoe u de Pearson-correlatiecoëfficiënt en de bijbehorende p-waarde voor de x- en y- kolommen van het DataFrame berekent:

 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)

Uit het resultaat kunnen we zien:

  • De Pearson-correlatiecoëfficiënt is 0,4792 .
  • De overeenkomstige p-waarde is 0,2296 .

Omdat de correlatiecoëfficiënt positief is, geeft dit aan dat er een positief lineair verband bestaat tussen de twee variabelen.

Omdat de p-waarde van de correlatiecoëfficiënt echter niet kleiner is dan 0,05, is de correlatie niet statistisch significant.

Merk op dat we ook de volgende syntaxis kunnen gebruiken om de p-waarde uit de correlatiecoëfficiënt te extraheren:

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

0.22961622926360523

De p-waarde voor de correlatiecoëfficiënt is 0,2296 .

Dit komt overeen met de p-waarde van de vorige uitvoer.

Voorbeeld 2: Bereken de P-waarde voor de correlatiecoëfficiënt tussen alle kolommen in Panda’s

De volgende code laat zien hoe u de Pearson-correlatiecoëfficiënt en de bijbehorende p-waarde kunt berekenen voor elke paarsgewijze combinatie van kolommen in het panda’s DataFrame:

 #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

Uit het resultaat kunnen we zien:

  • De p-waarde voor de correlatiecoëfficiënt tussen x en y is 0,2296 .
  • De p-waarde voor de correlatiecoëfficiënt tussen x en z is 0,0005 .
  • De p-waarde voor de correlatiecoëfficiënt tussen y en z is 0,4238 .

Merk op dat we de p-waarden in onze aangepaste functie hebben afgerond op vier decimalen.

Voel je vrij om de 4 in de laatste regel van de functie te vervangen door een ander getal om af te ronden op een ander aantal decimalen.

Opmerking : u kunt hier de volledige documentatie voor de SciPy- peasonr() -functie vinden.

Aanvullende bronnen

In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende panda-taken kunt uitvoeren:

Hoe de correlatie per groep in Panda’s te berekenen
Hoe de glijdende correlatie bij panda’s te berekenen
Hoe de Spearman-rangcorrelatie bij panda’s te berekenen

Einen Kommentar hinzufügen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert