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