Jak znaleźć wartość p współczynnika korelacji w pandach


Współczynnik korelacji Pearsona można wykorzystać do pomiaru liniowego powiązania między dwiema zmiennymi.

Ten współczynnik korelacji zawsze przyjmuje wartość od -1 do 1 , gdzie:

  • -1 : Idealnie ujemna korelacja liniowa pomiędzy dwiema zmiennymi.
  • 0 : Brak korelacji liniowej pomiędzy dwiema zmiennymi.
  • 1: Idealnie dodatnia korelacja liniowa pomiędzy dwiema zmiennymi.

Aby określić, czy współczynnik korelacji jest istotny statystycznie, można obliczyć odpowiedni wynik t i wartość p.

Wzór na obliczenie wyniku t współczynnika korelacji (r) jest następujący:

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

Wartość p oblicza się jako odpowiadającą dwustronną wartość p dla rozkładu t z n-2 stopniami swobody.

Aby obliczyć wartość p współczynnika korelacji Pearsona w pandach, możesz użyć funkcji pearsonr() z biblioteki SciPy :

 from scipy. stats import pearsonr

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

Ta funkcja zwróci współczynnik korelacji Pearsona między kolumnami kolumna 1 i kolumna 2 wraz z odpowiednią wartością p, która mówi nam, czy współczynnik korelacji jest statystycznie istotny, czy nie.

Jeśli chcesz obliczyć wartość p współczynnika korelacji Pearsona dla każdej możliwej kombinacji kolumn w ramce DataFrame, możesz w tym celu użyć następującej funkcji niestandardowej:

 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

Poniższe przykłady pokazują, jak w praktyce obliczyć wartości p dla współczynników korelacji z następującymi pandami 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

Przykład 1: Oblicz wartość P współczynnika korelacji między dwiema kolumnami w Pandach

Poniższy kod pokazuje, jak obliczyć współczynnik korelacji Pearsona i odpowiadającą mu wartość p dla kolumn x i y ramki 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)

Z wyniku możemy zobaczyć:

  • Współczynnik korelacji Pearsona wynosi 0,4792 .
  • Odpowiednia wartość p wynosi 0,2296 .

Ponieważ współczynnik korelacji jest dodatni, oznacza to, że pomiędzy obiema zmiennymi istnieje dodatnia zależność liniowa.

Ponieważ jednak wartość p współczynnika korelacji jest nie mniejsza niż 0,05, korelacja nie jest istotna statystycznie.

Należy zauważyć, że możemy również użyć następującej składni, aby wyodrębnić wartość p ze współczynnika korelacji:

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

0.22961622926360523

Wartość p współczynnika korelacji wynosi 0,2296 .

Odpowiada to wartości p z poprzedniego wyniku.

Przykład 2: Oblicz wartość P współczynnika korelacji pomiędzy wszystkimi kolumnami w Pandach

Poniższy kod pokazuje, jak obliczyć współczynnik korelacji Pearsona i odpowiadającą mu wartość p dla każdej pary kolumn w ramce DataFrame pandy:

 #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

Z wyniku możemy zobaczyć:

  • Wartość p współczynnika korelacji pomiędzy x i y wynosi 0,2296 .
  • Wartość p współczynnika korelacji między x i z wynosi 0,0005 .
  • Wartość p współczynnika korelacji pomiędzy y i z wynosi 0,4238 .

Pamiętaj, że w naszej funkcji niestandardowej zaokrągliliśmy wartości p do czterech miejsc po przecinku.

Możesz zastąpić 4 w ostatnim wierszu funkcji inną liczbą, aby zaokrąglić do innej liczby miejsc po przecinku.

Uwaga : Pełną dokumentację funkcji SciPy pearsonr() można znaleźć tutaj .

Dodatkowe zasoby

Poniższe samouczki wyjaśniają, jak wykonywać inne typowe zadania związane z pandą:

Jak obliczyć korelację według grupy w Pandach
Jak obliczyć korelację przesuwną w pandach
Jak obliczyć korelację rangi Spearmana u pand

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *