2016-07-25 6 views
2

私はcodemlで解析する準備ができている数千の遺伝子ツリーを持っています。以下のツリーは典型的な例です。私がしたいのは、重複していると思われるヒントやノードの折りたたみを自動化することです。例えば、ノード56の子孫は、36までのチップ26,27,28等である。これらのチップ26以外のものはすべて重複しているように見える。どのようにしてそれらをすべて1つのチップに折りたたんで、チップ28だけ残し、他のチップの1つをノード56の子孫として残すことができますか?Rの系統発生:内部ノードの子孫の先端を崩壊

私はこれを手作業で行う方法を知っていますが、関数を折りたたむ必要がある特定の機能を特定できるようにプロセスを自動化しようとしています。これまでは、先端間の距離を計算する共役関数を見てきました。しかし、私はその情報をヒントを崩壊させるためにどのように使うべきかわかりません。ここで

は以下のツリーのNewickの文字列です:

((((11:0.00201426,12:5e-08,(9:1e-08,10:1e-08,8:1e-08)40:0.00403036)41:0.00099978,7:5e-08)42:0.01717066,(3:0.00191517,(4:0.00196859,(5:1e-08,6:1e-08)71:0.00205168)70:0.00112995)69:0.01796015)43:0.042592645,((1:0.00136179,2:0.00267375)44:0.05586907,(((13:0.00093161,14:0.00532243)47:0.01252989,((15:1e-08,16:1e-08)49:0.0,(17:0.00272478,(18:0.00085725,19:0.00113572)51:0.01307761)50:0.00847373)48:0.01103656)46:0.00843782,((20:0.0020268,(21:0.00099593,22:1e-08)54:0.00099081)53:0.00297097,(23:0.00200672,(25:1e-08,(36:1e-08,37:1e-08,35:1e-08,34:1e-08,33:1e-08,32:1e-08,31:1e-08,30:1e-08,29:1e-08,28:0.00099682,27:1e-08,26:1e-08)58:0.00200056,24:1e-08)56:0.00100953)55:0.00210137)52:0.)45:0.01906982)73:0.003562205)38; 

enter image description here

+0

のノードが重複しているかどうかを判断するためのあなたの基準は何ですか?ちょうどヒント間の距離ですか?もしそうなら、閾値は何ですか?また、このツリーに新しい文字列を提供できる場合は、他の人が手助けする方が簡単になります。 –

+0

こんにちは、それは先端間の距離です。私が作業している閾値は1e-05ですが、それは現在のところ恣意的です。 – spiral01

答えて

2

1つのオプションは、しきい値の下に長さを持っているヒントをドロップすることです。

drop_dupes <- function(tree,thres=1e-5){ 
    tips <- which(tree$edge[,2] %in% 1:Ntip(tree)) 
    toDrop <- tree$edge.length[tips] < thres 
    drop.tip(tree,tree$tip.label[toDrop]) 
} 

plot(drop_dupes(tree)) 

enter image description here

+0

ああ、もちろん、edge.lengthを使って!本当にありがとう、これは私が探していたものです! – spiral01

関連する問題