Jumat, 02 Agustus 2013

Sebuah Tulisan Evolusi dan Filogeni: Sequence Alignment (In Depth) Part 1

Wuoooo...lama sudah saia menghilang dari dunia ini dalam rangka mencari pencerahan penelitian tesis saia. Hari ini, yaa tepatnya malam ini saia pun ingin mencoba peruntungan saia dalam membuat tulisan salah satu dalam serial Sebuah Tulisan Evolusi dan Filogeni. Well, judulnya masih terkait dengan tulisan sebelumnya yang berjudul "Sebuah Tulisan Evolusi dan Filogeni: Homologi dan Alignment". Namun pada tulisan kali ini saia ingin menekankan kepada alignment itu sendiri. Yasuda, kita mulai saja yak :)

Sequence alignment dapat didefinisikan sebagai sebuah proses penjejeran dua atau lebih sequence (nukleotida atau asam amino) sehingga keduanya memiliki kemiripan setinggi mungkin dalam hal posisi karakter penyusun sequence-nya. Dengan demikian, sequence alignment merupakan proses yang dilakukan berdasarkan asumsi homologi, yakni sebuah pandangan bahwa sequence homolog dulunya berasal dari satu sequence nenek moyang yang berdivergensi akibat mutasi dan seleksi.

Nah, sekarang ketika kita menghadapi sebuah dataset berisi sequence, bagaimana caranya kita untuk meng-align sequence-sequence tersebut satu sama lain hingga tercapai kemiripan tertinggi secara keseluruhan? Oh ya mudah saja, tinggal masukan ke program komputer, klik "OK" atau "Compute", tunggu beberapa saat dan cling...wuala this is it!! sequence alignment ala chef...oops...ehem. Yaa mungkin kita bisa dengan mudahnya langsung menggunakan cara tersebut. Namun, tahukah kita bahwa akurasi dari sebuah analisis filogenetik yang paling mendasar justru terletak pada sequence alignment yang digunakan? Nah untuk itulah memahami bagaimana sebuah proses sequence alignment ini menjadi sangat penting, sekalipun nantinya kita akan meminta bantuan komputer untuk melakukan sisanya. Dalam menangani dataset sequence proses alignment dibagi menjadi dua tahap, yakni alignment pasangan sequence (pairwise sequence alignment) dan alignment banyak sequence (multiple sequence alignment). Dalam tulisan ini saia akan membahas mengenai Pairwise Sequence Alignment terlebih dahulu.

Secara umum terdapat tiga teknik dalam pairwise sequence alignment, yakni: (1) secara visual, (2) menggunakan dot-matrix, dan (3) menggunakan dynamic programming algorithm. Kita akan membahasa satu per satu. Alignment secara visual merupakan teknik yang paling sederhana, cepat, sekaligus akurat. Hal ini disebabkan karena otak kita mampu mengintegrasikan seluruh informasi tambahan kepada pasangan sequence yang sedang di-align. Namun demikian, alignment secara visual-manual ini juga memiliki keterbatasan  terhadap panjang sequence dan juga keteraturannya. Ketika seuatu pasangan sequence terlalu panjang dan semakin tidak teratur, maka dijamin otak kita akan overheat dibuatnya.

Teknik kedua adalah dengan alat bantu yang bernama dot-matrix. Ini merupakan suatu matriks dimana kita bisa menempatkan pasangan sequence pada bagian kolom dan baris sehingga kita bisa mencocokannya sekaligus juga membuat alignment darinya. Cara melakukannya akan dijelaskan di bawah ini dan untuk lebih jelasnya dapat dilihat pada Gambar 1:
1. Letakkan sequence pertama pada bagian atas matriks (kolom) dan sequence kedua pada bagian kiri matriks (baris).
2. Berikan tanda titik (dot) pada setiap karakter yang cocok antara kedua sequence tersebut.
3. Hubungkan antara titik satu dengan lainnya. Apabila pasangan sequence tersebut adalah identik atau mirip antara satu dengan lainnya, maka akan terbentuk sebuah garis diagonal pad matriks tersebut.
Perlu diketahui bahwa garis penghubung antar titik dalam dot-matrix tidak selamanya diagonal. Adanya insersi-delesi (indel) pada sequence dapat mengubah garis tersebut menjadi vertikal atau horizontal. Garis vertikal mencerminkan adanya delesi pada sequence pertama atau insersi pada sequence kedua dan garis horizontal adalah sebaliknya. Terkadang garis diagonal yang dibuat pun tidak selalu melewati seluruh titik yang ada. Apabila ada suatu elemen kosong (tanpa tanda titik) dalam matriks yang dilewati oleh garis, maka itu menandakan adanya substitusi pada yang terjadi antara kedua sequence yang dibandingkan.
Gambar 1. Dot-matrix sequence alignment.
Penarikan garis dalam dot-matrix terkadang juga menghasilkan lebih dari satu garis. Hal ini berarti ada lebih dari satu skenario alignment yang perlu dipertimbangkan. Gambar 2 memberikan contoh kasus dimana terdapat dua skenario yang dapat dipakai dalam alignment pasangan sequence. Skenario pertama memberikan alignment dengan dua buah substitusi dan satu buah gap, sementara skenario kedua memberikan alignment dengan lima buah gap dan tanpa substitusi.
Gambar 2. Two possible alignment scenarios.
Penggunaan dot-matrix dalam alignment pasangan sequence cukup bagus untuk dilakukan pada sequence yang pendek. Seiring dengan semakin bertambahnya panjang sequence, maka titik yang muncul dalam dot-matrix akan semakin banyak. Hal ini disebabkan suatu pasangan sequence nukleotida yang hanya memiliki empat karakter (A, T, G, dan C) memiliki probabilitas kesamaan posisi nukleotida sebesar 25%. Dengan demikian, seiring dengan semakin panjangnya suatu sequence, akan semakin banyak terdapat garis-garis diagonal atau alignment semu akibat kemiripan nukleotida secara kebetulan ini.

Untuk mengatasi masalah ini, dikembangkan metode pemberian skor (scoring) untuk menghasilkan sebuah alignment yang bagus. Salah satu metode yang umum digunakan didasarkan pada nilai similaritas nukleotida antar pasangan sequence yang kemudian diadaptasi dalam program komputer. Metode ini disebut juga dengan Needleman-Wunsch Dynamic Programming Algoritm atau yang lebih sering disebut sebagai Dynamic Programming.  Algoritme ini mengikuti Bellman's Optimality Principle yang berbunyi "if the final element reports the score for the best path, then the sub-solution leading to this element is also lying on the optimal path."

Nah berdasarkan prinsip Oom Bellman tersebut tentunya skor perlu diberikan dalam setiap elemen di dalam matriks alignment nya. Terdapat sedikit perbedaan dalam pemberian skor untuk alignment sequence nukleotida dan asam amino, dimana pemberian skor dalam sequence nukleotida biasanya bernilai 1 dan kelipatannya. Hal ini didasarkan pada asumsi bahwa substitusi pada nukleotida bersifat simetris/sama dari satu nukleotida ke nukleotida lainnya. Asumsi ini tidak berlaku pada sequence asam amino karena adanya pertimbangan sifat biokimia rantai sampingnya. Dalam tulisan ini saia akan memakan sequence nukleotida sebagai contohnya.

Gambar 3. Dynamic programming sequence alignment.
Pemberian skor didasarkan pada kesamaan nukleotida dari sequence pertama dengan sequence kedua. Apabila sama, maka elemen dalam matriks mendapatkan tambahan nilai 1. Apabila tidak maka skornya 0. Pemberian skor ini dilakukan secara berurut dari kiri ke kanan dan atas ke bawah. Nah sekarang coba perhatikan Gambar 3. Skor 1 diberikan pada elemen baris pertama kolom pertama di dalam matriks karena kedua sequence sama-sama memiliki nukleotida A. Kenapa nilainya 1? itu karena nilai awal dalam mengisi suatu alignment adalah nol akibat tidak ada yang dibandingkan, sehingga nilai 1 pada elemen pertama itu adalah hasil dari penjumlahan 0+1=1. Selanjutnya kita akan mengisi elemen lainnya dari kiri ke kanan. Elemen lainnya pada baris pertama diisi dengan nilai 0 karena selain seperti hal di atas yakni tidak ada nukleotida sebelumnya yang bisa dibandingkan, nukleotida A pada sequence kedua (baris pertama) tidak cocok dengan nukleotida lainnya pada sequence pertama (kolom kedua hingga kelima). Masih bertahan di Gambar 3, sekarang coba perhatikan elemen pada baris kedua kolom kedua. Kedua sequence sama-sama memiliki nukleotida T dan itu berarti cocok. Dengan demikian skor tambahan 1 diberikan pada elemen ini. Perhatikan bahwa ada elemen yang sebelumnya telah mendapat nilai 1. Hal ini berarti elemen pada baris kedua kolom kedua bernilai 2 sebagai akibat dari skor 1 dari elemen sebelumnya tersebut ditambah skor 1 dari kecocokan nukleotida pada elemen ini. Pengisian elemen ini dilakukan dengan cara seperti itu hingga semuanya terisi.

