R에서 상관 행렬을 어떻게 만들 수 있습니까?


86

동일한 유형의 데이터 세트가 92 개 있습니다.

가능한 두 조합에 대한 상관 행렬을 만들고 싶습니다.

즉, 92 x92의 행렬을 원합니다.

요소 (ci, cj)는 ci와 cj 사이의 상관이어야합니다.

어떻게하나요?


5
받는 모습이 cor기능, 또는에 rcorr의 기능 Hmisc패키지
마누엘 라몬

두 매개 변수 사이의 cor를 찾을 수 있습니다. 문제는 매트릭스로 배열하는 방법입니다.
Swapnil 'Tux'Takle

6
어떻게 이렇게 많은 찬성표를 얻었습니까?
기금 모니카의 소송

답변:


104

예,

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

73

'corrplot'패키지를 사용할 수 있습니다.

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/… 또는 간단한 행렬 과 유사한 그래프를 얻을 수 있지만 pearson, kendall 또는 spearman 상관 관계 대신 R-squared를 사용할 수 있습니까?
FraNut 2015 년

R2는 Pearson 상관 계수의 제곱과 같습니다. 따라서 플롯을 만들기 전에 M에 M (상관 행렬을 곱하기) 만하면됩니다.
Jot eN 2015 년

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()

여기에 이미지 설명 입력


@Manuel Ramón의 예는 아마도 귀하의 경우에 가장 적합 할 것입니다 (단일 행렬)-데이터 세트를 열로 구성하십시오.
상자에 마크

위 이미지에서 어떻게 색상을 '반전'할 수 있습니까? 빨간색 상관 관계는 -1 또는 1에 가깝고 0에 가까울 때 흰색입니까?
tagoma

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 축에 변수 레이블을 어떻게 추가합니까? 감사합니다
아구스틴 Indaco

@ 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)

las = 0은 이름을 원래 위치로 되돌릴 것이고, 내 이름은 길기 때문에 las = 2를 사용하여 축에 수직이되도록했습니다.

edit2 : 그리드에 숫자를 인쇄하는 image () 함수를 억제하려면 (그렇지 않으면 변수 레이블이 겹치게됩니다) 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')
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.