ほぼ中立ブログ

少しだけ百合に偏った雑記ブログ

FastTreeの使い方まとめ

【スポンサーリンク】

FastTreeは近似最尤法による系統樹推定プログラムです。大規模データに対応しており、他のプログラムに比べ実行時間が非常にはやいです。公式の説明によれば、PhyMLやRAxMLの100から1000倍高速な場合もあるようです。

ざっと調べたところ日本語の情報が少ないようでしたので簡単に使い方をまとめてみました。残念ながら詳しい挙動についてはあまり理解できていないのですが、参考程度にお読みいただけると幸いです。正確な情報を知りたい方は、公式サイトをご覧ください。

インストールについて

Windows、Mac、Linuxのいずれにも対応しています。Ubuntuならコマンドで簡単にインストールできます。

sudo apt install fasttree

マルチスレッド対応について

FastTreeには、シングルスレッドで動作するFastTreeとマルチスレッドで動作するFastTreeMPの両バージョンが存在します。

バージョン2.1では同じ条件の解析であっても、2つのバージョン間で結果が僅かに異なるようです。また同バージョンでは、シングルスレッド版は同じ条件なら常に同じ結果を返しますが、マルチスレッド版はその限りではないようです。

ただ、結果の大筋は変わらないようなので、気にしすぎなくても良いのかもしれません。

使い方

入力データについて

interleaved phylip形式、またはアライメント済みのFASTA形式ファイルに対応しています。

置換モデルについて

塩基配列の場合、Jukes-Cantor+CATまたはGTR+CATモデルが、アミノ酸の場合は、JTT+CAT、WAG+CAT、LG+CATモデルが使用可能です。

コマンド実行例

# LG+CATモデルを使用して最尤系統樹推定を行う
fasttree -lg test.faa > test.nwk

応用例:入力ディレクトリ直下のすべての配列ファイルについて系統樹を作成する

FastTreeは高速なプログラムですので、単純に配列ファイルの数が多い場合に真価を発揮するのではないかと思います。

そこで、配列ファイルが入ったディレクトリを指定すると、そのそれぞれについて系統樹を作成してくれるシェルスクリプトを考えてみました。FastTreeの設定は全てデフォルトです。マルチスレッドで実行するため「GNU parallel」も利用しています。

#!/bin/bash

fasdir="$1"
outdir="$2"
logdir="$outdir"/log

if [[ ! -d "$outdir" ]]; then
    mkdir "$outdir"
    mkdir "$logdir"
elif [[ ! -d "$logdir" ]]; then
    mkdir "$logdir"
fi

ls -F "$fasdir" | \
grep -v "/" | \
parallel -a - \
fasttree -log "$logdir"/{/.}.log \
-quiet "$fasdir"/{/} \> "$outdir"/{/.}.nwk

配列ファイルが入ったディレクトリを指定すると、出力ディレクトリ直下にnewick形式の系統樹ファイルがそれぞれ作成されます。実行ログは、出力ディレクトリ内のlogディレクトリに作成されます。

参考リンク

バイオインフォマティクス関連書籍