반응형
Multidimensional scaling 일명 MDS plot이라고도 하는 그림을 분석하다가 가끔 봅니다.
Array Genotyping QC에서도 보고, GWAS QC과정에서도 보고 여러군데에서 많이 볼수 있는 그림인데,
샘플들끼리의 유사도를 확인하는데 주로 많이 사용하는 것 같습니다. (RNA edge R에서의 MDS plot도 같은 방법임)
MDS에는 여러 방법들이 있지만, 주로 많이 사용되는 방법은 Principle coordinates Analysis (PCoA, Classical multidimensional scaling) 인데, 영어 풀네임을 보면 뭔가 비슷한 개념이 생각이 날 수가 있는데, 바로 principle component analysis (PCA)입니다. !
MDS 다른 방법들 : Classical multidimensional scaling, metrics multidimensional scaling (mMDS), non-metics multidimensional scaling (nMDS)
MDS의 Principle coordinates Analysis와 Principle component analysis는 실제로 한가지 특징을 제외하고 같습니다.
PCA의 경우 샘플들 사이의 Correlation을 이용하여 분석하는 것이고, PCoA의 경우 샘플들 사이의 거리(dist)를 이용하여 분석을 했다는 차이가 있습니다.
PCA, PCoA 이외에도 비슷한 그림을 갖는 t-SNE라는 방법도 있긴하지만, 이것은 다음에 포스팅 하도록 하고 오늘은 PCA, PCoA에 대한 실습을 해보도록 하겠습니다.
PCA 실습
iris데이터를 이용해서 각 샘플별로 PCA분석을 해보도록 하겠습니다.
test<-iris[,1:4]
test<-test
pca<-prcomp(test,scale=T,center=T)
pca.data=data.frame(X=pca$x[,1],Y=pca$x[,2])
## 그림 그리기 R basic이용
plot(pca.data[,1],pca.data[,2],xlab = 'PC1',ylab = 'PC2')
points(pca.data[1:50,1],pca.data[1:50,2],col='red',pch=15)
points(pca.data[50:100,1],pca.data[50:100,2],col='blue',pch=15)
points(pca.data[100:150,1],pca.data[100:150,2],col='orange',pch=15)
legend('topright',legend = c('setosa','versicolor','virginica'),pch=15,
col=c('red','blue','orange'))
## 그림 그리기 ggplot2이용
library(ggplot2)
pca.data<-cbind.data.frame(pca.data,species=iris$Species)
ggplot(data=pca.data)+geom_point(aes(x=X,y=Y,col=species))+theme_bw()+xlab('PC1')+ylab('PC2')
결과 다음과 같은 그림을 확인할 수가 있습니다.
MDS 실습
같은 iris 데이터를 이용해서 분석하였습니다.
# MDS 분석
test1<-dist(scale(test),method = 'euclidean')
mds_anal<-cmdscale(test1,eig = T,x.ret = T)
# 아래는 PCA코드와 같습니다.
mds.data=data.frame(species=iris$Species,X=mds_anal$points[,1],Y=mds_anal$points[,2])
plot(mds.data[,2],mds.data[,3],xlab = 'PC1',ylab = 'PC2')
points(mds.data[1:50,2],mds.data[1:50,3],col='red',pch=15)
points(mds.data[50:100,2],mds.data[50:100,3],col='blue',pch=15)
points(mds.data[100:150,2],mds.data[100:150,3],col='orange',pch=15)
legend('topright',legend = c('setosa','versicolor','virginica'),pch=15,
col=c('red','blue','orange'))
library(ggplot2)
ggplot(data=mds.data)+geom_point(aes(x=X,y=Y,col=species))+theme_bw()+xlab('PC1')+ylab('PC2')
위의 코드결과
MDS plot과 PCA 를 확인해보니 많이 비슷하다는 것을 확인할 수가 있습니다.
728x90
반응형
'실용적인프로그래밍 > R' 카테고리의 다른 글
[R] ggplot package boxplot 그리기 (0) | 2021.01.13 |
---|---|
[R][Shiny] shiny 앱 실행시 발생하는 에러 해결! (0) | 2020.12.18 |
[R] Shiny css적용하기 (0) | 2020.10.13 |
[R][shiny] Shiny에서 사용가능한 html들! (0) | 2020.10.12 |
[R][shiny] Shiny app 집에서 돌려보세! (0) | 2020.10.09 |
댓글