Setelah semuanya terisi, maka selanjutnya kita akan menggambarkan penunjuk (pointer) untuk membantu kita mengarahkan dari elemen mana skor-skor tersebut berasal. Suatu penunjuk digambar dari elemen pojok kanan bawah ke elemen yang terletak di sebelah kiri atasnya yang memiliki skor sama atau lebih rendah dari elemen tersebut (Gambar 3, tengah). Sesudah itu kita kemudian dapat menentukan mana alignment yang terbaik berdasarkan penunjuk ini. Sebuah prosedur yang dinamakan sebagai Traceback untuk menghasilkan suatu grafik arah (Path Graph). Prinsip traceback ini didasarkan pada prinsip Oom Bellman di atas dan dimulai dari elemen ujung kanan bawah yang memiliki skor tertinggi. Pada Gambar 3 (kanan) kita melihat bahwa elemen ujung kanan bawah dengan skor tertinggi adalah 4, maka dari titik inilah kita membuat alignment untuk kedua sequence yang dibandingkan. Yup, sequence alignment menggunakan metode ini dibuat dari kanan ke kiri. Berdasarkan path graph yang dihasilkan dari proses traceback, maka kita dapat menghasilkan alignment nya.

Perlu diketahui bahwa proses alignment yang dijelaskan di atas belum mengikutsertakan gap penalty akibat adanya gap/indel yang terbentuk selama proses alignment. Umumnya kita menganggap bahwa indel lebih jarang terjadi dibandingkan dengan substitusi, sehingga sebuah alignment dengan jumlah gap yang lebih banyak ketimbang residu nukleotidanya seperti contoh di bawah ini tentu tidak masuk akal:

VHLTPEEKSAVTALWGKVNVDEVGGEAL...
V-----------------NEEEVGGEAL...

Nah untuk menghindari adanya alignment seperti ini, gap penalty perlu dintegrasikan ke dalam algoritme alignment. Detail mengenai gap penalty dapat dibaca lebih lanjut dalam buku-buku analisis filogenetik lainnya seperti Graur & Li (1991) atau Nei & Kumar (2000).

Oke, saia rasa tulisan kali ini saia cukupkan hingga disini dulu. Selanjutnya saia akan membahas tentang multiple sequence alignment, yakni bagaimana proses alignment untuk lebih dari dua sequence. Ditunggu yak!!

Regards,
Victor Apriel (KohVic)

Jumat, 11 Januari 2013

Sebuah Tulisan Evolusi dan Filogeni: Review Metode Rekonstruksi Filogeni

Tulisan ini saia buat sebagai sebuah tinjauan menyeluruh terhadap metode-metode rekonstruksi pohon filogenetik yang telah dibahas selama ini. Dalam tulisan ini, metode-metode tersebut mencakup Unweighted Pair-Group Method with Arithmethic Mean (UPGMA), Neighbor Joining (NJ), Minimum Evolution (ME), Maximum Parsimony (MP), dan Maximum Likelihood (ML). Dalam tulisan ini saia juga mengasumsikan bahwa para pembaca telah sebelumnya mengetahui tahapan logika masing-masing metode tersebut. Oke, mari kita mulai.

A. Tinjauan Antar Metode
Pertama, saia akan mencoba sekilas membandingkan antar metode yang telah disebutkan di atas. Seperti yang telah kita ketahui bersama, pembagian metode-metode tersebut dapat didasarkan pada jenis data dan metode rekonstruksi pohon. Berdasarkan jenis data, metode UPGMA, NJ, dan ME menggunakan data berupa matriks distance; sedangkan metode MP dan ML menggunakan data character state. Berdasarkan metode rekonstruksi pohon metode UPGMA dan NJ menggunakan pendekatan clustering algorithm yang menghasilkan satu pohon final, sedangkan metode ME, MP, dan ML menggunakan pendekatan optimality search criterion yang menekankan pada evaluasi seluruh kandidat pohon dalam penentuan pohon terbaik menurut kriteria masing-masing metode.

Lebih rinci mengenai logika setiap metode:
1. Unweighted Pair-Group Method with Arithmethic mean (UPGMA)
Mengasumsikan kesamaan laju evolusi antar sequence/OTU sehingga metode ini mengestimasi nilai rerata (menyamaratakan) nilai distance untuk menggabungkan pasangan OTU dan perhitungan branch length.
2. Neighbor Joining (NJ)
Menggunakan logika bahwa pohon terbaik adalah pohon yang meminimalisir nilai tree length yang merupakan penjumlahan dari total branch length. Kondisi ini dicapai dengan konstruksi kombinasi pasangan OTU yang memberikan nilai branch length terkecil (neighbor) diantara seluruh kombinasi yang ada.
3. Minimum Evolution (ME)
Memiliki logika yang sama dengan metode NJ. Perbedaannya terletak pada metode ME menggunakan optimality search criterion sehingga proses penentuan tree length terkecil dilakukan dengan mengevaluasi seluruh kandidat pohon yang mungkin dibuat untuk sejumlah OTU. Dengan demikian, maka metode NJ dapat dipandang sebagai pendekatan heuristik (cepat namun tak menjamin) untuk mendapatkan pohon ME.
4. Maximum Parsimony (MP)
Metode ini memiliki kesamaan konsep dengan metode ME. Namun demikian penentuan pohon dengan tree length terkecil tidak dilakukan berdasarkan matriks distance seperti pada ME. Perhitungan branch length dan tree length pada metode MP didapatkan dari jumlah substitusi minimum antar character state setiap situs pada sequence alignment.
5. Maximum Likelihood (ML)
Metode ini menggunakan perhitungan probabilitas kombinasi seluruh character state ancestral yang dapat memberikan bentukan character state seperti pada sequence alignment yang dimiliki saat ini untuk seluruh situs pada setiap OTU. Metode MP dalam hal ini dapat dipandang sebagai pendekatan heuristik terhadap metode ML karena hanya menggunakan kombinasi character state yang memberikan jumlah substitusi minimum untuk menghasilkan character state sequence yang ada pada saat ini.

Setelah mengenal lima metode di atas, ada beberapa pertanyaan yang kemudian (saia harapkan) muncul di kepala kita, yakni:
- Metode mana yang akan kita pilih?
- Bagaimana kita yakin bahwa pohon yang dihasilkan itu benar?

B. Metode mana yang akan kita pilih?
Kita langsung saja menjawab dari pertanyaan pertama, yakni metode mana yang akan kita pilih untuk merekonstruksi sebuah pohon. Idealnya, kita sebaiknya menggunakan seluruh metode tersebut dan kemudian membandingkan setiap pohon yang dihasilkan untuk melihat adanya kongruensi di antara mereka. Ada pendapat yang mengatakan bahwa jika kualitas data (sequence alignment) yang kita miliki itu baik --belum terkena efek rekombinasi dan substitution saturation-- maka pohon-pohon yang dihasilkan dari setiap metode akan berkongruensi satu sama lain. Namun bagaimana seandainya kita harus memilih satu diantara sekian metode tersebut. Mana yang akan kita pilih?

Well, beberapa pertimbangan praktis tentunya harus dibuat ketika kita menghadapi dengan kenyataan dataset yang ada. Berikut saia akan mencoba merangkum kriteria-kriteria yang perlu dipertimbangan dalam memilih sebuah metode berdasarkan Page & Holmes (1998):
- Efficiency, seberapa cepat waktu komputasi?
- Power, Berapa banyak data yang diperlukan oleh suatu metode agar dapat memberikan hasil yang benar?
- Consistency, Akankah suatu metode memberikan hasil yang benar jika diberikan sejumlah data?
- Robustness, Apakah adanya pelanggaran terhadap asumsi yang ditanamkan pada suatu metode akan membuat metode tersebut memberikan hasil yang salah?
- Falsifiability, Apakah suatu metode akan mengindikasikan bahwa asumsinya telah dilanggar (sehingga kita kemudian disarankan untuk mengganti metode)?

Nei & Kumar (2000) juga menambahkan beberapa kriteria pengujian yang dapat dilakukan terkait perbandingan antar metode:
- Statistical test of phylogenetic trees, Perbandingan antar metode harus dapat dilakukan menggunakan uji statistik seperti interior branch test dan bootstrapping.
- Probability of obtaining the true tree, Merupakan indeks yang dapat dipakai untuk membandingkan peluang dari setiap metode untuk mendapatkan true tree menggunakan data yang ada.
- Reliability of branch length estimates, Merupakan perbandingan nilai branch length yang diestimasi antar metode.

C. Bagaimana kita yakin bahwa pohon yang dihasilkan itu benar?
Sebelum menjawab pertanyaan ini, perkenankan saia memberikan fakta bahwa secara praktis true tree tidak pernah bisa ditemukan. Hal ini disebabkan oleh kenyataan bahwa jumlah kandidat pohon yang perlu dievaluasi meningkat dengan sangat cepat seiring dengan peningkatan jumlah OTU, dan pada akhirnya kita harus melakukan pendekatan heuristik yang tidak menjamin bahwa true tree akan didapatkan. Dengan demikian, tidaklah heran bahwa banyak kontroversi yang muncul seputar pohon yang dipakai untuk menjelaskan hubungan kekerabatan suatu kelompok organisme.

Sedangkal apa yang saia ketahui, ada dua pandangan yang cukup banyak diperdebatkan mengenai kedekatan suatu inferred tree dengan true tree, yakni pandangan parsimony dan pandangan likelihood. Pandangan parsimony menitikberatkan pada konsep bahwa evolusi merupakan proses yang efisien sehingga jika tersedia berbagai jalan untuk menuju ke satu hasil akhir maka jalan terpendeklah yang akan ditempuh. Pandangan ini mengasumsikan bahwa evolusi merupakan sebuah proses yang kompleks sehingga hipotesis yang menggunakan asumsi seminimal mungkin adalah yang paling dapat menjelaskan fenomena evolusi tersebut. Jika dicocokan dengan bukti-bukti evolusi seperti data fosil, pandangan parsimony cocok dengan fenomena evolusi. Namun demikian, kenyataan adanya efek long-branch attarction yang mengakibatkan adanya inkonsistensi metode MP menggunakan data molekular menjadikan pandangan parsimony perlu disikapi dengan lebih hati-hati.

