30 Building a phylogenetic tree
30.1 Introduction
This activity builds intuition for phylogenetic trees using discrete
morphological characters. It corresponds to the appendix chapter
Building a phylogenetic tree in the main book and aligns with the
macroevolution “build a tree” exercise guide
(supplemental/Macroevolution_Building_A_Tree/FylTree_ENG_2015.pdf in the
main-book materials).
Students score a handful of organisms for several discrete characters, compute a pairwise difference table, and group the most similar organisms first — recovering the logic of tree-building by hand before (optionally) checking against an R clustering result.
30.2 Key Concepts
- Character table: organisms (rows) scored for discrete characters (columns), e.g. presence/absence.
- Pairwise difference (distance) table: count of characters that differ between each pair.
- Grouping rule: join the closest pair first, then add progressively deeper splits; internal nodes represent inferred most-recent common ancestors.
30.3 Learning Outcomes
By the end of this exercise, students will be able to: - Build a character table for a set of organisms. - Compute pairwise differences and translate them into a tree. - Relate a morphology-based tree to the idea of evolutionary relatedness.
30.4 Activity Overview
Suggested Timings:
- 5 minutes: Introduce characters, character tables, and the grouping idea.
- 15 minutes: Students score six organisms for seven characters and build
the pairwise difference table.
- 10 minutes: Draw the tree by grouping closest relatives first.
- 5 minutes: Optional R check with dist() + hclust(); discussion.
30.5 Instructions for Facilitating
Choose six organisms (use character cards if available, or invent six with clear, contrasting traits).
Agree on seven discrete characters that vary among them (presence/absence, colour class, tail-length category, etc.).
Fill in the character table, then compute the pairwise difference (Manhattan/Hamming) table.
Draw the tree by joining the closest pair first and working outward.
Optionally compare with R:
characters <- data.frame( row.names = c("A", "B", "C", "D", "E", "F"), trait1 = c(1, 1, 0, 0, 0, 1), trait2 = c(0, 1, 1, 0, 0, 1), trait3 = c(1, 1, 1, 0, 0, 0) ) dist_mat <- dist(characters, method = "manhattan") tree <- hclust(dist_mat, method = "average") plot(tree, main = "Tree from morphological characters")
30.6 Questions & Model Answers
- How do you decide which organisms are most closely related?
- The pair with the fewest character differences (smallest distance) is grouped first; these share the most character states and are inferred to be most closely related.
- What do the internal nodes represent?
- Inferred most-recent common ancestors of the organisms in that grouping, based on shared characters.
- Why might a morphology tree differ from a molecular tree?
- Convergent evolution and shared ancestral (rather than shared derived) characters can mislead morphology-based grouping; molecular data provide many more, more independent characters. A good prompt for discussing homoplasy.
30.7 Teaching Tips
- By hand first: build the tree manually before running
hclust()so students own the grouping logic rather than treating R as a black box. - Choose contrasting organisms: characters that clearly vary make the groupings unambiguous and the exercise faster.
- Discuss ties and conflicts: when two groupings are equally good, or characters conflict, use it to introduce homoplasy and parsimony.
30.8 Common Pitfalls
- Characters that don’t vary: a character shared by all (or by none) carries no grouping information — check for this before computing distances.
- Confusing similarity with relatedness: shared ancestral traits do not indicate close relationship; only shared derived traits do.
- Reading the dendrogram height as time: branch lengths from
hclust()reflect distance, not calibrated evolutionary time.