วิธีค้นหาค่า p ของสัมประสิทธิ์สหสัมพันธ์ในหมีแพนด้า
ค่าสัมประสิทธิ์สหสัมพันธ์ของเพียร์สัน สามารถใช้เพื่อวัดความสัมพันธ์เชิงเส้นระหว่างตัวแปรสองตัว
ค่าสัมประสิทธิ์สหสัมพันธ์นี้รับค่าระหว่าง -1 ถึง 1 เสมอ โดยที่:
- -1 : ความสัมพันธ์เชิงเส้นเชิงลบที่สมบูรณ์แบบระหว่างตัวแปรสองตัว
- 0 : ไม่มีความสัมพันธ์เชิงเส้นระหว่างตัวแปรสองตัว
- 1: ความสัมพันธ์เชิงเส้นเชิงบวกที่สมบูรณ์แบบระหว่างตัวแปรสองตัว
หากต้องการทราบว่าสัมประสิทธิ์สหสัมพันธ์มีนัยสำคัญทางสถิติหรือไม่ คุณสามารถคำนวณคะแนน t และค่า p ที่สอดคล้องกันได้
สูตรคำนวณค่า t-score ของสัมประสิทธิ์สหสัมพันธ์ (r) คือ:
เสื้อ = r√ n-2 / √ 1-r 2
ค่า p จะคำนวณเป็นค่า p สองด้านที่สอดคล้องกันสำหรับการแจกแจงแบบ t โดยมีดีกรีอิสระ n-2
ในการคำนวณค่า p ของสัมประสิทธิ์สหสัมพันธ์เพียร์สันในแพนด้า คุณสามารถใช้ฟังก์ชัน pearsonr() จากไลบรารี SciPy ได้:
from scipy. stats import pearsonr pearsonr(df[' column1 '], df[' column2 '])
ฟังก์ชันนี้จะคืนค่าสัมประสิทธิ์สหสัมพันธ์แบบเพียร์สันระหว่างคอลัมน์ คอลัมน์ 1 และ คอลัมน์ 2 พร้อมกับค่า p ที่สอดคล้องกัน ซึ่งบอกเราว่าสัมประสิทธิ์สหสัมพันธ์มีนัยสำคัญทางสถิติหรือไม่
หากคุณต้องการคำนวณค่า p-value สำหรับสัมประสิทธิ์สหสัมพันธ์แบบ Pearson ของแต่ละคอลัมน์ที่รวมกันเป็นคู่ที่เป็นไปได้ใน DataFrame คุณสามารถใช้ฟังก์ชันแบบกำหนดเองต่อไปนี้ได้:
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
ตัวอย่างต่อไปนี้แสดงวิธีคำนวณค่า p สำหรับค่าสัมประสิทธิ์สหสัมพันธ์ในทางปฏิบัติกับ Pandas 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
ตัวอย่างที่ 1: คำนวณค่า P สำหรับค่าสัมประสิทธิ์สหสัมพันธ์ระหว่างสองคอลัมน์ใน Pandas
รหัสต่อไปนี้แสดงวิธีการคำนวณค่าสัมประสิทธิ์สหสัมพันธ์เพียร์สันและค่า p ที่สอดคล้องกันสำหรับคอลัมน์ x และ 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)
จากผลลัพธ์เราจะเห็นได้ว่า:
- ค่าสัมประสิทธิ์สหสัมพันธ์เพียร์สันคือ 0.4792
- ค่า p ที่สอดคล้องกันคือ 0.2296
เนื่องจากค่าสัมประสิทธิ์สหสัมพันธ์เป็นบวก จึงบ่งชี้ว่ามีความสัมพันธ์เชิงเส้นเชิงบวกระหว่างตัวแปรทั้งสอง
อย่างไรก็ตาม เนื่องจากค่า p ของสัมประสิทธิ์สหสัมพันธ์ไม่ต่ำกว่า 0.05 ความสัมพันธ์จึงไม่มีนัยสำคัญทางสถิติ
โปรดทราบว่าเรายังสามารถใช้ไวยากรณ์ต่อไปนี้เพื่อแยกค่า p ออกจากค่าสัมประสิทธิ์สหสัมพันธ์:
#extract p-value of correlation coefficient
pearsonr(df_new[' x '], df_new[' y '])[1]
0.22961622926360523
ค่า p สำหรับสัมประสิทธิ์สหสัมพันธ์คือ 0.2296
ซึ่งตรงกับค่า p จากเอาต์พุตก่อนหน้า
ตัวอย่างที่ 2: คำนวณค่า P สำหรับค่าสัมประสิทธิ์สหสัมพันธ์ระหว่างคอลัมน์ทั้งหมดใน Pandas
รหัสต่อไปนี้แสดงวิธีการคำนวณค่าสัมประสิทธิ์สหสัมพันธ์เพียร์สันและค่า p ที่สอดคล้องกันสำหรับการรวมคอลัมน์แต่ละคอลัมน์ใน 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
จากผลลัพธ์เราจะเห็นได้ว่า:
- ค่า p สำหรับสัมประสิทธิ์สหสัมพันธ์ระหว่าง x และ y คือ 0.2296
- ค่า p สำหรับสัมประสิทธิ์สหสัมพันธ์ระหว่าง x และ z คือ 0.0005
- ค่า p สำหรับสัมประสิทธิ์สหสัมพันธ์ระหว่าง y และ z คือ 0.4238
โปรดทราบว่าเราปัดเศษค่า p เป็นทศนิยมสี่ตำแหน่งในฟังก์ชันที่กำหนดเองของเรา
คุณสามารถแทนที่ 4 ในบรรทัดสุดท้ายของฟังก์ชันด้วยตัวเลขอื่นเพื่อปัดเศษให้เป็นทศนิยมตำแหน่งอื่นได้
หมายเหตุ : คุณสามารถค้นหาเอกสารฉบับเต็มสำหรับฟังก์ชัน SciPy pearsonr() ได้ที่นี่
แหล่งข้อมูลเพิ่มเติม
บทช่วยสอนต่อไปนี้จะอธิบายวิธีดำเนินการงานแพนด้าทั่วไปอื่นๆ:
วิธีการคำนวณความสัมพันธ์ตามกลุ่มใน Pandas
วิธีการคำนวณความสัมพันธ์แบบเลื่อนในแพนด้า
วิธีการคำนวณความสัมพันธ์อันดับสเปียร์แมนในแพนด้า