Error: check #seqs and tree: perhaps too many '('?.

使用codeml的时候遇到的一个报错,一直百思不得其解,明明也没有多括号,为什么报错,直到看到了这位仁兄的文章

mcmctree分化时间 - 简书 (jianshu.com)
最后一段,“在跑完树后对树修剪,导致部分node自带括号。”

检查了一下我报错的树,确实是因为修建的原因,修建之后的树虽然没有node了,但是括号还在,举个例子:

((((((Lynx_canadensis:55.3616,(Enhydra_lutris_kenyoni:40.12,(Ailuropoda_melanoleuca:19.2563,Ursus_maritimus:19.2563):20.8637):15.2416):18.8884,Equus_asinus:74.25):1.75,(Sus_scrofa:61.8426,Bos_mutus:57.7881):14.1573):5.02605,(Hipposideros_armiger:62,(Desmodus_rotundus:51.3141,Myotis_myotis:51.3141):10.6859):19.0261):12.974,((Ochotona_princeps:78.9706,((Marmota_flaviventris:11.3826,Ictidomys_tridecemlineatus:11.3826):23.08,Sciurus_carolinensis:34.4626):35.7399):8.22939,((Microcebus_murinus:36,Lemur_catta:36):37.7549,Homo_sapiens:72.3654):13.4451):6.8):66);

这棵树乍一看没啥问题,括号看起来也是一一对应的,我把树简化之后其实是这样的:

(((((Microcebus_murinus:36,Lemur_catta:36):37.7549,Homo_sapiens:72.3654):13.4451):6.8):66);
(((((Microcebus_murinus,Lemur_catta),Homo_sapiens))));

多了冗余的括号,paml不接受,所以得把括号去掉,变成((Microcebus_murinus,Lemur_catta),Homo_sapiens);
那原来的树就删掉后面node的括号,变成

(((((Lynx_canadensis:55.3616,(Enhydra_lutris_kenyoni:40.12,(Ailuropoda_melanoleuca:19.2563,Ursus_maritimus:19.2563):20.8637):15.2416):18.8884,Equus_asinus:74.25):1.75,(Sus_scrofa:61.8426,Bos_mutus:57.7881):14.1573):5.02605,(Hipposideros_armiger:62,(Desmodus_rotundus:51.3141,Myotis_myotis:51.3141):10.6859):19.0261):12.974,((Ochotona_princeps:78.9706,((Marmota_flaviventris:11.3826,Ictidomys_tridecemlineatus:11.3826):23.08,Sciurus_carolinensis:34.4626):35.7399):8.22939,((Microcebus_murinus:36,Lemur_catta:36):37.7549,Homo_sapiens:72.3654):13.4451):6.8);

就可以啦

在这个例子中我其实并不知道我删除的是哪个node,也就是我最后的枝长可能是错误的,之前用hyphy做选择分析,发现hyphy busted和absrel会重新估计枝长,查了下paml的手册,发现codeml也会重新计算,所以其实有没有枝长在做选择分析的时候是无关紧要的

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容