Pandangan likelihood menekankan pada konsep likelihood yang menyatakan bahwa pohon ML merupakan pohon yang paling dapat menjelaskan keragaman sequence yang kita miliki pada saat ini. Sekilas konsep ini cukup meyakinkan bahwa pohon ML bisa jadi merupakan pohon yang mendekati true tree. Namun perlu diperhatikan bahwa konsep likelihood, yakni probabilitas dari suatu pohon untuk memberikan sequence yang dimiliki saat ini, itu tidak berhubungan sama sekali dengan probabilitas bahwa pohon tersebut merupakan pohon yang benar. Saia akan menggambarkannya dengan suatu contoh bahwa jika kita mendengar suara ribut yang begitu kencang di lantai atas, kita bisa menyatakan bahwa ada kerusuhan yang terjadi di sana. Dalam konsep likelihood, kerusuhan (hipotesis) ini sangat mungkin menjelaskan adanya suara ribut (data) yang terjadi di lantai atas. Namun seperti yang kita pikirkan bersama, rasanya sangat sulit untuk mempercayai bahwa kerusuhan itu benar-benar terjadi di lantai atas bukan.

D. Kesimpulan
Berdasarkan uraian yang saia paparkan di atas, terlihat jelas bahwa tidak ada satu pun metode yang mengungguli metode lain secara keseluruhan. Setiap metode memiliki keunggulan dan kerugian masing-masing , sehingga perbandingan seluruh metode dan melihat kongruensi pohon yang dihasilkan dari masing-masing metode merupakan pendekatan ideal untuk setidaknya memuaskan kita akan pencarian true tree.

Referensi
Nei, M. & S. Kumar. 2000. Molecular Evolution and Phylogenetics. Oxford University Press: UK.
Page, R. D. M. & E. C. Holmes. 1998. Molecular Evolution: A Phylogenetic Approach. Blackwell Science Pub.: USA.

Regards
KohVic

Jumat, 28 Desember 2012

Sebuah Tulisan Evolusi dan Filogeni: Phylogenetic Inference by Maximum Parsimony Method (In Depth)

Sekedar menyelesaikan sharing-sharing ria bersama mengenai proses inferensi filogenetik, kali ini saia mencoba membawakan satu lagi konsep yang melatarbelakangi algoritme Maximum Parsimony (MP). Yah sekian saja deh kata sambutan dari saia dan selamat membaca ^^/

A. Pengantar
Konsep parsimony dapat dikatakan merupakan konsep pertama yang mengawali analisis kekerabatan antar organisme. Konsep ini dikemukakan oleh Willi Henning, seorang entomolog Jerman, yang berpendapat bahwa hubungan kekerabatan antar organisme hanya dapat ditarik dari kemiripan/similaritas yang diturunkan dari nenek moyangnya. Hal ini tentu saja berbeda dengan pandangan fenetik pada saat itu yang menganggap kemiripan secara keseluruhan (overall similarity) harus dikaitkan semuanya dalam mengevaluasi suatu kekerabatan diantara organisme. Kemiripan karakter yang diturunkan dari nenek moyang tersebut diistilahkan sebagai "symplesiomorphy", sementara kemiripan yang didapatkan dari proses adaptasi diistilahkan sebagai "synapomorphy". Kedua kata tersebut secara berturut-turut diturunkan dari kata "plesiomorph" yang berarti karakter nenek moyang (ancient) dan "apomorph" yang berarti karakter yang didapatkan (derived).

Konsep parsimony berlaku hingga kini dan juga telah diterapkan untuk sequence molekular. Intinya adalah mencari pohon filogenetik yang memerlukan asumsi paling sedikit dalam menghubungakan semua organisme/taksa yang dikaji. Asumsi yang dimaksud dalam hal ini adalah proses substitusi nukleotida. Konsep yang sama juga berlaku ketika menggunakan sequence asam amino. Substitusi yang semakin sedikit juga berarti meminimalisir panjang branch length, sehingga pohon Maximum Parsimony (MP) adalah pohon yang dapat menghasilkan tree length (total branch length) minimum.

B. Situs Informatif (Parsimony Informative Sites)
Dalam algoritme Maximum Parsimony tidak semua situs dalam sequence menyediakan informasi mengenai jejak-jejak plesiomorph molekular. Gambar 1 dapat membantu menjelaskan perbedaan antara situs informatif, variabel, singleton (situs dimana hanya ada 1 taksa yang berbeda), dan invariabel. Situs variabel merupakan situs yang mengandung keempat jenis nukleotida (A, T, G, dan C). Situs ini tidak informatif karena tidak ada pohon parsimonius yang lebih mampu menjelaskan substitusi mana yang lebih sedikit dibandingkan yang lain. Situs singleton dan juga situs invariabel juga sama-sama tidak dapat memberikan informasi mengenai pohon mana yang bersifat parsimonius.
Gambar 1. Perbandingan antara situs informatif, variabel, singleton, dan invariabel.
Dengan demikian, syarat sebuh situs agar bersifat informatif adalah situs tersebut harus memungkinkan adanya perbedaan perhitungan jumlah substitusi antar topologi untuk menjelaskan variasi yang terdapat pada situs tersebut. Hal ini berarti bahwa sebuah situs informatif setidaknya harus memiliki dua jenis nukleotida dan keduanya harus muncul setidaknya dua kali pada situs tersebut. Gambar 1 memperlihatkan bahwa sebuah situs untuk 4 taksa yang mengandung A, A, G, G merupakan situs informatif. Hal ini dapat terlihat dari 3 jenis kandidat pohon yang dibuat bahwa pohon 1 merupakan pohon yang paling parsimonius (mengandung substitusi paling sedikit).

C. Tahap Rekonstruksi Pohon MP
Kita akan mencoba merekonstruksi pohon MP untuk 4 taksa terlebih dahulu. Jika diberikan 4 taksa dengan sequence alignment n, maka algoritme MP hanya akan menggunakan situs-situs informatif dari n-situs tersebut untuk rekonstruksi pohonnya. Nah tahapannya dapat saia simpulkan seperti ini:

1. Tentukan kemungkinan pohon yang dapat direkonstruksi dari sejumlah taksa yang diuji. Dalam contoh kali ini ada 4 taksa, sehingga terdapat 3 kandidat pohon.
2. Tentukan kombinasi nukleotida untuk penentuan character state pada nodus internal. Jumlah nodus internal untuk pohon dengan n-taksa adalah n-2. Dalam contoh kasus 4 taksa kita, maka ada 2 nodus internal. Nah karena ada 4 jenis nukleotida yang mungkin menempati nodus internal tersebut, maka kombinasi total kemungkinan nukleotida dirumuskan dengan 4^i dengan i sebagai jumlah nodus internal. Dengan demikian akan ada 16 kombinasi nukleotida pada nodus internal untuk kasus 4 taksa kita (Gambar 2). Kemudian dari 16 kombinasi tersebut, tentukan kombinasi nukleotida nodus internal dengan jumlah substitusi paling sedikit (Gambar 2, kotak).
Gambar 2. Kombinasi jenis nukleotida untuk dua nodus internal pada kasus filogeni 4 taksa.
3. Dengan menggunakan SETIAP situs informatif yang tersedia, tentukan pohon yang memberikan jumlah total substitusi paling sedikit.

Nah pohon dari seluruh kandidat pohon yang memberikan jumlah substitusi paling sedikit merupakan pohon terbaik menurut algoritme MP atau dapat disebut juga sebagai pohon MP. Dari tulisan sebelumnya kita mengetahui bahwa jumlah substitusi mencerminkan branch length, maka pohon MP merupakan pohon filogenetik yang meminimalisir branch length. Hal ini sesuai dengan filosofi Ockham Razor, "shave away all that is unnecessary". Petuah ini bermakna bahwa evolusi merupakan proses yang efisien, sehingga apabila terdapat lebih dari satu jalur untuk mengarah pada satu hasil maka jalu terpendek-lah yang akan dipilih.

Seiring dengan semakin banyaknya taksa yang ingin diselidiki hubungan kekerabatannya, jumlah kandidat pohon tentu saja meroket dengan cepat. Untuk itu, algoritme MP menggunakan beberapa metode pencarian pohon yang telah dijelaskan sebelumnya, yakni mulai dari Branch & Bound untuk 25 taksa dan Heuristic Approach untuk taksa lebih dari 25 (lihat pada artikel Sebuah Tulisan Evolusi dan Filogeni: Phylogenetic Inference by Maximum Likelihood Method (In Depth)).

D. Keuntungan dan Kerugian Algoritme Maximum Parsimony
Sebagai sebuah algoritme, tentu saja Maximum Parsimony memiliki aspek positif dan negatif.  Berikut saia berikan daftarnya:
- Keuntungan
1. Pohon MP yang direkonstruksi pada umumnya terbebas dari asumsi-asumsi model substitusi nukelotida yang diterapkan pada algoritme lainnya seperti algoritme distance-matrix atau maximum likelihood. Dengan kebebasan asumsi model substitusi ini, pohon MP dinilai lebih dapat menggambarkan hubungan kekerabatan yang sebenarnya ketika divergensi antar sequence cukup rendah.
2. Maximum Parsimony merupakan algoritme character-based yang cukup akurat dengan waktu komputasi yang relatif lebih cepat dari algoritme character-based lainnya seperti maximum likelihood.

