मैं आर में सहसंबंध मैट्रिक्स कैसे बना सकता हूं?


86

मेरे पास एक ही प्रकार के डेटा का 92 सेट है।

मैं किसी भी दो संयोजन के लिए सहसंबंध मैट्रिक्स बनाना चाहता हूं।

यानी मुझे 92 x92 का मैट्रिक्स चाहिए।

इस तरह के तत्व (ci, cj) को ci और cj के बीच सहसंबंध होना चाहिए।

मैं उसको कैसे करू?


5
corसमारोह में, या पैकेज rcorrमें समारोह के लिए एक नज़र हैHmisc
मैनुअल रामोन

मैं दो मापदंडों के बीच कॉर्प को खोजने में सक्षम हूं। बात यह है कि उन्हें मैट्रिक्स में व्यवस्थित कैसे किया जाए?
स्वप्निल 'टक्स'

6
पृथ्वी पर यह कैसे इतने सारे उत्थान मिले?
निधि मोनिका का मुकदमा

जवाबों:



72

आप 'भ्रष्ट' पैकेज का उपयोग कर सकते हैं।

d <- data.frame(x1=rnorm(10),
                 x2=rnorm(10),
                 x3=rnorm(10))
M <- cor(d) # get correlations

library('corrplot') #package corrplot
corrplot(M, method = "circle") #plot matrix

यहाँ छवि विवरण दर्ज करें

अधिक जानकारी यहाँ: http://cran.r-project.org/web/packages/corrplot/vignettes/corrplot-intro.html


यह ग्राफ इन लोगों के लिए इसी तरह प्राप्त करने के लिए संभव है cran.r-project.org/web/packages/corrplot/vignettes/... , या एक साधारण मैट्रिक्स, लेकिन साथ आर-चुकता पियर्सन, केंडल, या स्पीयरमैन सहसंबंध के बजाय?
फ्राणुत

आर 2 पीयरसन सहसंबंध गुणांक के वर्ग के बराबर है। तो आपको प्लॉट बनाने से पहले एम (एम द्वारा बहुगुणा सहसंबंध मैट्रिक्स) की आवश्यकता है।
जोत ईएन

17

कोर समारोह सहसंबंध की गणना में मैट्रिक्स के कॉलम का उपयोग करेगा। तो, आपके मैट्रिक्स x और मैट्रिक्स y के बीच पंक्तियों की संख्या समान होनी चाहिए । पूर्व .:

set.seed(1)
x <- matrix(rnorm(20), nrow=5, ncol=4)
y <- matrix(rnorm(15), nrow=5, ncol=3)
COR <- cor(x,y)
COR
image(x=seq(dim(x)[2]), y=seq(dim(y)[2]), z=COR, xlab="x column", ylab="y column")
text(expand.grid(x=seq(dim(x)[2]), y=seq(dim(y)[2])), labels=round(c(COR),2))

यहाँ छवि विवरण दर्ज करें

संपादित करें:

यहां एक एकल मैट्रिक्स के साथ गणना की गई सहसंबंध मैट्रिक्स पर कस्टम रो और कॉलम लेबल का एक उदाहरण दिया गया है:

png("corplot.png", width=5, height=5, units="in", res=200)
op <- par(mar=c(6,6,1,1), ps=10)
COR <- cor(iris[,1:4])
image(x=seq(nrow(COR)), y=seq(ncol(COR)), z=cor(iris[,1:4]), axes=F, xlab="", ylab="")
text(expand.grid(x=seq(dim(COR)[1]), y=seq(dim(COR)[2])), labels=round(c(COR),2))
box()
axis(1, at=seq(nrow(COR)), labels = rownames(COR), las=2)
axis(2, at=seq(ncol(COR)), labels = colnames(COR), las=1)
par(op)
dev.off()

यहाँ छवि विवरण दर्ज करें


@ मैनुअल रामोन का उदाहरण शायद आपके मामले (एकल मैट्रिक्स) के लिए सबसे अच्छा है - कॉलम के रूप में अपने डेटा सेट को व्यवस्थित करें।
बॉक्स में मार्क

ऊपर की छवि में, रंगों को 'उल्टा' कैसे किया जा सकता है, क्या लाल एक सहसंबंध -1 या 1 के करीब है और 0 के करीब सफेद है?
टैगोमा डिक

image(x=seq(dim(x)[2]), y=seq(dim(y)[2]), z=COR, col=rev(heat.colors(20)), xlab="x column", ylab="y column")
को बॉक्स में मार्क

@Marcinthebox आप चर लेबल को x और y अक्ष (संख्याओं के बजाय) में कैसे जोड़ेंगे? धन्यवाद
अगस्टिन इंडको

@ AgustínIndaco - मैंने एक और उदाहरण के साथ अपना उत्तर अपडेट किया है। imageसमारोह स्वचालित रूप से पंक्ति और स्तंभ नाम नहीं ले करता है, तो यह जोड़ा जाना चाहिए।
बॉक्स

15

Qtlcharts पर एक नजर । यह आपको पारस्परिक सहसंबंध बनाने की अनुमति देता है :

library(qtlcharts)
data(iris)
iris$Species <- NULL
iplotCorr(iris, reorder=TRUE)

यहाँ छवि विवरण दर्ज करें

जब आप पैकेज के विगनेट में अधिक चर को सहसंबंधित करते हैं तो यह अधिक प्रभावशाली होता है: यहाँ छवि विवरण दर्ज करें


1

इसे प्राप्त करने के अन्य तरीके हैं: ( प्लॉट सहसंबंध मैट्रिक्स में एक ग्राफ ), लेकिन मुझे आपके संस्करण को बक्से में सहसंबंध के साथ पसंद है। क्या केवल उन अनुक्रमणिका संख्याओं के बजाय x और y स्तंभ में चर नाम जोड़ने का कोई तरीका है? मेरे लिए, यह एक संपूर्ण समाधान होगा। धन्यवाद!

संपादित करें: मैं [बॉक्स में मार्क] द्वारा पोस्ट पर टिप्पणी करने की कोशिश कर रहा था, लेकिन मैं स्पष्ट रूप से नहीं जानता कि मैं क्या कर रहा हूं। हालाँकि, मैंने अपने लिए इस प्रश्न का उत्तर देने का प्रबंधन किया।

यदि d मैट्रिक्स है (या मूल डेटा फ़्रेम) और स्तंभ नाम वही हैं जो आप चाहते हैं, तो निम्न कार्य करता है:

axis(1, 1:dim(d)[2], colnames(d), las=2)
axis(2, 1:dim(d)[2], colnames(d), las=2)

लास = 0 नाम वापस अपनी सामान्य स्थिति में लाएंगे, मेरा लंबा था, इसलिए मैंने अक्ष पर लंबवत बनाने के लिए लास = 2 का उपयोग किया।

edit2: ग्रिड पर इमेज () फंक्शन प्रिंटिंग नंबर्स को दबाने के लिए (अन्यथा वे आपके वैरिएबल लेबल को ओवरलैप करते हैं), xaxt = 'n', उदा:

image(x=seq(dim(x)[2]), y=seq(dim(y)[2]), z=COR, col=rev(heat.colors(20)), xlab="x column", ylab="y column", xaxt='n')
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.