{{ :bie5782:01_curso_atual:alunos:trabalho_final:danielvdelatorre:photo_on_2011-11-04_at_16.25_2.jpg?200|}} ====== Daniel Varajão de Latorre ====== Iniciação em ecologia. Efeito da área na diversificação de grupos tropicais. ===== Exercícios ===== Link para os [[.:exec]] ===== Proposta Final ===== === Plano A === Fazer uma função que calcula as distancias dos nós até o topo de uma filogenia que inclua espécies viventes e extintas. Existente uma função chamada branching.times() do pacote "ape" que realiza essa tarefa para filogenias que contenham apenas espécies viventes. Porém essa função retorna valores que precisam ser corrigidos quando aplicada a uma filogenia que contenha espécies extintas. === Plano B === Fazer uma função que recebe como entrada os registros de quando uma espécie fóssil foi encontrada e calcular uma estimativa da diversidade "boundary-crossing". Isso é, uma taxa de diversidade que pode ser calculada para cada periodo geológico. Essa função pediria como entrada uma lista com os registros de quando cada espécie foi encontrada e retornaria um valor de diversidade para cada mudança de periodo geológico. O grau de detalhamento do periodo geológico deve ser informado na chamada da função. Dentro da função haverá uma "tabela" com os tempos geológicos. === Comentários === Olá Daniel, Se vc. já conhece o pacote APE e já domina a função branching.times() é factível modificá-la. Precisa definir bem a entrada de dados, o tipo de arquivo, se os taxa extintos entram em um objeto separado... etc. Nesse sentido, o Plano B me parece melhor estruturado e, ao menos para mim, mais interessante.... --- //[[adalardo@usp.br|Alexandre Adalardo de Oliveira]] 2012/04/03 21:25// ===== Página de Ajuda ===== branching.times.with.extinct package:unknown R Documentation Cálculo dos tempos de especiação de uma filogenia com espécies extintas Descrição: Essa função computa os tempos de especiação de uma filogenia com espécies viventes e extintas. Isso significa, a distancia entre cada nó e o tempo presente. Usage: branching.times.with.extinct(phy) Arguments: phy um objeto no formato phylo Valores: Um vetor com os valores entre cada nó e o tempo presente. Se o objeto phy possui um elemento node.label este será usado para nomear o vetor retornado. Caso contrário os nomes são tirados do elemento edge do objeto phy. Observações: A função branching.times.with.extinct é uma modificação da função branching.times do pacote ape. A seguir está o código da função original. A linha indicada por "ERRO!" corresponde ao trecho da função que foi alterado. # branching.times<-function (phy) # { # if (!inherits(phy, "phylo")) # stop("object \"phy\" is not of class \"phylo\"") # n <- length(phy$tip.label) # N <- dim(phy$edge)[1] # xx <- numeric(phy$Nnode) # interns <- which(phy$edge[, 2] > n) # for (i in interns) xx[phy$edge[i, 2] - n] <- xx[phy$edge[i,1] - n] + phy$edge.length[i] # depth <- xx[phy$edge[N, 1] - n] + phy$edge.length[N] #####ERRO! # xx <- depth - xx # names(xx) <- if (is.null(phy$node.label)) # (n + 1):(n + phy$Nnode) # else phy$node.label # xx # } A linha indicada por "ERRO!" tem como objetivo calcular o tempo total da filogenia. No entanto quando a filogenia apresenta espécies extintas esse calculo deve ser feito de outra maneira. A solução proposta na função branching.times.with.extinct leva em consideração o tempo de todos os táxons terminais em relação ao nó mais basal da árvore. O tempo usado pela nova função é o valor máximo calculado. Author(s): Emmanuel Paradis - autor da função original branching.times Daniel Varajão de Latorre - autor das modificações presentes Examples: library(ape) phy<-rlineage(1, 0.6, 2) phy par(mfrow=c(2,1)) plot(phy) axisPhylo() branc<-branching.times.with.extinct(phy) plot(phy) axisPhylo() for(i in 1:length(branc)) lines(x=c(2-branc[i], 2-branc[i]), y=c(-1000, 1000), col="red") ===== Código da Função ===== branching.times.with.extinct<-function(phy) { n <- length(phy$tip.label) N <- dim(phy$edge)[1] xx <- numeric(phy$Nnode) interns <- which(phy$edge[, 2] > n) for (i in interns) xx[phy$edge[i, 2] - n] <- xx[phy$edge[i,1] - n] + phy$edge.length[i] ##parte nova, novo algoritimo para calcular qual o tempo maximo da arvore ntip<-Ntip(phy) sum<-numeric(ntip) index<-numeric() x<-numeric() for(i in 1:ntip) { node<-i while(node!=ntip+1) { index<-which(phy$edge[,2]==node) sum[i]<-sum[i] + phy$edge.length[index] node<-phy$edge[index,1] } } depth <- max(sum) ##volta a ser usado o codigo da função original xx <- depth - xx names(xx) <- if (is.null(phy$node.label)) (n + 1):(n + phy$Nnode) else phy$node.label xx } ===== Arquivo com o Código da Função ===== {{:bie5782:01_curso_atual:alunos:trabalho_final:danielvdelatorre:branching.times.with.extinction.r|}}