2016-09-30 6 views
0

Я пытаюсь построить филогенетическое дерево с начальной загрузкой с использованием методологии, определенной here. Построение имени каждого человека (названное 1,2,3,4, ... для этих примеров) не является информативным, так как у меня есть ОГРОМНЫЙ набор данных. Поэтому я хочу, чтобы подсказки были окрашены, чтобы отражать вид человека. Индивидуальная информация вида хранится в отделенных матричных называются виды:Цвет кончиков филогенетического дерева по видам человека

species = data.frame(Ind=c(1 ,2 ,3 ,4 ,5), 
        Spe=c("s1","se1","se2","se2","se3")) 

Тем не менее, всякий раз, когда я пытался заменить имена лиц, с его видами в пригонках $ дерева $ этикетки, только результаты в предвосхищают вектор. Вероятно, это потому, что fit - это объект класса pml, который вызывает конфликт с моей стратегией, но я не уверен. Есть ли способ окрасить кончики дерева на основе отдельных видов? Мой код выглядит следующим образом, на данный момент:

library(phangorn) 
#Create a tree from data in fasta format 
dat = read.phyDat(file = "myalignment.fasta", format ="fasta") 
tree <- pratchet(dat)   # parsimony tree 
mt <- modelTest(dat, tree=tree, multicore=TRUE) 
mt[order(mt$AICc),] 
bestmodel <- mt$Model[which.min(mt$AICc)] 
env = attr(mt, "env") 
fitStart = eval(get("GTR+G+I", env), env) 
fit = optim.pml(fitStart, rearrangement = "stochastic", optGamma=TRUE, optInv=TRUE, model="GTR") 
bs = bootstrap.pml(fit, bs=100, optNni=TRUE, multicore=TRUE) 

#Replace the names with the species... 
fit$tree$tip.label <- species[which(species[,1] == fit$tree$tip.label),2] 
#If I print fit$tree$tip.label here, the output is factor(0) 

#...and create the tree with colored tips 
plotBS(midpoint(fit$tree), bs, p = 50, type="p", show.tip.label = FALSE) 
tiplabels(pch=19, col = as.factor(fit$tree$tip.label), adj = 2.5, cex = 2) 

непередаваем Пример

Сохранить следующий с именем «myalignment.fasta» и запустить приведенный выше код. Он должен создать пример игрушки, чтобы играть с:

>1 
AACCAGGAGAAAATTAA 
>2 
AAAAA---GAAAATTAA 
>3 
ACACAGGAGAAAATTAA 
>4 
AACCTTGAGAAAATTAT 
>5 
CCTGAGGAGAAAATTAA 
+0

Вы должны создать минимальную [воспроизводимый пример] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example). Включите образцы данных (мы не можем читать файлы на вашем локальном компьютере). Если мы можем скопировать/вставить код в R, его легче протестировать и помочь. Если вопрос о построении, удалите любой код, не относящийся к вопросу. – MrFlick

+0

Часто функция пакета включает пример кода, который использует встроенные наборы данных, чтобы продемонстрировать, как работают функции. Также 'dput()' можно использовать для воссоздания переменных в соответствии со ссылкой, которую я включил. Вы можете создать минимальные данные для использования в самом вопросе. Я предлагаю только эти вещи, если вы хотите облегчить людям помощь вам. – MrFlick

+0

@MrFlick Я создал минимальное «myalignment.fasta», которое вы можете использовать для воспроизведения кода. – j91

ответ

1

Так что, если ваша проблема список черчения точек, как цвет, а не этикетки, вы можете сделать

tiplabels(pch=19, cex=2, 
    col = species$Spe[match(fit$tree$tip.label, species$Ind)]) 

я немного gynmastics просто сделать убедитесь, что этикетки соответствуют видам (хотя в этом примере они были в том же порядке).

enter image description here