Skip to content

R (프로그래밍 언어) 패키지 #
Find similar titles

Structured data

Category
Software

R을 이용한 다중 벤다이어그램 그리기 #

벤다이어그램(Venn diagram)은 몇몇 집합에서 공통되는 원소들의 수를 나타내는데 주로 이용되는 다이어그램 중 하나이다. 생물정보학에서는 주로 근연종들 사이에서 ortholog gene과 specific gene들의 수를 표현하거나, 공통 발현되는 DEG의 수를 나타내고자 할 때 이용되곤 한다.

하지만 집합이 4개 이상일 경우 공통집합의 수가 많아져 공통 원소를 추출하는것도 어렵고 가시화 하는것도 어려운데 이 경우 아래 패키지를 이용하면 쉽게 벤다이어그램을 그릴 수 있다.

예제 데이터는 아래 링크에서 받을 수 있다. http://www.insilicogen.com/blog/attachment/1019620370.txt

패키지 loading #

#!R
> source("http://bioconductor.org/biocLite.R")
> biocLite("limma")
> library(limma)
> library(gplots)

데이터 loading #

#!R
> rfn <- "ortholog_example.txt"
> data <- read.table(rfn, sep='\t', header=T, row.names=1)
> data
      Species.A Species.B   Species.C   Species.D
Clu8   BO016496                       BH047N18.14
Clu9   BO014834  RS013419  AT18397457            
Clu3   BO014772  RS018960  AT15242221 BH042D24.27
Clu12  BO009902                                  
Clu1   BO008537            AT15242224 BR143G12.16
Clu5   BO008364  RS038406              BH059G16.7
Clu4   BO008360  RS000136             BH006K11.24
Clu20  BO006059  RS040196  AT79324947            
Clu13  BO005849            AT15234929  BH064P04.2
Clu7   BO005339  RS002816                        
Clu19            RS001238  AT15221666 BH015M19.22
Clu6             RS007302                        
Clu2                                  BH059C07.32
Clu18            RS008453  AT18420250            
Clu17                      AT18412659  BH065N19.8
Clu16            RS002645 AT186503429            
Clu15                      AT18416334 BH001M22.33
Clu14            RS005812 AT145358042 BH050H15.17
Clu11                      AT15219226            
Clu10            RS004647             BH027F23_27

데이터 형식 변환 #

벤다이어그램을 그리는데 사용할 명령어는 'vennCounts()'와 'venn()' 이다. 이 명령어들은 'logical value'로 이루어진 'data.frame' 형식의 데이터를 입력 받는다. 'logical value'는 'True' 또는 'FALSE', 즉 '참이다', '거짓이다', 또는 '있다', '없다'를 표현하는 값이란 의미이다.

불러온 데이터는 그냥 요소(factor)들로 구성되어 있다. 이 데이터에서 값이 있으면 참, 없으면 거짓으로 바꿔 ld라는 변수에 저장시킨다.

#!R
> ld <- (data != "")
> ld
      Species.A Species.B Species.C Species.D
Clu8       TRUE     FALSE     FALSE      TRUE
Clu9       TRUE      TRUE      TRUE     FALSE
Clu3       TRUE      TRUE      TRUE      TRUE
Clu12      TRUE     FALSE     FALSE     FALSE
Clu1       TRUE     FALSE      TRUE      TRUE
Clu5       TRUE      TRUE     FALSE      TRUE
Clu4       TRUE      TRUE     FALSE      TRUE
Clu20      TRUE      TRUE      TRUE     FALSE
Clu13      TRUE     FALSE      TRUE      TRUE
Clu7       TRUE      TRUE     FALSE     FALSE
Clu19     FALSE      TRUE      TRUE      TRUE
Clu6      FALSE      TRUE     FALSE     FALSE
Clu2      FALSE     FALSE     FALSE      TRUE
Clu18     FALSE      TRUE      TRUE     FALSE
Clu17     FALSE     FALSE      TRUE      TRUE
Clu16     FALSE      TRUE      TRUE     FALSE
Clu15     FALSE     FALSE      TRUE      TRUE
Clu14     FALSE      TRUE      TRUE      TRUE
Clu11     FALSE     FALSE      TRUE     FALSE
Clu10     FALSE      TRUE     FALSE      TRUE

이렇게 변환된 데이터 'ld' 를 'as.data.frame' 명령어를 이용해 'data.frame' 이라는 형식으로 변환시켜 'ld.df' 라는 변수에 저장한다.

#!R
> ld.df <- as.data.frame(ld)
> ld.df
      Species.A Species.B Species.C Species.D
