【问题标题】:Create Phylogeny Tree (Newick File) from Distance Matrix?从距离矩阵创建系统发育树(Newick 文件)?
【发布时间】:2020-02-12 11:00:45
【问题描述】:

我已经建立了我的基因簇,并且已经计算了测量它们的系统发育关系所需的距离。我使用的算法基本上可以衡量基因簇之间的距离,并在数据框中表示,例如(Input Example):

BGC1      BGC2     Distance
------------------------------ 
BGC31     BGC34     0.6
BGC34     BGC45     0.7
BGC34     BGC53     0.2
BGC53     BGC31     0.8

x <- data.frame(BGC1 = c('BGC31','BGC34','BGC34','BGC35'), 
                BGC2 = c('BGC34','BGC45','BGC53','BGC51'), 
                distance = c(0.6,0.7,0.2,0.8))

目标:是否可以仅基于此类数据构建树?我也想为此提供一个 .newick 文件,但我不确定这是否可以使用 R。

但是,我已经能够通过 Cytoscape 从这些数据创建网络可视化,但不可能是一棵树。对这个特定示例有什么进一步的建议吗?

再次感谢您的意见:)

【问题讨论】:

  • 我的 R 很弱,但是:我不久前使用 python 的 BioPython 模块 Bio.Phylo.TreeConstructionDistanceTreeConstructorDistanceMatrix 做到了这一点。将您的距离转换为DistanceMatrix 的正确格式,将其转换为树并使用 upgma/nj 绘制树。
  • 我也可以尝试使用 python,在这种情况下我只是偏爱 R,但是当您说将距离调整为正确的格式时?这意味着什么?抱歉我对此一无所知
  • 来自biopython.org/DIST/docs/api/… :距离矩阵构造函数将名称和矩阵作为参数。这些名称只是您的基因名称的平面列表。矩阵是所有基因与所有基因的下三角格式距离矩阵。
  • @Pallie 是否可以用作此的输入,我在上面的示例中拥有的矩阵?目前我感兴趣的表由这三列组成。

标签: r cluster-analysis bioinformatics phylogeny distance-matrix


【解决方案1】:

根据 user20650 here 的评论中的建议,您可以使用 lower.tri 函数定义如何将距离包装到 dist 对象。但是,提供的示例将不起作用,因为它不提供样本之间的成对距离。因此,该解决方案采用您的样本名称,生成随机数据,然后使用 ape 包中的 nj 函数构造树。

# get all sample names
x.names = unique(c(levels(x[, 1]), levels(x[, 2])))
n = length(x.names)

# create all combinations for samples for pairwise comparisons
x2 = data.frame(t(combn(x.names, m = 2)))
# generate random distances
set.seed(4653)
x2$distance = sample(seq(from = 0.1, to = 1, by = 0.05), size = nrow(x2), replace = TRUE)

# prepare a matrix for pairwise distances
dst = matrix(NA, ncol = n, nrow = n, dimnames = list(x.names, x.names))
# fill the lower triangle with the distances obtained elsewhere
dst[lower.tri(dst)] = x2$distance

# construct a phylogenetic tree with the neighbour-joining method
library(ape)
tr = nj(dst)
plot(tr)

树的newick格式可以用ape::write.tree函数保存或打印到控制台:

cat(write.tree(tr))
# (BGC53:0.196875,BGC45:0.153125,(((BGC35:0.025,BGC51:0.275):0.1583333333,BGC31:0.2416666667):0.240625,BGC34:0.246875):0.003125);

【讨论】:

  • 感谢您的回复,您的帖子对定位很有帮助,我想我可以适应。在这种情况下,通过计算数据集中每对 BGC 之间的距离来创建距离矩阵,基本上对所有 BGC 都进行了成对距离计算。我认为我提供的例子不是一个好例子。
  • 考虑到我确实设置了成对距离计算,您认为可以使用上述相同的方法吗?
  • 取决于您在向量中如何排序比较。使用空矩阵设置,然后用您的向量填充lower.tri。检查值是否正确分配!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 1970-01-01
  • 2015-06-11
  • 2014-03-01
  • 2019-07-13
相关资源
最近更新 更多