Many phylogenetic inference software packages, such as BEAST2 and RevBayes, can handle trees containing fossil samples. In the zero-edge format, tip samples are represented normally in the tree, but sampled ancestors, i.e fossil samples which have sampled descendants, are represented as tips at the end of edges with length 0.
This format is included in FossilSim as the
SAtree objects.
SAtree objects can be built from a fossils
object and the associated tree. Tips (both extinct and extant) will be
labelled with the species they were sampled from followed by an index:
the oldest sample for a given species will get index 1 and all other
samples will be ordered from oldest to youngest. The SAtree
format also includes a field complete which indicates
whether the tree should be considered as including all lineages of the
process or only sampled lineages. Note that if the tree is complete, the
youngest tip of a given extinct species represents the extinction event
for this species and not a fossil sample.
t = ape::rtree(6)
f = sim.fossils.poisson(rate = 2, tree = t)
SAt = SAtree.from.fossils(tree = t, fossils = f)
print(SAt$tree)##
## Phylogenetic tree with 16 tips and 15 internal nodes.
##
## Tip labels:
## t3_1, t1_3, t4_2, t5_2, t6_2, t2_2, ...
##
## Rooted; includes branch length(s).
## sp edge hmin hmax h tip.label
## 2 2 2 1.6161177 1.6161177 1.6161177 t1_1
## 1 2 2 1.2238083 1.2238083 1.2238083 t1_2
## 3 3 3 0.5438210 0.5438210 0.5438210 t4_1
## 4 4 4 0.4799980 0.4799980 0.4799980 t5_1
## 5 5 5 0.7120160 0.7120160 0.7120160 t6_1
## 6 6 6 1.5142509 1.5142509 1.5142509 t2_1
## 7 8 8 2.5200849 2.5200849 2.5200849 t8_1
## 8 9 9 2.5720965 2.5720965 2.5720965 t9_1
## 10 10 10 1.0458976 1.0458976 1.0458976 t10_1
## 9 10 10 0.9604445 0.9604445 0.9604445 t10_2
## Fossil record with 10 occurrences representing 8 species
## Fossil record not simulated using taxonomy: all speciation events are assumed to be symmetric
## [1] TRUE
Other functions are present in FossilSim to modify
trees. prune.fossils will remove all intermediate fossil
samples and keep only the first and last occurrences of any species.
sampled.tree.from.combined removes all unsampled
lineages from the tree, and can optionally apply a sampling probability
to extant samples, or keep only a specified list of extant samples.
These two functions can be applied to any object of type
phylo, but are designed to work on trees which include
fossil samples.