- Kerugian
1. Pohon MP dikatakan cukup akurat atau mendekati pohon sebenarnya (true tree) apabila diterapkan dengan serangkaian syarat, yakni: (i) tidak ada back mutation atau parallelism; (ii) laju substitusi antar taksa relatif rendah; dan (iii) jumlah nukleotida dalam sequence sangat banyak. Pada kenyataanya ketiga syarat tersebut sulit untuk terpenuhi oleh dataset yang ada.
2. Adanya tendensi algoritme MP untuk menggabungkan 2 taksa yang memiliki kemiripan sequence nukleotida akibat proses back mutation, parallelism, dan konvergensi. Hal ini dapat terjadi juga akibat ketidaksetaraan laju evolusi antar taksa. Kedua faktor tersebut dapat berakibat pada efek "long branch attraction", yakni penggabungan dua taksa yang berbeda nenek moyang akibat kesamaan laju substitusi nukleotida (Gambar 3). Berdasarkan Gambar 3 tersebut, takson A dan C yang berbeda nenek moyang dalam hal ini bergabung pada nodus internal (nenek moyang) yang sama oleh algoritme MP. Hal ini disebabkan oleh karena perbedaan laju substitusi nukleotida antara takson A yang lebih mirip dengan takson C dibandingkan dengan takson B yang merupakan kerabat takson A yang sebenarnya.
Gambar 3. Long-Branch Attraction.
E. Kesimpulan
Algoritme MP dapat dikatakan sebagai algoritme tertua yang dikembangkan untuk mempelajari hubungan kekerabatan antar mahluk hidup. Seperti hal-nya algoritme lainnya, penerapan konsep parsimony dalam algoritme sequence molekular (DNA/protein) tentunya memiliki serangkaian asumsi sehingga mengakibatkan adanya keuntungan dan kerugian tersendiri dari algoritme ini. Sebagai algoritme character-based, Maximum Parsimony cukup cepat dan akurat dalam merekonstruksi hubungan kekerabatan antar taksa jika menggunakan sequence yang memiliki kekonstanan laju evolusi dan sedikit homoplasi.

Regards,
KohVic

Minggu, 23 Desember 2012

Sebuah Tulisan Evolusi dan Filogeni: Bayesian Phylogenetic Inference (In Depth)

Hmm...sebenarnya ada sedikit kekhawatiran dalam diri saia ketika ingin menulis mengenai topik ini. Pertama adalah karena notes-notes yang berjudul Bayesian sudah pernah saia tulisan sebelumnya. Menuliskannya kembali kali ini sepertinya terkesan mengulang-ngulang saja. Kedua adalah, saia khawatir para pembaca setia dan tidak setia seri Bukan Tulisan Ilmiah saia akan segera bosan. Yasuda, saia putuskan untuk melakukan semacam impruvisasi dalam tulisan ini. Judulnya mungkin mirip, tapi saia akan fokus untuk memperdalam isi materinya. Selamat membaca ^^

A. Sebuah Awalan
Bayangkan sebuah pertandingan/kompetisi tahunan tingkat dunia dan selama 14 tahun terakhir ini dimenangkan oleh 7 negara yang sama. Nah sekarang pertanyaannya adalah pada pertandingan ke-15 yang katakanlah diselenggarakan sekarang ini, negara manakah yang akan menang? Seorang yang setia mengikuti pertandingan tersebut pastinya punya pegangan kuat tim mana yang diprediksi akan menang. Namun bagi kita-kita yang mungkin tidak tahu apa-apa mengenai pertandingan tersebut sebenarnya juga bisa menentukan pilihan tim yang cukup meyakinkan untuk menang. Oke, sekarang anggaplah peluang kemenangan hanya terdapat pada 7 negara tersebut dan peluang dimenangkan oleh negara lainnya dapat diabaikan. Dengan memperhatikan sejarah perolehan kemenangan selama 14 tahun terakhir yang sama pada ke-7 negara tersebut, kita dapat memperkirakan bahwa pada pertandingan ke-15 ini satu negara memiliki peluang untuk menang sebanyak 1/7.

Pertandingan tahun ke-15 pun dimulai dan kita pun (mencoba) menonton dengan antusias. Perkiraan pun semakin mendekati kenyataan dan tidak terasa 2 diantara 7 negara tersebut ternyata masuk final!! Nah pertanyaannya sekarang adalah apakah peluang menang kedua negara yang bertarung di final tersebut masih 1/7? Tentunya peluang tersebut sudah meningkat menjadi 1/2 bukan?

Yup, logika Bayesian memang dicirikan dengan kemampuannya untuk memperbarui distribusi kemungkinan sedemikian rupa sehingga mendekati kebenaran. Pada cerita di atas, peluang 1/7 pada tiap negara itu kita sebut sebagai "prior" atau dapat saia definisikan sebagai "perkiraan awal". Sementara itu, peluang 1/7 yang kemudian meningkat menjadi 1/2 setelah diperbarui dengan data-data terkini disebut sebagai "posterior" atau yang dapat saia definisikan sebgai "perkiraan kemudian". Bayesian phylogentic inference dirumuskan sesuai dengan teorema Bayes, yakni:

    Pr[tree|data] = (Pr[data|tree] x Pr[tree]) / Pr[data]

dimana tanda garis vertikal "|" dibaca sebagai "given". Saia langsung merujuk pada bahasa inggrisnya saja agar tidak membingungkan. Dengan demikian pembahasaan rumus diatas adalah: "probability of the tree given the data (posterior) equals the probability of the data given the tree (likelihood) times the probability of the tree and then divided by the probability of the data outcome". Konsekuensi dari pernyataan tersebut adalah bahwa untuk mendapatkan pohon filogenetik yang mencerminkan kekerabatan antar taksa yang sebenarnya (the posterior tree), kita harus mengintegrasikan probabilitas dari seluruh situs untuk sebuah pohon dan kemudian menjumlahkannya untuk keseluruhan kemungkinan pohon yang ada. Hal kedua mungkin untuk dilakukan karena kita tinggal hanya menjumlahkannya saja. Namun demikian, integrasi probabilitas situs antar sequence (Pr[data]) itu yang membuat masalah ini menjadi rumit.

B. Perbandingan antara Maximum Likelihood dengan Bayesian Inference
Tentunya para teman-teman pembaca masih ingat dengan tulisan saia sebelumnya yang menyinggung tentang metode Maximum Likelihood (ML). Kalau belum ingat atau belum baca, ya monggo ditengok. Nah membicarakan metode ML itu akan membawa kita kepada persamaan berikut ini:

    L = L(1) x L(2) x L(3) x ... x L(n)
    atau
    lnL = lnL(1) + lnL(2) + lnL(3) + ... + lnL(n)

Perlu kita ketahui bahwa nilai likelihood L per situs diestimasi untuk sejumlah internal nodes yang terdapat pada pohon yang menghubungkan seluruh taksa. Suatu pohon dengan n taksa mengandung n-2 internal nodes. Mengingat bahwa ada 4 kombinasi jenis nukleotida yang mungkin per situs dalam setiap internal nodes, maka terdapat 4^(n-2) kombinasi nukleotida per situs untuk pohon dengan n taksa. Err..kita baru membicarakan likelihood untuk satu situs bukan? dan tentunya nilai likelihood suatu pohon dihitung dari nilai likelihood setiap situsnya. Nah jumlah internal nodes tersebut, pendek kata, setara dengan kelipatan integral untuk menghitung probabilitasnya. Nah proses integrasi yang berlipat-lipat inilah yang menjadikan metode ML sangat memakan waktu dari segi komputasi bahkan dengan komputer cepat sekalipun.

Metode Bayesian inference, sekalipun menggunakan nilai likelihood L dalam teorema Bayes-nya, tidak secara eksplisit menghitung nilai tersebut. Hal ini dapat dicapai akibat penerapan algoritme Markov Chain Monte Carlo (MCMC) mengestimasi nilai likelihood dari suatu pohon dengan branch length dan model tertentu. Dengan demikian, proses dalam Bayesian inference menjadi lebih cepat di dalam pencarian pohon terbaik (best tree) akibat penerapan MCMC ini.

C. Tahapan Bayesian Inference
Inti dari Bayesian inference adalah analisis probabilitas. Jika likelihood didefinisikan sebagai probabilitas dari suatu data jika diberikan sebuah hipotesis (pohon), maka Bayesian inference ini menggunakan rasio likelihood tersebut untuk menentukan hipotesis (pohon) mana yang lebih mampu menjelaskan data sequence yang kita miliki. Proses MCMC akan menghasilkan serangkaian hipotesis dalam rantaian-nya (chain), masing-masing dengan nilai likelihoodnya. Nilai-nilai likelihood ini dimasukan ke dalam teorema Bayes seperti yang telah dituliskan di atas. Sebagai contoh, anggaplah kita telah memiliki dua nilai likelihood (L1 dan L2) untuk dua hipotesis dan ingin membandingkannya menggunakan teorema Bayes. Dalam perbandingan ini, state yang baru diperoleh (new state / L2) dibandingkan dengan state awalan (current state / L1) untuk diperoleh nilai rasio r nya:



