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

Tambahkan komentar

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *