الارتباط في R: مصفوفة الارتباط بيرسون وسبيرمان

الارتباط ثنائي المتغير في R

تصف العلاقة ثنائية المتغير العلاقة -أو الارتباط- بين متغيرين في R. في هذا البرنامج التعليمي، سنناقش مفهوم الارتباط ونوضح كيف يمكن استخدامه لقياس العلاقة بين أي متغيرين في R.

الارتباط في برمجة R

هناك طريقتان أساسيتان لحساب الارتباط بين متغيرين في برمجة R:

  • بيرسون: الارتباط البارامترى
  • الرامح: الارتباط غير المعلمي

مصفوفة ارتباط بيرسون في R

عادةً ما يتم استخدام طريقة ارتباط بيرسون كفحص أساسي للعلاقة بين متغيرين.

معامل الارتباط،، هو مقياس لقوة خطي العلاقة بين متغيرين و. ويتم حسابها على النحو التالي:

مصفوفة ارتباط بيرسون في R

مع

  • مصفوفة ارتباط بيرسون في R، أي الانحراف المعياري ل
  • مصفوفة ارتباط بيرسون في R، أي الانحراف المعياري ل

يتراوح الارتباط بين -1 و 1.

  • تشير القيمة القريبة من أو تساوي 0 إلى وجود علاقة خطية قليلة أو معدومة بين و .
  • في المقابل، كلما اقتربت من 1 أو -1، كلما كانت العلاقة الخطية أقوى.

يمكننا حساب اختبار t كما يلي والتحقق من جدول التوزيع بدرجة حرية تساوي:

مصفوفة ارتباط بيرسون في R

ارتباط رتبة سبيرمان في R

يقوم ارتباط الرتبة بفرز الملاحظات حسب الرتبة ويحسب مستوى التشابه بين الرتبة. يتمتع ارتباط الرتبة بميزة كونه قويًا بالنسبة للقيم المتطرفة ولا يرتبط بتوزيع البيانات. لاحظ أن ارتباط الرتبة مناسب للمتغير الترتيبي.

يكون ارتباط رتبة سبيرمان دائمًا بين -1 و1 مع قيمة قريبة من الطرف تشير إلى وجود علاقة قوية. ويتم حسابها على النحو التالي:

ارتباط رتبة سبيرمان في R

مع ذكر التباينات بين الرتبة و . المقام يحسب الانحرافات المعيارية.

في لغة R، يمكننا استخدام الدالة cor(). يستغرق الأمر ثلاث وسائط، والطريقة.

cor(x, y, method)

الحجج:

  • x: المتجه الأول
  • y: المتجه الثاني
  • طريقة: الصيغة المستخدمة لحساب الارتباط. ثلاث قيم سلسلة:
    • "بيرسون"
    • "كيندال"
    • "الرامح"

يمكن إضافة وسيطة اختيارية إذا كانت المتجهات تحتوي على قيمة مفقودة: use = "Complete.obs"

سوف نستخدم مجموعة بيانات BudgetUK. تشير مجموعة البيانات هذه إلى مخصصات ميزانية الأسر البريطانية بين عامي 1980 و1982. وهناك 1519 ملاحظة مع عشر ميزات، من بينها:

  • com.wfood: حصة حصة الغذاء الإنفاق
  • com.wfuel: حصة إنفاق الوقود
  • com.wcloth: حصة الميزانية للإنفاق على الملابس
  • والك: حصة إنفاق الكحول
  • com.wtrans: حصة الإنفاق على النقل
  • وذر: حصة الإنفاق على السلع الأخرى
  • com.totexp: إجمالي إنفاق الأسرة بالجنيه
  • دخل: إجمالي صافي دخل الأسرة
  • السن: عمر الأسرة
  • الأطفال: عدد الاطفال

مثال

library(dplyr)
PATH <-"https://raw.githubusercontent.com/guru99-edu/R-Programming/master/british_household.csv"
data <-read.csv(PATH)
  filter(income < 500)
  mutate(log_income = log(income),
         log_totexp = log(totexp),
         children_fac = factor(children, order = TRUE, labels = c("No", "Yes")))
  select(-c(X,X.1, children, totexp, income))
glimpse(data)

