ضریب همبستگی و ماتریس همبستگی در R — کاربرد در یادگیری ماشین

۵۸۷۴ بازدید
آخرین به‌روزرسانی: ۱۲ دی ۱۴۰۲
زمان مطالعه: ۱۴ دقیقه
ضریب همبستگی و ماتریس همبستگی در R — کاربرد در یادگیری ماشین

ارتباط بین دو متغیر کمی، از طریق محاسبه «ضریب همبستگی» (Correlation Coefficient) اندازه‌گیری می‌شود. روش‌های مختلفی برای اندازه‌گیری ضریب همبستگی وجود دارد. در این نوشتار به بررسی دو شیوه محاسبه این ضریب با استفاده از کدهای R می‌پردازیم. روش اول که یک «روش پارامتری» (Parametric method) است، «ضریب همبستگی پیرسون» (Pearson Correlation Coefficient)  و روش دوم نیز که روشی ناپارامتری است، «ضریب همبستگی اسپیرمن» (Spearman Correlation Coefficient) نامیده می‌شوند.

به منظور آگاهی بیشتر از نحوه محاسبه این دو ضریب همبستگی می‌توانید مطلب ضریب‌های همبستگی (Correlation Coefficients) و شیوه‌ محاسبه آن‌ها — به زبان ساده را مطالعه کنید. از آنجایی که محاسبه این ضرایب براساس امید ریاضی و کوواریانس صورت می‌گیرد، خواندن مطلب امید ریاضی (Mathematical Expectation) — مفاهیم و کاربردها نیز خالی از لطف نیست.

ضریب همبستگی و ماتریس همبستگی

منظور از همبستگی بین دو متغیر، اندازه‌گیری میزان پیش‌بینی مقدارهای یکی براساس دیگری است. به این معنی که هر چه ضریب همبستگی بیشتر باشد، امکان پیش‌بینی مقدار یکی از متغیرها برحسب دیگری بیشتر است.

ضریب همبستگی پیرسون و اسپیرمن بین دو مقدار ۱ و ۱- قرار دارند. به این ترتیب اگر ضریب همبستگی، مقداری نزدیک یا برابر با ۱ باشد، رابطه شدید و هم جهت بین دو متغیر وجود دارد. در این حالت می‌توان گفت که جهت تغییرات هر دو متغیر شبیه یکدیگر است. به این معنی که با افزایش یکی دیگری نیز افزایش می‌یابد. این ارتباط براساس کاهش نیز وجود دارد، یعنی اگر یکی از متغیرها کاهش یابد، دیگری نیز کاهش خواهد یافت. در این حالت می‌گویند بین دو متغییر رابطه مستقیم وجود دارد. برای مثال اگر میزان درآمد افراد افزایش یابد، انتظار داریم که هزینه‌های زندگی نیز برایشان افزایش یابد. پس بین متغیرهای درآمد و هزینه رابطه مستقیم وجود دارد.

برعکس اگر ضریب همبستگی، مقداری نزدیک یا برابر با ۱- باشد، رابطه شدید ولی در جهت عکس بین متغیرها وجود دارد. بنابراین با افزایش یکی، دیگری کاهش خواهد یافت ولی همچنان امکان پیش‌بینی وجود دارد. چنین حالتی را رابطه معکوس (Inverse) می‌نامیم. برای مثال اگر میزان درآمد افزایش یابد، ساعات استراحت کاهش خواهد یافت زیرا برای کسب درآمد بیشتر، زمان بیشتری نیز صرف می‌شود، در نتیجه زمان استراحت کاهش می‌یابد. در ادامه برای یادآوری، مروری کوتاه بر شیوه محاسبه ضرایب همبستگی پیرسون و اسپیرمن خواهیم داشت و سپس به کدهای R برای محاسبه آن‌ها خواهیم پرداخت.

ضریب همبستگی پیرسون