Clu8       TRUE     FALSE     FALSE      TRUE
Clu9       TRUE      TRUE      TRUE     FALSE
Clu3       TRUE      TRUE      TRUE      TRUE
Clu12      TRUE     FALSE     FALSE     FALSE
Clu1       TRUE     FALSE      TRUE      TRUE
Clu5       TRUE      TRUE     FALSE      TRUE
Clu4       TRUE      TRUE     FALSE      TRUE
Clu20      TRUE      TRUE      TRUE     FALSE
Clu13      TRUE     FALSE      TRUE      TRUE
Clu7       TRUE      TRUE     FALSE     FALSE
Clu19     FALSE      TRUE      TRUE      TRUE
Clu6      FALSE      TRUE     FALSE     FALSE
Clu2      FALSE     FALSE     FALSE      TRUE
Clu18     FALSE      TRUE      TRUE     FALSE
Clu17     FALSE     FALSE      TRUE      TRUE
Clu16     FALSE      TRUE      TRUE     FALSE
Clu15     FALSE     FALSE      TRUE      TRUE
Clu14     FALSE      TRUE      TRUE      TRUE
Clu11     FALSE     FALSE      TRUE     FALSE
Clu10     FALSE      TRUE     FALSE      TRUE

특별히 바뀐게 없어 보이지만, 'class()' 명령어를 이용해 data.frame 형식으로 바꾸기 전후를 비교해 보면 무엇이 바뀐지 알 수 있다. 'data'를 'logical value'로 변환 시키면 그 결과는 'matrix'라는 형식으로 출력된다. 이를 'as.data.frame()'이라는 명령어로 'data.frame' 형식으로 바꿔 'ld.df'라는 변수에 저장을 시킨 상태이다.

#!R
> class(ld)
[1] "matrix"

> class(ld.df)
[1] "data.frame"

각 집합 및 교집합들의 유전자 수 알아내기 #

예제 데이터를 보면 어떤 유전자들은 특정 종에서만 나타나는 유전자이고, 어떤 유전자는 다른 종에서도 ortholog 관계의 유전자가 있다고 한다. 즉 크게 보면 4개의 집합이 있고, 4개의 집합으로 만들어질 수 있는 부분집합(교집합들과 각 집합의 유니크한 원소만 나타내는 부분집합) 16개가 있다. 이 부분집합들에 해당하는 유전자 수를 테이블 형태로 확인하는 명령어가 'vennCounts()' 이다. 이 명령어에 'ld.df' 를 입력하면 아래와 같은 결과가 출력된다. 첫번째 줄을 보면 모든 집합(종에서도)에서 없는('0') 원소의 수가 가장 오른쪽 'Counts' 열에 0개 있다고 출력되어 있다. 두번째 줄은 다른 종에서는 없고('0') 'Species.D'에서만 있는('1') 원소의 수가 1개 있다고 한다. 15번째 줄은 'Species.A', 'Species.B', 'Species.C'에서 공통적으로 ortholog 관계의 유전자가 2개 있다고 출력되어 있다.

#!R
> vennCounts(ld.df)
  Species.A Species.B Species.C Species.D Counts
 [1,]         0         0         0         0      0
 [2,]         0         0         0         1      1
 [3,]         0         0         1         0      1
 [4,]         0         0         1         1      2
 [5,]         0         1         0         0      1
 [6,]         0         1         0         1      1
 [7,]         0         1         1         0      2
 [8,]         0         1         1         1      2
 [9,]         1         0         0         0      1
[10,]         1         0         0         1      1
[11,]         1         0         1         0      0
[12,]         1         0         1         1      2
[13,]         1         1         0         0      1
[14,]         1         1         0         1      2
[15,]         1         1         1         0      2
[16,]         1         1         1         1      1
attr(,"class")
[1] "VennCounts"

벤다이어그램을 그리기 #

이렇게 준비된 데이터를 벤다이어그램으로 그려주는 명령어는 'venn()' 이다. 아래 명령을 실행해 보면 자동으로 카운팅된 교집합에 해당하는 원소들의 수가 알맞는 칸에 배치된 벤다이어그램이 출력된다. 이렇게 출력된 그림은 창 크기를 적당히 조절해서 사이즈를 조절한 다음 마우스 오른쪽 버튼으로 클릭하면 그림파일로 저장하거나 복사해서 파워포인트로 붙여 넣어 이용할 수 있다. 'venn()'은 최대 5개 집합의 데이터만 받아 벤다이어그램을 그려준다.

#!R
> venn(ld.df)

기타 벤다이어그램을 그리는 패키지 #

venn
http://cran.r-project.org/web/packages/gplots/

bvenn
http://cran.r-project.org/web/packages/bvenn/index.html

colorfulVennPlot
http://cran.r-project.org/web/packages/colorfulVennPlot/index.html

eVenn
http://cran.r-project.org/web/packages/eVenn/index.html

VennDiagram
http://cran.r-project.org/web/packages/VennDiagram/VennDiagram.pdf

Venneuler
http://cran.r-project.org/web/packages/venneuler/index.html

Vennerable
http://goo.gl/YjQCc

Reference #

Suggested Pages #

0.0.1_20140628_0