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]])