我想使用cutree()函数将系统发育树聚类成指定数量的进化枝。但是,phylo对象(无根系统发生树)不是非参数化的,因此在使用as.hclust.phylo()时会返回错误。目标是对树的尖端进行子采样,同时保持最大的多样性,因此希望通过指定数量的进化枝聚类(然后从每个进化枝中随机取样)。这将针对具有不同数量的期望样本的许多树进行。任何帮助将无根树胁迫成一个最简单的对象的建议,或者建议将树木(系统对象)系统地折叠成预定数量的进化枝的不同方法将非常感激。
library("ape")
library("ade4")
tree <- rtree(n = 32)
tree.hclust <- as.hclust.phylo(tree)
返回: “as.hclust.phylo(tree)中的错误:树不是超参数”
如果我在所有节点之间建立一个brach长度的距离矩阵,我可以使用hclust生成集群,然后切割成所需数量的集群:
dm <- cophenetic.phylo(tree)
single <- hclust(as.dist(dm), method="single")
cutSingle <- as.data.frame(cutree(single, k=10))
color <- cutSingle[match(tree$tip.label, rownames(cutSingle)), 'cutree(single, k = 10)']
plot.phylo(tree, tip.color=color)
然而,结果是不可取的,因为非常基础的分支聚集在一起。基于树结构的聚类或者尖端到根距离将更加可取。
任何建议都表示赞赏!
答案 0 :(得分:0)
我不知道这是不是你想要的,但首先你必须使用chronos()
,
这是一个可以帮助你解决问题的答案:
How to convert a tree to a dendrogram in R?