sim.fbd
functionsFossilSim
can be used to simulate trees directly from a fossilized-birth death process using the sim.fbd
family of functions, whose interface is similar to the sim.bd
functions in TreeSim
. These functions return a list of SAtree
objects, since the simulated trees may contain sampled ancestors represented as tips with zero-length branches.
As in TreeSim
, trees can be simulated while conditioning either on the number of sampled extant taxa (using the sim.fbd.taxa
function), or on the total age of the process (using the sim.fbd.age
function). These functions require the fossil sampling rate parameter psi
as an argument, but otherwise take the same arguments as the sim.bd.taxa
and sim.bd.age
functions in TreeSim
.
trees <- sim.fbd.taxa(n = 10, numbsim = 10, lambda = 3, mu = 2, psi = 2)
plot(trees[[1]])
A stratigraphic range representation of the tree and fossil samples can be plotted using the rangeplot.asymmetric
function, which assumes that all speciation events are asymmetric.
rangeplot.asymmetric(trees[[1]])
Note that when simulating a complete tree (complete = TRUE
), tips in the resulting SAtree
object represent extinction events, whereas they represent fossil sampling events in the tree without unsampled lineages (complete = FALSE
). The complete
field of resulting the SAtree
object is set to the value of the complete
function argument.
trees <- sim.fbd.taxa(n = 10, numbsim = 10, lambda = 3, mu = 2, psi = 2, complete = T)
print(trees[[1]]$complete)
## [1] TRUE
rangeplot.asymmetric(trees[[1]])
Trees can also be simulated from a time-varying, piecewise constant fossilized birth-death process using the sim.fbd.rateshift.taxa
function. Apart from a vector of interval specific psi
parameters, this function also takes most of the same arguments as the corresponding sim.rateshift.taxa
function in TreeSim
. At the moment, this function assumes the sampling fraction of extant taxa (frac
) is equal to 1.0 in all time intervals.
trees = sim.fbd.rateshift.taxa(n = 10, numbsim = 1, lambda = c(2,1), mu = c(0,0.3), psi = c(1,0.1), times = c(0,0.3))
rangeplot.asymmetric(trees[[1]])