Perhatikan bahwa masing-masing penyebut dari kedua persamaan (Pr[data]) saling menghilangkan satu sama lain sehingga nilai r setara dengan perbandingan kedua nilai likelihhod (L2/L1) dari kedua hipotesis. Jika nilai r lebih besar dari 1 yang berarti state baru memiliki nilai likelihood yang lebih tinggi daripada current state, maka state baru tersebut akan dijadikan sebagai current state yang baru. Apabila nilai r lebih kecil dari 1 maka state yang baru akan diterima dengan probabilitas tertentu. Apabila masih tidak mungkin untuk diterima, maka state baru tersebut ditolak dan current state tetap menjadi current state untuk dibandingkan lagi dengan state baru yang lain.

Algoritme MCMC akan terus menyampling pohon hingga mencapai keadaan dimana tidak diperoleh lagi perbedaan nilai likelihood yang signifikan antar satu pohon dengan lainnya. Nah pada keadaan ini dapat kita katakan bahwa MCMC telah mencapai titik konvergensi. Pada titik konvergensi inilah pohon dengan distribusi posterior didapatkan. Pada umumnya akan terdapat lebih dari satu pohon yang mewakili distribusi posterior ini dan pada akhirnya kita juga yang harus menentukan pohon mana dari sejumlah pohon posterior tersebut yang terbaik menurut kita.

D. Optimasi MCMC
Apabila penjelasan pada sub-bagian C membuat teman-teman pembaca agak bingung, saia akan mencoba menjelaskan dengan sedikit gambar (lihat gambarnya). Telah kita ketahui bahwa akan terdapat sejumlah besar pohon (dengan topologi dan branch length masing-masing) yang mungkin dibuat untuk sejumlah taksa. Masing-masing pohon tersebut memiliki probabilitasnya sendiri untuk menjadi pohon yang benar (likelihood). Nah jika saia mendistribusikan seluruh pohon tersebut dalam sebuah histogram katakanlah, dengan sumbu-Y menyatakan nilai likelihood, maka akan terlihat sebuah topologi distribusi probabilitas antar pohon satu dengan lainnya. Ada puncak yang rendah (likelihhod kurang optimal), ada lembah (nilai likelihood sangat rendah) dan ada juga puncak tertinggi (nilai likelihood optimal). 

Pohon dengan "puncak" tertinggi dalam histogram tersebut (memiliki nilai likelihood tertinggi) merupakan pohon posterior dan merupakan target kita. Nah sekarang permasalahannya adalah rantai MCMC mungkin bisa terjebak pada puncak non-optimal (disebut sebagai local optima) seperti contohnya terjebak di puncak C. Apabila current state likelihood sudah berada di local optima, pembandingannya dengan new state likelihood mungkin akan selalu dimenangkan oleh current state likelihood karena sudah mencapai daerah puncak. Nah pada situasi seperti inilah parameter-parameter tertentu perlu diperhatikan agar terhindar dari local optima.

Parameter pertama adalah mixing behavior. Secara sederhana, mixing behavior dapat disetarakan sebagai variansi antara satu nilai likelihood dengan lainnya. Variansi  yang terlalu kecil menggambarkan bahwa pencarian new state likelihood dilakukan dengan jarak yang begitu dekat dengan current state likelihood sehingga rasio r yang dihasilkan tidak berbeda secara signifikan. Dengan demikian dapat dikatakan bahwa rantai MCMC berjalan di tempat dan tidak berlanjut ke daerah posterior. Variansi yang terlalu besar pada umumnya menyebabkan new state likelihood sangat berbeda dengan current state likelihood sehingga nilai rasio keduanya lebih kecil dari 1. Sebagai akibatnya, chain akan terus berada pada titik current state likelihood aibat new state likelihood yang selalu ditolak. Dengan demikian, rantai MCMC diam ditempat. Kedua fenomena ini menyebabkan mixing behavior yang buruk. Variansi sedang (adequate) merupakan pertanda yang bagus dalam menandakan bahwa rantai MCMC kita berjalan menuju ke arah posterior.


Parameter kedua adalah Metropolis Coupling MCMC (atau MCMCMC / MC3). Parameter ini berfungsi untuk menghindarkan rantai MCMC kita terjebak pada local optima. Ketidakhadiran MC3 akan cenderung membuat rantai MCMC kita terhenti ketika sudah mencapai suatu puncak tanpa memperdulikan apakah itu hanya sekedar puncak (local optima) atau puncak tertinggi (global optima). Metropolis Coupling MCMC memungkinkan rantai MCMC kita untuk "melompat" dari satu puncak ke daerah lainnya, sehingga membuat rantai MCMC bisa terus mencari daerah posterior yang menjadi global optima.

E. Kesimpulan
Jadi, setelah menuliskan secara panjang x lebar x dalam dibagi jari-jari kuadrat dan diintegralkan, maka dengan ini saia simpulkan bahwa pada intinya  Bayesian Phylogenetic Inference mencari pohon terbaiknya (the best tree) berdasarkan distribusi probabilitas posterior diantara pohon-pohon yang ada. Pohon-pohon yang memiliki probabilitas posterior tertinggi diantara pohon lainnya dianggap merupakan serangkaian pohon yang dapat menggambarkan hubungan filogenetik taksa kajian dengan sama baiknya. Pada akhirnya, semua kembali kepada kita mengenai bagaimana menginterpretasikan distribusi probabiilitas posterior tersebut untuk menggambarkan hubungan kekerabatan antar taksa.

Regards,
KohVic

Further Readings:
- Ronquist, F., P. van der Mark, & J. P. Huelsenbeck. 2009. Bayesian phylogenetic analysis using MRBAYES. In The Phylogenetic Handbook: A Practical Approach to Phylogenetic Analysis and Hypothesis Testing 2nd Edition (P. Lemey, M. Salemi, & A-M. Vandamme eds.). Cambridge University Press: UK.

- Huelsenbeck, J. P., F. Ronquist, R. Nielsen, & J. P. Bollback. 2001. Bayesian Inference of Phylogeny and Its Impact on Evolutionary Biology. Science 294: 2310-2314.

- Yang, Z. & B. Rannala. 1997. Bayesian Phylogenetic Inference Using DNA Sequences: A Markov Chain Monte Carlo Method. Mol. Biol. Evol. 14 (7): 717-724.

- Rannala, B. & Z. Yang. 1996. Probability Distribution of Molecular Evolutionary Trees: A New Method of Phylogenetic Inference. J. Mol. Evol. 43: 304-311.

Minggu, 16 Desember 2012

Sebuah Tulisan Evolusi dan Filogeni: Phylogenetic Inference by Maximum Likelihood Method (In Depth)

Hai hai hai...kembali berjumpa dengan saia Chef Victor alias KohVic. Yaa lagi-lagi saia diprotes oleh salah satu pembaca karena lama tidak membuat tulisan terkait filogenetik. Jujur saja saia sampai saat ini belum ada ide untuk membuat tulisan dengan tema baru. Yaa silahkan pikir sendiri alasannya mengapa, bisa mulai dari sibuk mengerjakan tesis hingga sibuk cari teman kencan...hahahaha. Ehem..yaa dalam tulisan kali ini saia hanya ingin mencoba membahas secara lebih mendalam sebuah tulisan yang pernah saia buat pada serial Sebuah Tulisan Evolusi dan Filogeni yang lalu, yakni mengenai algoritme Maximum Likelihood (ML).

Pertama, ijinkan saia memaparkan alur pikiran saia dalam tulisan ini. Tulisan ini akan saia mulai dengan definisi konsep likelihood, kemudian dilanjutkan ke penerapan konsep likelihood tersebut dalam konteks filogenetik. Sederhana toh? Oke mari kita mulai dengan sebuah pertanyaan. Apakah itu tepatnya definisi kata "likelihood"? Well, secara intuitif ditambah sedikit pengalaman membuka kamus bahasa inggris tentunya kita akan menebak bahwa kata tersebut berhubungan dengan sesuatu yang cenderung (likely). Nah dalam konteks matematis, kecenderungan itu bisa dikatakan sepadan dengan peluang. Yap, konteks likelihood ini sangat berhubungan sekali dengan peluang. Nah peluang seperti apakah itu.

Mari saia jabarkan dengan satu contoh. Jika kita melempar koin sebanyak 100 kali dan mendapatkan bagian depan sebanyak 21 (d=21), kita dapat menuliskan bahwa peluang munculnya bagian depan adalah p=0,21. Sekarang saia tanya, berapakah peluang saia untuk mendapatkan hasil persis sama (d=21) dalam 100 lemparan koin berikutnya? Dalam hal ini kita dapat menghitungnya dengan persamaan distribusi binomial, yakni:

Prob[H=d] = (n, d) p^d . (1-p)^n-d

dimana: p^d merupakan peluang untuk mendapatkan bagian depan (d) dikalikan dengan peluang untuk tidak mendapatkan d. Karena koin hanya memiliki 2 sisi, maka peluang tidak mendapatkan d adalan 1-p. Nah dari persamaan di atas, kita dapat melihatnya dari dua sisi. Pertama, jika p diketahui maka kita dapat menghitung peluang untuk mendapatkan distribusi hasil yang sama (21 depan, 79 belakang) untuk 100 lemparan ke depan. Kedua adalah, kita telah mendapatkan distribusi hasil depan dan belakang dan nilai p inilah yang justru dicari. Konteks kedua inilah yang dinamakan sebagai likelihood, yakni menghitung probabilitas dari suatu kejadian yang sudah terjadi (probability of the known event) atau sering disebut sebagai reverse probability.

