상관 행렬을 그래프로 플로팅


93

상관 관계 값이있는 행렬이 있습니다. 이제 그래프로 그려 보겠습니다.

여기에 이미지 설명 입력

어떻게 할 수 있습니까?


이 기능이 흥미로울 수 있습니다. gist.github.com/low-decarie/5886616 그래도 개선이 필요하지만 ( stackoverflow.com/questions/17370853/… )
Etienne Low-

@anon이 코드를 공유 할 수 있습니까? 이것은 내가 내 프레젠테이션을 찾고 정확히입니다
파블로 Panteliadis

답변:


57

빠르고, 더럽고, 야구장에서 :

library(lattice)

#Build the horizontal and vertical axis information
hor <- c("214", "215", "216", "224", "211", "212", "213", "223", "226", "225")
ver <- paste("DM1-", hor, sep="")

#Build the fake correlation matrix
nrowcol <- length(ver)
cor <- matrix(runif(nrowcol*nrowcol, min=0.4), nrow=nrowcol, ncol=nrowcol, dimnames = list(hor, ver))
for (i in 1:nrowcol) cor[i,i] = 1

#Build the plot
rgb.palette <- colorRampPalette(c("blue", "yellow"), space = "rgb")
levelplot(cor, main="stage 12-14 array correlation matrix", xlab="", ylab="", col.regions=rgb.palette(120), cuts=100, at=seq(0,1,0.01))

여기에 이미지 설명 입력


2
OP (글꼴, 색상, 레이아웃)의 예제와 매우 유사합니다. 원본도 격자로 만든 것 같습니다. 자세한 답변, +1.
Marek

1
답변 감사합니다. 많은 사람들이 1-s를 포함하는 대각선이 왼쪽 아래에서 오른쪽 위 정사각형으로가는 것이 아니라 왼쪽 상단에서 오른쪽 아래 정사각형 (질문의 예제 그림 참조)으로 이어지는 상관 관계 플롯에 익숙합니다. 해결책. 이 문제를 해결하는 방법은 다음과 같습니다. cor_reversed <-apply (cor, 2, rev); levelplot (t (cor_reversed), ...)
건너 뛰기

@ bill_080 코드를 복사하여 붙여 넣으면 상관 행렬이 인쇄되지 않는 이유는 무엇입니까?
Pavlos Panteliadis

59

오히려 "덜"보이지만 확인할 가치가 있습니다 (더 많은 시각적 정보를 제공).

상관 행렬 타원 : 상관 행렬 타원 상관 행렬 원 : 상관 행렬 원

아래 @assylias가 참조 하는 corrplot 비 네트 에서 더 많은 예를 찾으 십시오.


1
사이트가 작동하지 않는 것 같습니다. 첫 번째 플롯에 대한 코드 또는 패키지 설명이 있습니까?
밝은 별

1
@TrevorAlexander : 제가 기억하는 한, 첫 번째 줄거리는 ellipse:plotcorr.
daroczig 2014 년

: 나는 링크 1 편집을 제출 한 improving-visualisation.org/vis/id=250 동일한 이미지를 제공합니다.
russellpierce 2014 년

1
@rpierce 감사합니다. R 소스없이 이미지 만 볼 수 있지만. 내가 여기서 뭘 그리워?
daroczig


43

lattice :: levelplot을 사용하면 매우 쉽습니다.

z <- cor(mtcars)
require(lattice)
levelplot(z)

여기에 이미지 설명 입력


30

ggplot2 라이브러리는 geom_tile(). 음의 상관 관계가 없기 때문에 위의 플롯에서 일부 재조정이 수행 된 것 같으므로 데이터와 함께 고려하십시오. mtcars데이터 세트 사용 :

library(ggplot2)
library(reshape)

z <- cor(mtcars)
z.m <- melt(z)

ggplot(z.m, aes(X1, X2, fill = value)) + geom_tile() + 
scale_fill_gradient(low = "blue",  high = "yellow")

여기에 이미지 설명 입력

수정 :

ggplot(z.m, aes(X1, X2, fill = value)) + geom_tile() + 
scale_fill_gradient2(low = "blue",  high = "yellow")

여기에 이미지 설명 입력

중간 점의 색상을 지정할 수 있으며 기본값은 흰색이므로 여기에서 잘 조정할 수 있습니다. 다른 옵션은 ggplot 웹 사이트의 여기여기 에서 찾을 수 있습니다 .


좋아요 (+1)! (예 : 나는 수동 브레이크 규모를 추가 할 수 있지만 c(-1, -0.6, -0.3, 0, 0.3, 0.6, 1))와 "white"수 있도록 중간에 색이 효율적으로 상관 관계의 대칭성을 반영합니다.
daroczig 2011 년

@Daroczig-좋은 지적입니다. scale_fill_gradient2()자동으로 설명하는 기능을 달성 한 것 같습니다 . 나는 그것이 존재하는지 몰랐다.
Chase

1
여기에 추가하면 : p <- ggplot(.....) + ... + ....; library(plotly); ggplotly(p)그것을 상호 작용하는 것
schlusie

대각선 1이 왼쪽 상단에서 오른쪽 하단으로 이동하려면 다음을 X1사용 하기 위해 요인 수준의 반전이 필요합니다 .z.m$X1 <- factor(z.m$X1, levels = rev(levels( z.m$X1 )))
arun

11

corrplot 패키지를 사용하십시오.

library(corrplot)
data(mtcars)
M <- cor(mtcars)
##  different color series
col1 <- colorRampPalette(c("#7F0000","red","#FF7F00","yellow","white", 
        "cyan", "#007FFF", "blue","#00007F"))
col2 <- colorRampPalette(c("#67001F", "#B2182B", "#D6604D", "#F4A582", "#FDDBC7",
        "#FFFFFF", "#D1E5F0", "#92C5DE", "#4393C3", "#2166AC", "#053061"))  
col3 <- colorRampPalette(c("red", "white", "blue")) 
col4 <- colorRampPalette(c("#7F0000","red","#FF7F00","yellow","#7FFF7F", 
        "cyan", "#007FFF", "blue","#00007F"))   
wb <- c("white","black")


par(ask = TRUE)


## different color scale and methods to display corr-matrix
corrplot(M, method="number", col="black", addcolorlabel="no")
corrplot(M, method="number")
corrplot(M)
corrplot(M, order ="AOE")
corrplot(M, order ="AOE", addCoef.col="grey")

corrplot(M, order="AOE", col=col1(20), cl.length=21,addCoef.col="grey")
corrplot(M, order="AOE", col=col1(10),addCoef.col="grey")

corrplot(M, order="AOE", col=col2(200))
corrplot(M, order="AOE", col=col2(200),addCoef.col="grey")
corrplot(M, order="AOE", col=col2(20), cl.length=21,addCoef.col="grey")
corrplot(M, order="AOE", col=col2(10),addCoef.col="grey")

corrplot(M, order="AOE", col=col3(100))
corrplot(M, order="AOE", col=col3(10))



corrplot(M, method="color", col=col1(20), cl.length=21,order = "AOE", addCoef.col="grey")

if(TRUE){

corrplot(M, method="square", col=col2(200),order = "AOE")

corrplot(M, method="ellipse", col=col1(200),order = "AOE")


corrplot(M, method="shade", col=col3(20),order = "AOE")

corrplot(M, method="pie", order = "AOE")


## col=wb
corrplot(M, col = wb, order="AOE", outline=TRUE, addcolorlabel="no")
## like Chinese wiqi, suit for either on screen or white-black print.
corrplot(M, col = wb, bg="gold2",  order="AOE", addcolorlabel="no")
}

예를 들면 :

여기에 이미지 설명 입력

다소 우아한 IMO


9

이러한 유형의 그래프를 다른 용어 중에서 "히트 맵"이라고합니다. 상관 행렬을 얻은 후에는 다양한 자습서 중 하나를 사용하여 플로팅하십시오.

기본 그래픽 사용 : http://flowingdata.com/2010/01/21/how-to-make-a-heatmap-a-quick-and-easy-solution/

ggplot2 사용 : http://learnr.wordpress.com/2010/01/26/ggplot2-quick-heatmap-plotting/


나는 그것을 '히트 맵'이라고 부르는 것이 상당히 현대적인 발명품인지 확실하지 않습니다. 빨간색-주황색-노란색 색 구성표를 사용하여 '핫스팟'을 표시하려는 경우 이해가되는 것 같지만 일반적으로 이미지 플롯, 매트릭스 플롯 또는 래스터 플롯입니다. '히트 맵'이라고 부르는 가장 오래된 참조를 찾는 데 관심이 있습니다. tldr; "[표창장은 필요로했다]"
Spacedman

히트 맵이 반드시 초기 이름이 아니라는 것이 맞다고 생각합니다. 위키 백과에는 1957 년 논문이 나열되어 있지만 논문에서 "히트 맵"이라는 용어가 어디에도 나타나지 않는지 확인했습니다 (그래픽이 현재 양식과 똑같지 않음).
Ari B. Friedman