شرح الكود

  • نقوم أولاً باستيراد البيانات وإلقاء نظرة عليها باستخدام الدالة glimpse() من مكتبة dplyr.
  • ثلاث نقاط فوق 500 ألف، لذلك قررنا استبعادها.
  • إنها ممارسة شائعة لتحويل متغير نقدي في السجل. فهو يساعد على تقليل تأثير القيم المتطرفة ويقلل الانحراف في مجموعة البيانات.

الإخراج:

## Observations: 1,516## Variables: 10
## $ wfood        <dbl> 0.4272, 0.3739, 0.1941, 0.4438, 0.3331, 0.3752, 0...
## $ wfuel        <dbl> 0.1342, 0.1686, 0.4056, 0.1258, 0.0824, 0.0481, 0...
## $ wcloth       <dbl> 0.0000, 0.0091, 0.0012, 0.0539, 0.0399, 0.1170, 0...
## $ walc         <dbl> 0.0106, 0.0825, 0.0513, 0.0397, 0.1571, 0.0210, 0...
## $ wtrans       <dbl> 0.1458, 0.1215, 0.2063, 0.0652, 0.2403, 0.0955, 0...
## $ wother       <dbl> 0.2822, 0.2444, 0.1415, 0.2716, 0.1473, 0.3431, 0...
## $ age          <int> 25, 39, 47, 33, 31, 24, 46, 25, 30, 41, 48, 24, 2...
## $ log_income   <dbl> 4.867534, 5.010635, 5.438079, 4.605170, 4.605170,...
## $ log_totexp   <dbl> 3.912023, 4.499810, 5.192957, 4.382027, 4.499810,...
## $ children_fac <ord> Yes, Yes, Yes, Yes, No, No, No, No, No, No, Yes, ...

يمكننا حساب معامل الارتباط بين متغيرات الدخل والغذاء باستخدام طريقتي "بيرسون" و"سبيرمان".

cor(data$log_income, data$wfood, method = "pearson")

الإخراج:

## [1] -0.2466986
cor(data$log_income, data$wfood, method = "spearman")

الإخراج:

## [1] -0.2501252

مصفوفة الارتباط في R

يعد الارتباط ثنائي المتغير بداية جيدة، ولكن يمكننا الحصول على صورة أوسع من خلال التحليل متعدد المتغيرات. يتم تصوير الارتباط مع العديد من المتغيرات داخل أ مصفوفة الارتباط. مصفوفة الارتباط هي مصفوفة تمثل الارتباط الزوجي لجميع المتغيرات.

تقوم الدالة cor() بإرجاع مصفوفة الارتباط. والفرق الوحيد مع الارتباط ثنائي المتغير هو أننا لا نحتاج إلى تحديد المتغيرات. بشكل افتراضي، يحسب R الارتباط بين كافة المتغيرات.

لاحظ أنه لا يمكن حساب الارتباط لمتغير العامل. نحتاج إلى التأكد من إسقاط الميزة الفئوية قبل تمرير إطار البيانات داخل cor().

مصفوفة الارتباط متناظرة مما يعني أن القيم الموجودة فوق القطر لها نفس القيم الموجودة أدناه. من الأكثر وضوحًا إظهار نصف المصفوفة.

نحن نستبعد children_fac لأنه متغير على مستوى العامل. لا يقوم cor بإجراء الارتباط على متغير قاطع.

# the last column of data is a factor level. We don't include it in the code
mat_1 <-as.dist(round(cor(data[,1:9]),2))
mat_1

شرح الكود

  • كور (بيانات): عرض مصفوفة الارتباط
  • جولة (البيانات، 2): تقريب مصفوفة الارتباط برقمين عشريين
  • as.dist(): يظهر النصف الثاني فقط

الإخراج:

##            wfood wfuel wcloth  walc wtrans wother   age log_income
## wfuel       0.11                                                  
## wcloth     -0.33 -0.25                                            
## walc       -0.12 -0.13  -0.09                                     
## wtrans     -0.34 -0.16  -0.19 -0.22                               
## wother     -0.35 -0.14  -0.22 -0.12  -0.29                        
## age         0.02 -0.05   0.04 -0.14   0.03   0.02                 
## log_income -0.25 -0.12   0.10  0.04   0.06   0.13  0.23           
## log_totexp -0.50 -0.36   0.34  0.12   0.15   0.15  0.21       0.49

مستوى الأهمية

يكون مستوى الأهمية مفيدًا في بعض المواقف عندما نستخدم طريقة بيرسون أو سبيرمان. الدالة rcorr() من مكتبة Hmisc تحسب لنا القيمة p. يمكننا تنزيل المكتبة من كوندا وانسخ الكود والصقه في الطرفية:

conda install -c r r-hmisc

يتطلب rcorr () تخزين إطار البيانات كمصفوفة. يمكننا تحويل بياناتنا إلى مصفوفة قبل حساب مصفوفة الارتباط مع القيمة p.

library("Hmisc")
data_rcorr <-as.matrix(data[, 1: 9])

mat_2 <-rcorr(data_rcorr)
# mat_2 <-rcorr(as.matrix(data)) returns the same output

يحتوي كائن القائمة mat_2 على ثلاثة عناصر:

  • r: إخراج مصفوفة الارتباط
  • n: عدد المشاهدات
  • P: قيمة ف

نحن مهتمون بالعنصر الثالث، القيمة الاحتمالية. من الشائع إظهار مصفوفة الارتباط بالقيمة p بدلاً من معامل الارتباط.

p_value <-round(mat_2[["P"]], 3)
p_value

شرح الكود

  • mat_2[["P"]]: يتم تخزين القيم p في العنصر المسمى P
  • جولة (mat_2 [["P"]]، 3): قم بتقريب العناصر بثلاثة أرقام

الإخراج:

           wfood wfuel wcloth  walc wtrans wother   age log_income log_totexp
wfood         NA 0.000  0.000 0.000  0.000  0.000 0.365      0.000          0
wfuel      0.000    NA  0.000 0.000  0.000  0.000 0.076      0.000          0
wcloth     0.000 0.000     NA 0.001  0.000  0.000 0.160      0.000          0
walc       0.000 0.000  0.001    NA  0.000  0.000 0.000      0.105          0
wtrans     0.000 0.000  0.000 0.000     NA  0.000 0.259      0.020          0
wother     0.000 0.000  0.000 0.000  0.000     NA 0.355      0.000          0
age        0.365 0.076  0.160 0.000  0.259  0.355    NA      0.000          0
log_income 0.000 0.000  0.000 0.105  0.020  0.000 0.000         NA          0
log_totexp 0.000 0.000  0.000 0.000  0.000  0.000 0.000      0.000         NA

تصور مصفوفة الارتباط في R

تعد الخريطة الحرارية طريقة أخرى لإظهار مصفوفة الارتباط. مكتبة GGally هي امتداد لـ ggplot2. حاليًا، غير متوفر في مكتبة كوندا. يمكننا التثبيت مباشرة في وحدة التحكم.

install.packages("GGally")

تصور مصفوفة الارتباط

تتضمن المكتبة وظائف مختلفة لإظهار إحصائيات الملخص مثل الارتباط والتوزيع لجميع المتغيرات في ملف البخور.

تحتوي الدالة ggcorr() على الكثير من الوسائط. سنقدم فقط الوسائط التي سنستخدمها في البرنامج التعليمي:

وظيفة جيكور

ggcorr(df, method = c("pairwise", "pearson"),
  nbreaks = NULL, digits = 2, low = "#3B9AB2",
  mid = "#EEEEEE", high = "#F21A00",
  geom = "tile", label = FALSE,
  label_alpha = FALSE)

الحجج:

  • df: مجموعة البيانات المستخدمة
  • طريقة: صيغة لحساب الارتباط. بشكل افتراضي، يتم حساب الزوجية وPearson
  • nbreaks: قم بإرجاع نطاق فئوي لتلوين المعاملات. بشكل افتراضي، لا يوجد انقطاع ويكون التدرج اللوني مستمرًا
  • الأرقام:تقريب معامل الارتباط. بشكل افتراضي، اضبط على 2
  • منخفض: التحكم في المستوى الأدنى للتلوين
  • منتصف: التحكم في المستوى الأوسط للتلوين
  • عالي: التحكم في المستوى العالي للتلوين
  • Geom: التحكم في شكل الوسيطة الهندسية. بشكل افتراضي، "البلاط"
  • ملصق: القيمة المنطقية. عرض أو عدم التسمية. افتراضيًا، قم بالتعيين على `FALSE`

الخريطة الحرارية الأساسية

