كيفية العثور على قيمة p لمعامل الارتباط في الباندا
يمكن استخدام معامل ارتباط بيرسون لقياس الارتباط الخطي بين متغيرين.
يأخذ معامل الارتباط هذا دائمًا قيمة تتراوح بين -1 و 1 حيث:
- -1 : الارتباط الخطي السلبي التام بين متغيرين.
- 0 : لا يوجد ارتباط خطي بين متغيرين.
- 1: الارتباط الخطي الإيجابي التام بين متغيرين.
لتحديد ما إذا كان معامل الارتباط ذو دلالة إحصائية، يمكنك حساب درجة t والقيمة p المقابلة.
صيغة حساب درجة t لمعامل الارتباط (r) هي:
ر = ص√ ن-2 / √ 1-ص 2
يتم حساب القيمة p باعتبارها القيمة p المقابلة ثنائية الطرف لتوزيع t مع درجات الحرية n-2.
لحساب القيمة p لمعامل ارتباط بيرسون في الباندا، يمكنك استخدام الدالة pearsonr() من مكتبة SciPy :
from scipy. stats import pearsonr pearsonr(df[' column1 '], df[' column2 '])
ستعيد هذه الدالة معامل ارتباط بيرسون بين العمودين column1 و column2 بالإضافة إلى القيمة p المقابلة التي تخبرنا ما إذا كان معامل الارتباط ذو دلالة إحصائية أم لا.
إذا كنت تريد حساب القيمة p لمعامل ارتباط بيرسون لكل مجموعة زوجية محتملة من الأعمدة في 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
توضح الأمثلة التالية كيفية حساب القيم الاحتمالية لمعاملات الارتباط عمليًا مع الباندا 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 المقابلة لكل مجموعة زوجية من الأعمدة في 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
ومن النتيجة يمكننا أن نرى:
- القيمة p لمعامل الارتباط بين x و y هي 0.2296 .
- القيمة p لمعامل الارتباط بين x و z هي 0.0005 .
- القيمة p لمعامل الارتباط بين y و z هي 0.4238 .
لاحظ أننا قمنا بتقريب القيم الاحتمالية إلى أربع منازل عشرية في وظيفتنا المخصصة.
لا تتردد في استبدال الرقم 4 الموجود في السطر الأخير من الدالة برقم مختلف لتقريبه إلى عدد مختلف من المنازل العشرية.
ملاحظة : يمكنك العثور على الوثائق الكاملة لوظيفة SciPy pearsonr() هنا .
مصادر إضافية
تشرح البرامج التعليمية التالية كيفية تنفيذ مهام الباندا الشائعة الأخرى:
كيفية حساب الارتباط حسب المجموعة في الباندا
كيفية حساب الارتباط المنزلق في الباندا
كيفية حساب ارتباط رتبة سبيرمان في الباندا