・データ整理
・統計ゼミ
午後
・データ整理
ggtreeでNEXUSファイル(.nex)の系統樹を描くのにどハマりした。
そもそもの発端は、RAxMLで作成した系統樹を「ggtree」の「reroot()」を使うと、こんな感じでいまいちだったことに始まる。 「reroot()」のコマンドはこんな感じ。
#系統樹はML_tree.treeとして保管されている(nwk形式) tree <- read.tree("ML_tree.tree") tree_reroot <- root(tree, outgroup = "26") #外群のOTU名が26 str(tree_reroot) ggtree(tree_reroot) + geom_tiplab()一応、「geom_rootedge()」も試したが改善できず。
ggtree(tree_reroot) + geom_tiplab() + geom_rootedge(3)ということで、Rでrerootをすることを諦めた。そこで、FigTree.appでrerootしてからRで作図する作戦に変更。
で、ここからどハマりした。
まず、FigTree.appでrerootをすると、「.nwk」だとboot strap値が保存できなくなる(?)ので「.nex」で保存しなければならない。
「.nex」で保存したので、「read.nexus()」を使えば良いだろうと思ったのだが、boot strap値が読み込めない(ファイルにはboot strap値はあることを確認)。
ここまでで半日以上を潰した。
試行錯誤の末、「read.beast()」を使えば良いことが判明!
普段、BEASTで作成したファイルを「read.beast()」で使っているので、これで終わった、、、と思ったら、別の意味で終わった。
#系統樹はML_tree_reroot_nex.nexとして保管されている ML_TREE <- read.beast("ML_tree_reroot_nex.nex") ggtree(ML_TREE) + geom_tiplab()これで作図できるはずなのだが、エラーがでる。「ggtree(ML_TREE)」だけだと実行できるので、OTUを描画する「geom_tiplab()」でエラーが出ているらしい。
悪戦苦闘の結果、原因が判明した。
まず、「read.beast()」で読み込んだ場合、下記のようにOTUは「tip.label」、 boot strap値は「label」として保存される。
#系統樹はML_tree_reroot_nex.nexとして保管されている ML_TREE <- read.beast("ML_tree_reroot_nex.nex") ML_TREE@phylo$tip.label #OTU [1] "25" "24" "18" "16" "15" "13" ML_TREE@data$label #boot strap値 label1 label2 label3 label4 label5 58 55 42 4 49しかし、なぜか、「ggtree()」を経由すると、OTUは「label.x」、boot strap値は「label.y」になっていることが分かった!
ML_TREE <- read.beast("ML_tree_reroot_nex.nex") ML_TREE_ggtree <- ggtree(ML_TREE) ML_TREE_ggtree$dataどうやら、「geom_tiplab()」は、データ「label」を探しているが見つからないのでエラーが出ているようだ。
ということで、「label.x」を「label」に入れることで解決できた。
ML_TREE <- read.beast("ML_tree_reroot_nex.nex") ML_TREE_ggtree <- ggtree(ML_TREE) ML_TREE_ggtree_data <- ML_TREE_ggtree$data ML_TREE_ggtree_data$label <- ML_TREE_ggtree_data$label.x ggtree(ML_TREE_ggtree_data) + geom_tiplab()「.nex」を「read.beast()」で読むと発生する問題なのか、FigTree.appでrerootしたファイルだからなのか詳細な原因は良く分からないが、BEASTで作成したファイルではこのような問題は起こったことはない。 boot strap値についても同じような対応が必要な気がするが、私はboot strap値を一度取り出して別の変数に入れているので、こちらについては大きな問題となっていない。