Phylogenetics & Evolution

Lesson 10 of 13 · 11 min

Bootstrapping and Branch Support

Maximum likelihood hands you one tree, the single topology that fits your alignment best under the chosen model. That point estimate hides how strongly the data actually constrain each grouping, so some clades in it are rock solid while others would flip given one more column of sequence. Branch support quantifies that confidence clade by clade instead of trusting the whole tree equally.

Resampling the columns

The nonparametric bootstrap asks how stable each clade is under resampling of the data. You build new alignments the same width as the original by sampling its columns with replacement, re-infer a tree from each pseudo-replicate, and record how often each clade reappears. A clade recovered in 95 of 100 replicates gets a bootstrap value of 95.

bash
# Standard nonparametric bootstrap: accurate but slow (re-optimizes a full tree per replicate)
iqtree2 -s primates.fa -m GTR+G -b 100 -T AUTO --prefix primates_np

Ultrafast bootstrap and SH-aLRT

IQ-TREE's ultrafast bootstrap (UFBoot) approximates that resampling far more efficiently, so 1000 replicates finish in the time a handful of standard ones would take. The SH-aLRT test is a separate likelihood-ratio check on each branch rather than a resampling method. Running both with -B 1000 and -alrt 1000 gives you two independent support values to cross-check on every node.

bash
iqtree2 -s primates.fa -m MFP -B 1000 -alrt 1000 -T AUTO --seed 12345 --prefix primates_ufb
# -m MFP  : ModelFinder picks the substitution model
# -B 1000 : ultrafast bootstrap, 1000 replicates
# -alrt 1000 : SH-aLRT branch test, 1000 replicates
Generating 1000 samples for ultrafast bootstrap (seed: 12345)...
ModelFinder: best-fit model is HKY+F+G4
Performing ultrafast bootstrap approximation...

NOTE: SH-aLRT >= 80% and UFBoot >= 95% together indicate a well-supported clade.

Analysis results written to:
  IQ-TREE report:                primates_ufb.iqtree
  Maximum-likelihood tree:       primates_ufb.treefile
  Consensus tree:                primates_ufb.contree

Total wall-clock time for run: 41.8 sec
bash
cat primates_ufb.treefile
(Gibbon:0.0189,Orangutan:0.0165,(Gorilla:0.0071,(Human:0.0089,Chimp:0.0038)98.5/100:0.0021)76.2/91:0.0143);

Each internal branch label reads as SH-aLRT / UFBoot, so the human-chimp clade at 98.5/100 is strong on both scores while the deeper node at 76.2/91 fails both thresholds and should be treated as unresolved. The older standard bootstrap is conservative, so a value near 70 there can already signal a solid clade, which is why UFBoot instead uses a stricter 95 cutoff. Bayesian posterior probabilities from MrBayes or BEAST answer a different question, the probability that a clade is true given the model and priors, so their 0.95 cutoff is not interchangeable with a bootstrap percentage.

Try it yourself: Take a small gene or protein alignment (or IQ-TREE's bundled example.phy) and run iqtree2 -s your_aln.fa -m MFP -B 1000 -alrt 1000 -T AUTO --prefix run1. Open run1.treefile in FigTree or iTOL, then list every clade whose label fails either threshold (SH-aLRT < 80 or UFBoot < 95) and decide which relationships you would not yet report as resolved. As a stretch, add -bnni and compare whether any borderline UFBoot values change.