我的系统发展史来自一份出版物,是BEAST的共识树,众所周知,BEAST引入了非正分支长度。我已经检查了"-“和"0”的系统发展史,它应该揭示非正的分支长度,并发现了一个零长度的分支,我将其更改为0.0000001。然而,这似乎并没有解决我的问题。是否有一个功能来检查给定的系统发展史,例如检查这样的分支长度并改变它们,检查单例,等等。树是完全分叉的,所以我不需要再次检查。
发布于 2019-11-19 09:19:42
如果没有一个可重复的例子,很难判断你的问题实际上源于哪里,但根据你所说的,问题可能来自于添加0.0000001,这使得树不再是超度量( +0.0000001分支的所有后代都比其他分支更长)。您可以尝试使用dispRity::remove.zero.brlen函数来解决此问题:
library(ape)
library(dispRity)
## Creating a random ultrametric tree
set.seed(1)
tree <- ape::rcoal(10)
## Introducing a zero branch length
tree$edge.length[17] <- tree$edge.length[17] + tree$edge.length[15]
tree$edge.length[16] <- tree$edge.length[16] + tree$edge.length[15]
tree$edge.length[15] <- 0
## Checking ultrametricity
ape::is.ultrametric(tree)
# [1] TRUE
## Checking zero branch lengths
any(tree$edge.length == 0)
# [1] TRUE您正在使用的方法删除了树的超度量属性:
## Adding a really small branch length (does not conserve ultrametricity)
tree_bad <- tree
tree_bad$edge.length[15] <- 0.0000001
## Checking ultrametricity
ape::is.ultrametric(tree_bad)
# [1] FALSE
## Checking zero branch lengths
any(tree_bad$edge.length == 0)
# [1] FALSE您可以改用dispRity::remove.zero.brlen,它增加了最小分支长度的1%,但保留了树的属性:
tree_good <- tree
## Removing zero branch lengths
tree_good <- dispRity::remove.zero.brlen(tree_good)
## Checking ultrametricity
ape::is.ultrametric(tree_good)
# [1] TRUE
## Checking zero branch lengths
any(tree_good$edge.length == 0)
# [1] FALSEhttps://stackoverflow.com/questions/58876276
复制相似问题