Nesta prática, você aprenderá a estimar estados (e valores) ancestrais de caracteres. Os exercícios abaixo foram baseados em exemplos disponíveis no sítio eletrônico de Liam Revell: http://www.phytools.org.
Primeiramente, limpe sua área de trabalho e gráficos.
rm(list=ls())
graphics.off()
Carregue os pacotes a serem usados (phytools e ape). Se você ainda não os tem instalados, antes de carregá-los, deve utilizar a função “install.packages”.
library(phytools)
library(ape)
Utilizaremos dados disponíveis no próprio pacote phytools, provenientes do artigo de Mahler et al. (2010): https://goo.gl/JUUHE7. O objeto “anoletree” consiste em uma filogenia de Anolis com um caráter discreto de “ecomorfos” mapeado para as espécies. Vamos preparar os dados para utilização.
Obs.: Significado das siglas dos ecomorfos: CG=crown-giant (gigante-de-copa), GB=grass-bush (grama-arbusto), TC=trunk-crown (tronco-copa), TG=trunk-ground (tronco-solo), Tr=trunk (tronco), Tw=twig (galhos) (Losos & Ricklefs 2009; https://www.nature.com/articles/nature07893).
data(anoletree)
x <- getStates(anoletree, "tips") #Separa o estado do caráter de cada espécie
x
arvore <- anoletree #Dá outro nome para a árvore filogenética
Vamos plotar os ecomorfos na árvore filogenética! Rode linha por linha para ir entendendo o que está acontecendo.
par(mar=c(0,1,0,1))
plot(as.phylo(arvore), cex=0.5)
cols <- setNames(palette()[1:length(unique(x))], sort(unique(x)))
tiplabels(pie = to.matrix(x, sort(unique(x))), piecol = cols, cex = 0.2)
Podemos utilizar a função ace do pacote ape para estimar os estados ancestrais do caráter discreto. Utilizaremos o método de máxima verossimilhança.
discML <- ace(x, arvore, type = "discrete", method = "ML")
discML
ls(discML)
discML$lik.anc
Vamos plotar os estados ancestrais do caráter nos nós da filogenia. Se você ainda está com o plot anterior aberto, não precisa rodar de novo as quatro primeiras linhas, mas somente a última (“nodelabels”).
par(mar=c(0,1,0,1))
plot(as.phylo(arvore), cex=0.5)
cols <- setNames(palette()[1:length(unique(x))], sort(unique(x)))
tiplabels(pie = to.matrix(x, sort(unique(x))), piecol = cols, cex = 0.2)
nodelabels(pie = discML$lik.anc, piecol = cols, cex = 0.4)
Agora vamos trabalhar com um caráter contínuo, comprimento do corpo dos lagartos. Vamos baixar os dados do sítio eletrônico do Phytools. Aqui está o caráter contínuo: https://goo.gl/oQDFcF. Apenas por facilidade, vamos baixar novamente a filogenia (agora apenas com os epítetos específicos das espécies de Anolis): https://goo.gl/zpVqQt. Carregue ambos.
arvore2<-read.tree("anolis.tre") #Ao salvar o arquivo newick no seu computador, remova a extensão txt. Na dúvida, use o comando dir() para ver como o nome exato da árvore ficou no seu PC.
arvore2
svl<-read.csv("svl.csv",header=TRUE,row.names=1)
svl<-setNames(svl[,1],rownames(svl))
Podemos estimar os valores ancestrais do caráter contínuo utilizando como método a máxima verossilhança e como modelo evolutivo o movimento Browniano. Para isso, utilizaremos a função ace.
ace_MLcont <- ace(svl,arvore2, type = "continuous", method="REML", model = "BM")
ls(ace_MLcont)
ace_MLcont$ace
Agora vamos mapear os valores ancestrais de comprimento de corpo estimados pela máxima verossilhança.
obj<-contMap(arvore2,svl,plot=FALSE,lims=c(3.3,5.2))
obj<-setMap(obj,invert=TRUE)
par(mar=c(0,1,0,1))
plot(obj,fsize=c(0.4,1),lwd=c(3,7),leg.txt="log(SVL)")
No entanto, para cada nó, a máxima verossilhança gera um intervalo de confiança de valores possíveis do caráter contínuo. Podemos plotar esses valores com barras de erro padronizadas pelo intervalo de confiança de 95%. O comprimento da barra de erro é relativa à largura do intervalo de confiança. Se você ainda está com o último plot aberto, é só rodar a última linha (“errorbar.contMap”)
par(mar=c(0,1,0,1))
plot(obj,fsize=c(0.4,1),lwd=c(3,7),leg.txt="log(SVL)")
errorbar.contMap(obj, lwd=6)
E será que há sinal filogenético nessa característica?
resu_lambda <- phylosig(arvore2, svl, method="lambda")
resu_lambda