برای سنجش میزان رابطه خطی بین دو متغیر معمولا از «ضریب همبستگی خطی پیرسون» استفاده می‌شود که به طور خلاصه به آن ضریب همبستگی پیرسون گفته می‌شود. به منظور یادآوری شیوه محاسبه آن را بیان می‌کنیم.

اگر کوواریانس x و y را به صورت $$Cov(x,y)$$ و انحراف معیار متغیر x‌ و y را به صورت $$\sigma_x$$ و $$\sigma_y$$ نشان دهیم، ضریب همبستگی پیرسون با نماد $$r$$ یا $$\rho$$، به صورت زیر محاسبه می‌شود.

$$\large  \rho(X,Y)=r_{xy}=\dfrac{Cov(x,y)}{\sigma_x \sigma_y}$$

نکته: اگر ضریب همبستگی پیرسون، مقداری نزدیک صفر شود، مشخص می‌شود که رابطه خطی بین دو متغیر وجود ندارد. در مقابل اگر این ضریب مقداری نزدیک یا برابر با ۱ یا ۱- باشد، وجود رابطه شدید خطی بین دو متغیر تایید خواهد شد.

اگر محاسبه ضریب همبستگی براساس یک نمونه تصادفی صورت گیرد، بهتر است که برای ارزیابی نتیجه حاصل شده، از یک آزمون آماری استفاده کرد. در این حالت فرض مربوط به آزمون ضریب همبستگی پیرسون به صورت زیر نوشته می‌شوند.

$$\large \begin{cases}H_0 & \rho = 0\\H_1 & \rho \neq 0\end{cases}$$

در این حالت آماره آزمون که در ادامه بیان شده دارای توزیع t'student با n-2 درجه آزادی است. مشخص است که منظور از n نیز تعداد مشاهدات است.

$$\large t=\dfrac{r}{\sqrt{1-r^2}}\sqrt{n-2}\sim t(n-2)$$

ضریب همبستگی رتبه‌ای اسپیرمن

اگر به جای استفاده از مقدارها، رتبه مقادیر برای محاسبه ضریب همبستگی به کار رود، ضریب همبستگی رتبه‌ای اسپیرمن محاسبه شده است. بنابراین اگر «رتبه» (Rank) هر متغیر را محاسبه کرده و ضریب همبستگی پیرسون برای رتبه‌ها را محاسبه کنیم، مقدار حاصل ر «ضریب همبستگی رتبه‌ای اسپیرمن» می‌نامند که به طور خلاصه به آن ضریب همبستگی اسپیرمن گفته می‌شود.

بنابراین اگر بردار رتبه‌های متغیر $$x$$ را با $$rx$$ و بردار رتبه‌های متغیر $$y$$‌ را با $$ry$$ نشان دهیم، رابطه محاسباتی برای ضریب همبستگی رتبه‌ای اسپیرمن به صورت زیر نوشته خواهد شد.

$$\large \rho_{s}=\dfrac{Cov(rx,ry)}{\sigma_{rx}\sigma_{ry}}$$

مشخص است که منظورمان $$Cov(rx,ry)$$ کواریانس رتبه‌های دو متغیر یعنی $$xr$$ و $$ry$$ است. همچنین $$\sigma_{rx}$$ انحراف معیار رتبه‌های متغیر $$x$$ و همچنین $$\sigma_{ry}$$‌ نیز انحراف معیار رتبه‌های متغیر $$y$$ را نشان می‌دهد.

می‌توان نشان داد که ضریب همبستگی رتبه‌ای اسپیرمن نیز مانند ضریب همبستگی خطی پیرسون، مقداری بین ۱ و ۱- دارد. به این ترتیب مقدار ۱ نشان دهنده انطباق کامل بین رتبه‌ها و مقدار ۱- نیز انطباق معکوس بین رتبه‌ها را نشان می‌دهد.

