생물정보학/Bioinformatics

계통수(Phylogenetic tree) 제작에 대한 고찰

케이든 2016. 12. 10. 01:30

계통수(Phylogenetic tree) 제작에 대한 고찰

사람들이 계통수 제작(Phylogenetic tree construction)을 너무 쉽게 생각하는 경향이 있어서, 계통수 제작에 대한 고찰을 해보고자 합니다. 옛날에는 생물들의 근연관계를 형태적(Mormological)으로 구분하여 분류군(clade)으로 묶었습니다. 하지만 현재 유전학과 유전체학이 발달함에 따라 생물들의 근연관계를 유전적 특징의 유사성과 차이, 즉 유전적 서열의 상동성(sequence homology)을 기반으로 묶습니다. 그러므로 계통수는 생물들을 유전적 서열의 유사성과 차이를 바탕으로 한 근연관계를 수형도(tree diagram)로 나타낸 것 입니다. 계통수를 제작할 때는 상동성을 기반으로 해당되는 모든 생물 분류군의 진화적 변이를 최소한으로 가정하는 최절약 원리(돌연변이는 잘 안 일어나기 때문에)와 분자적 유전정보를 바탕으로 염기/아미노산의 치환 정도를 컴퓨터 프로그램을 통해 분석합니다.

앞서 생물을 분류군으로 묶는다고 하였습니다. 즉 비슷한 것들끼리 한데 모아 분류한다는 것인 것, 여기서 왜 무엇 때문에 계통수를 그리는지에 대한 목적이 있어야 합니다. 계통수를 크게 2가지로 나누면 생물을 이루고 있는 단위인 gene tree, 생물분류의 기본단위인 종 species tree가 있습니다. Gene tree는 왜 그릴까요? 다양한 생물은 공통조상으로부터 유래된 같은 유전자(ortholog)를 가지고 있을 수도 있고, 혹은 유전자 복제에 의한 같거나/다른 유전자(paralog)를 가질 수 있습니다. 앞서 계속 묶는다고 말했는데, gene tree를 그리는 이유는 1) 비슷한 유전자들끼리 서로 묶어서 구분할 수 있데 하고, 2) 어떤 것이 진화적으로 앞서는지 확인하며, 3)분자적 상동(orthologparalog)을 판단하기 위해서 입니다. Species tree의 목적은 좀 더 쉽습니다. 바로, 종들의 유연관계를 알아보기 위함입니다.

그렇다면 gene tree는 어떻게 제작하면 될까요? 쉽게 설명하면, 일단 유전자 서열을 모으고, alignment를 하고, (trimming을 옵션으로 하고), tree 제작 프로그램의 다양한 알고리듬을 사용하여 만듭니다. 좀 더 구체적으로, 일단 같다고 생각되는 유전자 서열들을 모아야 합니다. DNA/Protein 서열 둘 다 가능합니다. Protein으로 예를 들어 특정 전사인자 도메인(transcription factor domain)을 갖는 전사인자들이 많다고 가정합시다. 이것들의 상동성을 계산하기 위해서는 alignment를 해야 합니다. 하지만 전사인자들은 특정 도메인만 유사성이 높지 다른 부분들은 유사성이 매우 떨어집니다. 이런 것들로 백날 alignment를 해 봤자 제대로 된 전사인자들의 유연관계를 나타내는 gene tree를 구할 수 없습니다. 그러므로 유사성이 떨어지는 부분들은 trimming을 해야 합니다. 다만 모든 서열들의 유사성이 비슷하면 굳이 trimming을 할 필요 없죠 트리도 잘 나올 것 입니다. Alignment만 제대로 되었다면 Maximum likelihood (ML), Neighbor-joining method (NJ), Bayesian inference (BI), Maximum parsimony (MP)등 프로그램에서 제공하는 다양한 방법(알고리듬)을 사용하여 gene tree를 그릴 수 있습니다. 팁으로 NJ 방법은 gene tree를 가장 빠르게 그려주는 알고리듬이지만 정확성이 떨어집니다, 그래서 quick check으로 주로 사용합니다. 가장 많이 사용되는 것은 통계 기반의 MLBI로 그 중 데이터 양이 적어도 잘 작동하는 ML이 더 많이 사용됩니다. 추가로 트리를 여러 번 반복적으로 그려 조화(consensus)가 일어나게 하는 bootstrapping을 사용하여 정확성을 더하여 줍니다.