5

패키지 plotcorr()기능을 사용하여 @Ulrik이 게시 한 코드를 사용하여 @daroczig가 게시 한 시각화와 유사한 작업을 해왔습니다 ellipse. 나는 타원을 사용하여 상관 관계를 나타내고 색상을 사용하여 음 및 양의 상관 관계를 나타내는 것을 좋아합니다. 그러나 나는 0에 가까운 색상이 아니라 1과 -1에 가까운 상관 관계에서 눈길을 끄는 색상이 두드러지기를 원했습니다.

색이있는 원에 흰색 타원이 겹쳐지는 대안을 만들었습니다. 각 흰색 타원은 그 뒤에 보이는 색상 원의 비율이 제곱 상관 관계와 같도록 크기가 지정됩니다. 상관 관계가 1과 -1에 가까우면 흰색 타원이 작고 컬러 원의 대부분이 표시됩니다. 상관 관계가 0에 가까우면 흰색 타원이 크고 컬러 원이 거의 보이지 않습니다.

함수 plotcor()https://github.com/JVAdams/jvamisc/blob/master/R/plotcor.r 에서 사용할 수 있습니다. .

mtcars데이터 세트를 사용한 결과 플롯의 예가 아래에 나와 있습니다.

library(plotrix)
library(seriation)
library(MASS)
plotcor(cor(mtcars), mar=c(0.1, 4, 4, 0.1))

plotcor () 함수 호출 결과


3

나는 그것이 오래 되었다는 것을 알고 있지만, 새로운 독자들은 @daroczig가 언급 한 종류의 플롯을 생성 할 수 rplot()있는 corrr패키지 ( https://cran.rstudio.com/web/packages/corrr/index.html ) 에서 관심을 가질 수 있습니다. 그러나 데이터 파이프 라인 접근 방식을위한 설계 :

install.packages("corrr")
library(corrr)
mtcars %>% correlate() %>% rplot()

여기에 이미지 설명 입력

mtcars %>% correlate() %>% rearrange() %>% rplot()

여기에 이미지 설명 입력

mtcars %>% correlate() %>% rearrange() %>% rplot(shape = 15)

여기에 이미지 설명 입력

mtcars %>% correlate() %>% rearrange() %>% shave() %>% rplot(shape = 15)

여기에 이미지 설명 입력

mtcars %>% correlate() %>% rearrange(absolute = FALSE) %>% rplot(shape = 15)

여기에 이미지 설명 입력


2

corrplot R 패키지corrplot () 함수를 사용하여 상관 관계도를 그릴 수도 있습니다.

library(corrplot)  
M<-cor(mtcars) # compute correlation matrix
corrplot(M, method="circle")

상관 행렬을 계산하고 시각화하는 방법을 설명하는 여러 기사가 여기에 게시됩니다.


1

최근에 배운 또 다른 솔루션은 qtlcharts 패키지로 만든 대화 형 히트 맵입니다 .

install.packages("qtlcharts")
library(qtlcharts)
iplotCorr(mat=mtcars, group=mtcars$cyl, reorder=TRUE)

아래는 결과 플롯의 정적 이미지입니다. 여기에 이미지 설명 입력

내 블로그 에서 대화 형 버전을 볼 수 있습니다 . 히트 맵 위로 마우스를 가져 가면 행, 열 및 셀 값을 볼 수 있습니다. 셀을 클릭하면 그룹별로 색상이 지정된 기호가있는 산점도가 표시됩니다 (이 예에서는 실린더 수, 4 개는 빨간색, 6 개는 녹색, 8 개는 파란색). 산점도의 점 위로 마우스를 가져 가면 행의 이름이 표시됩니다 (이 경우 자동차 제조업체).


0

댓글을 달 수 없기 때문에 daroczig의 답변에 답장을 보내야합니다 ...

타원 산점도는 실제로 타원 패키지에서 가져온 것이며 다음과 같이 생성됩니다.

corr.mtcars <- cor(mtcars)
ord <- order(corr.mtcars[1,])
xc <- corr.mtcars[ord, ord]
colors <- c("#A50F15","#DE2D26","#FB6A4A","#FCAE91","#FEE5D9","white",
            "#EFF3FF","#BDD7E7","#6BAED6","#3182BD","#08519C")   
plotcorr(xc, col=colors[5*xc + 6])

(맨 페이지에서)

corrplot 패키지는 제안 된대로 여기에 있는 예쁜 이미지와 함께 유용 할 수도 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.