نکته: از آنجایی که در محاسبه ضریب همبستگی رتبه‌ای اسپبرمن، به جای استفاده از میانگین مقدارها، از میانگین رتبه‌ها استفاده شده است، داده‌های پرت یا دورافتاده (Outlier) در آن تاثیر کمتری نسبت به ضریب همبستگی خطی پیرسون دارند. از طرف دیگر برای انجام آزمون آماری، آماره آزمون برای ضریب همبستگی رتبه‌ای اسپیرمن مانند آماره آزمون برای ضریب همبستگی خطی پیرسون خواهد بود.

محاسبه ضریب همبستگی پیرسون و اسپیرمن در R

به منظور محاسبه ضریب همبستگی در R از تابع $$cor()$$ استفاده می‌کنیم. این تابع دارای سه پارامتر است.

1cor(x, y, method)
2arguments:			
3- x: First vector 
4- y: Second vector
5- method: The formula used to compute the correlation. Three string values: 
6  - "pearson"			
7  - "kendall"			
8  - "spearman"
9An optional argument can be added if the vectors contain missing value:- use = "complete.obs"

پارامتر اول x است که بردار اول برای محاسبه ضریب همبستگی را نشان می‌دهد. همچنین پارامتر دوم یعنی y نیز بردار دوم را نشان می‌دهد که در محاسبه ضریب همبستگی به کار می‌رود. پارامتر سوم، نوع یا شیوه محاسبه ضریب همبستگی است که به صورت یک عبارت متنی، در تابع درج می‌شود. یکی از عبارت‌های زیر می‌تواند مقدار این پارامتر باشد.

method = "pearson", "spearman", 'kendall"

نکته: اگر داده‌ها دارای مقدارهای گمشده (Missing Value) باشند، با اضافه کردن پارامتر use می‌توان به کارگیری این مقدارها را در محاسبه تنظیم کرد. گزینه‌های مربوط به این پارامتر باید یکی از مقدارهای زیر باشد.

use = "everything", "all.obs", "complete.obs", "na.or.complete", "pairwise.complete.obs"

جدول زیر به معرفی نقش هر یک از این مقدارها در محاسبه ضریب همبستگی پرداخته است.

مقدار پارامترنقش در محاسبات
everythingاگر یکی از مشاهدات دارای مقدار NA باشد، نتیجه محاسبات نیز NA خواهد بود. (پیش‌فرض)
all.obsاگر یکی از مشاهدات دارای مقدار NA باشد، محاسبه با خطا مواجه خواهد شد.
complete.obsاگر متغیر مربوط به یکی از مشاهدات دارای مقدار NA باشد، آن مشاهده حذف و ضریب همبستگی محاسبه می‌شود. اگر هیچ مشاهده‌ی کاملی وجود نداشته باشد، خطا ظاهر می‌شود.
na.or.completeمانند حالت بالا ولی در صورت  ناکامل بودن همه مشاهدات، به جای خطا مقدار NA را نشان می‌دهد.
pairwise.complete.obsمحاسبه ضریب همبستگی براساس مشاهداتی که برای هر دو متغیر کامل هستند.

مثال کاربردی

در این نوشتار از مجموعه داده، هزینه‌های خانوار انگلستان در سال‌های ۱۹۸۰ تا ۱۹۸۲ استفاده می‌کنیم. این بانک اطلاعاتی شامل 1519 مشاهده و 10 ویژگی یا متغیر است که در جدول زیر معرفی شده‌اند.

نام متغیرشرح
wfoodسهم هزینه خوراک در سبد خانوار
wfuelسهم هزینه مصرف سوخت
wclothسهم هزینه پوشاک
walcسهم مصرف نوشیدنی در سبد خانوار
wtransسهم هزینه حمل و نقل
wotherسهم هزینه‌های متفرقه
totexpسهم هزینه‌های کالا
incomeدرآمد خانوادر
ageسن سرپرست خانوار
childrenدارای فرزند (۱= بدون فرزند، ۲= دارای فرزند)

کدهای زیر به منظور بارگذاری و آماده‌سازی بانک اطلاعاتی در نظر گرفته شده‌اند. توجه داشته باشید که کتابخانه dplyr قبلا در R نصب شده و همچنین اتصال به اینترنت نیز برقرار باشد تا فایل اطلاعاتی قابل دریافت باشد.

