Создать филогеническое дерево (файл Ньюика) из матрицы расстояний? - PullRequest
0 голосов
/ 12 февраля 2020

Я установил свои генные кластеры и уже рассчитал расстояния, необходимые для измерения их филогенетических c отношений. Я использовал алгоритм, который в основном дает меру расстояния между кластерами генов и представлен в кадре данных, таком как ( Пример ввода ):

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 но не дерево. Любые дальнейшие предложения для этого конкретного примера?

Еще раз спасибо за ваш вклад:)

1 Ответ

0 голосов
/ 13 февраля 2020

Следуя предложению в комментарии пользователя 20650 здесь , вы можете определить, как обернуть расстояния до объекта dist, используя функцию lower.tri. Однако приведенный пример не будет работать, поскольку он не обеспечивает попарные расстояния между выборками. Таким образом, решение берет ваши имена выборок, генерирует случайные данные и затем строит дерево с помощью функции nj из пакета ape.

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

enter image description here

Формат дерева 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);
...