Driffield Terrace, York
2026-04-10
By the end of this session, you will:
Tip
Hands-on approach: Follow along on your computer as we work through the data from Driffield Terrace, York together
You should have downloaded the following files:
Step 1 — Draw the δ13C–δ15N bivariate plot for all sources and consumers - using RomanBaselineData.xlsx.
Step 2 — Check consumers fall within the source mixing polygon
(after applying trophic enrichment factors).
The majority of DRIF individuals fall within the TEF-shifted source mixing polygon, clustering in the region of overlap between the Domestic Mammal and Cereal end-members, consistent with a predominantly terrestrial C3 diet.
DRIF-10 falls within the Freshwater Fish hull, suggesting a markedly different dietary profile.
DRIF-23, DRIF-23 & DRIF-35 fall in areas of isotopic space not fully enclosed by the current source configuration.
There appears to be an issue with bimodality in the Freshwater Fish data
What ReSources needs for each source group.
For each source group (e.g. Cereal, Domestic Mammal, Freshwater Fish & Marine Fish) you need to calculate:
Mean δ¹³C and its standard deviation + Mean δ¹⁵N and its standard deviation
These should reflect the true biological variability of the data. The SD is the natural spread of isotope values across individuals within that source group & is always much larger than measurement error.
| Source | δ¹³C (mean) | δ¹³C (SD) | δ¹⁵N (mean) | δ¹⁵N (SD) |
|---|---|---|---|---|
| Cereal | −22.7 | 0.9 | 4.7 | 2.3 |
| Domestic Mammal | −21.7 | 0.5 | 6.3 | 1.7 |
| Freshwater Fish | −23.9 | 2.9 | 12.6 | 1.9 |
| Marine Fish | −13.4 | 1.3 | 15.0 | 1.5 |
The source_isotopic (worksheet) will automatically update with the estimated actual δ13C and δ15N of protein and energy components ingested from measure collagen using offsets detailed below.
| Food Group | Δ13Cmuscle-collagen | Δ13Clipids-collagen | Δ15Nmuscle-collagen |
|---|---|---|---|
| Cereal | −2 | +0.5 | 0 |
| Domestic Mammal | −2 | -8 | 0 |
| Freshwater Fish | −1 | -7 | +1.5 |
| Marine Fish | −1 | -7 | +1.5 |
Open RStudio and run the following in the RStudio Source panel
library("ReSources")
Run the app
Run the following in the RStudio Source panel
ReSources::startApplication()
Important
The ReSources::startApplication() function will launch a Shiny application in a separate window. ReSources is then launched in a new window or tab in your default web browser.
Navigate to: Model Options
Target table
| Proxy | d13C (mean) | d13C (error) | d15N (mean) | d15N (error) |
|---|---|---|---|---|
| DRIF-8 | -20.4 | 0.2 | 11.7 | 0.2 |
| DRIF-52 | -9.0 | 0.2 | 10.1 | 0.2 |
Tip: Copy from Excel → Click outside table → Ctrl+V
Below target data
| Offset | ||
|---|---|---|
| d13C | 4.8 | 0.5 |
| d15N | 5.5 | 0.5 |
Tip: Copy from Excel → Click outside table → Ctrl+V
Covariates are additional variables about each individual consumer that you want the model to use to help explain variation in dietary proportions across your sample. Example of Categorical covariates that divide your consumers into discrete categories might be sex, age group, burial type, archaeological phase, etc
| Proxy | Covariate_1 |
|---|---|
| DRIF-8 | Male |
| DRIF-52 | Female |
Tip: Copy from Excel → Click outside table → Ctrl+V
⚠️ Proxy names must match across all tables!
Data → Sources d13C
Proxy dropdown d13C.
| Source | protein(mean) | protein(uncert) | carbs/lipids(mean) | carbs/lipids(uncert) |
|---|---|---|---|---|
| TV | -24.7 | 1 | -22.2 | 1 |
| TP | -23.7 | 0.5 | -29.7 | 0.5 |
| FF | -24.9 | 3 | -30.9 | 3 |
| MF | -14.4 | 1.5 | -20.4 | 1.5 |
Tip: Copy from Excel → Click outside table → Ctrl+V
⚠️ Use the data from source_isotopic worksheet and not source_data
TV, TP, FF & MF can be changed to whatever you want. TV = terrestrial vegetation (Cereals); TP - terrestrial protein (domestic mammals); FF = freshwater fish; MF = marine fish
⚠️ Proxy dropdown d15N. Change from d13C
Only protein (no N in carbs/lipids):
| Source | protein(mean) | protein(uncert) |
|---|---|---|
| TV | +4.1 | ±2.5 |
| TP | +8.3 | ±2 |
| FF | +14.1 | ±2 |
| MF | +16.5 | ±1.5 |
Tip: Copy from Excel → Click outside table → Ctrl+V
Both components:
| Source | protein(mean) | protein(uncert) | carbs/lipids(mean) | carbs/lipids(uncert) |
|---|---|---|---|---|
| TV | 10 | 5 | 90 | 5 |
| TP | 30 | 5 | 70 | 5 |
| FF | 65 | 5 | 35 | 5 |
| MF | 65 | 5 | 35 | 5 |
Tip: Copy from Excel → Click outside table → Ctrl+V
Both components:
| Source | protein(mean) | protein(uncert) | carbs/lipids(mean) | carbs/lipids(uncert) |
|---|---|---|---|---|
| d13C | 74 | 0 | 26 | 0 |
| d15N | 100 | 0 | 0 | 0 |
Tip: Copy from Excel → Click outside table → Ctrl+V
Complete the following on your own once ReSources has finished running the model:
DRIF-10 has a potentially significant marine fish caloric contribution to their diet
| Estimate | mean | sd | median |
|---|---|---|---|
| TV | 83.5 | 14.9 | 87.9 |
| TP | 6.5 | 12.2 | 0.7 |
| FF | 0.8 | 2.9 | 0 |
| MF | 9.2 | 5.8 | 8.5 |
The Two-Step Solution
ReSources and OxCal handle this together — but each does a distinct job:
| Step | Tool | What it does |
|---|---|---|
| 1 | ReSources | Estimates the proportion of collagen carbon derived from marine sources for each individual, with full Bayesian uncertainty |
| 2 | OxCal | Combines the IntCal20 and Marine20 calibration curves |
Tip
We are only using marine dietary reservoir effect
You could implement for a freshwater reservoir effect or even marine/freshwater reservoir effects.
OxCal code export
Output>OxCal export
Estimate 1 = Source contributions_MF
For the Mean Detla R 1 and SD Delta R 1 you need to calculate the local correction: ΔR
The global marine reservoir correction (~400 ¹⁴C yr) is built into the Marine20 calibration curve. ΔR captures the additional local offset specific to your coastal region and time period. It must be determined separately — see the Marine Reservoir Database at calib.org/marine/
Get data from
Select all and Calculate Average of ticked boxes
Weighted mean ΔR = -140 Uncertainity ΔR = 55
Populate Mean Detla R 1 and SD Delta R 1
Click Type of estimate Mean + SD
Generate OxCal code
Mean + SD of marine fish estimate
PDF of marine fish estimate
Plot()
{
// Step 1: Declare both calibration curves
Curve("IntCal20", "IntCal20.14c");
Curve("Marine20", "Marine20.14c");
// Step 2: Define local marine reservoir offset (ΔR ± error, in 14C years)
// Obtain from calib.org/marine/ for your site location and period
Delta_R("LocalMarine", -140, 55);
// Step 3: One Mix_Curve + R_Date pair per individual
// Mix_Curve("label", "terrestrial curve", "marine curve", %marine mean, %marine SD)
Mix_Curve("Diet_DRIF-10", "IntCal20", "LocalMarine", 10, 6);
R_Date("DRIF-10_corrected", 1755, 30);
Curve("IntCal20");
R_Date("DRIF-10", 1755, 30);
};
Work through this checklist before writing any Mix_Curve code:
1 · Bivariate pre-analysis complete?
All individuals used in OxCal should fall within the TEF-shifted source mixing polygon. Outliers must be investigated.
2 · Freshwater sources resolved?
If your freshwater fish end-member is bimodal (e.g., mixing anadromous and obligate freshwater species), the marine estimate will be confounded. Split the source or resolve the issue before running ReSources.
3 · ΔR value obtained?
Use contemporaneous paired marine/terrestrial samples from the same context where possible. Document your source.
4 · Chronological model structure decided?
The Mix_Curve / R_Date pairs sit inside whatever Sequence, Phase, or Boundary structure your site archaeology demands. Plan this before writing code.
Module 6: ReSources: Full example | Driffield Terrace, York