종들의 유연관계를 보기 위한 species tree는 어떻게 그릴까요? 제일 쉬운 방법은 NCBI Taxonomy (https://www.ncbi.nlm.nih.gov/taxonomy)에 가서 내가 원하는 종들을 입력하면 계통학적 트리를 자동으로 만들어 줍니다. 하지만 여기에는 내가 원하는 종이 없을 수도 있고, 이 방법은 단지 유연관계만 보여주지 진화적 거리(tree 가지의 길이)를 보여주지 않습니다. 그래서 예전에는 종을 대표할 수 있는 마커 sequence (: 세균 16s rDNA, 곰팡이 ITS 서열)를 읽어서 gene tree를 그리고 species tree라고 하였습니다. 하지만 지금은 whole genome sequence를 얻고, 유전자를 찾은 다음, 같은 유전자끼리 클러스트링(clustering)을 하여 묶을 수 있습니다. 그러므로 좀더 정확한 species tree를 그리고자 하나의 마커 유전자 대신, 분석하고자 하는 생물들이 공통적으로 가지고 있는 유전자를 모두 사용합니다. 예를 들어 분석하고 싶은 50종이 있다고 가정하고, 여기서 이것들의 유전자를 클러스터링 하였을 때 10,000개의 클러스터(i.e. gene family)200개의 클러스터에 50종 모두의 유전자가 하나씩 있을 수 있습니다. 이러한 클러스터 안의 유전자는 각 종을 대표할 수 있다고 가정할 수 있습니다. 여기서부터 species tree를 그리는 방법이 2가지가 있습니다. 1) sequence concatenation 방법으로 200개 클러스터 안에 들어있는 50종의 유전자 서열들을 각각 종별로 연결하여 하나의 유전자로 가정하고 gene tree 제작처럼 수행하는 것 입니다. 2) Superimposing tree 방법으로 200개의 트리를 각각 그리고 나중에 다시 200개의 트리를 하나의 consensus tree로 만드는 방법입니다. 어떤 방법으로 그리던 간 쉽지 않네요. 그래서 고안된 또 하나의 방법이 composition vector tree입니다. 쉽게 설명하자면 이것은 K-mer(특정 길이의 서열)genome을 잘게 쪼개서, K-mer끼리 묶을 때, 많이 묶이는 것이 근연관계로, 유전체를 사용하기 때문에 유전자를 모을 필요도 없고, alignment도 필요 없습니다. 그래서 속도가 빠릅니다. 하지만 장점만 있는 것은 아니라 유전체 때문에 컴퓨테이션 로드가 크고, 정확성이 종 단계 이하에서는 매우 떨어지며 (e.g. 곰팡이 균주 계통), 아직 많이 대중화가 안되었다는 단점이 있습니다. 결론적으로 정확한 유연관계의 species tree를 제작하고 싶으면 다양한 방법을 시도하여 일치점을 찾아야 합니다.


요약하자면, species tree의 제작 목적이 gene tree보다 좀 더 간단하지만, 제작 방법은 gene tree를 기반으로 concatenation 방법 또는 superimposing 방법을 사용해야 한다는 것 입니다. 계통수 제작에 관한 것을 더 깊게 파면 alignment 부터, 통계, 알고리듬의 수학적 이론까지 깊게 가야 함으로 여기서 마무리 짓고 tree를 그리는 대신, 한 그루의 사과tree를 심으러 가겠습니다.