R/R_Usage [KOR.]

R을 이용한 Correlation 분석

Cha-Nyong 2022. 11. 15. 11:06

안녕하세요, 

 

factor에 대한 상관 관계 분석에 대한 포스팅이에요.

상관 관계 분석은 다양한 분야에 이용되곤 하는데요,

저는 주로 마이크로바이옴의 박테리아와 다른 환경인자 사이에서 분석을 하곤 합니다.

 

RStudio의 이용 패키지는 "Hmisc"을 이용해요.

아래 Step에 따라 상관 관계 분석을 해봐요.

 

 

 

 

 

 

 

1. 패키지 설치

 

install.packages("Hmisc")

install.packages("xlsx")

 

 

 

 

 

 

 

2. 패키지 실행

 

library(Hmisc)

library(xlsx)

 

 

 

 

 

 

 

 

3. 계산 Matrix 설정

 

flattenCorrMatrix <- function(cormat, pmat) {

  ut <- upper.tri(cormat)

  data.frame(

    row = rownames(cormat)[row(cormat)[ut]],

    column = rownames(cormat)[col(cormat)[ut]],

    cor  =(cormat)[ut],

    p = pmat[ut]

  )

}

 

 

 

 

 

 

 

 

4. 데이터 불러오기

 

test <- read.delim("clipboard", row.names=1) #엑셀에서 input format Ctrl+C

 

test <- t(test)

 

 

 

 

 

 

 

 

 

 

5. Correlation 계산

 

rcorr1<-rcorr(as.matrix(test), type=c("spearman"))

datacorS1 <- flattenCorrMatrix(rcorr1$r, rcorr1$P)

datacorS1$p_BH = p.adjust(datacorS1$p, method = "BH")

datacorS1$ABS = abs(datacorS1$cor)

datacorS2 <- subset(datacorS1, p_BH<0.0001)

datacorS3 <- subset(datacorS2, ABS>0.8)

여기서 method는 "spearman" 또는 "pearson"으로 분석할 수 있어요.

두 개의 correlation 분석 equation은 서로 다른 방법으로 계산하는 거에요.

간단히 원리는 spearman이 rank-based로 된 것이며,

가장 높은 value를 1등으로 잡고 그 다음을 2등 이런 식으로 계산하는 방식이에요.

반대로, pearson의 경우, raw data의 value 그 자체로 계산을 해요.

예를들어, A종의 value가 10이면, 10 그대로 이용해요.

즉, normalize를 유무로 쉽게 이해하시면 될 것 같아요. 

 

 

 

 

 

 

 

 

 

 

 

 

6. Output file 생성

 

write.xlsx2(datacorS3, "E:/test.xlsx", sheetName = "Sheet1", col.name = T, row.names = F, append = F)

 
 
 
 
다음과 같은 output file이 excel로 생성되었을 거에요.
cor는 correlation value를 의미하고,
p는 p-value를 의미해요
p-value는 multiple testing에서 오류가 발생하기 때문에 modified된 q-value로 판단 하는 것이 적절해요.
p_BH는 q-value에요 BH의 약자는 이 방법을 고안한 사람의 이름 약자에요. (Benjamin hochiberg)
ABS는 correaltion의 절댓값이에요. 데이터 분석 방향에 따라서 쓰일 수도, 안 쓰일 수도 있어요.
 
 
 
 
 
 
 
 
 

 

 
 
 
 

번외) 

Correlation 분석을 통해서 Network로 시각화 할 수 있어요.
아래와 같은 그래프를 만들 수도 있죠.
네트워크 시각화는 다음 포스팅에 올려볼게요.