Nah dalam konteks filogenetik, penerapan konsep likelihood ini dijabarkan dengan hipotesis (topologi pohon, branch length, dan model evolusi) seperti apa yang memiliki likelihood terbesar untuk menghasilkan sequence alignment yang kita miliki. Metode ML termasuk ke dalam salah satu metode character-based dengan fungsi optimality search criterion. Artinya adalah metode ini didasarkan pada suatu model evolusi tertentu (JC69, K80, TN93, GTR, dsb) untuk menganalisis likelihood setiap topologi pohon dari setiap situs nukleotida yang ada pada sequence alignment yang kita miliki. Jadi, dalam metode ML kita perlu memasukan model evolusi dan nantinya algoritme ML terebut yang menentukan pohon seperti apakah yang paling dapat 'menjelaskan' sequence alignment yang kita miliki berdasarkan model evolusi tersebut. Hal ini berarti bahwa perbedaan model evolusi yang digunakan dapat mengakibatkan perbedaan pohon yang didapatkan. Suatu pohon ML yang dihasilkan dapat dibandingkan satu sama lain berdasarkan nilai Maximum Likelihood Estimate (MLE) nya. Nilai MLE yang lebih besar menandakan bahwa pohon tersebut dapat menjelaskan sequence alignment kita dengan lebih baik.

Nah sekarang, bagaimana tepatnya tahapan dalam pembuatan pohon ML? Saia akan mencoba menjelaskannya dengan menggunakan 4 taxa/OTU. Berikut adalah sequence alignment untuk ke-4 OTU tersebut:

OTU 1    = AACGCCTTT...N
OTU 2    = AACGCGTTA...N
OTU 3    = AACCAGTTT...N
OTU 4    = AACCGGTTT...N

Sekarang coba lihat situs kelima. Disana secara berturut-turut OTU 1, 2, 3, dan 4 memiliki nukleotida C, C, A, dan G. Nah dengan contoh situs ke-5 ini metode ML merekonstruksi kekerabatan keempat OTU dengan membuat sebuah pohon unrooted dan kemudian memperhitungkan probabilitas nukleotida ancestor (5 & 6) yang menghasilkan state nukleotida seperti yang teramati sekarang ini.
(1)C--+            +--A(3)
           (5)----(6)
(2)C--+           +--G(4)

Kita ketahui bahwa ada 4 jenis nukleotida, yakni A, T, G, dan C. Dengan demikian, jumlah kombinasi nukleotida untuk dua ancestral state tersebut ada 16 (AA, AG, AC, AT...):
(1)C--+            +--A(3)  |  (1)C--+            +--A(3)  | (1)C--+            +--A(3)  |  (1)C--+            +--A(3)
           (A)----(A)            |            (A)----(T)              |           (A)----(C)             |            (A)----(G)
(2)C--+           +--G(4)   |  (2)C--+           +--G(4)   | (2)C--+           +--G(4)   |  (2)C--+         +--G(4) ....

Nah probabilitas dari seluruh kombinasi ini dihitung dengan bantuan data sequence alignment yang ada dan kemudian diakumulasi menjadi nilai likelihood untuk situs nomor 5 (L(5)). Selesai? Tentu saja belum. Metode ML akan menghitung nilai likelihood untuk satu pohon berdasarkan seluruh situs dalam alignment. Dengan demikian nilai likelihood (L) dari satu pohon dirumuskan dengan:

L = L(1) x L(2) x L(3) x ... x L(n)     dengan 1-n = jumlah situs dalam sequence alignment

Pada umumnya nilai L ini begitu kecilnya sehingga dinyatakan dalam bentuk logaritmik (lnL). Dengan demikian, rumusnya menjadi:

lnL = lnL(1) + lnL(2) + lnL(3) +...+ lnL(n)   dengan 1-n = jumlah situs dalam sequence alignment

Oke, sekarang kita telah mendapatkan nilai likelihood L untuk SATU pohon. Selesai? hahaha...tentu saja BELUM. Perlu kita ingat bahwa jumlah kandidat pohon untuk sejumlah OTU itu dirumuskan dengan:

N(U) = (2n-5)! / 2^n-3 . (n-3)! dengan n = jumlah OTU/taxa

Bingung? yaa gambaran mudahnya begini saja. Pada tingkat 4 OTU ada 3 kandidat pohon yang mungkin dibuat [(AB;CD), (AC;BD), & (AD);(BC)]. Nah meningkat ke 10 OTU akan ada 2.027.025 dan pada 20 OTU akan ada 221.643.095.476.699.771.875 kandidat pohon! Cukup banyak bukan? Nah misalnya kita menggunakan metode ML untuk merekonstruksi kekerabatan 20 OTU, itu artinya perhitungan nilai MLE harus dilakukan terhadap total sekitar 2x10^20 pohon tersebut. Komputer cepat pada saat ini pun akaan kewalahan jika disuruh hal seperti itu.

Nah lalu bagaimana solusinya? Saat ini ada dikembangkan 3 metode untuk evaluasi cepat dalam mencari pohon ML tersebut. Metode tersebut adalah (1) Exhaustive Search, (2) Branch & Bound Method, dan (3) Heuristic Approach. Metode Exhaustive Search telah saia jelaskan sebelumnya, yakni membuat seluruh kemungkinan topologi pohon dan mengevaluasi serta membandingkan nilai MLE antar satu pohon dengan yang lain. Metode ini menjamin bahwa pohon ML optimum akan didapatkan, namun demikian butuh waktu yang lama dan metode ini hanya efektif untuk rekonstruksi maksimal 10 OTU.

Ketika rekonstruksi melibatkan 12-25 OTU, maka metode Branch & Bound diterapkan menggantikan Exhaustive Search. Metode ini pada dasarnya mengevaluasi seluruh kemungkinan pohon namun juga memotong jalur rekonstruksi pohon ketika dipastikan bahwa pohon tersebut pastinya memiliki nilai MLE yang lebih rendah. Pemotongan jalur rekonstruksi ini dapat menghemat sebagian waktu komputasi, sehingga memungkinkan metode Branch & Bound cukup efektif hingga 25 OTU. Tahapannya adalah dengan merekonstruksi 1 pohon awal (initial tree) dari 3 OTU hingga n-OTU. Setiap penambahan OTU ke dalam pohon (growing tree) akan diestimasi nilai MLE nya dan terus demikian hingga mencapai 1 pohon lengkap (full tree). Selanjutnya, metode tersebut akan mengulang rekonstruksi dari tahapan 3 OTU. Namun kali ini nilai MLE pada penambahan OTU ke-4 akan dibandingkan dengan nilai MLE pada initial tree. Apabila nilai MLE nya lebih rendah, maka jalur rekonstruksi tersebut tidak akan dilanjutkan dan demikian sebaliknya.

Nah sekarang, bagaimana jika kita ingin merekonstruksi filogeni dengan OTU > 25? Dikatakan bahwa metode Branch & Bound kurang efektif jika diterapkan pada lebih dari 25 OTU. Pada kasus ini pencarian optimal ML tree akan diserahkan pada algoritme berbasis Heuristic Approach. Inti dari algoritme ini adalah berbasis sampling, yakni hanya menggunakan sebagian kandidat pohon dari total pohon yang mungkin direkonstruksi. Berbagai macam algoritme berbasis Heuristic Approach telah dikembangkan, diantaranya meliputi Stepwise Addition, Star Decomposition, dan Branch Perturbations. Saat ini algoritme yang paling umum digunakan adalah berbasis Branch Perturbations, yang selanjutnya terbagi lagi menjadi 3, yakni (1) Nearest Neighborhood Interchange (NNI), (2) Subtree Prunning and Regrafting (SPR), dan (3) Tree Bisection and Reconnection (TBR). Em, saia rasa terlalu panjang untuk membahasnya satu per satu, tapi saia akan kemukakan logika umumnya. Intinya adalah metode Branch Perturbation ini akan merekonstruksi sebuah pohon dan mengestimasi nilai MLE-nya untuk dijadikan sebagai patokan awal. Selanjutnya topologi pohon akan dirubah sedemikian rupa dan kemudian nilai MLE diestimasi kembali. Nilai MLE yang lebih tinggi menandakan bahwa topologi pohon tersebut lebih mampu menjelaskan data dan akan disimpan sebagai patokan yang baru. Branch Perturbation ini akan terus dilakukan hingga tidak didapatkan pohon dengan nilai MLE yang lebih tinggi lagi. Nah perbedaan antara NNI, SPR, dan TBR terletak pada jumlah kombinasi Branch Pertubation yang dapat dibuat. Sebagai hitungan kasar, apabila dengan NNI dapat menghasilkan n kombinasi sampel, maka SPR akan menghasilkan kuadrat-n, dan terakhir TBR akan menghasilkan kubik-n kombinasi sampel. Hmm...TBR kedengarannya cukup meyakinkan bukan. Namun jangan lupa bahwa semakin banyak kombinasi yang dibuat itu berarti waktu komputasi yang semakin lama loh...hehehe

Oke deh, sekian dulu mengenai Maximum Likelihood nya. Semoga dengan tulisan iseng-iseng saia ini kita jadi lebih bisa mengerti dan memahami mengenai algoritme Maximum Likelihood yang terkenal.....lama akan waktu komputasinya itu.

Regrads,
Victor Apriel (KohVic)

Kamis, 06 September 2012

Sebuah Tulisan Evolusi dan Filogeni: Estimating Selection Pressures on Molecular Sequences (In Depth) Part III

Menikmati kesendirian di kamar kost tanpa tau harus ngapain, jadi begini deh pelariannya. Ehem....tulisan ini merupakan sambungan dari part II kemarin yang dengan sangat terpaksa harus saia batasi hingga estimasi laju tekanan seleksi antar branch karena akan terlalu panjang bila dilanjutkan. Nah dalam part III ini saia akan meneruskannya dengan estimasi laju tekanan seleksi antar site dalam sequence alignment. Selamat menikmati ^^/

