Programing

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

lottogame 2020. 9. 20. 10:29
반응형

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

여기에 이미지 설명 입력


Have a look at qtlcharts. It allows you to create interactive correlation matrices:

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

여기에 이미지 설명 입력

It's more impressive when you correlate more variables, like in the package's vignette: 여기에 이미지 설명 입력


There are other ways to achieve this here: (Plot correlation matrix into a graph), but I like your version with the correlations in the boxes. Is there a way to add the variable names to the x and y column instead of just those index numbers? For me, that would make this a perfect solution. Thanks!

edit: I was trying to comment on the post by [Marc in the box], but I clearly don't know what I'm doing. However, I did manage to answer this question for myself.

if d is the matrix (or the original data frame) and the column names are what you want, then the following works:

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

참고 URL : https://stackoverflow.com/questions/10680658/how-can-i-create-a-correlation-matrix-in-r

반응형