आर में सहसंबंध: पियर्सन और स्पीयरमैन सहसंबंध मैट्रिक्स
आर में द्विचर सहसंबंध
द्विचर संबंध R में दो चरों के बीच संबंध -या सहसंबंध- का वर्णन करता है। इस ट्यूटोरियल में, हम सहसंबंध की अवधारणा पर चर्चा करेंगे और दिखाएंगे कि इसका उपयोग R में किसी भी दो चरों के बीच संबंध को मापने के लिए कैसे किया जा सकता है।
आर प्रोग्रामिंग में सहसंबंध
आर प्रोग्रामिंग में दो चरों के बीच सहसंबंध की गणना करने के लिए दो प्राथमिक विधियाँ हैं:
- Pearson: पैरामीट्रिक सहसंबंध
- भाला धारण करनेवाला सिपाही: गैर-पैरामीट्रिक सहसंबंध
आर में पियर्सन सहसंबंध मैट्रिक्स
पियर्सन सहसंबंध विधि का उपयोग आमतौर पर दो चरों के बीच संबंध की प्राथमिक जांच के रूप में किया जाता है।
RSI सहसंबंध गुणांक, , की ताकत का एक उपाय है रैखिक दो चरों और के बीच संबंध। इसकी गणना निम्न प्रकार से की जाती है:
साथ में
- , यानी का मानक विचलन
- , यानी का मानक विचलन
सहसंबंध -1 और 1 के बीच होता है।
- 0 के निकट या बराबर का मान और के बीच बहुत कम या कोई रैखिक संबंध नहीं दर्शाता है।
- इसके विपरीत, 1 या -1 के जितना करीब आता है, रैखिक संबंध उतना ही मजबूत होता है।
हम टी-परीक्षण की गणना इस प्रकार कर सकते हैं और वितरण तालिका की जाँच स्वतंत्रता की डिग्री के बराबर कर सकते हैं:
आर में स्पीयरमैन रैंक सहसंबंध
रैंक सहसंबंध अवलोकनों को रैंक के अनुसार क्रमबद्ध करता है और रैंक के बीच समानता के स्तर की गणना करता है। रैंक सहसंबंध का लाभ यह है कि यह आउटलेयर के लिए मजबूत होता है और डेटा के वितरण से जुड़ा नहीं होता है। ध्यान दें कि, रैंक सहसंबंध क्रमिक चर के लिए उपयुक्त है।
स्पीयरमैन का रैंक सहसंबंध, हमेशा -1 और 1 के बीच होता है, जिसका मान चरम के करीब होता है, जो मजबूत संबंध को दर्शाता है। इसकी गणना इस प्रकार की जाती है:
रैंक और के बीच सहप्रसरण बताए गए हैं। हर मानक विचलन की गणना करता है।
R में, हम cor() फ़ंक्शन का उपयोग कर सकते हैं। इसमें तीन तर्क, , और विधि होती है।
cor(x, y, method)
तर्क:
- x: पहला वेक्टर
- y: दूसरा वेक्टर
- तरीका: सहसंबंध की गणना करने के लिए उपयोग किया जाने वाला सूत्र। तीन स्ट्रिंग मान:
- “पियरसन”
- “केंडल”
- “भालाधारी”
यदि वेक्टर में कोई मान गायब है तो एक वैकल्पिक तर्क जोड़ा जा सकता है: use = “complete.obs”
हम BudgetUK डेटासेट का उपयोग करेंगे। यह डेटासेट 1980 और 1982 के बीच ब्रिटिश परिवारों के बजट आवंटन की रिपोर्ट करता है। इसमें दस विशेषताओं के साथ 1519 अवलोकन हैं, जिनमें से कुछ इस प्रकार हैं:
- wfood: खाना बाँटें, खर्च बाँटें
- wफ्यूल: ईंधन व्यय साझा करें
- वक्लॉथ: कपड़ों पर खर्च के लिए बजट हिस्सा
- वाल्क: शराब पर खर्च साझा करें
- wट्रांस: परिवहन व्यय साझा करें
- वोदर: अन्य वस्तुओं पर व्यय का हिस्सा
- टोटेक्स्प: कुल घरेलू खर्च पाउंड में
- आय: कुल शुद्ध घरेलू आय
- उम्र: घर की आयु
- के बच्चे : बच्चों की संख्या
उदाहरण
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)
कोड स्पष्टीकरण
- हम सबसे पहले डेटा को आयात करते हैं और dplyr लाइब्रेरी से glimpse() फ़ंक्शन के साथ देखते हैं।
- तीन बिंदु 500K से ऊपर हैं, इसलिए हमने उन्हें बाहर करने का निर्णय लिया।
- मौद्रिक चर को लॉग में बदलना एक आम बात है। इससे आउटलायर्स के प्रभाव को कम करने में मदद मिलती है और डेटासेट में विषमता कम होती है।
आउटपुट:
## 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
आर में सहसंबंध मैट्रिक्स
द्विचर सहसंबंध एक अच्छी शुरुआत है, लेकिन हम बहुचर विश्लेषण के साथ एक व्यापक तस्वीर प्राप्त कर सकते हैं। कई चरों के साथ सहसंबंध को एक के अंदर चित्रित किया जाता है सहसम्बंध मैट्रिक्ससहसंबंध मैट्रिक्स एक मैट्रिक्स है जो सभी चरों के युग्म सहसंबंध को दर्शाता है।
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
महत्व स्तर
कुछ स्थितियों में महत्व स्तर उपयोगी होता है जब हम पियर्सन या स्पीयरमैन विधि का उपयोग करते हैं। लाइब्रेरी Hmisc से rcorr() फ़ंक्शन हमारे लिए 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_value <-round(mat_2[["P"]], 3) p_value
कोड स्पष्टीकरण
- mat_2[[“पी”]]: 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
आर में सहसंबंध मैट्रिक्स का दृश्यीकरण
हीट मैप सहसंबंध मैट्रिक्स दिखाने का दूसरा तरीका है। GGally लाइब्रेरी ggplot2 का एक विस्तार है। वर्तमान में, यह conda लाइब्रेरी में उपलब्ध नहीं है। हम इसे सीधे कंसोल में इंस्टॉल कर सकते हैं।
install.packages("GGally")
लाइब्रेरी में सारांश सांख्यिकी दिखाने के लिए विभिन्न फ़ंक्शन शामिल हैं जैसे कि किसी डेटा में सभी चरों का सहसंबंध और वितरण। मैट्रिक्स.
ggcorr() फ़ंक्शन में बहुत सारे तर्क हैं। हम केवल उन्हीं तर्कों का परिचय देंगे जिनका उपयोग हम ट्यूटोरियल में करेंगे:
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: उपयोग किया गया डेटासेट
- तरीका: सहसंबंध की गणना करने का सूत्र। डिफ़ॉल्ट रूप से, पेयरवाइज और पियर्सन की गणना की जाती है
- एनब्रेक्स: गुणांकों के रंग के लिए एक श्रेणीबद्ध सीमा लौटाएँ। डिफ़ॉल्ट रूप से, कोई ब्रेक नहीं होता है और रंग ग्रेडिएंट निरंतर होता है
- अंक: सहसंबंध गुणांक को पूर्णांकित करें। डिफ़ॉल्ट रूप से, 2 पर सेट करें
- कम: रंग के निचले स्तर को नियंत्रित करें
- मध्य: रंग के मध्य स्तर को नियंत्रित करें
- उच्च: रंग के उच्च स्तर को नियंत्रित करें
- जियोमो: ज्यामितीय तर्क के आकार को नियंत्रित करें। डिफ़ॉल्ट रूप से, “टाइल”
- लेबल: बूलियन मान। लेबल प्रदर्शित करें या नहीं। डिफ़ॉल्ट रूप से, `FALSE` पर सेट करें
बुनियादी हीट मैप
पैकेज का सबसे बुनियादी प्लॉट हीट मैप है। ग्राफ का लेजेंड -1 से 1 तक का ग्रेडिएंट रंग दिखाता है, जिसमें हॉट कलर मजबूत सकारात्मक सहसंबंध और कोल्ड कलर नकारात्मक सहसंबंध दर्शाता है।
library(GGally) ggcorr(data)
कोड स्पष्टीकरण
- ggcorr(डेटा): केवल एक तर्क की आवश्यकता है, जो डेटा फ़्रेम नाम है। कारक स्तर चर प्लॉट में शामिल नहीं हैं।
आउटपुट:
हीट मैप पर नियंत्रण जोड़ना
हम ग्राफ़ में और अधिक नियंत्रण जोड़ सकते हैं:
ggcorr(data, nbreaks = 6, low = "steelblue", mid = "white", high = "darkred", geom = "circle")
कोड स्पष्टीकरण
- एनब्रेक्स=6: 6 रैंक के साथ किंवदंती को तोड़ें।
- कम = “स्टीलब्लू”: नकारात्मक सहसंबंध के लिए हल्के रंगों का उपयोग करें
- मध्य = “सफेद”: मध्य श्रेणी सहसंबंध के लिए सफेद रंग का उपयोग करें
- उच्च = “गहरा लाल”सकारात्मक सहसंबंध के लिए गहरे रंगों का उपयोग करें
- geom = “वृत्त”हीट मैप में खिड़कियों के आकार के रूप में वृत्त का उपयोग करें। वृत्त का आकार सहसंबंध के निरपेक्ष मान के समानुपातिक होता है।
आउटपुट:
हीट मैप में लेबल जोड़ना
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: उपयोग किया गया डेटासेट
- कॉलम: प्लॉट बनाने के लिए कॉलम चुनें
- शीर्षक: शीर्षक शामिल करें
- ऊपरी: प्लॉट के विकर्ण के ऊपर स्थित बक्सों को नियंत्रित करें। वापस करने के लिए गणना या ग्राफ के प्रकार की आपूर्ति करने की आवश्यकता है। यदि निरंतर = "cor", तो हम R से सहसंबंध की गणना करने के लिए कहते हैं। ध्यान दें कि, तर्क को एक सूची होना चाहिए। अन्य तर्कों का उपयोग किया जा सकता है, अधिक जानकारी के लिए [विग्नेट](“http://ggobi.github.io/ggally/#custom_functions”) देखें।
- लोअर: विकर्ण के नीचे स्थित बक्सों को नियंत्रित करें।
- मैपिंग: ग्राफ के सौंदर्य को दर्शाता है। उदाहरण के लिए, हम विभिन्न समूहों के लिए ग्राफ की गणना कर सकते हैं।
समूहीकरण के साथ ggpair के साथ द्विचर विश्लेषण
अगला ग्राफ तीन जानकारी दर्शाता है:
- लॉग_टोटेक्स्प, लॉग_इनकम, आयु और 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))
कोड स्पष्टीकरण
- कॉलम = c(“log_totexp”, “log_income”, “age”, “wtrans”): ग्राफ़ में दिखाने के लिए चर चुनें
- शीर्षक = “ब्रिटिश परिवार द्वारा राजस्व व्यय का द्विचर विश्लेषण”: शीर्षक जोड़ें
- ऊपरी = सूची(): ग्राफ के ऊपरी हिस्से को नियंत्रित करें। यानी विकर्ण के ऊपर
- निरंतर = लपेटें(“कोर”, आकार = 3)): सहसंबंध के गुणांक की गणना करें। हम ग्राफ के सौंदर्य को नियंत्रित करने के लिए wrap() फ़ंक्शन के अंदर तर्क निरंतर लपेटते हैं (यानी आकार = 3) -निचला = सूची(): ग्राफ के निचले हिस्से को नियंत्रित करें। यानी विकर्ण के नीचे।
- निरंतर = लपेटें ("चिकनी", अल्फा = 0.3, आकार = 0.1): एक रेखीय प्रवृत्ति के साथ एक स्कैटर प्लॉट जोड़ें। हम ग्राफ के सौंदर्य को नियंत्रित करने के लिए wrap() फ़ंक्शन के अंदर तर्क निरंतर लपेटते हैं (यानी आकार = 0.1, अल्फा = 0.3)
- मैपिंग = aes(रंग = children_fac)हम चाहते हैं कि ग्राफ का प्रत्येक भाग children_fac चर द्वारा स्टैक किया जाए, जो एक श्रेणीबद्ध चर है, यदि घर में बच्चे नहीं हैं तो इसका मान 1 होगा, अन्यथा इसका मान 2 होगा।
आउटपुट:
आंशिक समूहीकरण के साथ 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(रंग = children_fac): सूची को ऊपरी = सूची में ले जाएँ। हम केवल ग्राफ के ऊपरी भाग में समूह द्वारा स्टैक्ड गणना चाहते हैं।
आउटपुट:
सारांश
- द्विचर संबंध, R में दो चरों के बीच संबंध -या सहसंबंध- का वर्णन करता है।
- दो चरों के बीच सहसंबंध की गणना करने के लिए दो प्राथमिक विधियाँ हैं R Programming: पियर्सन और स्पीयरमैन.
- पियर्सन सहसंबंध विधि का उपयोग आमतौर पर दो चरों के बीच संबंध की प्राथमिक जांच के रूप में किया जाता है।
- रैंक सहसंबंध अवलोकनों को रैंक के आधार पर क्रमबद्ध करता है और रैंक के बीच समानता के स्तर की गणना करता है।
- स्पीयरमैन का रैंक सहसंबंध, हमेशा -1 और 1 के बीच होता है, तथा चरम सीमा के निकट का मान मजबूत संबंध को इंगित करता है।
- सहसंबंध मैट्रिक्स एक मैट्रिक्स है जो सभी चरों के युग्म सहसंबंध को दर्शाता है।
- कुछ स्थितियों में महत्व स्तर उपयोगी होता है जब हम पियर्सन या स्पीयरमैन पद्धति का उपयोग करते हैं।
हम नीचे दी गई तालिका में R में सभी सहसंबंध कार्यों को संक्षेप में प्रस्तुत कर सकते हैं:
पुस्तकालय | उद्देश्य | विधि | कोड |
---|---|---|---|
आधार | द्विवार्षिक सहसंबंध | Pearson |
cor(dfx2, method = "pearson") |
आधार | द्विवार्षिक सहसंबंध | भाला धारण करनेवाला सिपाही |
cor(dfx2, method = "spearman") |
आधार | बहुभिन्नरूपी सहसंबंध | Pearson |
cor(df, method = "pearson") |
आधार | बहुभिन्नरूपी सहसंबंध | भाला धारण करनेवाला सिपाही |
cor(df, method = "spearman") |
ह्मिसक | पी मान |
rcorr(as.matrix(data[,1:9]))[["P"]] |
|
गगली | गर्मी के नक्शे |
ggcorr(df) |
|
बहुभिन्नरूपी प्लॉट |
cf code below |