Estimasi laju tekanan seleksi pada sequence molekular dapat dipandang sebagai usaha untuk menjawab apakah biomolekul pembawa informasi genetik, yang dalam hal ini adalah DNA, mengalami evolusi secara netral? Kata "netral" yang dimaksud disini adalah tanpa dipengaruhi oleh proses adaptasi terhadap seleksi alam. Teman-teman semua tentunya masih ingat dengan empat pertanyaan yang diajukan pada part I bukan. Nah hingga sekarang ini kita telah menjawab pertanyaan ke-1 dan 2. Pada tulisan ini, saia akan mencoba mengajak teman-teman pembaca untuk menjawab pertanyaan ke-3, yakni estimasi jenis dan laju substitusi antar kodon dalam suatu alignment untuk mencari kodon target manakah yang mengalami proses seleksi. Sebelum kita memasuki inti cerita, saia ingin mengingatkan kembali bahwa kata 'seleksi' ditujukan pada kodon yang mengalami substitusi non-synonimous (beta). Hal ini didasarkan pada pandangan bahwa perubahan suatu asam amino yang disandi oleh kodon yang bersangkutan merupakan bentuk adaptasi organisme untuk menghadapi seleksi alam.

Berdasarkan definisi 'seleksi' di atas, seringkali kita berusaha mencari jenis seleksi yang mengarah pada keberagaman. Hal demikian disebut postitive selection atau diversifying selection; dan diindikasikan dengan nilai omega >1.  Dengan asumsi bahwa organisme (OTU) yang diperbandingkan memiliki keseragaman laju substitusi synonimous antar branch (alfa[b] =1) dan antar site (alfa[s] = 1), maka seleksi positif dapat langsung tergambarkan oleh nilai beta[b] > 1 dan beta[s] > 1.  Secara umum, pengujian bahwa beta[b] > 1 lebih ditujukan untuk mendeteksi ada/tidaknya perbedaan nilai beta pada setiap branch, sedangkan pengujian beta[s] > 1 ditujukan untuk mencari kodon target yang diseleksi.

Beberapa metode telah dikembangkan untuk pengujian ini. Metode-metode tersebut didasarkan pada uji signifikansi dua hipotesis (H0 dan HA) terhadap nilai beta[s] pada masing-masing kodon dalam sequence alignment. Metode-metode tersebut meliputi:
1. Random Effect Likelihood (REL)
2. Fixed Effect Likelihood (FEL)
3. Single Likelihood Ancestor Counting (SLAC) atau Counting Heuristics

1. Metode Random Effect Likelihood (REL)
Metode ini didasarkan pada asumsi bahwa distribusi alfa[s] dan beta[s] dapat di representasikan pada suatu fungsi f. Berdasarkan parameter-parameter yang terdapat dalam fungsi f tersebut, maka seseorang dapat menghitung nilai likelihood setiap fungsi f yang diajukan terhadap data kodon yang dimiliki. Nilai likelihood ini kemudian digunakan dalam uji signifikansi mengenai ada/tidaknya variasi laju tekan seleksi terhadap kodon serta memperkirakan kodon mana yang diseleksi tersebut.

Bayangkan ada sebuah sequence alignment dengan kodon C = 1....s yang masing-masing kodon memiliki nilai alfa[s] dan beta[s]. Metode REL ini akan menekankan bahwa alfa[s] dan beta[s] mengikuti distribusi D yang memiliki sejumlah kategori laju d. Setiap kategori laju d memiliki nilai alfa[d] dan beta [d] yang sudah ditentukan dan probabilitas bahwa alfa[s] = alfa[d] serta beta[s] = beta[d] ditentukan oleh nilai pd, dimana total nilai pd untuk seluruh kategori d adalah 1.

Salah satu contoh aplikasi REL misalnya model M8 pada program Phylogenetic Analysis Using Maximum Likelihood (PAML) buatan Oom Ziheng Yang. Model M8 memiliki D dengan 10 kategori d. Kesepuluh kategori ini masing-masing memiliki nilai alfa[d] = 1 dan sepuluh varian nilai beta[d] yang menghasilkan omega[d] > 1. Dengan demikian, seluruh varian nilai beta[d] haruslah >1. Selanjutnya, model M8 ini diujikan terhadap setiap codon site c pada dataset alignment. Perhitungan ini akan menghasilkan site-by-site likelihood (L) untuk setiap kodon c sehingga kita dapat melihat nilai omega dan nilai likelihood (L)untuk setiap site kodon. Setelah itu, nilai-nilai L ini diuji signifikansinya dengan LRT dan signifikansi suatu site di dalam suatu kodon menandakan bahwa site tersebut diseleksi.

Metode REL ini cukup sensitif dalam penelusuran proses seleksi. REL dapat mendeteksi sebuah diversifying selection hingga tingkat omega = 1,1; suatu hal yang tidak dapat dilakukan oleh metode fixed effect likelihood (FEL; akan dijelaskan kemudian). Namun demikian, metode REL juga memiliki kelemahan. Kelemahan pertama adalah pemilihan kategori d dilakukan secara subjektif (a priori), sehingga sangat mungkin untuk suatu nilai alfa[s] dan beta[s] tidak tercakup dalam kategori alfa[d] dan beta[d] yang ditentukan.

2. Metode Fixed Effect Likelihood (FEL)
Metode FEL menggunakan estimasi langsung nilai alfa[s] dan beta[s] dari dataset dan tidak melakukan estimasi distribusi kedua nilai dalam alfa[d] dan beta[d] seperti halnya pada metode REL. Metode FEL dijabarkan dalam dua tahap. Tahap pertama adalah metode ini mengestimasi parameter-parameter substitusi berdasarkan dataset alignment yang ada, seperti nucleotide substitution bias, codon frequency, dan branch length. Kemudian pada tahap kedua, metode FEL menganggap bahwa setiap site pada kodon (ingat ada 3 site dalam 1 kodon) merupakan hasil substitusi yang independen antar satu dengan lainnya. Dengan demikian, setiap substitusi pada situs di dalam suatu kodon tersebut akan menghasilkan nilai alfa dan beta yang ditulis sebagai alfa[c] dan beta[c].

Selanjutnya, uji signifikansi dilakukan dengan menguji dua buah hipotesis terhadap setiap nilai alfa[c] dan beta[c] pada masing-masing kodon, dimana H0: alfa[c] = beta[c] dan HA: tidak demikian. Hipotesis H0 dan HA pada setiap kodon kemudian diuji dengan LRT satu per satu untuk dilihat signifikansinya. Kodon yang memiliki nilai LRT yang signifikan disimpulkan sebagai kodon yang terseleksi dan situs yang terseleksi dalam kodon pun dapat ditentukan.

Metode FEL memiliki keunggulan bahwa distribusi laju substitusi (alfa[c] dan beta[c]) ditentukan berdasarkan data dan tidak secara a priori seperti halnya pada REL. Kelemahan metode FEL adalah bahwa metode ini hanya dapat diterapkan pada alignment dengan minimal 30 sequence di dalamnya. Selain itu, metode FEL juga hanya dapat diterapkan pada filogeni organisme yang hubungan kekerabatannya relatif dekat atau dengan kata lain yang proses evolusinya belum cukup lama.

3. Metode Single Likelihood Ancestor Counting (SLAC) atau Counting Heuristics
Metode SLAC dilakukan dalam empat tahapan, yakni (i) rekonstruksi ancestral kodon sequences (sequence yang berada pada internal branch) menggunakan parsimony; (ii) penentuan alfa[c] dan beta[c] dengan mengacu pada ancestral sequence terhadap sequence-sequence yang terhubung dengannya; (iii) penentuan nilai substitusi (alfa/beta) rerata yang nantinya akan dijadikan sebagai nilai expected substitution rate under neutral model; dan (iv) uji signifikansi antara nilai alfa[c] dan beta[c] yang teramati (observed) terhadap nilai substitusi rerata (expected). Jika expected > observed, maka dapat dikatakan ada seleksi positif.

Estimasi variasi laju tekanan seleksi menggunakan metode SLAC sangat cepat bahkan dengan dataset yang besar. Namun demikian metode SLAC memiliki banyak asumsi yang diterapkan. Pertama, ancestral codon sequences (tahap i) dianggap merupakan data yang sebenarnya, padahal hal tersebut merupakan hasil proses rekonstruksi yang mungkin mengandung error. Kedua, proses penghasilkan ancestral codon sequence menggunakan teknik parsimony yang mengabaikan adanya multiple base substitution.

Selanjutnya, metode mana yang akan kita pilih untuk estimasi variasi laju tekanan seleksi pada sequence molekular? Well, Oom Kosakovsky Pond dan Oom Frost telah membuktikan bahwa ketiga metode menghasilkan estimasi yang mirip satu sama lain jika analisisnya dilakukan terhadap dataset yang besar. Masalah kemudian muncul ketika kita hanya memiliki dataset yang sedikit, baik dari segi jumlah sequence maupun panjang alignment. Pada kondisi tersebut disarankan bahwa melakukan ketiga metode dan kemudian mencari kongruensinya adalah cara yang tepat.

Oke, kira-kira demikianlah apa yang dapat saia ceritakan. Pada part selanjutnya, yang juga akan menjadi part terakhir judul ini, saia akan menceritakan mengenai perbandingan analisis tekanan seleksi pada dua gen. Ditunggu yax..heheh

Regards,
Victor Apriel

Minggu, 02 September 2012

