2016-07-25 46 views
0

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

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

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

回答

0

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

长答案: 引导一个phylogeny的第一步要求创建一组数据pseudoreplicates。对于DNA序列,核苷酸位置从比对(整列)中随机抽取,重复直至比对的总长度。

让我们假设一个10bp长的比对,两个序列有两个不同的突变。为了简单起见,它们的距离是d = 0.2。

AATTCCGGGG 
AACTCCGGAG 

自举这样的数据集将要求位置3,8,5,9,10,1,6,9,6,5代表pseudoreplicate。

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。

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

解决方案:

重复对自己的数据pseudoreplications计算自定义距离矩阵的过程。

# 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)]))