Title: | Interface to the Fish Tree of Life API |
---|---|
Description: | An interface to the Fish Tree of Life API to download taxonomies, phylogenies, fossil calibrations, and diversification rate information for ray-finned fishes. |
Authors: | Jonathan Chang [aut, cre] , Michael E Alfaro [ctb], Daniel L Rabosky [ctb], Stephen A Smith [ctb] |
Maintainer: | Jonathan Chang <[email protected]> |
License: | BSD_2_clause + file LICENSE |
Version: | 0.3.4.9000 |
Built: | 2024-11-15 05:07:45 UTC |
Source: | https://github.com/jonchang/fishtree |
Retrieves an aligned sequence via the Fish Tree of Life API. If neither 'species' nor 'rank' are specified, returns the entire sequence matrix.
fishtree_alignment(species, rank, split = FALSE)
fishtree_alignment(species, rank, split = FALSE)
species |
(Optionally) subset the results based on a vector of species names. |
rank |
(Optionally) subset the results based on the supplied taxonomic rank. |
split |
Splits the output into a list by gene locus. |
An object of class '"DNAbin"', or a named list of the same if 'split = TRUE“
Rabosky, D. L., Chang, J., Title, P. O., Cowman, P. F., Sallan, L., Friedman, M., Kashner, K., Garilao, C., Near, T. J., Coll, M., Alfaro, M. E. (2018). An inverse latitudinal gradient in speciation rate for marine fishes. Nature, 559(7714), 392–395. doi:10.1038/s41586-018-0273-1
## Not run: surgeon_dna <- fishtree_alignment(rank = "Acanthuridae", split = TRUE) surgeon_dna[[1]] par(mfrow = c(9, 3), mar = c(0.5, 0.5, 1, 0.5), xaxt = "n", yaxt = "n") for (gene in names(surgeon_dna)) { image(surgeon_dna[[gene]], legend = FALSE, show.labels = FALSE) title(gene) } ## End(Not run)
## Not run: surgeon_dna <- fishtree_alignment(rank = "Acanthuridae", split = TRUE) surgeon_dna[[1]] par(mfrow = c(9, 3), mar = c(0.5, 0.5, 1, 0.5), xaxt = "n", yaxt = "n") for (gene in names(surgeon_dna)) { image(surgeon_dna[[gene]], legend = FALSE, show.labels = FALSE) title(gene) } ## End(Not run)
Retrieves a complete phylogeny generated by stochastic polytomy resolution via the Fish Tree of Life API. If neither 'species' nor 'rank' are specified, returns the entire phylogeny. See Rabosky et al. (2018) and Chang et al. (2019) for details on how these phylogenies were built using stochastic polytomy resolution. WARNING: These phylogenies should generally not be used for downstream analyses of trait evolution. See Rabosky (2015) for details.
fishtree_complete_phylogeny( species, rank, mc.cores = getOption("mc.cores", 1L) )
fishtree_complete_phylogeny( species, rank, mc.cores = getOption("mc.cores", 1L) )
species |
(Optionally) subset the results based on a vector of species names. |
rank |
(Optionally) subset the results based on the supplied taxonomic rank. |
mc.cores |
Number of cores to use in mclapply when subsetting the tree (default '1') |
An object of class '"multiPhylo"' that should probably not be used for analyses of trait evolution, including (but not limited to) pic, ace, corBrownian, make.bisse, or hisse.
Rabosky, D. L. (2015). No substitute for real data: A cautionary note on the use of phylogenies from birth-death polytomy resolvers for downstream comparative analyses. Evolution, 69(12), 3207–3216. doi:10.1111/evo.12817
Rabosky, D. L., Chang, J., Title, P. O., Cowman, P. F., Sallan, L., Friedman, M., Kashner, K., Garilao, C., Near, T. J., Coll, M., Alfaro, M. E. (2018). An inverse latitudinal gradient in speciation rate for marine fishes. Nature, 559(7714), 392–395. doi:10.1038/s41586-018-0273-1
Chang, J., Rabosky, D. L., & Alfaro, M. E. (2019). Estimating diversification rates on incompletely-sampled phylogenies: theoretical concerns and practical solutions. Systematic Biology. doi:10.1093/sysbio/syz081
Enhanced polytomy resolution strengthens evidence for global gradient in speciation rate for marine fishes. https://fishtreeoflife.org/rabosky-et-al-2018-update/
## Not run: tree <- fishtree_complete_phylogeny(rank = "Acanthuridae") sampled_tips <- fishtree_phylogeny(rank = "Acanthuridae")$tip.label all_tips <- tree[[1]]$tip.label new_tips <- setdiff(all_tips, sampled_tips) par(mfrow = c(2,2)) for (ii in 1:4) { plot(tree[[ii]], show.tip.label = FALSE, no.margin = TRUE) ape::tiplabels(pch = 19, col = ifelse(tree[[ii]]$tip.label %in% new_tips, "red", NA)) } ## End(Not run)
## Not run: tree <- fishtree_complete_phylogeny(rank = "Acanthuridae") sampled_tips <- fishtree_phylogeny(rank = "Acanthuridae")$tip.label all_tips <- tree[[1]]$tip.label new_tips <- setdiff(all_tips, sampled_tips) par(mfrow = c(2,2)) for (ii in 1:4) { plot(tree[[ii]], show.tip.label = FALSE, no.margin = TRUE) ape::tiplabels(pch = 19, col = ifelse(tree[[ii]]$tip.label %in% new_tips, "red", NA)) } ## End(Not run)
Retrieves a phylogeny via the Fish Tree of Life API. If neither 'species' nor 'rank' are specified, returns the entire phylogeny.
fishtree_phylogeny( species, rank, type = c("chronogram", "phylogram", "chronogram_mrca", "phylogram_mrca") )
fishtree_phylogeny( species, rank, type = c("chronogram", "phylogram", "chronogram_mrca", "phylogram_mrca") )
species |
(Optionally) subset the results based on a vector of species names. |
rank |
(Optionally) subset the results based on the supplied taxonomic rank. |
type |
Either '"chronogram"' or '"phylogram"'. A chronogram has branch lengths proportional to units of time, while a phylogram has branch lengths proportional to the amount of character change. When retrieving a phylogeny by rank, and that rank is not recovered as monophyletic, acceptable types also include '"chronogram_mrca"' and '"phylogram_mrca"', which returns a tree with *all* species descending from the common ancestor of species in the specified rank. |
For maximum interoperability, 'species' considers spaces and underscores equivalently. Internally, the phylogenies use underscores.
An object of class '"phylo"'.
Rabosky, D. L., Chang, J., Title, P. O., Cowman, P. F., Sallan, L., Friedman, M., Kashner, K., Garilao, C., Near, T. J., Coll, M., Alfaro, M. E. (2018). An inverse latitudinal gradient in speciation rate for marine fishes. Nature, 559(7714), 392–395. doi:10.1038/s41586-018-0273-1
fishtree_rogues
, read.tree
, force.ultrametric
## Not run: # Get a phylogeny for a taxonomic rank surgeons <- fishtree_phylogeny(rank = "Acanthuridae") # Get a phylogeny for only certain species genomic_fish <- c("Oryzias latipes", "Tetraodon nigroviridis", "Gasterosteus aculeatus", "Danio rerio") fishtree_phylogeny(species = genomic_fish) # Chronograms may not be ultrametric due to numerical precision issues # Consider using phytools::force.ultrametric ape::is.ultrametric(surgeons) ape::is.ultrametric(surgeons, tol = 0.00001) # Difference between MRCA trees and regular trees gobies_mrca <- fishtree_phylogeny(rank = "Gobiidae", type = "chronogram_mrca") gobies <- fishtree_phylogeny(rank = "Gobiidae", type = "chronogram") # MRCA trees will have more tips for non-monophyletic groups length(gobies_mrca$tip.label) > length(gobies$tip.label) # Drop rogue tips in the MRCA tree rogue_gobies <- fishtree_rogues("Gobiidae") pruned_gobies <- ape::drop.tip(gobies_mrca, rogue_gobies) # Now the trees are identical setequal(gobies$tip.label, pruned_gobies$tip.label) ## End(Not run)
## Not run: # Get a phylogeny for a taxonomic rank surgeons <- fishtree_phylogeny(rank = "Acanthuridae") # Get a phylogeny for only certain species genomic_fish <- c("Oryzias latipes", "Tetraodon nigroviridis", "Gasterosteus aculeatus", "Danio rerio") fishtree_phylogeny(species = genomic_fish) # Chronograms may not be ultrametric due to numerical precision issues # Consider using phytools::force.ultrametric ape::is.ultrametric(surgeons) ape::is.ultrametric(surgeons, tol = 0.00001) # Difference between MRCA trees and regular trees gobies_mrca <- fishtree_phylogeny(rank = "Gobiidae", type = "chronogram_mrca") gobies <- fishtree_phylogeny(rank = "Gobiidae", type = "chronogram") # MRCA trees will have more tips for non-monophyletic groups length(gobies_mrca$tip.label) > length(gobies$tip.label) # Drop rogue tips in the MRCA tree rogue_gobies <- fishtree_rogues("Gobiidae") pruned_gobies <- ape::drop.tip(gobies_mrca, rogue_gobies) # Now the trees are identical setequal(gobies$tip.label, pruned_gobies$tip.label) ## End(Not run)
For groups that were recovered as paraphyletic in the phylogenetic analysis, uses the Fish Tree of Life API to identify which species prevented that clade from being recovered as monophyletic.
fishtree_rogues(rank)
fishtree_rogues(rank)
rank |
the (possibly paraphyletic) rank for which rogue or intruder species should be identified. |
A vector of species names, potentially empty.
Rabosky, D. L., Chang, J., Title, P. O., Cowman, P. F., Sallan, L., Friedman, M., Kashner, K., Garilao, C., Near, T. J., Coll, M., Alfaro, M. E. (2018). An inverse latitudinal gradient in speciation rate for marine fishes. Nature, 559(7714), 392–395. doi:10.1038/s41586-018-0273-1
## Not run: fishtree_rogues("Gobiidae") # several rogue taxa! fishtree_rogues("Labridae") # nice and monophlyetic ## End(Not run)
## Not run: fishtree_rogues("Gobiidae") # several rogue taxa! fishtree_rogues("Labridae") # nice and monophlyetic ## End(Not run)
Retrieves taxonomic and other information from the Fish Tree of Life API.
fishtree_taxonomy(ranks = NULL)
fishtree_taxonomy(ranks = NULL)
ranks |
One or more taxonomic ranks to retrieve. |
A list, with components containing data on the specified taxa. If 'ranks' is unspecified, a data frame with all valid taxa is returned instead.
Rabosky, D. L., Chang, J., Title, P. O., Cowman, P. F., Sallan, L., Friedman, M., Kashner, K., Garilao, C., Near, T. J., Coll, M., Alfaro, M. E. (2018). An inverse latitudinal gradient in speciation rate for marine fishes. Nature, 559(7714), 392–395. doi:10.1038/s41586-018-0273-1
## Not run: tax <- fishtree_taxonomy(rank = "Labridae") n_total <- length(tax$Labridae$species) n_sampl <- length(tax$Labridae$sampled_species) paste("There are", n_sampl, "sampled species out of", n_total, "in wrasses.") ## End(Not run)
## Not run: tax <- fishtree_taxonomy(rank = "Labridae") n_total <- length(tax$Labridae$species) n_sampl <- length(tax$Labridae$sampled_species) paste("There are", n_sampl, "sampled species out of", n_total, "in wrasses.") ## End(Not run)
Downloads tip rates for the entire Fish Tree of Life, or for a specified subset. Tip rates can be thought of as an instantaneous speciation or extinction rate; for example, a higher tip-specific speciation rate might imply that a lineage is more likely to split a new lineage at the present time. See Title (2019) in references for details. If neither 'species' nor 'rank' are specified, returns the entire set of tip-specific diversification rates.
fishtree_tip_rates(species, rank, sampled_only = TRUE)
fishtree_tip_rates(species, rank, sampled_only = TRUE)
species |
(Optionally) subset the results based on a vector of species names. |
rank |
(Optionally) subset the results based on the supplied taxonomic rank. |
sampled_only |
Restricts the returned dataset to only those species that have genetic data available. Defaults to 'TRUE'. |
A data frame. Columns ending with '.tv' indicate time-variable BAMM runs; those ending in '.tc' are time-constant runs. The 'dr' column refers to the DR statistic, while 'lambda' and 'mu' are speciation and extinction, respectively.
DR rates (supplement, section 1.2.2): Jetz, W., Thomas, G. H., Joy, J. B., Hartmann, K., & Mooers, A. O. (2012). The global diversity of birds in space and time. Nature, 491(7424), 444–448. doi:10.1038/nature11631
Interpreting tip rates: Title, P. O., & Rabosky, D. L. (2019). Tip rates, phylogenies and diversification: What are we estimating, and how good are the estimates? Methods in Ecology and Evolution, 10(6), 821–834. doi:10.1111/2041-210x.13153
BAMM rates: Rabosky, D. L. (2014). Automatic Detection of Key Innovations, Rate Shifts, and Diversity-Dependence on Phylogenetic Trees. PLoS ONE, 9(2), e89543. doi:10.1371/journal.pone.0089543
Rabosky, D. L., Chang, J., Title, P. O., Cowman, P. F., Sallan, L., Friedman, M., Kashner, K., Garilao, C., Near, T. J., Coll, M., Alfaro, M. E. (2018). An inverse latitudinal gradient in speciation rate for marine fishes. Nature, 559(7714), 392–395. doi:10.1038/s41586-018-0273-1
Enhanced polytomy resolution strengthens evidence for global gradient in speciation rate for marine fishes. https://fishtreeoflife.org/rabosky-et-al-2018-update/
## Not run: # Get cichlid rates and trees rates <- fishtree_tip_rates(rank = "Cichlidae") tree <- fishtree_phylogeny(rank = "Cichlidae") # Plot tree and extract plotting data plot(tree, show.tip.label = FALSE) obj <- get("last_plot.phylo", ape::.PlotPhyloEnv) # Generate a color ramp ramp <- grDevices::colorRamp(c("black", "red"), bias = 10) tiporder <- match(rates$species, gsub("_", " ", tree$tip.label)) scaled_rates <- rates$lambda.tv / max(rates$lambda.tv, na.rm = TRUE) tipcols <- apply(ramp(scaled_rates), 1, function(x) do.call(rgb, as.list(x / 255))) # Place colored bars for (ii in 1:length(tiporder)) { tip <- tiporder[ii] lines(x = c(obj$xx[tip] + 0.5, obj$xx[tip] + 0.5 + scaled_rates[ii]), y = rep(obj$yy[tip], 2), col = tipcols[ii]) } ## End(Not run)
## Not run: # Get cichlid rates and trees rates <- fishtree_tip_rates(rank = "Cichlidae") tree <- fishtree_phylogeny(rank = "Cichlidae") # Plot tree and extract plotting data plot(tree, show.tip.label = FALSE) obj <- get("last_plot.phylo", ape::.PlotPhyloEnv) # Generate a color ramp ramp <- grDevices::colorRamp(c("black", "red"), bias = 10) tiporder <- match(rates$species, gsub("_", " ", tree$tip.label)) scaled_rates <- rates$lambda.tv / max(rates$lambda.tv, na.rm = TRUE) tipcols <- apply(ramp(scaled_rates), 1, function(x) do.call(rgb, as.list(x / 255))) # Place colored bars for (ii in 1:length(tiporder)) { tip <- tiporder[ii] lines(x = c(obj$xx[tip] + 0.5, obj$xx[tip] + 0.5 + scaled_rates[ii]), y = rep(obj$yy[tip], 2), col = tipcols[ii]) } ## End(Not run)