【问题标题】:Biopython bootstrapping phylogenetic trees with custom distance matrixBiopython 使用自定义距离矩阵引导系统发育树
【发布时间】:2026-01-27 04:00:01
【问题描述】:

我正在尝试创建一个自举的系统发育树,但我不想使用原始的多序列比对数据和标准评分系统,而是想使用我自己创建的自定义距离矩阵。我目前查看了http://biopython.org/wiki/Phylo,并且能够使用我自己的自定义距离矩阵使用以下代码创建一棵树:

dm = TreeConstruction._DistanceMatrix(tfs,dmat)
treeConstructor  = DistanceTreeConstructor(method = 'upgma')
upgmaTree = treeConstructor.upgma(dm)
Phylo.draw(upgmaTree)

其中 dmat 是下三角距离矩阵,tfs 是用于列/行的名称列表。在查看引导示例时,似乎所有输入都需要是原始序列数据,而不是我上面使用的距离矩阵,有人知道这个问题的解决方法吗? 谢谢!

【问题讨论】:

    标签: python biopython phylogeny


    【解决方案1】:

    简答:不,您不能使用距离矩阵来引导系统发育。

    长答案: 引导系统发育的第一步需要创建一组数据伪重复。对于 DNA 序列,核苷酸位置是从比对(整列)中随机抽取的,重复次数可达比对的总长度。

    让我们假设一个 10 bp 长的比对与两个相差两个突变的序列。为简单起见,它们的距离为 d = 0.2。

    AATTCCGGGG
    AACTCCGGAG
    

    引导此类数据集将需要位置 3、8、5、9、10、1、6、9、6、5 来表示伪重复。

    set.seed(123)
    sample(1:10, 10, replace = TRUE)
    [1]  3  8  5  9 10  1  6  9  6  5
    
    TGCGGACGCC
    CGCAGACACC
    

    我们获得了一个数据集,其变量(列)与原始对齐方式相同,但出现的频率不同。请注意,自举对齐中的 d = 0.3。

    使用这种方法,我们可以引导任何变量或包含多个变量的数据集。不能以这种方式使用距离矩阵,因为它表示已经处理过的信息。

    解决方案:

    在您自己的数据伪复制上重复计算自定义距离矩阵的过程。

    # Your function to calculate a custom distance matrix
    calc.dist <- function(dat) { ... }
    
    nrep <- 100
    reps <- lapply(1:nrep, FUN=function(i) calc.dist(dat[,sample(1:ncol(dat), ncol(dat), replace = TRUE)]))
    

    【讨论】: