วิธีค้นหาค่า 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
วิธีการคำนวณความสัมพันธ์แบบเลื่อนในแพนด้า
วิธีการคำนวณความสัมพันธ์อันดับสเปียร์แมนในแพนด้า

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *