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)

Exercícios para serem entregues por email (até 02/5 23:59 turma manhã e 03/5 11:59 turma noite):

  1. 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?

  2. 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.