Значения загрузочного дерева отличаются от PAST

Когда я вычисляю загрузочное дерево в R, я получаю значения, отличные от тех, которые используются при использовании PAST (http://folk.uio.no/ohammer/past/). Как я могу получить результат, соответствующий двум программам?

Вот что я делаю в R (данные ниже):

library("ape")
library("phytools")
library("phangorn")
library("cluster")

# compute neighbour-joined tree
f <- function(xx) nj(daisy(xx))
nj_tree <- f(tab) 
nj_tree_root <- root(nj_tree, 1, r = TRUE)

## bootstrap
# bootstrap values do not match PAST output - why is that?

nj_tree_root_boot <- boot.phylo(nj_tree, FUN = f, tab,  rooted = TRUE)

# Are bootstrap values stable?
for (i in 1:10){
  print(boot.phylo(nj_tree, FUN = f, tab,  rooted = TRUE, quiet = TRUE))
}
# yes, they seem ok

# plot tree with bootstrap values
plot(nj_tree_root, use.edge.length = FALSE)
nodelabels(nj_tree_root_boot, adj = c(1.2, 1.2), frame = "none")

Типичный вывод для бутстрапа — [1] 100 6 39 27 23 57 53 75 71, и вот график (дальнее значение LHS должно быть 100, оно каким-то образом обрезано):

введите здесь описание изображения

Я преобразовываю данные, чтобы отправить их в ПРОШЛОЕ, например:

tab1 <- t(apply(tab, 1, as.numeric))
write.table(tab1, "tab.txt")

В ПРОШЛОМ я открываю файл tab.txt, делаю многовариантный -> кластер -> присоединение к соседям с помощью Euclidian и 100 репликаций начальной загрузки, используя внешнюю группу. Из ПРОШЛОГО я получаю этот сюжет:

введите здесь описание изображения

И значения очень разные. Что мне нужно сделать с R, чтобы вывод соответствовал результату из PAST? ПРОШЛО неправильно?

Данные:

tab <- structure(list(X1 = structure(c(2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
                                1L, 2L, 2L), .Label = c("0", "1"), class = "factor"), X2 = structure(c(1L, 
                                                                                                       1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L), .Label = c("0", "1"), class = "factor"), 
               X3 = structure(c(1L, 1L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 
                                2L), .Label = c("0", "1"), class = "factor"), X4 = structure(c(2L, 
                                                                                               2L, 1L, 2L, 1L, 1L, 2L, 1L, 1L, 1L, 2L), .Label = c("0", 
                                                                                                                                                   "1"), class = "factor"), X5 = structure(c(1L, 1L, 1L, 1L, 
                                                                                                                                                                                             2L, 2L, 1L, 2L, 1L, 2L, 1L), .Label = c("0", "1"), class = "factor"), 
               X6 = structure(c(1L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 2L, 
                                2L), .Label = c("0", "1"), class = "factor"), X7 = structure(c(1L, 
                                                                                               2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L), .Label = c("0", 
                                                                                                                                                   "1"), class = "factor"), X8 = structure(c(2L, 2L, 2L, 2L, 
                                                                                                                                                                                             1L, 1L, 2L, 2L, 1L, 2L, 2L), .Label = c("0", "1"), class = "factor"), 
               X9 = structure(c(1L, 1L, 2L, 2L, 2L, 1L, 1L, 2L, 2L, 1L, 
                                1L), .Label = c("0", "1"), class = "factor"), X10 = structure(c(1L, 
                                                                                                1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 2L, 2L), .Label = c("0", 
                                                                                                                                                    "1"), class = "factor"), X11 = structure(c(1L, 2L, 1L, 1L, 
                                                                                                                                                                                               1L, 1L, 2L, 2L, 2L, 1L, 2L), .Label = c("0", "1"), class = "factor"), 
               X12 = structure(c(2L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                 1L), .Label = c("0", "1"), class = "factor"), X13 = structure(c(2L, 
                                                                                                 2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("0", 
                                                                                                                                                     "1"), class = "factor"), X14 = structure(c(2L, 2L, 1L, 1L, 
                                                                                                                                                                                                1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = c("0", "1"), class = "factor"), 
               X15 = structure(c(2L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                 2L), .Label = c("0", "1"), class = "factor"), X16 = structure(c(2L, 
                                                                                                 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L), .Label = c("0", 
                                                                                                                                                     "1"), class = "factor"), X17 = structure(c(2L, 1L, 1L, 1L, 
                                                                                                                                                                                                1L, 1L, 1L, 2L, 1L, 1L, 2L), .Label = c("0", "1"), class = "factor"), 
               X18 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 1L, 2L, 
                                 1L), .Label = c("0", "1"), class = "factor"), X19 = structure(c(1L, 
                                                                                                 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L), .Label = c("0", 
                                                                                                                                                     "1"), class = "factor"), X20 = structure(c(1L, 1L, 1L, 1L, 
                                                                                                                                                                                                1L, 1L, 1L, 1L, 1L, 2L, 2L), .Label = c("0", "1"), class = "factor"), 
               X21 = structure(c(1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L, 1L, 1L, 
                                 1L), .Label = c("0", "1"), class = "factor"), X22 = structure(c(2L, 
                                                                                                 2L, 2L, 1L, 1L, 2L, 1L, 2L, 2L, 2L, 2L), .Label = c("0", 
                                                                                                                                                     "1"), class = "factor"), X23 = structure(c(1L, 1L, 2L, 1L, 
                                                                                                                                                                                                1L, 1L, 1L, 2L, 1L, 2L, 2L), .Label = c("0", "1"), class = "factor"), 
               X24 = structure(c(1L, 1L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 2L, 
                                 2L), .Label = c("0", "1"), class = "factor"), X25 = structure(c(1L, 
                                                                                                 1L, 2L, 2L, 2L, 1L, 2L, 2L, 1L, 1L, 1L), .Label = c("0", 
                                                                                                                                                     "1"), class = "factor"), X26 = structure(c(1L, 1L, 2L, 2L, 
                                                                                                                                                                                                2L, 1L, 2L, 2L, 1L, 1L, 1L), .Label = c("0", "1"), class = "factor")), .Names = c("X1", 
                                                                                                                                                                                                                                                                                  "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10", "X11", 
                                                                                                                                                                                                                                                                                  "X12", "X13", "X14", "X15", "X16", "X17", "X18", "X19", "X20", 
                                                                                                                                                                                                                                                                                  "X21", "X22", "X23", "X24", "X25", "X26"), row.names = c("a", 
                                                                                                                                                                                                                                                                                                                                           "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"), class = "data.frame")

person Ben    schedule 17.12.2014    source источник


Ответы (1)


После долгих поисков оказалось, что ответ находится в пакете ape FAQ Q14:

Я провел анализ начальной загрузки с помощью boot.phylo, но некоторые значения начальной загрузки оказались не в том месте после укоренения дерева. Это связано с тем, что значения начальной загрузки учитываются как частоты кладов, а не как фактические двудольные разделы. Таким образом, эти значения действительно связаны с узлами, а не с ребрами. Следствием этого является то, что некоторые из значений начальной загрузки могут потерять свое значение после (повторного) укоренения дерева, поскольку это повлияет на определение кладов в дереве. Простое решение состоит в том, чтобы включить процесс рутирования в определение функции FUN, которая задается в качестве аргумента для boot.phylo. Очевидно, что предполагаемое дерево также должно быть укоренено таким же образом, прежде чем выполнять начальную загрузку. В этой ситуации удобнее определить FUN заранее. Пример кода:

outgroup <- 1 # may be several tips, numeric or tip labels
foo <- function(xx) root(nj(dist.dna(xx)), outgroup)
tr <- foo(X) # X is the matrix of DNA sequences
bp <- boot.phylo(tr, X, foo)
plot(tr)
nodelabels(bp) # will have "100" at the root

В конкретном случае моего вопроса:

nj_tree_root_boot <- boot.phylo(nj_tree, FUN = f, tab,  rooted = TRUE)
plot(nj_tree_root, use.edge.length = FALSE)
nodelabels(nj_tree_root_boot, adj = c(1.2, 1.2), frame = "none")

введите здесь описание изображения

Что очень хорошо соответствует выходу PAST.

person Ben    schedule 18.12.2014