빅데이터분석

구글 Genomics API를 이용한 De Novo Variant Call

hongiiv 2014. 10. 17. 15:31
반응형

De novo mutation (DNM)

De novo mutation은 부모에게서는 나타나지 않지만 자식에게서는 나타나는 rare genetic mutation이다. 이러한 mutataion은 Autism이나 Schizophrenia의 영향을 준다는 Whole-genome sequencing in autism identifies hot spots for de novo germline mutation. 논문이 있다. 지금까지 다훈증후군과 같이 21번 염색체가 3개인 삼염색체성(trisomy21)와 같은 유전질환은 어머니의 나이와 연관이 있다고 알려졌는데 Rate of de novo mutations and the importance of father’s age to disease risk 에 의하면 질병과 관련이 있는 de novo mutation이 아버지의 나이와 연관이 있다고 한다. 일찍 애 낳을 걸... 암튼 이러한 mutation들은 whole genome sequencing을 통해 exonic이나 interonic 영역 전반에서 발굴되고 있다.

DNM 발굴의 어려움

이러한 De novo mutation은 발굴하는데에는 여러 고려해야 할 사항들이 존재한다.
  • Rare event: DNM은 아주 드물게 발견된다. (~1 in 108bp)
  • 시퀀싱 에러: 이건 DNM이건 일반적인 variant call에서도 고려해야 하는 것으로 100 bp에 1개 꼴로 나타난다. 자칫 DNM이 아니라 시퀀싱 에러를 발견하는 꼴이 될지도 모른다.
  • Read Depth: read라는게 특정 위치에 매핑되면서 DNM이 해당 위치에서 불충분한 커버리지로 존재한다면 찾기 어려워진다.
  • Misalignment: 유전변이를 찾는 파이프라인은 read가 높은 quality로 alignment되었다는 걸 가정으로 한다. alignment가 잘 되지 않은 곳에서는 variant를 찾는데 어려움이 있다.
  • Expensive Validation: 검증을 위해 최소한 엄마, 아빠, 나 셋을 해야하니 sanger sequencing등을 이용한다면 검증 비용이 비싸진다.
  • Structural Variation: insertion, deletion, inversion, copy number variations, translocation 등과 같은 SV로 인해 DNM을 발굴하는데 어려워진다.

DNM 발굴 S/W 알고리즘

위기는 기회라고 했던가, 아직까지 DNM쪽에서는 이렇다할 killer S/W가 존재하지 않는다. 그나마 DenovGear라는게 DeNovoGear: de novo indel and point mutation discovery and phasing 논문을 통해 알려졌으며, A Likelihood-Based Framework for Variant Calling and De Novo Mutation Detection in Families 를 통해 PolyMutt 정도가 존재한다.

베이지안 네트워크를 이용한 DNM 발굴

베이지안을 이용할것이며 이것은 위의 PolyMutt 논문에 나온 알고리즘에 기반한다. 여러가지가 있겠지만 이 calling된 trio 각각의 varint file (vcf file)과 aligment(bam file)을 이용한다. 또한 예제 데이터는 무수히 많은 sequencing이 이루어진 유명한 three-generation CEPH/Utah family인 CEPH 1463 샘플이며 일루미나가 공개한 Platium Genomes 데이터 (HiSeq 2000 system 50X average depth using 2x100 bp liraries of ~350 bp insert size)를 이용한다. 

우리는 알고리즘을 구현하는데에 있어서 Google Genomics API를 사용할 것이기 때문에 우선 Google Genomics API로 접근 가능하도록 해당 데이터셋을 준비해야 하지만, 친절하게도 구글에는 공개 데이터셋으로 Illumina의 Platium Genomes 데이터를 제공하고 있다. 물론 이전 포스팅에서 언급한 DREAM Somatic Mutation Calling Challenge 데이터셋과 1000 Genomes  데이터셋도 제공하고 있다.

구글 Genomics API로 호출한 사용 가능한 공개 데이터셋

손하나 까딱하지 않고도 데이터셋이 준비되었다. 우선 Variant를 API로 호출하여 부모에게서는 존재하지 않았던 Variant만을 1차적으로 찾아낸다. 가령 아래와 같이 자식의 VCF 파일엔 AG라고 call된 변이를 부모것을 보면 GG로 부모에게서 call되지 않았던 A allele가 보였다면 우선 이 부위는 1차적으로 DNM 후보로 놓는다.

chr10,23366053,[23366053,{CHILD=AG, MOM=GG, DAD=GG}]

chr10,23662773,[23662773,{CHILD=AG, MOM=AA, DAD=AA}]

chr10,24051000,[24051000,{CHILD=AC, MOM=AA, DAD=AA}]

chr10,24443525,[24443525,{CHILD=AG, MOM=GG, DAD=GG}]