Sebuah Tulisan Evolusi dan Filogeni: Estimating Selection Pressures on Molecular Sequences (In Depth) Part II

Terjebak di warnet yang ramai dan tidak sejuk memang menghambat proses pembuatan tulisan secara signifikan, apalagi kalau itu adalah tulisan-tulisan untuk artikel Bukan Tulisan Ilmiah. Yasudah, toh kenyataannya saia sidah terlanjur terjebak disini, jadi saia paksakan untuk menulis saja deh. Pada tulisan sebelumnya kita telah mengenal model evolusi/substitusi kodon, estimasi laju substitusi synonimous dan non-synonimous. Rasio antara kedua laju substitusi tersebut akan menggambarkan jenis seleksi yang berperan terhadap target gen yang dianalisis. Pada tulisan kali ini sai akan menyinggung mengenai estimasi variasi laju tekanan seleksi antar branch dan antar site pada pohon filogenetik.

Mengapa ada variasi laju tekanan seleksi antar branch (organisme/kelompok organisme) dan antar site (kodon pada alignment sequence)? Ya hal itu saia rasa memang wajib ada mengingat beberapa sebab yang telah dikemukakan pada tulisan sebelumnya:
1. Laju evolusi terbukti berbeda antar organisme seperti yang tergambarkan dari perbedaan branch length yang menghubungkan antar organisme/OTU. Hal ini dapat dipandang sebagai ada perbedaan dalam tekanan seleksi terhadap setiap organisme/branch yang mungkin terekam dalam sequence-nya.
2. Mutasi merupakan salah satu faktor utama dalam evolusi, maka perbedaan laju mutasi pada tingkat nukleotida merupakan penyebab utama perbedaan laju evolusi dan pada akhirnya tekanan seleksi baik pada tingkat sequence DNA maupun tingkat organisme.

Diangkatnya tema ini bermula dari sebuah pertanyaan apakah ada perbedaan tekanan seleksi antar organisme atau antar kodon dalam sebuah sequence dalam sebuah pohon filogenetik. Solusi atas pertanyaan tersebut dapat dijawab dengan tahapan berikut: pengasumsian model sebagai hipotesis dan pengujian hipotesis. Pada paragraf ini, saia akan mencoba membahas variasi tekanan seleksi antar branch terlebih dahulu. Analisis tekanan seleksi antar brach dapat digambarkan dalam 3 model/hipotesis, yakni:
1. Local/Free Ratio Model, mengasumsikan nilai omega (beta/alfa) berbeda pada semua branch. Oleh karena itu, model ini mengestimasi nilai omega untuk masing-masing branch.
2. Global/Single Ratio Model, mengasumsikan satu nilai omega untuk semua branch sehingga model ini hanya perlu mengestimasi satu nilai omega rerata dari seluruh branch.
3. Intermediate Complexity Model, mengasumsikan adanya kesamaan nilai omega antar branch dalam clade yang sama. Model ini dapat dikatakan sebagai pertengahan antara local dengan global model, karena hanya mengestimasi omega per sejumlah clade.

Berdasarkan ketiga model ini, kita kemudian melakukan uji signifikansi. Global ratio model yang tidak mengasumsikan adanya perbedaan laju tekanan seleksi merupakan model yang cocok untuk dijadikan sebagai hipotesis awal (H0) dan local atau intermediate model merupakan hipotesis alternatifnya (HA). Uji signifikansi kedua hipotesis ini dilakukan dengan metode Likelihood Ratio Test (LRT) yang didasarkan pada nilai likelihood atas kedua model yang diperbandingkan. Sebagai pengingat, nilai likelihood mencerminkan besarnya kemungkinan suatu model menghasilkan data yang dimiliki. Model yang semakin cocok terhadap data akan memiliki nilai likelihood (L) yang semakin tinggi. Bab Memilih Model Evolusi pada Serial Tulisan Evolusi dan Filogeni dapat memberikan gambaran yang lebih rinci mengenai LRT ini. Apabila dalam pengujian signifikansi tersebut HA > H0, maka H0 ditolak atas HA. Perlu diingat juga bahwa hal ini tidak berarti HA merupakan jawaban terbaik, namun bahwa data yang dimiliki tidak cocok untuk dapat diterangkan oleh H0 jika dibandingkan dengan HA.

Kelemahan uji LRT ini adalah bahwa pengujian ini dapat memberikan kesimpulan yang salah apabila heterogenitas laju tekanan seleksi sangat kuat antar branch. Kesimpulan mengenai adanya variasi laju tekanan seleksi mungkin tidak akan tercapai apabila hanya sedikit branch yang mengalami tekanan seleksi yang sangat kuat akibat tertutup oleh branch lainnya (background) yang tidak mengalami tekanan seleksi yang kuat. Kedua, kesimpulan yang ditarik dari uji signifikansi ini adalah jawaban atas pertanyaan "apakah ada variasi laju tekanan seleksi antar branch?" dan bukan "dimanakah variasi laju tekanan seleksi itu terjadi antar branch?". Namun demikian, seringkali justru kita menginginkan jawaban atas pertanyaan kedua daripada pertama. Hal tersebut dapat dicapai dengan estimasi nilai omega pada setiap branch (terminal dan internal) dan kemudian melakukan uji signifikansi pada setiap kombinasi pasangan branch yang ada dalam suatu pohon (sebagai gambaran, sebuah pohon dengan 10 OTU memiliki 10 branch terminal dan 8 branch internal). Pengujian LRT secara lokal ini pun memiliki kelemahan karena pembandingannya yang bersifat pasangan (pairwise) dan tidak mempertimbangkan branch lainnya, sehingga mungkin sekali untuk menyimpulkan hal yang salah.

Setelah membanding-bandingkan antar model dan melakukan uji LRT, sekarang mari kita mencoba melirik hal lainnya yang terkait dengan intermediate complexity model. Pada intermediate complexity model, pengujian seluruh branch (B) seperti halnya pada local model direduksi menjadi hanya beberapa branch saja (F), dimana F < B. Namun demikian, branch manakah yang harus dipilih untuk pengujian ini? Pada umumnya ada dua pendekatan yang dilakukan oleh orang-orang yang mengkaji hal ini, yakni pemilihan secara a priori dan pemilihan berdasarkan hasil uji sebelumnya.

Pemilihan branch secara a priori dapat dilakukan berdasarkan informasi-informasi yang terkait dengan data. Salah satu contohnya apabila kita ingin membandingkan adanya perbedan laju tekanan seleksi pada virus HIV yang menginfeksi berbagai mamalia, maka kita dapat berinisiatif bahwa tekanan seleksi pada sequence HIV manusia kemungkinan lebih besar dibandingkan dengan mamalia lainnya seperti kera atau babi. Hal ini dapat disebabkan oleh penggunaan obat anti-retroviral yang dalam hal ini berperan sebagai agensia penyeleksi pada strain virus HIV manusia. Dengan latar belakang tersebut kita dapat memilih dan memilah setiap branch yang ada menjadi kelompok branch tertentu, menghitung nilai omega (branch omega), dan kemudian menguji signifikansi nilai-nilai omega kelompok branch tersebut dengan LRT. Hasil yang signifikan menyimpulkan adanya perbedaan tekanan seleksi yang terjadi antar dua branch yang dibandingkan.

Pemilihan branch berdasarkan hasil pengujian sebelumnya disebut juga dengan data-driven branch selection atau data dredging. Ini berarti bahwa pemilihan branch dilakukan setelah dilakukan estimasi nilai omega terlebih dahulu pada setiap branch dan berdasarkan hasil tersebut baru dipilih kelompok omega yang berbeda secara signifikan untuk kemudian diujikan kembali. Perlu diketahui bahwa teknik seperti ini sebaiknya dihindari karena hipotesis yang disusun berdasarkan dataset dan kemudian diujikan kembali menggunakan dataset yang sama akan selalu menghasilkan bias (terlihat signifikan padahal sebenarnya tidak demikian).

Salah satu cara yang cukup objektif untuk branch (B) ke dalam kelompok jenis model (C) dapat dilakukan dengan metode Stirling Numbers S(C; B), yakni jumlah cara untuk memasukan branch B ke dalam salah satu model C. Nilai Stirling Numbers meningkat dengan cepat, sehingga pengujian LRT yang membandingkan per dua buah model (nested model) H0 dan HA kurang dapat diandalkan. Sebagai alternatif, pembandingan model dilakukan dengan metode teknik skoring menggunakan Small Sample Akaike Information Criterion (AICc). Teknik ini memperhitungkan nilai likelihood, jumlah site alignment, dan model parameter. Skor tinggi, yang berarti modelnya cocok, direpresentasikan dengan nilai likelihood sebesar mungkin namun dengan jumlah parameter yang sekecil mungkin.

Oke, akhir dari cerita. Cukup panjang juga yak. Dari tulisan ini saia dapat menyimpulkan bahwa pengujian mengenai ada atau tidaknya perbedaan laju tekanan seleksi antar branch dilakukan secara statistik menggunakan LRT. Namun demikian, pengujian ini harus didukung  pemilihan hipotesis serta branch/kelompok branch dengan dasar yang jelas. Pemilihan model atau branch yang salah dapat mengakibatkan konstruksi simpulan yang salah juga mengenai ada/tidaknya perbedaan laju tekanan seleksi tersebut. Next time, masih dengan judul yang sama, saia akan coba membahas lebih mendalam lagi hingga pada estimasi perbedaan laju tekanan seleksi antar situs dalam sequence alignment. Ditunggu yax ^^

Regards,

Victor Apriel