| paleobuddy | R Documentation | 
paleobuddy provides users with flexible scenarios for species 
birth-death simulations. It also provides the possibility of generating 
phylogenetic trees (with extinct and extant species) and fossil records 
(with a number of preservation scenarios) from the same underlying process.
Users have access to a large array of scenarios to use and combine for 
species birth-death simulation. The function bd.sim allows for
constant rates, rates varying as a function of time, or time and/or an 
environmental variable, as well as age-dependent rates by using a shape 
parameter from a Weibull distribution (which can itself also be 
time-dependent). Extinction and speciation rates can be supplied 
independently, so that one can combine multiple types of scenarios for birth 
and death rates. The function find.lineages separates birth-death 
simulations into monophyletic clades so one can generate fossil records and 
phylogenies (see below) for clades with a specific mother species. This is
particularly useful for simulations with multiple starting species. See 
?bd.sim and ?find.lineages for more information.
All birth-death simulation functions return a sim object, which is a 
list of vectors containing speciation times, extinction times, status
(extant or extinct) and parent identity for each species of the simulation.
We supply methods for summarizing and printing sim objects in a more
informative manner (see Visualization below). See ?sim for more 
information.
The package provides users with a similarly diverse array of scenarios for 
preservation rates in generating fossil records from birth-death 
simulations. The function sample.clade accepts constant, 
time-varying, and environmentally dependent rates. Users might also supply a
model describing the distribution of fossil occurrences over a species 
duration to simulate age-dependent sampling. See ?sample.clade for 
more information.
We believe it is imperative to be able to generate fossil records and
phylogenetic trees from the same underlying process, so the package provides
make.phylo, a function that takes a simulation object of the form 
returned by bd.sim and generates a phylo object from the APE
package. One can then use functions such as ape::plot.phylo and
ape::drop.fossil to plot the phylogeny or analyze the
phylogeny of extant species. Since APE is not required for any function in 
the package, it is a suggested but not imported package. Note that, as 
above, the function find.lineages allows users to separate clades 
with mother species of choice, the results of which can be passed to
make.phylo to generate separate phylogenies for each clade. See 
?make.phylo and ?find.lineages for more information.
Note: If a user wishes to perform the opposite operation - transform a
phylo object into a sim object, perhaps to use paleobuddy for
sampling on phylogenies generated by other packages, see 
?phylo.to.sim.
paleobuddy provides the user with a number of options for visualizing
a sim object besides phylogenies. The sim object returned by 
birth-death simulation functions (see above) has summary and plot methods. 
summary(sim) gives quantitative details of a sim objective, 
namely the total and extant number of species, and summaries of species
durations and speciation times. plot(sim) plots births, deaths, and
diversity through time for that realization. The function draw.sim
draws longevities of species in the simulation, allowing for customization
through the addition of fossil occurrences (which can be time points or
ranges), and vertical order of the drawn longevities.
The package makes use of a few helper functions for simulation and testing
that we make available for the user. rexp.var aims to emulate the
behavior of rexp, the native R function for drawing an exponentially
distributed variate, with the possibility of supplying a time-varying
rate. The function also allows for a shape parameter, in which case the 
times drawn will be distributed as a Weibull, possibly with time-varying
parameters, for age-dependent rates. var.rate.div calculates the 
expected diversity of a birth-death process with varying rates for any time 
period, which is useful when testing the birth-death simulation functions. 
Finally, binner takes a vector of fossil occurrence times and a 
vector of time boundaries and returns the number of occurrences within each
time period. This is mostly for use in the sample.clade function. See
?rexp.var, ?var.rate.div and ?binner for more 
information.
Bruno do Rosario Petrucci, Matheus Januario and Tiago B. Quental
Maintainer: Bruno do Rosario Petrucci <petrucci@iastate.edu>
Useful links:
Report bugs at https://github.com/brpetrucci/paleobuddy/issues
# here we present a quick example of paleobuddy usage
# for a more involved introduction, see the \code{overview} vignette
# make a vector for time
time <- seq(0, 10, 0.1)
# speciation rate
lambda <- function(t) {
  0.15 + 0.03*t
}
# extinction rate
mu <- 0.08
# these are pretty simple scenarios, of course
# check the examples in ?bd.sim for a more comprehensive review
# diversification
d <- function(t) {
  lambda(t) - mu
}
# calculate how many species we expect over 10 million years
div <- var.rate.div(rate = d, n0 = 1, t = time)
# note we are starting with 3 species (n0 = 3), but the user
# can provide any value - the most common scenario is n0 = 1
# plot it
plot(time, rev(div), type = 'l', main = "Expected diversity",
     xlab = "Time (My)", ylab = "Species",
     xlim = c(max(time), min(time)))
# we then expect around 9 species 
# alive by the present, seems pretty good
# set seed
set.seed(1)
# run the simulation
sim <- bd.sim(n0 = 1, lambda = lambda, mu = mu, 
              tMax = 10, nFinal = c(20, Inf))
# nFinal controls the final number of species
# here we throw away simulations with less than 20 species generated
# draw longevities
draw.sim(sim)
# from sim, we can create fossil records for each species
# rho is the fossil sampling rate, see ?sample.clade
samp <- sample.clade(sim = sim, rho = 0.75, tMax = 10,
                     bins = seq(10, 0, -1))
# note 7 out of the 31 species did not leave a fossil - we can in this way
# simulate the incompleteness of the fossil record
# we can draw fossil occurrences as well, and order by extinction time
draw.sim(sim, fossils = samp, sortBy = "TE")
# take a look at the phylogeny
if (requireNamespace("ape", quietly = TRUE)) {
  ape::plot.phylo(make.phylo(sim), root.edge = TRUE)
  ape::axisPhylo()
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.