Capítulo 25 Evolução multi-taxa e multi-regime
Modelos mais complexos que permitem que os parâmetros σ2, α, e θ (taxa evolutiva, força de seleção e valor do ótimo, respectivamente) variem entre regimes evolutivos/ótimos ambientais podem ser implementados no R. É possível criar hipóteses onde os ótimos, as taxas ou os alpha variem, em qualquer combinação. No entanto, é preciso estar atento ao fato de que modelos mais complexos vão estimar muitos parâmetros e podem gerar over-fitting se o número de parâmetros for parecido com o número de observações (espécies).
Neste capítulo, vamos implementar modelos onde a variável resposta é univariada com o pacote OUwie, que tem a seguinte estrutura para os argumentos/modelos: 1. BM1 - Modelo Browniano com um único valor de taxa evolutiva (rate) para toda a árvore; 2. BMS - Modelo Browniano com diferentes taxas evolutivas de acordo com os estados na árvore; 3. OU1 - Modelo Ornstein-Uhlenbeck com um único ótimo para todas as espécies; 4. OUM - Modelo OU com diferentes ótimos de acordo com os estados, mas um único alpha e sigma2 para todos os regimes seletivos; 4.1. OUMV - Modelo OU com diferentes médias de estados (ótimos), diferentes sigma2, mesmo alpha; 4.2. OUMA - Modelo OU com diferentes médias de estados (ótimos), diferentes alpha, mesmo sigma2; 4.3. OUMVA - Modelo OU com múltiplos theta, alpha e sigma2.
O OUwie precisa de um dataframe com três colunas: nomes das espécies, o código do regime, e o atributo contínuo de interesse.
require(ape)
#> Le chargement a nécessité le package : ape
require(geiger)
#> Le chargement a nécessité le package : geiger
#> Le chargement a nécessité le package : phytools
#> Le chargement a nécessité le package : maps
require(phytools)
require(OUwie)
#> Le chargement a nécessité le package : OUwie
#> Le chargement a nécessité le package : corpcor
#> Le chargement a nécessité le package : nloptr
#> Le chargement a nécessité le package : RColorBrewer
# Carregar dados
dados<-read.table("dadospcm/sigmodontinae-atributos.txt",h=T,row.names=1)
head(dados)
diet<-as.factor(dados$Diet) # A dieta é um código (Onivoro-1; Herbivoro-2; Insetivoro-3)
names(diet)=rownames(dados)
size<-dados$Size
names(size)=rownames(dados)O OUwie requer uma filogenia onde os nós internos estejam rotulados com o regime seletivo ancestral, que foi o que fizemos na reconstrução ancestral de atributos discretos.
# Carregar filogenia
tree<-read.nexus("dadospcm/sigmodontinae-tree.tre")
plotTree(tree,fsize=0.4,ftype="i",type="fan",lwd=1)
str(tree)
# Match Species
match.species<-treedata(tree,dados)
tree<-match.species$phy
str(tree)
plotTree(tree,fsize=0.5,ftype="i",type="fan",lwd=1)
# Reconstruir evolução da dieta
diet.anc<-ace(diet,tree,type="discrete",model="ER")
diet.ancO ace retorna a probabilidade de cada estado em cada nó. Precisamos de uma árvore única com o “melhor” estado para cada nó (alternativamente, podemos usar o make.simmap como fizemos anteriormente, e ajustar um modelo para cada N histórias). Nós podemos encontrar o estado com maior probabilidade em cada nó, e atribuir esse valor aos nós de uma árvore em formato phylo.
# Primeiro, corrigimos a ordem númerica no nome dos nós para n+1
node.states<-diet.anc$lik.anc
rownames(node.states) <- seq(1:nrow(node.states)) + length(tree$tip.label)
node.states
# Extraímos o estado mais provável de cada nó
best<-apply(node.states,1,which.max)
best
# Incluimos esses valores na árvore
tree$node.label<-best
tree25.1 Ajuste de modelos evolutivos
25.1.1 Browniano com taxa única
BM1<-OUwie(tree,dados,model="BM1")
BM1Apha=NA pois este é um modelo Browniano. Mesmo valor de sigma.sq = taxa única. Optima é o valor estimado na raiz.
25.1.2 Browniano com múltiplas taxas
BMS<-OUwie(tree,dados,model="BMS")
BMSTaxa de evolução de tamanho para insetívoros é mais rápida que para outros grupos. Mas ainda não sabemos se esse é o modelo evolutivo com maior suporte.
25.1.3 OU com um único ótimo
OU1<-OUwie(tree,dados,model="OU1")
OU125.1.4 OU com múltiplos ótimos
OUM<-OUwie(tree,dados,model="OUM")
OUMTamanho ‘ótimo’ para cada dieta é estimado, porém o alpha neste caso é muito próximo de zero.