1library(dplyr)
2PATH <-"https://raw.githubusercontent.com/thomaspernet/data_csv_r/master/data/british_household.csv"
3data <-read.csv(PATH) %>%
4  filter(income < 500) %>%
5  mutate(log_income = log(income),
6         log_totexp = log(totexp),
7         children_fac = factor(children, order = TRUE, labels = c("No", "Yes"))) %>%
8  select(-c(X, X.1, children, totexp, income))
9glimpse(data)

در خط اول کتابخانه dplyr فراخوانی شده و سپس از طریق اینترنت فایل اطلاعاتی brithish household.csv بارگذاری شده است. این فایل در قالب متنی (CSV) بوده و فیلدها با علامت "," جدا شده‌اند. بعضی از افراد در این بانک اطلاعاتی دارای درآمد بیش از ۵۰۰ هزار پوند در سال هستند. بهتر است این مشاهدات برای تحلیل کنار گذاشته شوند تا چولگی زیادی در توزیع درآمدها وجود نداشته باشد. این کار به کمک دستور (filter) که در خط چهارم  نوشته شده، صورت گرفته است.

با توجه به دامنه تغییرات وسیعی که داده‌های مالی و پولی دارند، بهتر است از لگاریتم (Log) آن‌ها برای انجام محاسبات کمک گرفت. این تبدیل کمک می‌کند تا تاثیر ناهنجاری‌ها و چولگی در داده‌ها کاهش یابد. این کار در خطوط پنجم و ششم کد ارائه شده، صورت گرفته است و لگاریتم متغیرهای income, totexp محاسبه شده‌ و در متغیرهای log_totexp و log_income ثبت شده‌اند.

همچنین به منظور تبدیل متغیر children به عامل یا فاکتور از دستور factor در خط هفتم استفاده شده است. به این ترتیب مقدار ۱ و ۲ که برای این متغیر ثبت شده بود به مقدارهای Yes و NO تغییر یافته‌اند. با اجرای این کد، خروجی حاصل می‌شود. از آنجایی که برای نمایش داده‌ها از تابع $$glimps()$$ استفاده شده است، متغیرهای در سطر و مقدارهایشان در ستون‌ها دیده می‌شود.

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

حال براساس این داده‌ها، ضریب همبستگی خطی پیرسون را برای متغیرهای «لگاریتم درآمد» (log_income) و «سهم هزینه خوراک» (wfood) را محاسبه می‌کنیم تا ارتباط بین آن‌ها مشخص شود.

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

مقدار ضریب همبستگی خطی پیرسون در این حالت برابر با 0.2466986- است که نشان دهنده ارتباط معکوس بین درآمد و هزینه خوراک است. بار دیگر از ضریب همبستگی رتبه‌ای اسپیرمن برای اندازه‌گیری ارتباط بین این دو متغیر کمک می‌گیریم. کافی است کد را به صورت زیر اجرا کنیم.

1cor(data$log_income, data$wfood, method = "spearman")

حاصل این محاسبه برابر با 0.2501252- خواهد بود که باز هم نشانگر وجود رابطه معکوس بین این دو متغیر است.

ماتریس همبستگی

برای آشنایی و درک رابطه بین دو متغیر، محاسبه ضریب «همبستگی دو متغیره» (Bivariate Correlation)  می‌تواند مفید باشد. ولی برای نمایش همزمان رابطه بین زوج‌هایی از متغیرها، باید از ماتریس همبستگی (Correlation Matrix) بهره برد. عناصر این ماتریس، همبستگی بین متغیر سطرها و ستون‌ها را نشان می‌دهد. البته تابع $$cor()$$ نیز ماتریس همبستگی را محاسبه می‌کند. کافی است که کل منبع اطلاعاتی را به عنوان پارامتر اول برای این تابع معرفی کنیم. البته توجه داشته باشید که این ماتریس، متقارن است و فقط به عناصر بالا یا پایین قطر اصلی احتیاج داریم.