المخطط الأساسي للحزمة هو الخريطة الحرارية. تُظهر وسيلة إيضاح الرسم البياني لونًا متدرجًا من - 1 إلى 1، حيث يشير اللون الساخن إلى ارتباط إيجابي قوي واللون البارد إلى ارتباط سلبي.

library(GGally)
ggcorr(data)

شرح الكود

  • جيكور (بيانات): هناك حاجة إلى وسيطة واحدة فقط، وهي اسم إطار البيانات. لا يتم تضمين متغيرات مستوى العامل في المؤامرة.

الإخراج:

خريطة الحرارة الأساسية

إضافة التحكم إلى الخريطة الحرارية

يمكننا إضافة المزيد من الضوابط إلى الرسم البياني:

ggcorr(data,
    nbreaks = 6,
    low = "steelblue",
    mid = "white",
    high = "darkred",
    geom = "circle")

شرح الكود

  • فواصل=6: اكسر الأسطورة بـ 6 صفوف.
  • منخفض = "ستيل بلو": استخدم الألوان الفاتحة للارتباط السلبي
  • منتصف = "أبيض": استخدم الألوان البيضاء لارتباط النطاقات المتوسطة
  • عالية = "داكنريد": استخدم الألوان الداكنة للارتباط الإيجابي
  • جيوم = "دائرة": استخدم الدائرة كشكل النوافذ في الخريطة الحرارية. حجم الدائرة يتناسب مع القيمة المطلقة للارتباط.

الإخراج:

إضافة التحكم إلى الخريطة الحرارية

إضافة تسمية إلى الخريطة الحرارية

يسمح لنا GGally بإضافة ملصق داخل النوافذ:

ggcorr(data,
    nbreaks = 6,
    label = TRUE,
    label_size = 3,
    color = "grey50")

شرح الكود

  • التسمية = صحيح: إضافة قيم معاملات الارتباط داخل الخريطة الحرارية.
  • اللون = "رمادي 50": اختر اللون، أي الرمادي
  • حجم التسمية = 3: اضبط حجم الملصق على 3

الإخراج:

إضافة تسمية إلى الخريطة الحرارية

وظيفة ggpairs

وأخيرا، نقدم وظيفة أخرى من مكتبة GGaly. Ggpair. وينتج رسما بيانيا في شكل مصفوفة. يمكننا عرض ثلاثة أنواع من الحسابات ضمن رسم بياني واحد. المصفوفة عبارة عن بُعد يساوي عدد الملاحظات. يعرض الجزء العلوي/السفلي النوافذ بشكل قطري. يمكننا التحكم في المعلومات التي نريد إظهارها في كل جزء من المصفوفة. صيغة ggpair هي:

ggpair(df, columns = 1: ncol(df), title = NULL,
    upper = list(continuous = "cor"),
    lower = list(continuous = "smooth"),
    mapping = NULL)		

الحجج:

  • df: مجموعة البيانات المستخدمة
  • الأعمدة: حدد الأعمدة لرسم المؤامرة
  • لقب: تضمين عنوان
  • أعلى: سيطر ال boxوفاق فوق قطري المؤامرة. تحتاج إلى توفير نوع الحسابات أو الرسم البياني للعودة. إذا كان المستمر = "كور"، فإننا نطلب من R حساب الارتباط. لاحظ أن الوسيطة يجب أن تكون قائمة. يمكن استخدام وسائط أخرى، راجع [المقالة القصيرة]("http://ggobi.github.io/ggally/#custom_functions") لمزيد من المعلومات.
  • أقل: سيطر ال boxأسفل القطر.
  • التخطيط: يشير إلى جمالية الرسم البياني. على سبيل المثال، يمكننا حساب الرسم البياني لمجموعات مختلفة.

تحليل ثنائي المتغير مع ggpair مع التجميع

الرسم البياني التالي يرسم ثلاث معلومات:

  • مصفوفة الارتباط بين متغير log_totexp وlog_venue والعمر ومتغير wtrans مجمعة حسب ما إذا كان لدى الأسرة طفل أم لا.
  • رسم توزيع كل متغير حسب المجموعة
  • عرض المخطط المبعثر مع الاتجاه حسب المجموعة
library(ggplot2)
ggpairs(data, columns = c("log_totexp", "log_income", "age", "wtrans"), title = "Bivariate analysis of revenue expenditure by the British household", upper = list(continuous = wrap("cor",
        size = 3)),
    lower = list(continuous = wrap("smooth",
        alpha = 0.3,
        size = 0.1)),
    mapping = aes(color = children_fac))

شرح الكود

  • الأعمدة = ج ("log_totexp"، "log_venue"، "العمر"، "wtrans"): اختر المتغيرات التي تريد إظهارها في الرسم البياني
  • العنوان = "تحليل ثنائي المتغير لنفقات الإيرادات من قبل الأسرة البريطانية": إضافة عنوان
  • العلوي = القائمة (): التحكم في الجزء العلوي من الرسم البياني. أي فوق قطري
  • مستمر = التفاف ("كور"، الحجم = 3)): حساب معامل الارتباط. نقوم بلف الوسيط بشكل مستمر داخل الدالة Wrap() للتحكم في جمالية الرسم البياني (أي الحجم = 3) -lower = list(): التحكم في الجزء السفلي من الرسم البياني. أي تحت قطري.
  • مستمر = التفاف ("ناعم"، ألفا = 0.3، الحجم = 0.1): أضف مخططًا مبعثرًا ذو اتجاه خطي. نقوم بلف الوسيط بشكل مستمر داخل الدالة Wrap() للتحكم في جمالية الرسم البياني (أي الحجم=0.1، ألفا=0.3)
  • رسم الخرائط = AES (اللون = children_fac): نريد أن يتم تكديس كل جزء من الرسم البياني بواسطة المتغير children_fac، وهو متغير تصنيفي يأخذ القيمة 1 إذا لم يكن لدى الأسرة أطفال و2 بخلاف ذلك

الإخراج:

تحليل ثنائي المتغير مع ggpair مع التجميع

تحليل ثنائي المتغير مع ggpair مع تجميع جزئي

الرسم البياني أدناه مختلف قليلاً. نقوم بتغيير موضع التعيين داخل الوسيطة العلوية.

ggpairs(data, columns = c("log_totexp", "log_income", "age", "wtrans"),
    title = "Bivariate analysis of revenue expenditure by the British household",
    upper = list(continuous = wrap("cor",
            size = 3),
        mapping = aes(color = children_fac)),
    lower = list(
        continuous = wrap("smooth",
            alpha = 0.3,
            size = 0.1))
)

شرح الكود

  • نفس الكود تمامًا كما في المثال السابق باستثناء:
  • رسم الخرائط = aes(color = children_fac): انقل القائمة إلى الجزء العلوي = list(). نريد فقط أن يكون الحساب مكدسًا حسب المجموعة في الجزء العلوي من الرسم البياني.

الإخراج:

تحليل ثنائي المتغير مع ggpair مع التجميع الجزئي

نبذة عامة

  • تصف العلاقة ثنائية المتغير العلاقة -أو الارتباط- بين متغيرين في R.
  • هناك طريقتان أساسيتان لحساب الارتباط بين متغيرين ص البرمجة: بيرسون وسبيرمان.
  • عادةً ما يتم استخدام طريقة ارتباط بيرسون كفحص أساسي للعلاقة بين متغيرين.
  • يقوم ارتباط الرتبة بفرز الملاحظات حسب الرتبة ويحسب مستوى التشابه بين الرتبة.
  • يكون ارتباط رتبة سبيرمان دائمًا بين -1 و1 مع قيمة قريبة من الطرف تشير إلى وجود علاقة قوية.
  • مصفوفة الارتباط هي مصفوفة تمثل الارتباط الزوجي لجميع المتغيرات.
  • يكون مستوى الأهمية مفيدًا في بعض المواقف عندما نستخدم طريقة بيرسون أو سبيرمان.

يمكننا تلخيص جميع وظائف الارتباط في R في الجدول أدناه:

المكتبة هدف خدمة التوصيل رمز
الفئة الأساسية علاقة ثنائية المتغير بيرسون
cor(dfx2, method = "pearson")
الفئة الأساسية علاقة ثنائية المتغير الرامح
cor(dfx2, method = "spearman")
الفئة الأساسية الارتباط متعدد المتغيرات بيرسون
cor(df, method = "pearson")
الفئة الأساسية الارتباط متعدد المتغيرات الرامح
cor(df, method = "spearman")
همسك قيمة P.
rcorr(as.matrix(data[,1:9]))[["P"]]
جالي خريطة الحرارة
ggcorr(df)
مؤامرات متعددة المتغيرات
cf code below