This repository includes R scripts and data for geometric morphometric analyses of morphological variation during embryonic development in Triturus newts.
We explored two phases of embryonic development separately:
- Tailbud phase: Quantified the shape of the whole embryo
- Prehatching phase: Quantified head shape
FactorsGroup1.xlsx– Classifiers for tailbud embryosFactorsGroup2.xlsx– Classifiers for prehatching embryosg1a.tps– The first replicate of landmark coordinates for tailbud embryosg1b.tps– The second replicate of landmark coordinates for tailbud embryosg2a.tps– The first replicate of landmark coordinates for prehatching embryosg2b.tps– The second replicate of landmark coordinates for prehatching embryosslajding2.xlsx– Matrix defining semilandmarks in tailbud embryosslajding.xlsx– Matrix defining semilandmarks in prehatching embryos
Install the following R libraries before running analyses:
library(RRPP)
library(geomorph)
library(xlsx)
library(ggplot2)
library(abind)
library(car)- Read TPS coordinates
- Link with metadata
- Check outliers
- Define stage factors
- For tailbud embryos:
procGPA <- gpagen(coords, curves = sliders)
- For prehatching embryos:
gpag2 <- bilat.symmetry(dfg2$shape, ind = dfg2$ind, object.sym = TRUE, land.pairs = parovi, curves = slide2)
These steps:
- Correct for size, orientation, and translation
- Slide semilandmarks to minimize bending energy
Output:
- Shape (Procrustes coordinates for tailbud stages and symmetric component for prehatching stages)
- Size (centroid size) coordinates
Gaussian Mixture Model clustering using Expectation-Maximisation:
cluster <- hddc(two.d.array(gpa$coords), model = "ALL", criterion = "bic", itermax = 10000, mc.cores = 30, scaling = TRUE)
predict(cluster) # Calculates posterior probabilities for each embryo- Visualizes group separation
- Test mean shape differences between stages with permutations:
pairwise.procD.lm(...) # 999 permutations for p-values
- Test differences in size between stages:
summary(aov(Csize ~ as.factor(stage))) TukeyHSD(aov(Csize ~ as.factor(stage))) # Multiple comparisons of means
- Test allometric effect:
procD.lm(shape ~ log(Csize)) # Produces allometric regression scores for visualization
- Compare within-group variance across development:
morphol.disparity(procD.lm object, ...) # Plotted with confidence trends through stages
If using this workflow in your publication, please cite:
Bugarcic, M., Ivanovic, A., Cvijanovic, M., Ajdukovic, M., Drobnjakovic, M., Wielstra, B., Vucic, T. (2025). Dynamics of size and shape variation during embryonic development in the Balkan crested newt (2025), Under Review
For issues within script:
Marko Bugarcic, MSc
PhD Candidate
University of Belgrade – Faculty of Biology
Email: marko.bugarcic@bio.bg.ac.rs
For data requests:
Tijana Vucic
Leiden University – Institute of Biology Leiden, University of Belgrade – Faculty of Biology
Email: tijana.vucic@bio.bg.ac.rs