برای مثال فرض کنید که می‌خواهیم ضریب همبستگی را برای داده‌های کمی مثال قبلی اجرا کنیم. از آنجایی که متغیر children یک فاکتور یا عامل محسوب می‌شود، آن را در ماتریس ضریب همبستگی قرار نخواهیم داد. کد زیر، ماتریس همبستگی محاسبه کرده و نمایش می‌دهد.

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

بهتر است تابع نوشته شده را بیشتر بررسی کنیم و با پارامترهای آن آشنا شویم. در سطر دوم، با استفاده از تابع $$cor(data[,1:9]$$ متغیرهای اول تا نهم برای محاسبه در نظر گرفته شده‌اند. همچنین مقدار محاسبه شده برای ضریب همبستگی پیرسون که به صورت پیش‌فرض در این تابع به کار می‌رود، به کمک تابع $$round()$$ تا ۲ رقم اعشار گرد شده‌اند. در انتها نیز با دستور $$as.dist()$$ نیز خروجی تبدیل به یک ماتریس پایین مثلثی شده و در $$mat\_1$$ ثبت گردیده است. خروجی به صورت زیر خواهد بود.

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

نکته: از آنجایی که ضریب همبستگی هر متغیر با خودش برابر با ۱ است، قطر اصلی ماتریس همبستگی نمایش داده نشده است.

سطح بامعنایی (Significant Level)

برای انجام آزمون روی ضرایب همبستگی، از تابع $$rcorr()$$ از کتابخانه $$Hmisc$$ استفاده خواهیم کرد تا مقدار احتمال (p-Value) را برای هر یک از ضرایب همبستگی محاسبه کند. با استفاده از کد زیر می‌توانید این کتابخانه را دریافت و بارگذاری کنیم.

1install.packages("Hmisc")
2library("Hmisc")

حال به محاسبه ماتریس مقدار احتمال می‌پردازیم. دستور $$rcorr()$$ که در زیر نمایش داده شده است، این محاسبات را انجام می‌دهد.

1data_rcorr <-as.matrix(data[, 1: 9])
2
3mat_2 <-rcorr(data_rcorr)
4# mat_2 <-rcorr(as.matrix(data)) returns the same output
5mat_2
6p_value <-round(mat_2[["P"]], 3)
7p_value

با اجرای این کد، ابتدا ماتریس ضریب همبستگی مشابه حالت قبل محاسبه می‌شود و در انتها نیز ماتریس مقدار احتمال ظاهر خواهد شد.

نکته: دستور $$rcorr()$$ هر دو ماتریس ضرایب و مقدار احتمال را محاسبه می‌کند و آن را در یک «لیست» (List) قرار می‌دهد. عناصر این لیست به ترتیب، r یا ماتریس همبستگی، n تعداد مشاهدات و P یا ماتریس مقدار احتمال است. برای دسترسی به قسمت p-value در این لیست از دستور $$mat\_2[["p"]]$$ استفاده کرده‌ایم.

به این ترتیب خروجی به صورت زیر ظاهر خواهد شد.

1           wfood wfuel wcloth  walc wtrans wother   age log_income log_totexp
2wfood         NA 0.000  0.000 0.000  0.000  0.000 0.365      0.000          0
3wfuel      0.000    NA  0.000 0.000  0.000  0.000 0.076      0.000          0
4wcloth     0.000 0.000     NA 0.001  0.000  0.000 0.160      0.000          0
5walc       0.000 0.000  0.001    NA  0.000  0.000 0.000      0.105          0
6wtrans     0.000 0.000  0.000 0.000     NA  0.000 0.259      0.020          0
7wother     0.000 0.000  0.000 0.000  0.000     NA 0.355      0.000          0
8age        0.365 0.076  0.160 0.000  0.259  0.355    NA      0.000          0
9log_income 0.000 0.000  0.000 0.105  0.020  0.000 0.000         NA          0
10log_totexp 0.000 0.000  0.000 0.000  0.000  0.000 0.000      0.000         NA

نمایش ماتریس همبستگی

معمولا برای نمایش تصویری ضرایب همبستگی از «نقشه گرمایی» (Heat Map) استفاده می‌شود. برای ترسیم چنین نموداری از کتابخانه $$GGally$$ کمک می‌گیریم که به کمک دستورات زیر می‌توانید آن را بارگذاری و نصب کنید.

1install.packages("GGally")
2library(GGally)

این کتابخانه دارای توابع مختلفی در زمینه‌ رسم نمودارهای مختلف آماری است که برای نمایش ضریب همبستگی و توزیع به کار می‌رود. در اینجا از تابع $$ggcorr()$$ بهره می‌بریم.

1ggcorr(df, method = c("pairwise", "pearson"),
2  nbreaks = NULL, digits = 2, low = "#3B9AB2",
3  mid = "#EEEEEE", high = "#F21A00",
4  geom = "tile", label = FALSE,
5  label_alpha = FALSE)
6arguments:			
7- df: Dataset used
8- method: Formula to compute the correlation. By default, pairwise and Pearson are computed
9- nbreaks: Return a categorical range for the coloration of the coefficients. By default, no break and the color gradient is continuous 
10- digits: Round the correlation coefficient. By default, set to 2
11- low: Control the lower level of the coloration 
12- mid: Control the middle level of the coloration 
13- high: Control the high level of the coloration 
14- geom: Control the shape of the geometric argument. By default, "tile"
15- label: Boolean value. Display or not the label. By default, set to `FALSE`

پارامترهای این تابع در جدول زیر معرفی شده‌اند.

پارامترعملکرد
dfمعرفی منبع اطلاعاتی
methodروش محاسبه ضریب همبستگی (پیش‌فرض ضریب همبستگی پیرسون بین زوج‌ها)
nbreakتعداد شکست و طبقه‌بندی ضرایب همبستگی (پیش‌فرض بدون شکست و رنگ‌ها پیوسته)
digitsتعداد ارقام برای گردن کردن ضریب همبستگی
lowکد رنگ برای کمترین مقدار ضریب همبستگی‌
midکد رنگ برای میانگین مقدار ضریب همبستگی
highکد رنگ برای حداکثر مقدار ضریب همبستگی‌
geomکنترل نحوه قرارگیری عناصر تصویری روی نمودار در حالت پیش‌فرض به صورت کاشی
labelمقدار منقطی به منظور نمایش مقدار ضریب همبستگی روی نقشه گرمایی (پیش‌فرض FALSE- بدون نمایش)

حال دستور مربوط به نمایش نقشه گرمایی را برای منبع اطلاعاتی data اجرا می‌کنیم. کافی است که دستور زیر را در R اجرا کنید.

1ggcorr(data)

همانطور که دیده می‌شود، این تابع احتیاج به فقط یک پارامتر دارد که همان منبع اطلاعاتی (df) است. در این حالت خروجی به صورت زیر نمایش داده خواهد شد. (رنگ‌ها به صورت پیش‌فرض از آبی کم رنگ تا قرمز در نظر گرفته شده‌اند.)

pearson heatmap

به منظور کنترل بیشتر روی نقشه گرمایی، پارامترها را تغییر می‌دهیم و دستور را به صورت زیر می‌نویسم.

1ggcorr(data,
2    nbreaks = 6,
3    low = "steelblue",
4    mid = "white",
5    high = "darkred",
6    geom = "circle")

با این کار سطوح مربوط به رنگ ها با پارامتر breaks به ۶ قسمت تفکیک شده است. همچنین سه سطح رنگ نیز به صورت آبی تا قرمز تیره تنظیم شده است. نحوه نمایش نقشه گرمایی هم براساس دایره‌ها توسط پارامتر "geom="circle تعیین شده است.

pearson heatmap extended

اگر بخواهید مقدار ضرایب همبستگی را روی نمودار نمایش دهید باید پارامتر label را مقدار دهی کنید. به این منظور کد زیر را اجرا کنید تا نمایش نقشه گرمایی، زیباتر شود.

1ggcorr(data,
2    nbreaks = 6,
3    label = TRUE,
4    label_size = 3,
5    color = "grey50")

نکته: پارامتر lable=TRUE باعث نمایش ضرایب همبستگی روی نقشه شده است. همچنین اندازه برچسب‌ها (label_size) و رنگ آن‌ها (color) نیز قابل تعیین است.

pearson heatmap with labels

شیوه دیگر برای محاسبه و نمایش ضرایب همبستگی با استفاده از تابع $$ggpairs$$ از کتابخانه $$GGally$$ است. در این تابع، نمودار توزیع حاشیه‌ای (برای هر متغیر)، ضریب همبستگی و ... قابل نمایش است. شکل این تابع در زیر نشان داده شده است.

1ggpair(df, columns = 1: ncol(df), title = NULL,
2    upper = list(continuous = "cor"),
3    lower = list(continuous = "smooth"),
4    mapping = NULL)		
5arguments:			
6- df: Dataset used
7- columns: Select the columns to draw the plot
8- title:  Include a title
9- upper: Control the boxes above the diagonal of the plot. Need to supply the type of computations or graph to return. If continuous = "cor", we ask R to compute the correlation. Note that, the argument needs to be a list. Other arguments can be used, see the [vignette]("http://ggobi.github.io/ggally/#custom_functions") for more information.
10- Lower: Control the boxes below the diagonal. 
11- mapping: Indicates the aesthetic of the graph. For instance, we can compute the graph for different groups.

همانطور که مشخص است شش پارامتر برای این تابع وجود دارد. جدول زیر به معرفی این پارامترها پرداخته است.

پارامترعملکرد
dfمعرفی منبع اطلاعاتی
columnانتخاب ستون‌هایی از df که در محاسبات به کار می‌روند.
titleعنوان نمودار
upperتعیین عناصری که در بالای قطر اصلی نمایش داده می‌شوند
lowerتعیین عناصری که در پایین قطر اصلی نمایش داده می‌شوند
mappingتفکیک نقشه گرمایی برحسب متغیر عامل یا فاکتور

به این ترتیب در ادامه با استفاده از تابع $$ggpair()$$ یک نقشه گرمایی با عناصر مختلف ایجاد می‌کنیم. کد مربوطه با R در زیر دیده می‌شود.

1ggpairs(data, columns = c("log_totexp", "log_income", "age", "wtrans"),
2    title = "Bivariate analysis of revenue expenditure by the British household",
3    upper = list(continuous = wrap("cor",
4            size = 3)),
5    lower = list(
6        continuous = wrap("smooth",
7            alpha = 0.3,
8            size = 0.1))
9)

با اجرای این کد، نقشه گرمایی برای چهار متغیر و ضرایب همبستگی آن‌ها ترسیم شده است.

heatmap ggplot

پارامترهای این دستور در ادامه بیشتر توضیح داده خواهند شد.

Column: متغیرهایی که در محاسبه ضریب همبستگی و ترسیم نمودار نقش دارند در پارامتر Column معرفی شده‌اند. اسامی این متغیرها را در زیر می‌بینید.

"log_totexp", "log_income", "age", "wtrans".

Title: برای نمایش یک عنوان بر روی نمودار از پارامتر title استفاده می‌شود.

upper: این پارامتر یک لیست است که اجزای نمایش داده شده در بالای قطر اصلی را تعیین می‌کند. همانطور که در نقشه گرمایی پایین می‌بینید مقدار ضریب همبستگی یا corr باید نمایش داده شود. در قسمت size نیز اندازه برای نمایش این مقدارها تعیین شده است. در اینجا تابع wrap باعث می‌شود عناصر معرفی شده در لیست هر یک در خطوط مجزا ظاهر شوند.

mapping: این پارامتر نیز باعث می‌شود در هر قسمت از نقشه گرمایی، اجزای قابل نمایش که در بخش upper و lower تعیین شده‌اند برحسب یک متغیر عامل تفکیک شوند. بر این اساس اطلاعاتی که باید نمایش داده شود برای خانوارهایی که بدون فرزند هستند از رنگ قرمز و برای نمایش اطلاعاتی خانوارهایی که دارای فرزند هستند از رنگ آبی استفاده شده است.

lower: این پارامتر نیز به مانند upper یک لیست است که در این حالت نمودار رابطه خطی (smooth) بین زوج متغیرها را ترسیم کرده است. مقدار alpha نیز میزان شفافیت نقاطی را تعیین می‌کند که روی نمودار ظاهر شده‌اند.

به این ترتیب، به منظور تفکیک خروجی براساس وضعیت فرزندان در خانوار کافی است که کدها را به صورت زیر تغییر دهید.

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

با این کار در قسمت بالای قطر اصلی نقشه گرمایی، خروجی‌ها به تفکیک وضعیت فرزندان خانوارها مشخص شده‌ است.

ggpairs correlation heatmap all groups

همچنین اگر می‌خواهید که نقشه گرمایی در قسمت نمودارها نیز برای گروه خانوارهای دارای فرزند و یا بدون فرزند ترسیم شود از کدهای زیر استفاده کنید.

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

همانطور که مشاهده می‌کنید، در این نمودار، از کتابخانه $$ggplot2$$ و تابع $$ggpairs$$ برای رسم نمودار استفاده شده است. به این ترتیب خروجی به صورت زیر در خواهد آمد.

ggpairs correlation heatmap

خلاصه توابع

در جدول زیر خلاصه‌ای از توابع به کار رفته در این مطلب یادآوری شده‌اند.

کتابخانهعملکردروشکد
Baseضریب همبستگی دو متغیرپیرسونcor(x1,x2, method = "pearson")
Baseضریب همبستگی دو متغیراسپیرمنcor(x1,x2, method = "spearman")
‌Baseضریب همبستگی چند متغیرهپیرسونcor(df, method = "pearson")
Baseضریب همبستگی چند متغیرهاسپیرمنcor(df, method = "spearman")
hmiscمقدار احتمال (p Value)rcorr(as.matrix(df[))[["P"]]
GGallyنقشه گرماییggcorr(df)

اگر این مطلب برایتان مفید بوده است، آموزش‌های زیر نیز به شما پیشنهاد می‌شوند:

^^

 

بر اساس رای ۱۱ نفر
آیا این مطلب برای شما مفید بود؟
اگر بازخوردی درباره این مطلب دارید یا پرسشی دارید که بدون پاسخ مانده است، آن را از طریق بخش نظرات مطرح کنید.
۴ دیدگاه برای «ضریب همبستگی و ماتریس همبستگی در R — کاربرد در یادگیری ماشین»

با سلام.
توی قسمت کد نویسی محاسبه ضریب همبستگی Spearman، به جای cor، به اشتباه or نوشته شده.


با سلام و احترام؛

سپاس از دقت نظر شما. این مورد اصلاح شد.

با تشکر از همراهی شما با مجله فرادرس

با سلام
اولا ممنون بخاطر زحمتي كه در ترجمه كشيده بوديد و اينكه در معرفي نرم افزار R نقشي ايفا كرديد قابل ستايش است ولي اي كاش حداقل اولين اصل در كار علمي يعني رفرنس دهي را رعايت ميكرديد و اشاره اي به اصل مقاله كه از آن “ترجمه” صورت گرفته را عنوان ميكرديد.

با تشكر.

سلام، وقت شما بخیر؛

منبع تمامی مطالب مجله فرادرس در صورتیکه اقتباس یا ترجمه از سایت یا مرجع دیگری صورت گرفته باشد در انتهای آن‌ها ذکر شده است.

از اینکه با مجله فرادرس همراه هستید و با نظرات خود به ما در بهبود آن یاری می‌رسانید از شما سپاسگزاریم.

نظر شما چیست؟

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *