Geometric Morphometrics
Geometric Morphometrics is the analysis of shape using Cartesian geometric coordinates rather than linear, areal, or volumetric variables. Geometric morphometric methods (GMM) include 2D and 3D points representing landmarks, curves, outlines, or surfaces. This site has learning resources for collecting, analyzing, and interpreting geometric morphometric data, including Procrustes superimposition and its statistical implications, analysis of curves and outlines, and Monte Carlo modeling of shape.
The computer code used in most of the materials on this site is in Wolfram's Mathematica language. What computing tool you use for geometric morphometrics is unimportant; what makes work repeatible is describing your algorithms clearly enough that someone can implement them in other computing languages. The materials on the site should allow you to do that.
For those who want an introduction how to do geometric morphometrics using other systems, the general workflow guides for morphometrics, statistical analysis, and collecting 2D landmarks provide basic instructions how to work using the geomorph package in R from Dean Adams' group, the PAST statistical package from Øyvind Hammer, the tps-series of programs from Jim Rohlf, or the MorphoJ package from Chris Klingenberg. All of these packages can be obtained cost-free, unlike the Mathematica base system.
For R users, the markdown tutorial written by Katrina Jones guides you through most of the analyses below using the geomorph pacakge from Dean Adams' group, and there are several original scripts in R for manipulating GMM data in the right sidebar.
Module 1 - Introduction to Geometric Morphometrics
Overview of geometric morphometric analysis, including its history.
[Slides 1 (PDF)]
Module 2 - Introduction to Mathematica
Overview of Wolfram's Mathematica
[Slides 2 (PDF)] [Exercise 2 (NB)] [Exercise 2 answered (PDF)]
Module 3 - Steps in a GMM analysis
Explanation of the basic steps or workflow used in most GMM analyses.
[Slides 3 (PDF)] [Exercise 3 (NB)] [Exercise 3 answered (PDF)]
Module 4 - First GMM analysis of faces
Debriefing Exercise 3, analysis of face photographs, and discussion of the introdutory GMM paper by Viscosi & Cardini (2011), Leaf Morphology, Taxonomy, and Geometric Morphometrics: a Simplified Protocol for Beginners. PLoS One, 6(10): e25630. [DOI link]
[Slides 4 (PDF)] [Exercise 4 (NB)] [Exercise 4 answered (PDF)]
Module 5 - Procrustes and PCA
Technical details of Procrustes superimposition, principal components analysis (PCA), eigenvectors & eigenvalues, and the concept of PCA scores as shape variabiables.
[Slides 5 (PDF)] [Exercise 5 (NB)] [Exercise 5 answered (PDF)]
Module 6 - Statistical analysis of shape
Introduction to statistical analysis of shape, including multivariate regression and multivariate analysis of variance (MANOVA)
[Slides 6 (PDF)] [Exercise 6 (NB)] [Exercise 6 answered (PDF)] [6 Supplement - Calcaneum debrief (PDF)]
Module 7 - Two-block partial least squares (2B PLS)
Discussion of two-block partial least squares (2B PLS), which is a type of multivariate multiple regression for assessing the relationship between geometric morphometric shape and multiple other variables.
[Slides 7 (PDF)] [Exercise 7 (NB)] [Exercise 7 answered (PDF)]
Module 8 - Bootstrapping and randomization tests
Introduction to the use of bootstrapping and randomization to create non-parametric statistical tests for geometric morphometric data.
Module 9 - Outlines, semilandmarks, and Euclidean Distance Matrix Analysis
Introduction to the use of outlines and semilandmark analysis for representing curves and surfaces, along with Euclidean Distance Matrix Analysis (EDMA), which is a non-supimpositional method that does not require shape registration and therefore has advantages for localizing which landmarks are the most variable.
Module 10 - Phylogenetic comparative methods and GMM
Introduction to concepts of phylogeny with regard to geometric morphometric analysis, including basic comparative phylogenetic methods.
[Slides 10 (PDF)] [Exercise 10 (NB)] [Exercise 10 answered (PDF)]
Module 11 - Shape modeling, morphospace, and theoretical considerations
Introduction to concepts of phylogeny with regard to geometric morphometric analysis, including basic comparative phylogenetic methods and evolutionary shape modeling for GMM.
Mathematica Morphometrics Package
Guides
Sample Data Files
Marmot molar outlines [tps]
Mammal tree [Newick format]
Morphometrics Resources
Online Image and Scan Data
Online Phylogenetic Data
R functions for geometric morphometric analysis
The following R functions are now superseded by packages like geomorph, but they may be useful for some. Use them by clicking on the individual links and pasting the text file into R or load them all by issuing the following R command to "source" the AllFunctions.R file:
source("https://drive.google.com/file/d/1MVs4gxqXdB5DvTW1zPn8L_I_BELWSqvv/view?usp=share_link")
collect.landmarks() A function to open jpeg files and collect landmarks. Requires the ReadImages library.
collect.landmarksScale() A function to open jpeg files and collect landmarks where each image has a scale bar. The first two points define the ends of the scale bar. Requires the ReadImages library.
collect.outlines() A function to open jpeg files and collect landmarks where the landmarks are afterwards resampled down to n equally spaced outline points. Requires the ReadImages library.
fix.landmarks() Allows errors to be corrected in data generated by collect.landmarks().
fix.outlines() Allows errors to be corrected in data generated by collect.outlines().
efourier() Function from Julien Claude's text for generating eliptical fourier coefficients from 2D points.
GPA.by.hand() Code to perform steps in generalized Procrustes analysis to see what they do.
grf2() performs a generalized resistant fit theta rho analysis
group.dists() Returns the Procrustes distances between group means given landmark coordinates of several samples. Requires shapes() library.
read.tps() Reads a simple TPS file. Note that this function only reads data that are classed as landmarks or outlines. Landmarks are returned inthe format used by Ian Dryden's shapes() package.
read.tps() If the above function doesn't work for your TPS file, try this one. This should work with 3D landmarks. Landmarks are returned inthe format used by Ian Dryden's shapes() package.
write.landmarks() Function that takes a three-dimensional array of landmarks that are in the format for the shapes() package and writes them as a comma-delimited text file.
write.tps() Writes a text file of landmark coordinates in TPS format. Data to be written should be in the format used by Ian Dryden'' shapes package.
AllFunctions.R All of the above functions and more in a single file.