Pandalarda korelasyon katsayısının p değeri nasıl bulunur?
Pearson korelasyon katsayısı iki değişken arasındaki doğrusal ilişkiyi ölçmek için kullanılabilir.
Bu korelasyon katsayısı her zaman -1 ile 1 arasında bir değer alır; burada:
- -1 : İki değişken arasında mükemmel negatif doğrusal korelasyon.
- 0 : İki değişken arasında doğrusal bir ilişki yok.
- 1: İki değişken arasında mükemmel pozitif doğrusal korelasyon.
Bir korelasyon katsayısının istatistiksel olarak anlamlı olup olmadığını belirlemek için karşılık gelen t-puanını ve p-değerini hesaplayabilirsiniz.
Korelasyon katsayısının (r) t-puanını hesaplama formülü şöyledir:
t = r√ n-2 / √ 1-r 2
P-değeri, n-2 serbestlik derecesine sahip t-dağılımı için karşılık gelen iki kuyruklu p-değeri olarak hesaplanır.
Pandalarda Pearson korelasyon katsayısının p değerini hesaplamak için SciPy kütüphanesindeki pearsonr() fonksiyonunu kullanabilirsiniz:
from scipy. stats import pearsonr pearsonr(df[' column1 '], df[' column2 '])
Bu işlev, sütun1 ve sütun2 arasındaki Pearson korelasyon katsayısını ve bize korelasyon katsayısının istatistiksel olarak anlamlı olup olmadığını söyleyen karşılık gelen p değerini döndürecektir.
Bir DataFrame’deki her olası ikili sütun kombinasyonunun Pearson korelasyon katsayısının p değerini hesaplamak istiyorsanız, bunu yapmak için aşağıdaki özel işlevi kullanabilirsiniz:
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
Aşağıdaki örnekler, aşağıdaki pandalar DataFrame ile pratikte korelasyon katsayıları için p değerlerinin nasıl hesaplanacağını gösterir:
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
Örnek 1: Pandas’ta iki sütun arasındaki korelasyon katsayısı için P değerini hesaplayın
Aşağıdaki kod, Pearson korelasyon katsayısının ve DataFrame’in x ve y sütunları için karşılık gelen p değerinin nasıl hesaplanacağını gösterir:
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)
Sonuçtan şunları görebiliriz:
- Pearson korelasyon katsayısı 0,4792’dir .
- Karşılık gelen p değeri 0,2296’dır .
Korelasyon katsayısının pozitif olması iki değişken arasında pozitif doğrusal bir ilişkinin olduğunu gösterir.
Ancak korelasyon katsayısının p değeri 0,05’ten küçük olmadığı için korelasyon istatistiksel olarak anlamlı değildir.
Korelasyon katsayısından p-değerini çıkarmak için aşağıdaki sözdizimini de kullanabileceğimizi unutmayın:
#extract p-value of correlation coefficient
pearsonr(df_new[' x '], df_new[' y '])[1]
0.22961622926360523
Korelasyon katsayısının p değeri 0,2296’dır .
Bu, önceki çıktıdaki p değeriyle eşleşir.
Örnek 2: Pandas’taki tüm sütunlar arasındaki korelasyon katsayısı için P değerini hesaplayın
Aşağıdaki kod, pandas DataFrame’deki sütunların her ikili kombinasyonu için Pearson korelasyon katsayısının ve karşılık gelen p değerinin nasıl hesaplanacağını gösterir:
#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
Sonuçtan şunları görebiliriz:
- X ile y arasındaki korelasyon katsayısının p değeri 0,2296’dır .
- X ve z arasındaki korelasyon katsayısının p değeri 0,0005’tir .
- Y ve z arasındaki korelasyon katsayısının p değeri 0,4238’dir .
Özel fonksiyonumuzda p değerlerini dört ondalık basamağa yuvarladığımızı unutmayın.
Farklı sayıda ondalık basamağa yuvarlamak için fonksiyonun son satırındaki 4’ü farklı bir sayıyla değiştirmekten çekinmeyin.
Not : SciPy pearsonr() işlevine ilişkin tüm belgeleri burada bulabilirsiniz.
Ek kaynaklar
Aşağıdaki eğitimlerde diğer yaygın panda görevlerinin nasıl gerçekleştirileceği açıklanmaktadır:
Pandalar’da gruba göre korelasyon nasıl hesaplanır?
Pandalarda kayan korelasyon nasıl hesaplanır
Pandalarda Spearman sıralama korelasyonu nasıl hesaplanır?