bm.multiphylo R Documentation Estimando o melhor modelo de evolução para caracteres morfológicos discretos, sobre múltiplas árvores filogenéticas Descrição: A função permite ao usuário escolher uma amostra de árvores filogenéticas e avaliar o ajuste dos diferentes modelos de evolução de caracteres discretos ("ER", "ARD" e "SYM") para cada uma das árvores. A função retorna um sumário (numérico e gráfico) do ajuste dos modelos, baseado no critério de informação de Akaike de preferência do usuário (AIC, AICc, AICcw). A saída da função pode ser utilizada como entrada da função `make.simmap` do pacote `phytools` para gerar simulações de evolução do caracter sobre cada uma das topologias. Dependências: A função precisa da funcão `fitDiscrete` do pacote geiger (Harmon et al. 2008). Uso: bm.multiphylo(trees, matrix, subsample = NULL, stype = NULL, delta, criterion, Barplot = FALSE) Argumentos: trees Objeto de clase multiphylo contendo múltiplas árvores filogenéticas enraizadas. matrix Objeto de clase data.frame contendo uma lista de táxons com caracteres morfológicos codificados. O vetor que contem os caracters pode ter clase character, numeric ou factor. subsample Valor numérico entre 2 e o número total de árvores que contém o objeto `trees` - 1. Define o tamanho (n) da amostra de árvores filogenéticas que serão analisadas. stype Tipo de re-amostragem das árvores, pode ser escolhidas as n primeiras ("first"), n últimas ("last") ou n árvores ao acaso ("random"). O numero de amostras é aquele designado no argumento `subsample`. criterion Critério de informação de Akaike usado para a seleção do modelo ("AIC", "AICc" ou "AICcw"). delta Valor numérico maior a 0. Estabelece a diferência máxima entre os valores do critério de seleção do melhor modelo com respeito ao segundo modelo. Barplot Valor lógico que permite criar um sumárico gráfico da frequência na que cada um dos modelos aparece como o melhor modelo para a amostra de árvores filogenéticas usando os diferentes criterios de seleção, e a frequência na que cada um dos modelos foi selecionado na amostra de árvores, usando o valor de delta e o criterio de interesse. Detalhes: A função avalia o ajuste de varios modelos de evolução de caracteres discretos sobre múltiplas árvores filogenéticas usando a função `fitDiscrete`. Os modelos usados são extenções do modelo básico MK que tem como premissa que a transformação entre estados do carácter segue um processo de Markov, o que significa que a probabilidade de transformação de um estado para outro depende só do estado atual do caracter (Harmon, 2018). As taxas de transformação entre estados do carácter podem ser de três tipos, que correspondem com os modelos que são usados para as análises de reconstrução ancestral: ER: "Equal-rates(MK)", todas as transformações ocorrem com a mesma taxa; SYM: "Symmetric", as transformações simétricas ocorrem com a mesma taxa (0-1 = 1-0 != 0-2); ARD: "All rates different", cada uma das transformações tem uma taxa diferente e por tanto seu próprio parámetro (Yang 2006; Harmon 2018). O arquivo de saída de uma análise filogenética usando MrBayes é o alvo da função, porém as árvores filogenéticas tem que ser enraizadas antes de rodar a função. O valor de delta está entre 0 e infinito, no entanto como uma regra geral para comparar valores de AIC, existem valores reportados na literatura que são sugeridos como o máximo delta para fazer a seleção dos modelos; segundo Harmon (2018) qualquer modelo com um ∆AIC menor que quatro (4) é equivalente ao modelo com o valor de AIC mais baixo, modelos com ∆AIC entre 4 e 8 têm pouco suporte nos dados, entanto qualquer modelo com um ∆AIC maior que 10 pode ser ignorado com segurança. Para o AICcw será escolhido aquele modelo com maior valor. Alencar et al. (2017) usaram um ∆AIC de 2 para a seleção dos modelos. Value: A função bm.multiphylo retorna uma lista contendo os elementos: matrix: Um data.frame contendo a lista de táxons e o caracter morfológico analisados. Este objeto é diferente ao objeto inicial caso existam táxons incompativeis na matriz e nas árvores. trees: Objeto de clase multiphylo contendo as árvores filogenéticas analisadas. Este objeto é diferente ao objeto inicial caso existam táxons incompativeis na matriz e nas árvores. fitModels: Um data.frame com os valores de Máxima Verossimilhança para o ajuste de cada um dos modelos sobre cada uma das árores filogenéticas, usando os diferentes criterios de seleção de Akaike, além dos valores de dalta entre modelos. bestModels: Um data.frame com o nome do modelo que tem menor valor de AIC e AICc, e maior valor de AICcw para cada uma das árvores filogenéticas. selectModel: A data frame com o nome do modelo selecionado usando o valor de delta (ver os detalhes), para cada uma das árvores filogenéticas. Notas: O tempo medio de execução da função com os dados de exemplo é de 7 min devido à estimação da verossimilhança feita pela função `fitDiscrete`. Para acelerar a pesquisa pode-se definir uma variável de ambiente para fazer uso do processamento paralelo. Author(s): Sandra Reinales Referências: Alencar LRV, Martins M, Burin G & Quental TB. 2017. Arboreality constrains morphological evolution but not species diversification in vipers. Proceedings of the Royal Society B: Biological Sciences 284: 20171775. Harmon LJ. 2018. Phylogenetic comparative methods: Learning from trees. Available online: https://lukejharmon.github.io/pcm/ Harmon LJ, Weir JT, Brock CD, Glor RE & Challenger W. 2008. GEIGER: investigating evolutionary radiations. Bioinformatics 24: 129-131. Yang Z. 2006. Computational Molecular Evolution. Oxford University Press: Oxford. FitzJohn RG, WP Maddison, and SP Otto. 2009. Estimating trait dependent speciation and extinction rates from incompletely resolved molecular phylogenies. Systematic Biology 58: 595-611. Exemplos: ## Carregar os pacotes library(ape) library(geiger) ## Data sets # Carrega a matriz com caracteres discretos data <- read.csv(file = "morphodata.csv", as.is = TRUE) data2 <- data[, c("sp", "petcolor")] # A função ira comparar os nomes dos táxons e elimina aqueles que são incompatíveis data3 <- data[, c("sp", "flosymmetry")] data3[data3$sp == "Sauvagesia_fruticosa", "sp"] <- "Sauvagesia_fruticulosa" # Só para exemplificar o uso da função # Carregar os dados resultantes de uma análise do MrBayes phylo <- read.nexus("multiphylo.tre") phylo3 <- root(phy = phylo, outgroup = 1, resolve.root = TRUE) # A função não roda caso o objeto trees não seja de clase multiPhylo phylo2 <- sample(x = phylo, size = 1)[[1]] # Só para exemplificar o uso da função ## Exemplos de uso da função # Diferentes casos nos quais a função não roda adequadamente bm.multiphylo(trees = phylo, matrix = data) # Opção 1, devido ao numero de colunas na `matrix` bm.multiphylo(trees = phylo2, matrix = data2) # Opção 2, devido à clase do objeto `trees` não ser multiPhylo bm.multiphylo(trees = phylo, matrix = data2) # Opção 3, devido às árvores não serem enraizadas bm.multiphylo(trees = phylo3, matrix = data2, subsample = TRUE) # Opção 4, devido ao valor errado do argumento `subsample` bm.multiphylo(trees = phylo3, matrix = data2, subsample = 3, stype = f) # Opção 5, devido ao valor errado do argumento`stype` bm.multiphylo(trees = phylo3, matrix = data2, subsample = 3, stype = "first", delta = TRUE) # Opção 6,devido ao valor errado do argumento `delta` bm.multiphylo(trees = phylo3, matrix = data2, subsample = 3) # Opção 7, devido à falta de valores nos argumentos `delta` e `criterion` # Diferentes casos nos quais a função roda adequadamente bm.multiphylo(trees = phylo3, matrix = data2, subsample = 5, stype = "last", delta = 4, criterion = "AIC") # Opção 8, rodar sem retornar gráficos bm.multiphylo(trees = phylo3, matrix = data2, subsample = 10, stype = "first", delta = 2, criterion = "AICc", Barplot = TRUE) # Opção 9, rodar retornando gráficos bm.multiphylo(trees = phylo3, matrix = data3, subsample = 12, stype = "random", delta = 2, criterion = "AIC", Barplot = TRUE) # Opção 10, deleta táxons incompatíveis entre `matrix` e `trees`