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
'Programing' 카테고리의 다른 글
Text Watcher를 트리거하지 않고 EditText 텍스트를 어떻게 변경할 수 있습니까? (0) | 2020.09.20 |
---|---|
Resources 폴더에있는 파일 목록 가져 오기-iOS (0) | 2020.09.20 |
터미널 Mac OS X에서 원격으로 SSH SCP 로컬 파일 (0) | 2020.09.20 |
문자열에서 영숫자가 아닌 모든 문자 교체 (0) | 2020.09.20 |
Asp.net WEBAPI에서 명시 적으로 JSON 문자열을 반환합니까? (0) | 2020.09.20 |