자. 여기에서 멈춘다면 아주 심플하지만, 위의 DNM은  후보 DNM에 불과하다. 각각 부모자식을 별개로 call한 결과이기 때문에 실제 DNM을 찾기 위해서는 3명을 동시에 보아야 한다는게 함정이다. 어찌보면 join variant call 개념이 들어가야 한다. 여기서는 베이지안 네트워크를 이용하도록 한다. 베이지안 네트워크라는게 방향성이 있는 비순환 그래픽 모델 (directed acyclic graphical model)을 이용하는 것으로 쉽게 노드와 선으로 해당 모델을 그래프 형태로 알기쉽게 표현이 가능하다. 아래 그림은 비와 스프링쿨러 그리고 잔디가 젖는가에 대한 것을 베이지안 네트워크로 표현한 것으로 자세한 내용은 생략하기로 한다. -.-;;


마찬가지로 우리도 trio 데이터를 아래와 같이 베이지안 네트워크를 통해 표현할 수 있겠다. 앞서 말했듯이 방향성이 있으면서 비순환적인 그래프가 완성되었다. GF, GM, GC는 각각 아빠, 엄마, 자식의 genotype을 의미하며 각  genotype은 총 10개 (AA,AC,AT,AG,CC,CT,CG,GG,GT,TT)를 가질 수 있으며, trio의 genotype은 103개가 가능하다. 부모의 genotype은 자식의 genotype에 방향을 가지고 있다. DF, DM, DC는 관찰변수로 해당 genotype 부분의 read 정보 즉 base 정보를 나타낸다. 따라서 GF는 DF와 대응한다. 


그래서, 베이지안 네트워크를 이용하여 최종적으로 모든 de novo와 mendelian inheritance의 경우에 대한 likelihoods를 계산 가능하게 된다. 아 멀미나 @.@ 이제 아까 DNM 후보들은 하나씩 해당 부분의 Reads 정보를 읽어와서 베이지안 네트워크를 통해 진짜 DNM을 가리게 된다. 어때요 참 쉽죠.




Genomics API

이제 데이터도 준비되었고, 알고리즘도 준비되었으니 실제 구현을 해보아요! 데이터를 읽어오는 방법에 대해서 알아본다. 물론 Genomics API를 이용한다. 우선 위에서도 확인 가능하지만 Illumina의 공개된 3대에 이르는 대가족의 dataset id는 "3049512673186936334"이다.

Variant set과 Variants

이 데이터셋에 존재하는 NA12878 샘플에 대한 callset id는 "3049512673186936334-14"이다. 그렇다면 이 샘플에 대한 실제 variant는 callset id와 variantset id ,reference name, start, end position을 입력하여 찾는다. 구글 Genomics API는 다음의 URI를 이용하여 호출하며 key 값은 자신이 구글 개발자 콘솔을 통해서 발급한 key를 이용하면 된다. API는 프로그램을 작성하거나 간단히 chrom 플러그인 (Advanced Rest Client App)이나 genomics 홈페이지에서도 호출이 가능하다. variants의 search API는 https://www.googleapis.com/genomics/v1beta/variants/search?key=xxx 를 통해서 아래의 정보를 포함하여 호출하면 된다. 위의 API를 호출하여 trio에 대한  genotype을 비교하여 후보 DNM을 찾아낸다.
{
   "variantSetIds": [
      "3049512673186936334"
   ],
   "callSetIds": [
      "3049512673186936334-14"
   ],
   "referenceName": "chr10",
   "start": 23366052,
   "end": 23366053
}

Read Set과 Reads

이제 각 후보 DNM에 해당하는 reads들을 읽어 베이지안 네트워크를 이용하여 DNM을 찾게 된다. NA12878 샘플의 Read Set id는 "CMvnhpKTFhCoyJTFk73Eyq0B"로 후보 DNM에 대한 reads  정보를 얻기 위해  Reads API를 호출한다. https://www.googleapis.com/genomics/v1beta/reads/search?key=xxx
{
   "readsetIds": [ "CMvnhpKTFhCoyJTFk73Eyq0B"],
   "sequenceName": "chr1",
   "sequenceStart": "10000",
   "sequenceEnd": "10001"
}
 이렇게 찾은 DNM은 Variation in genome-wide mutation rates within and between human families 논문의 데이터를 가지고 검증한 결과 좋은 성능을 보이지만, 사용된 샘플들이 blood가 아닌 cell line이기 때문에 정확한 검증을 위해서는 blood로 해봐야 한다. 아래는 false de novo mutation candidate를 보여주는데, 위의 두개의 트랙은 부모(NA 12891, NA 12892)이며 아래 트랙은 자식(NA12878)을 보여준다. variants API를 통해 보면 아빠 AA, 엄마 AA, 자식은 AG로 DNM이라고 찾았지만, reads를 통해 확인해보면 충분한 증거(아빠 엄마 모두 갈색이 있다.)가 없기 때문에 베이지안 결과 해당 DNM은 무시된다. (G base는 갈색으로 표시)


본 포스팅은 Google Genomics  GitHub 페이지를 참고하여 작성되었습니다.
반응형