2012年5月7日月曜日

NHモデルでモデル選択が行えるソフト

2月くらいにMBEに出ていた論文です。
著者はUniversité MontpellierでBio++というPaup*に似た万能系統解析ソフトウェアを作っているグループの人たちです。またこの論文に関連して、testnhという名前のプログラムもリリースされています。

論文はこちら↓
http://mbe.oxfordjournals.org/content/early/2012/02/02/molbev.mss059.short

本当はこの論文をセミナーで発表しようかと思いましたが、実物(ソフトウェア)も使いながらじっくりゆっくり読みたいと思ったので、時間の関係上やめました。

さて、Bio++ではBppMLという最尤法用のプログラムが内包されていますが、このBppMLでは「系統樹の任意の枝で置換モデルを変える(breakpointを設定する)」ことが可能です。現状では樹形を固定したパラメータ最適化しかできませんが、使えるモデルは多種多様で、置換モデルのパラメータの値だけでなく、置換モデルそのものを変えることが可能です。

例えば、

・系統樹全体ではLGモデルを使うが、あるクレードではアミノ酸組成のパラメータを独自に変える、またはASRVの形状母数を変える(いわゆるcovarionみたいなもの)、あるいはそれら両方を行う。

・あるクレードではLGを使うが、違うクレードではWAGを使う(パラメータの設定も自由自在)。

などなど。そしてこのようなnon-homogeneousなモデルが、塩基・アミノ酸・コドンそれぞれのデータに対して適用可能です。

ここで、NHモデルを使う際に必要なのは、「どのくらいの数のbreakpointを設定し、系統樹のどのnodeにbreakpointを当てはめれば最適なのか」を判断することです。

nhPhyloBayesなどはMCMCの中でbreakpointの数、分布も最適化していきますが、「クソ遅い上にMCMCが収束するか分かんない」という点においてPhylogenomicsではあまり利便性のあるものではありません。

一方で、樹形探索を行わなくても、数種類の対立仮説樹形を用意した上で様々なNHモデルを試して仮説検定を行うことが出来れば、ある程度現実的な計算時間のもとで解析結果の妥当性を考える手段となりえます。多種多様な生物種から膨大な量の遺伝子配列をとってきて解析に使うPhylogenomicsでは、系統樹の各枝における置換モデルの単一性(すなわち進化プロセスの不変性)を仮定し系統樹の再構築を行うことはかなり危険な行為なんですが、単一性を仮定した置換モデルから出てきた結果について、対立仮説樹形を作り、いくつかのNHモデルを使って検定をすれば、いくらか適切な議論を行うことは可能になるのではないかと思います。

さて、この際重要となるのは、NHモデルも含めたモデル選択を行うことです。上記したように、どのくらいのbreakpointを用意し、どこにそれを当てはめるかというのは当てずっぽうではいけませんし、いわゆるbiologicalな根拠をもとに人間が勝手にbreakpointを設定するのも僕は不適切だと思っています。AICやBICなどの情報量基準をもとに、「単一性を仮定した従来のモデルよりも適切なNHモデル」を判断し、それを使って樹形比較を行うことが大事です。

これまでそのようなことを可能とするプログラムはありませんでしたが、ようやく現実的に使えそうなものが出てきた、というのが今回の論文です。然るに僕としてはかなりゲキアツな論文なわけです、はい。

testnhを使えば、これまでのセミナーでも何回か出てきた、「この系統樹アヤシイけどNHモデル使ったら異なる結果・解釈が導き出されるんじゃね?」という疑問を解決することが現実のものとなるわけです。勿論、これからこの研究室でもどんどん行われるであろう、「生物の大きなクレードを跨いだ広域なタクソンサンプリングに基づく大規模系統解析」において、解析結果の妥当性を評価する有効な手法にもなると思います。

問題は、testnhはBio++と同じ系列のプログラムですから、コマンドがアホみたいに複雑なこと、NHモデルについてはマニュアルに書いていないコマンドも多く自分で色々試行錯誤しないといけないこと、加えてバージョンアップのたびにコマンドの文法が変わる(しかもマニュアルに全部書かない)という鬼畜仕様であること、ってことでしょうかね。Bio++自体がまだv0.6.1でv1.0がリリースされていないというのもあるんですが、当分一般的には用いられんでしょう。それがちょっと残念です。

まあ、v0.6.1については統計数理の論文用データを取るときに大分苦労させられましたので、大体使い方は分かっています。このtestnh、ちょっと使ってみますかねー

0 件のコメント: