How small apes grow big canine teeth

Gibbons are sometimes referred to as “lesser apes” since they’re the smaller-bodied cousins of “great apes” like us humans, chimpanzees, gorillas, and orangutans. But what they lack in body mass they make up for in taxonomic diversity, with roughly 20 species distributed across four genus groups (Kim et al., 2011). And while male great apes (except humans) have large canine teeth, both sexes in gibbons have large maxillary canines — flashy weaponry for defending territory.

Pointy canine teeth peeking out from the upper and lower jaws of an adult female gibbon cared for at the International Primate Protection League (source)

My research has generally focused on brains and growth throughout human evolution, but I started looking at gibbons a few years ago when the COVID-19 pandemic put research travel on hold. Inspired by Julia Zichello’s 2018 article about gibbon models for understanding hominin evolution and appreciating that “overlooked small apes need more attention,” I had the opportunity to CT scan a unique skeletal collection of white-handed gibbons (Hylobates lar), which was sadly harvested from the forests of Thailand back in the late 1930s. Previous research on skull growth in gibbons has mostly used small samples compiled from different species (and sometimes even different genera). In contrast, this CT dataset includes many individuals at each stage of maturation from late infancy through adulthood, effectively representing a single population at a point in time. So with this larger cross-sectional sample of a single species, we can better understand how gibbon brains and faces grow. And because permanent teeth form in a long, continuous sequence throughout the growth period, an individual’s state of dental development can serve as a marker of where they are along the maturation process.

In a paper hot off the press, Julia Boughner and I analyzed dental development in this unique sample (article here). One of the coolest things we found was that gibbons’ large upper canine teeth are among the first to begin but last to finish tooth formation. In fact, the large canines growing inside relatively small faces may inhibit growth of one of the neighboring incisor teeth until the face has grown to create enough space for it. And while most teeth developing within the jaw begin emerging into the mouth once there’s enough room for them, gibbons’ gargantuan upper canines are forced out of hiding as they outgrow their bony crypts (check out the right-most jaw in the second row below).

Cross-sectional representation of tooth formation in white-handed gibbons, starting with the youngest in the top left and ending with the oldest in the bottom right. The first permanent tooth to form and emerge, M1, is highlighted along with the canine “C.”

In addition to characterizing ‘normal’ dental development, we also observed several developmental anomalies and pathologies in the sample. Our observations corroborate previous research showing that tooth formation generally proceeds ‘as scheduled’ despite various other disturbances to development.

It remains to be seen whether early development of the canine at the cost of delayed incisor formation is a pattern unique among all the apes, since most other studies of ape tooth formation have examined the lower jaw while our study focused on the upper jaws. But the canine-incisor tradeoff that we identified sets the stage for subsequent study of skull growth in this sample, as it highlights the many factors and functions that must be coordinated during growth.

While we have several projects planned with this unique dataset, we have also published the tooth formation data that we analyzed, and the original micro-CT scans themselves will be published to the online repository Morphosource.org soon, once a few more projects are finished.

Krapina endocast update (open data & code)

In the Summer of 2019 I worked with some great Vassar undergrads to make virtual endocasts and generate new brain size estimates for the Neandertals from the site of Krapina, which we then published in 2021 (discussed in this blog post). The virtual approach to endocast reconstruction uses 3D landmark-based geometric morphometrics methods, and so in the spirit of open science we also published all the landmark data used for the study (as well as a bunch of other fossil human brain size estimates) in the Zenodo repository (here).

Neandertal fossil specimens Krapina 3 (purple/green) and Krapina 6 (yellow/red) with preserved landmarks and virtually reconstructed endocasts.

Something major and global happened around that time — who can even remember what? — and so I never got around to posting R code to accompany the study. So, I’ve finally gotten around to adding some very basic code to the Zenodo entry (better late than never). The code simply reads in the landmarks, estimates missing data for fossils, and does some very basic shape analysis and visualization. It’s doesn’t get into all the nuts and bolts of our study, but it should be enough to help folks check our data or get started with shape analysis in R.

R code includes ways to visualize the landmark data. Left: Principal components analysis graph of endocast shape for humans (red) and Neandertals (blue). Right: Triangle meshes of the average human and Neandertal endocast shapes, viewed from the right, bottom, and back.

Original article
Cofran Z, Boone M, Petticord M. 2021. Virtually estimated endocranial volumes of the Krapina Neandertals. American Journal of Physical Anthropology 174: 117–128. (link)

Materials from the R workshop at #AAPA2016

For last week’s AAPA conference, my friend and colleague David Pappano organized a workshop teaching about the many uses of the R programming language for biological anthropology (I’m listed as co-organizer, but really David did everything). After introducing the basics, we broke into small groups focusing on specific aspects of using R. I devised some lessons for basic statistics, writing functions, and resampling. Since each of the lessons could have easily taken up an hour and most people didn’t get to go through the activities fully, I’m posting up the R codes here for people to mess around with.

