Lesson 12 of 13 · 11 min
The Molecular Clock and Divergence Dating
From substitutions to time
The molecular clock hypothesis says that substitutions accumulate at a roughly steady rate over time, so a branch length measured in substitutions per site is simply that rate multiplied by the elapsed time. If you know the rate you can divide branch lengths by it to recover durations, and if instead you know the age of some nodes or tips you can solve for the rate. Dating is what turns an ordinary phylogram, whose branches are in substitution units, into a time-tree whose node heights are ages.
Strict versus relaxed clocks
A strict clock assumes one substitution rate across every branch, which is easy to estimate but breaks down when lineages differ in generation time, metabolism, or repair efficiency. A relaxed clock lets each branch carry its own rate, most often by drawing branch rates independently from a lognormal distribution in the uncorrelated relaxed clock. Because branch length equals rate times time, letting the rate vary is precisely what allows one observed branch length to map onto different possible durations.
On its own a clock only gives relative ages, so you need calibrations to pin down absolute time. For organisms sampled across years, such as RNA viruses, the tip sampling dates supply the calibration directly, an approach called tip dating. For deep splits you instead constrain internal nodes with fossil ages, usually written as bounded intervals in a plain date file that LSD2, the least-squares dating engine built into IQ-TREE 2, can read. Each line names the most recent common ancestor by listing its descendant taxa comma-separated with no spaces, then the constraint.
Homo_sapiens,Pan_troglodytes b(-10,-6)
Homo_sapiens,Macaca_mulatta b(-34,-24)
Homo_sapiens,Callithrix_jacchus b(-48,-38)iqtree2 -s primates.fasta -m GTR+G \
--date dates.txt --date-tip 0 --date-ci 100 \
-o Callithrix_jacchus -B 1000 -T AUTO--- START PHYLOGENETIC DATING (LSD2) ---
Reading date file dates.txt ... 3 ancestral constraints found
Tree rooted using outgroup: Callithrix_jacchus
Number of samples for CI: 100
Root age: -43.58 Myr [95% CI: -47.12 ; -39.86]
Rate: 1.18e-03 subst/site/Myr [95% CI: 1.02e-03 ; 1.37e-03]
Dated tree and summary written to:
primates.fasta.timetree.nex
primates.fasta.timetree.nwk
primates.fasta.timetree.lsd
For a fully Bayesian time-tree, BEAST2 co-estimates the topology, the relaxed clock rates, and every node age while propagating uncertainty from all of them into the result. In BEAUti you set a site model, pick the optimised or uncorrelated lognormal relaxed clock, and add each fossil as an MRCA prior with a lognormal age distribution before exporting the XML. You then run the MCMC and summarize the posterior into a single annotated tree carrying interval estimates.
beast -threads 4 -seed 12345 primates_ucln.xml
treeannotator -burnin 10 -heights median \
primates_ucln.trees primates_mcc.treeWarning: calibration uncertainty dominates divergence dates, so never report a node age as a bare point estimate. A fossil gives a minimum age rather than the true split, and a poorly chosen maximum bound silently drags every other date with it. Always report each dated node with its 95 percent confidence interval from LSD2 or its 95 percent highest-posterior-density interval from BEAST2, and test how much your dates shift when you drop or loosen a calibration.
Try it yourself: Take a small time-stamped viral alignment, for example 40 influenza HA sequences with the collection year appended to each name like isolateA_2015. Run iqtree2 -s ha.fasta -m GTR+G --date TAXNAME --date-ci 100 -B 1000 so IQ-TREE reads the sampling year straight from each tip label. Open the resulting ha.fasta.timetree.nex, read off the estimated substitution rate and root date, and report the root age together with its 95 percent confidence interval.