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

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

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

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

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

어떻게하나요?



답변

예,

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


답변

‘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


답변

그만큼 코르 함수는 상관 계산에 매트릭스의 열을 사용한다. 따라서 행렬 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()

여기에 이미지 설명 입력


답변

qtlcharts를 살펴 보십시오 . 대화 형 상관 행렬 을 만들 수 있습니다 .

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

여기에 이미지 설명 입력

패키지의 비 네트처럼 더 많은 변수를 연관시킬 때 더 인상적입니다.
여기에 이미지 설명 입력


답변

이를 달성하는 다른 방법이 있습니다. ( 상관 행렬을 그래프로 플로팅 ), 상자에 상관 관계가있는 버전이 마음에 듭니다. 인덱스 번호 대신 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')


답변