The basic stats lesson utilized Francis Galton’s height data for hundreds of families, courtesy of Dr. Ryan Raaum. To load in these data you just need to type into R: galton = read.csv(url(“http://bit.ly/galtondata“)). The code simply shows how to do basic statistics that are built into R, such as  t-test and linear regression.

Example of some summary stats for the Galton height data.

Some summary stats for the Galton  data. The code is in blue and the output in black.

Here is the Basic Stats code, download and paste it into an R file, then buckle up!

The lesson on functions and resampling was based on limb length data for apes, fossil hominins and modern humans (from Dr. Herman Pontzer). The csv file with the data can be downloaded from David’s website. R has lots of great built-in functions (see basic stats, above), and even if you’re looking to do something more than the basics, chances are you can find what you’re looking for in one of the myriad packages that researchers have developed and published over the years. But sometimes it’s necessary to write a function on your own, and with fossil samples you may find yourself needing to do resampling with a specific function or test statistic.

For example, you can ask whether a small sample of “anatomically modern” fossil humans (n=12) truly differs in femur length from a small sample of Neandertals (n=9). Traditional statistics require certain assumptions about the size and distribution of the data, which fossils fail to meet. Another way to ask the question is, “If the two groups come from the same distribution (e.g. population), would random samples of sizes n=12 and n=9 have so great an average difference as we see between the fossil samples?” A permutation test, shuffling the group membership of the fossils and then calculating the difference between the new “group” means, allows you to quickly and easily ask this question:

R code for a simple permutation test.

R code for a simple permutation test. The built-in function “sample()” is your best friend.

Although simply viewing the data suggests the two groups are different (boxplot on the left, below), the permutation test confirms that there is a very low probability of sampling so great a difference as is seen between the two fossil samples.

Left: Femur lengths of anatomically modern humans (AMH) and Neandertals. Right: distribution of resampled group differences. Dashed lines bracket 95% of the resampled distribution, and the red line is the observed difference between AMH and Neandertal femur lengths. Only about 1% of the resampled differences are as great as the observed fossil difference.

Left: Femur lengths of anatomically modern humans (AMH) and Neandertals. Right: distribution of resampled group differences. Dashed lines bracket 95% of the resampled distribution, and the red line is the observed difference between AMH and Neandertal femur lengths. Only about 1% of the resampled differences are as great as the observed fossil difference.

Here’s the code for the functions & resampling lesson. There are a bunch of examples of different resampling tests, way more than we possibly could’ve done in the brief time for the workshop. It’s posted here so you can wade through it yourself, it should keep you busy for a while if you’re new to R. Good luck!

Friday excitement: Panoramic data inspection

I teach Tuesdays and Thursdays this year, leaving Fridays welcomely wide open for non-teaching related productivity. Today’s task is arguably the most exhilarating aspect of doing Science – inspecting raw data to make sure there are no major errors or problems in the dataset, so I can then analyze it and change the world. The excitement is truly hard to contain.

Delectable dog food is the dataset; I’m the dog.

No, it’s not the funnest, but it’s an important part of doing Science. To make your life easier, you should inspect data daily as you collect them. This way, you can identify mistakes and make notes about outliers early on, so that you are not stupefied and stalemated by what you see when you sit down to begin analysis.

You (corgi) are getting ready to analyze and you find an anomalous observation (door stop) you didn’t notice when you were collecting data.

Today I’m looking at measurements I took from ape mandibles housed in an English museum last summer; I inspected data before I left the UK for KZ, so today should be a breeze. But no matter how meticulous you are in the field/museum, you still need to inspect your data before analyzing them, just to be safe. If you’re as disorganized as I am, there will be lots of programs each with lots of windows. Here’s a tip: plug into multiple monitors (or at least one big ass monitor), so you can easily espy all open windows and programs in prodigious panorama.

Using two monitors helps when checking data for errors and patterns

Using two monitors helps when checking data for errors and patterns. On my left screen I’m using R to visualize and examine the raw data open in Excel on the right screen. If something seems off on the left screen, I can quickly consult the original spreadsheet on the right.

Barely visible in the above screenshot, these are chimpanzee (red) and gorilla (black) mandible measurements plotted against a measure of body size, preliminarily described in this post from last August. I’m looking at whether any mandibular measurements track body size across the subadult growth period, in hopes that bodily growth can be studied in fossil species samples dominated by kid jaws. As you can (barely) see, some jaw measurements correlate with body size better than others, and sometimes the apes follow similar patterns but other times they don’t.

The data look good, so now I can go on to examine relationships between mandible and body size in more detail. Stay tuned for results!