Cara mencari nilai p koefisien korelasi pada panda
Koefisien korelasi Pearson dapat digunakan untuk mengukur hubungan linier antara dua variabel.
Koefisien korelasi ini selalu bernilai antara -1 dan 1 dimana:
- -1 : Korelasi linier negatif sempurna antara dua variabel.
- 0 : Tidak ada korelasi linier antara dua variabel.
- 1: Korelasi linier positif sempurna antara dua variabel.
Untuk menentukan apakah koefisien korelasi signifikan secara statistik, Anda dapat menghitung skor-t dan nilai-p yang sesuai.
Rumus untuk menghitung t-score suatu koefisien korelasi (r) adalah:
t = r√ n-2 / √ 1-r 2
Nilai p dihitung sebagai nilai p dua sisi yang sesuai untuk distribusi t dengan n-2 derajat kebebasan.
Untuk menghitung nilai p dari koefisien korelasi Pearson di panda, Anda dapat menggunakan fungsi pearsonr() dari perpustakaan SciPy :
from scipy. stats import pearsonr pearsonr(df[' column1 '], df[' column2 '])
Fungsi ini akan mengembalikan koefisien korelasi Pearson antara kolom kolom1 dan kolom2 beserta nilai p terkait yang memberi tahu kita apakah koefisien korelasi signifikan secara statistik atau tidak.
Jika Anda ingin menghitung nilai p untuk koefisien korelasi Pearson dari setiap kemungkinan kombinasi kolom berpasangan dalam DataFrame, Anda dapat menggunakan fungsi khusus berikut untuk melakukannya:
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
Contoh berikut menunjukkan cara menghitung nilai p untuk koefisien korelasi dalam praktiknya dengan pandas DataFrame berikut:
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
Contoh 1: Hitung nilai P untuk koefisien korelasi antara dua kolom di Pandas
Kode berikut menunjukkan cara menghitung koefisien korelasi Pearson dan nilai p yang sesuai untuk kolom x dan y 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)
Dari hasilnya kita dapat melihat:
- Koefisien korelasi Pearson sebesar 0,4792 .
- Nilai p yang sesuai adalah 0,2296 .
Karena koefisien korelasinya bernilai positif, hal ini menunjukkan adanya hubungan linier yang positif antara kedua variabel.
Namun, karena nilai p dari koefisien korelasi tidak kurang dari 0,05, maka korelasi tersebut tidak signifikan secara statistik.
Perhatikan bahwa kita juga dapat menggunakan sintaks berikut untuk mengekstrak nilai p dari koefisien korelasi:
#extract p-value of correlation coefficient
pearsonr(df_new[' x '], df_new[' y '])[1]
0.22961622926360523
Nilai p untuk koefisien korelasi adalah 0,2296 .
Ini cocok dengan nilai p dari keluaran sebelumnya.
Contoh 2: Hitung nilai P untuk koefisien korelasi antara semua kolom di Pandas
Kode berikut menunjukkan cara menghitung koefisien korelasi Pearson dan nilai p yang sesuai untuk setiap kombinasi kolom berpasangan di pandas 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
Dari hasilnya kita dapat melihat:
- Nilai p untuk koefisien korelasi antara x dan y adalah 0,2296 .
- Nilai p untuk koefisien korelasi antara x dan z adalah 0,0005 .
- Nilai p untuk koefisien korelasi antara y dan z adalah 0,4238 .
Perhatikan bahwa kami membulatkan nilai p ke empat tempat desimal dalam fungsi khusus kami.
Jangan ragu untuk mengganti angka 4 di baris terakhir fungsi tersebut dengan angka berbeda untuk dibulatkan ke angka desimal berbeda.
Catatan : Anda dapat menemukan dokumentasi lengkap untuk fungsi SciPy pearsonr() di sini .
Sumber daya tambahan
Tutorial berikut menjelaskan cara melakukan tugas panda umum lainnya:
Cara menghitung korelasi berdasarkan kelompok di Pandas
Cara menghitung korelasi geser pada panda
Cara menghitung korelasi peringkat Spearman di panda