Na semana passada, utilizamos o K de Blomberg para testar se há sinal filogenético (SF) em características contínuas. Hoje, utilizaremos a estatística D de Fritz & Purvis para testar SF em características binárias e a regressão de Mantel para testar SF em múltiplas características.
Você pode usar os seguintes comandos para limpar sua área de trabalho e seus gráficos.
rm(list=ls())
graphics.off()
Para a prática de hoje, precisaremos dos pacotes “caper”, “phytools”, “vegan” e “geiger”. Instale os pacotes com os comandos a seguir, lembrando de retirar o “#”:
#install.packages("caper")
#install.packages("phytools")
#install.packages("vegan")
#install.packages("geiger")
Lembre-se de carregar os pacotes instalados:
library(caper)
library(phytools)
library(vegan)
library(geiger)
Utilizaremos os dados de peixes Anguilliformes (enguias e moreias) obtidos no sítio eletrônico de Liam Revell. Os arquivos estão disponíveis no seguinte link: https://bit.ly/2XDBxmk.
Carregue e visualize a filogenia.
tree <- read.tree("tree_elo.txt") #ou "elopomorph.txt"
plot(tree, cex=0.4)
Carregue os dados de características, que são modo de alimentação e comprimento. Observe a estrutura dos dados, abrindo o data frame no R ou o próprio arquivo no Excel.
traits<-read.table("traits_elo.txt",header=T,row.names=1)
#View(traits)
Vamos checar se os nomes das espécies são os mesmos entre filogenia e matriz de características e estão na mesma ordem entre ambos.
summary(rownames(traits)%in%tree$tip.label) #Checa correspondência dos nomes
summary(rownames(traits)==tree$tip.label) #Checa também a ordem dos nomes
Como os dados não estão na mesma ordem, vamos colocar a ordem dos nomes das espécies na matriz de características na mesma ordem que estão na filogenia.
traits_org <- traits[tree$tip.label,] #lembre que o que está entre colchetes e vem antes da vírgula se refere a linhas do data.frame especificado
Vamos conferir se deu tudo certo.
summary(rownames(traits_org)==tree$tip.label)
A partir daqui, lembre sempre de usar o objeto “traits_org” como a matriz organizada de características.
Separe o modo de alimentação como uma variável. Observe que esta é uma variável categórica com dois estados (bite ou suction).
feed.mode<-setNames(traits_org[,1],rownames(traits_org))
#feed.mode
#str(feed.mode)
Separe a variável contínua comprimento.
length<-setNames(traits_org[,2],rownames(traits_org))
#length
#str(length)
Vamos testar se há sinal filogenético no modo de alimentação em peixes Anguilliformes. Como essa variável é categórica com apenas dois estados, podemos a transformar em binária para podermos utilizar a estatística D de sinal filogenético de Fritz & Purvis (https://bit.ly/2DxwNqS) para dados binários. Podemos transformar uma variável categórica de dois estados em duas variáveis binárias (complementares entre si) da seguinte forma.
feed_bin <- as.data.frame(with(traits_org, model.matrix(~ feed.mode + 0)), row.names = rownames(traits_org))
feed_bin_ok <- data.frame(rownames(traits_org), feed_bin)
colnames(feed_bin_ok) <- c("spp", "bite","suction")
Podemos visualizar o atributo categórico modo de alimentação na árvore filogenética.
plotTree(tree,fsize=0.7,ftype="i",lwd=1,mar=c(2,0.5,0.1,0.1)) #Você pode visualizar a filogenia como circular adicionando o argumento type="fan"
cols<-setNames(c("black","white"),levels(feed_bin_ok$bite))
tiplabels(pie=to.matrix(feed.mode[tree$tip.label], levels(feed.mode)),piecol=cols,cex=0.3)
Agora que já temos o modo de alimentação como variável binária, podemos calcular o sinal filogenético com a estatística D. Para isso, primeiro temos que organizar os dados com a função “comparative.data” do pacote “caper”. Veja o tipo de dado resultante e o explore.
angui_data <- comparative.data(tree, feed_bin_ok, spp)
#class(angui_data)
#ls(angui_data)
#Use angui_data$... para ver cada item da lista
Vamos calcular a estatística D para a variável modo de alimentação.
resu_D <- phylo.d(angui_data, binvar=bite)
print(resu_D)
plot(resu_D)
Agora, podemos testar se há sinal filogenético para várias características ao mesmo tempo. Isso seria similar a perguntarmos se há sinal filogenético na morfologia como um todo (no caso de estarmos usando várias características que descrevem bem a morfologia do organismo). Para testar o sinal filogenético multivariado, podemos utilizar a regressão de Mantel.
Para isso, devemos primeiro gerar uma matriz de dissimilaridade (ou similaridade) para características e outra para filogenia. Para filogenia, usaremos distâncias cofenéticas.
dist.phy<-cophenetic.phylo(tree)
#dist.phy[1:4,1:4]
#View(as.matrix(dist.phy))
Para características, existem várias possibilidades, dependendo da natureza dos dados (categóricos, contínuos…). Porém antes de gerarmos a matriz de dissimilaridades, devemos padronizar as características para as mesmas unidades. Usaremos a padronização vetorial para média zero e variância um.
traits_org_m<-as.matrix(data.frame(feed_bin_ok$bite,traits_org$length,row.names = rownames(traits_org))) #Primeiro organizamos a característica binária e a contínua em uma matriz única
traits_org_std<-decostand(traits_org_m, method='standardize') #Aqui padronizamos as variáveis para uma mesma escala
Agora, computamos a matriz de dissimilaridades.
dist.tr<-as.matrix(vegdist(traits_org_std, "euclidean"))
Enfim, podemos computar a regressão de Mantel, obtendo o R² e o valor de P.
resu_mantel <- multi.mantel(dist.tr, dist.phy)
#resu_mantel$r.squared
#resu_mantel$probF
Interprete também a relação entre distâncias fenotípicas e filogenéticas visualmente.
plot(dist.phy, dist.tr)
abline(resu_mantel)
Qual sua interpretação para o resultado do teste de sinal filogenético em modo de alimentação em Anguilliformes usando a estatística D?
Faça o teste de sinal filogenético usando a regressão de Mantel separadamente para o atributo comprimento (length) e para a variável binária modo de alimentação (bite ou suction). A quais valores de R² e P você chegou? Você chegou a mesma interpretação sobre o sinal filogenético no modo de alimentação através da estatística D e da regressão de Mantel? O que é similar e o que difere na interpretação?
*Lembre-se de colocar os gráficos na sua resposta, além dos valores da estatística, valor de P e a interpretação.