A prática de hoje é baseada em exercício do capítulo 6 do livro “Analysis of Phylogenetics and Evolution with R”, de Emmanuel Paradis (veja livro em http://goo.gl/zxsfzg).
Primeiramente, limpe sua área de trabalho e gráficos.
rm(list=ls())
graphics.off()
Precisaremos dos pacotes “ape”, “picante” e “phytools”. Caso ainda não o tenha feito, instale os pacotes com o comando a seguir, lembrando de retirar o “#”:
#install.packages("picante")
#install.packages("ape")
#install.packages("phytools")
Lembre-se de carregar os pacotes instalados:
library(picante)
library(ape)
library(phytools)
Utilizaremos os mesmos dados de primatas de Lynch (1991) da aula passada. Caso não tenha os dados da aula passada, primeiramente, baixe o arquivo contendo a filogenia dos gêneros de primatas de http://goo.gl/7zFqiQ. Salve o arquivo com a extensão “.txt” no seu diretório de trabalho. Se quiser ver o artigo de Lynch, acesse http://goo.gl/BtRX8j. Carregue a filogenia com o seguinte comando:
tree <- read.tree("primfive.txt")
Você já pode visualizar a filogenia.
plot(tree)
Agora você precisa das características, a saber, massa do corpo (Kg) e longevidade (anos), que você pode carregar conforme segue.
body <- c(60, 37, 10.7, 7.6, 0.23)
longevity <- c(115, 28, 29, 18, 10)
names(body) <- names(longevity) <- c("Homo", "Pongo", "Macaca", "Ateles", "Galago")
Com os dados de características e a filogenia em mãos, você tem tudo para um teste de sinal filogenético. Antes de mais nada, acesse a ajuda da função a ser usada.
?Kcalc
Observe o que significa cada argumento da função. Veja que há um argumento que avalia se os nomes dos taxa estão iguais e na mesma ordem. Você pode avaliar essa correspondência dos nomes manualmente também. Afinal sempre é bom ver detalhadamente o que está ocorrendo com os dados.
names(body)==tree$tip.label
names(longevity)==tree$tip.label
Se os nomes dos gêneros corresponderam entre atributos e filogenia, você pode rodar a estatística K de Blomberg como teste de sinal filogenético.
body_signal <- Kcalc(body, tree)
Será que o valor de K observado difere do Movimento Browniano? Podemos responder a essa questão utilizando um modelo nulo. Vamos gerar uma distribuição de valores de K a partir de mil simulações de evolução de uma característica por Movimento Browniano na nossa árvore filogenética.
res<-NULL
for(i in 1:1000){
trnull <- fastBM(tree)
res[i] <- Kcalc(trnull, tree)
}
res
Agora podemos comparar nosso valor observado com os valores “nulos”, gerados por evolução por Movimento Browniano. Obtemos o valor de P através da posição em que aparece no rank de valores nulos gerados. Nosso valor de K será significativo se o valor de P for maior do que 0.975 ou menor do que 0.025, já que a distribuição é bicaudal.
sum(body_signal[1]>=res)/1000
Faça o mesmo para a variável longevidade.
A que valores de K (e de P) você chegou e quais conclusões você tira quanto à presença ou ausência de sinal filogenético para cada um dos atributos testados? Explique sua interpretação.
Que processo evolutivo poderia ter levado ao padrão encontrado para cada um dos atributos?