Three progressive examples for dietary reconstruction
2026-04-11
By the end of this session, you will:
Tip
Hands-on approach: Follow along on your computer as we work through each example together
Simplest Case
Adding Realism
Gold Standard
Research Question: What proportions of Source 1 vs. Source 2 did the consumer eat?
Consumer:
Sources:
Model Settings:
Why unrealistic?
Real bone collagen always requires trophic enrichment factors. But this teaches the basics!
Since there are no offsets, components, or concentrations:
\[ \delta^{13}C_{\text{consumer}} = f_1 \cdot \delta^{13}C_{\text{Source1}} + f_2 \cdot \delta^{13}C_{\text{Source2}} \]
\[ f_1 + f_2 = 1 \]
Algebraic solution:
\[ \begin{aligned} -15 &= f_1 \cdot (-20) + (1-f_1) \cdot (-10) \\ f_1 &= 0.5 \quad (50\%)\\ f_2 &= 0.5 \quad (50\%) \end{aligned} \]
Note
Consumer sits halfway between sources → 50/50 split
Navigate to: Model options
Navigate to: Data → Target & target-to-source offsets
| Individual | d13C (mean) | d13C (SD) |
|---|---|---|
| target1 | -15.0 | 0.5 |
Tip: Copy from Excel → Click outside table → Ctrl+V
Navigate to: Data → Sources
| Source | Mean | SD |
|---|---|---|
| source1 | -20.0 | 1.0 |
| source2 | -10.0 | 1.0 |
Tip: Copy from Excel → Click outside table → Ctrl+V
Click “Run Model”
Wait for compilation + sampling
Navigate to: Output → Output Plots
Navigate to: Results Report → Summary statistics
Expected Output:
| Source | Mean | sd | Median | 95% probability |
|---|---|---|---|---|
| Source1 | 0.50 | 0.09 | 0.50 | [0.33, 0.69] |
| Source2 | 0.50 | 0.09 | 0.50 | [0.31, 0.67] |
Interpretation:
Consumer position determines proportions
If consumer is:
Remember: This simple model is a training example. Real bone collagen analysis requires offsets!
Now we add two critical features:
Consumer:
Sources:
| Source | δ¹³C | δ¹⁵N | Protein % |
|---|---|---|---|
| Source 1 | −20 ±1 | +5 ±1 | 20 ±5 |
| Source 2 | −10 ±1 | +10 ±1 | 40 ±5 |
Offsets (TEFs):
Model Settings:
Without offsets: Consumer values seem incompatible with sources
Raw sources:
Consumer: δ15N = +13 ‰
❌ Problem: +13 is above both sources!
After applying offset (+5.5 ‰):
Consumer: +13 ‰
✓ Solution: Now sits between sources
Important
Trophic enrichment is a physical phenomenon
Bone collagen is systematically enriched in heavy isotopes relative to diet. Always include TEFs!
Different foods have different protein densities:
Scenario: Eat 1 kg of each source
Protein contribution:
Tip
Key insight
Even though you ate equal masses (50/50), you consumed unequal protein (33/67)
For bone collagen (protein tissue), we care about nutrient intake, not food mass
Two isotopes now:
| Proxy | d13C (mean) | d13C (error) | d15N (mean) | d15N (error) |
|---|---|---|---|---|
| target1 | -9.0 | 0.5 | 13.0 | 0.5 |
Tip: Copy from Excel → Click outside table → Ctrl+V
Enter for each isotope separately:
d13C tab: Source1 (−20, 1), Source2 (−10, 1)
d15N tab: Source1 (+5, 1), Source2 (+10, 1)
Expected Output:
| Source | Mean | sd | Median | 95% probability |
|---|---|---|---|---|
| Source1 | 0.18 | 0.13 | 0.17 | [0.00, 0.47] |
| Source2 | 0.82 | 0.13 | 0.83 | [0.53, 0.99] |
Why Source 2 dominates:
ReSources provides different perspectives on the same data:
| Estimate type | What it shows | Example 2 values |
|---|---|---|
| Source contributions | Overall contribution to diet | S1: 18%, S2: 82% |
| Contributions by d13C | Carbon signal attribution | S1: 9%, S2: 91% |
| Contributions by d15N | Nitrogen signal attribution | S1: 18%, S2: 82% |
Note
Why do they differ?
Consumer sits at different relative positions in carbon vs. nitrogen space. Concentrations also affect how bulk food translates to nutrient contribution.
Two isotopes improve resolution — δ15N distinguishes sources with similar δ13C
Offsets are non-negotiable — Without TEFs, consumer falls outside mixing space
Concentrations adjust for protein density — 40% protein source contributes more to collagen than 20% source, even if masses equal
Multiple estimates provide different insights — “Source contributions” ≠ “Contributions by nitrogen”
Now we implement selective routing of dietary components:
Key Addition: Components
Each has different isotope values within same food source
Component Weights (Routing):
Why This Matters:
Bone collagen is synthesized from dietary protein preferentially, not bulk diet
Imagine a population eating:
Unrouted model (Example 2) predicts:
\[ \delta^{13}C_{\text{collagen}} = 0.70 \times (-12) + 0.30 \times (-21) = -14.7 \text{ ‰} \]
Routed model (Example 3) predicts:
\[ \delta^{13}C_{\text{collagen}} = 0.74 \times (-21) + 0.26 \times (-12) = -18.7 \text{ ‰} \]
Important
4 ‰ difference! Enough to completely change dietary interpretation
Sources now have component-specific isotope values:
| Source | δ¹³C (protein) | δ¹³C (carbs/lipids) | δ¹⁵N (protein) |
|---|---|---|---|
| Source 1 | −20 ± 1 | −19 ± 1 | +5 ± 1 |
| Source 2 | −10 ± 1 | −11 ± 1 | +10 ± 1 |
Concentrations by component:
| Source | Protein (%) | Carbs/Lipids (%) |
|---|---|---|
| Source 1 | 20 ± 5 | 60 ± 5 |
| Source 2 | 40 ± 5 | 40 ± 5 |
No change:
| Proxy | d13C (mean) | d13C (error) | d15N (mean) | d15N (error) |
|---|---|---|---|---|
| target1 | -9.0 | 0.5 | 13.0 | 0.5 |
Tip: Copy from Excel → Click outside table → Ctrl+V
Define routing weights:
| Proxy | Protein(mean) | Protein(uncert) | Carbs/Lipids(mean) | Carbs/Lipids(uncert) |
|---|---|---|---|---|
| d13C | 74 | 0 | 26 | 0 |
| d15N | 100 | 0 | 0 | 0 |
⚠️ Names must match across all tables!
Data → Sources
⚠️ Proxy dropdown d13C. Not available before!
d13C has columns for both components:
| Source | Protein(mean) | Protein(uncert) | Carbs/Lipids(mean) | Carbs/Lipids(uncert) |
|---|---|---|---|---|
| source1 | -20 | 1 | -19 | 1 |
| source2 | -10 | 1 | -11 | 1 |
⚠️ Proxy dropdown d15N. Change from d13C
Only protein (no N in carbs/lipids):
| Source | Protein(mean) | Protein(uncert) |
|---|---|---|
| source1 | +5 | ±1 |
| source2 | +10 | ±1 |
Source Contributions:
| Source | Mean | sd | Median | 95% probability |
|---|---|---|---|---|
| source1 | 0.08 | 0.09 | 0.05 | [0.00, 0.30] |
| source2 | 0.92 | 0.09 | 0.95 | [0.70, 0.99] |
NEW: Component Contributions
| Component | Mean | 95% probability |
|---|---|---|
| Protein | 0.48 | [0.38, 0.57] |
| CarbsLipids | 0.52 | [0.42, 0.62] |
| Estimate type | What it shows | Use it to answer: |
|---|---|---|
| Source contributions | Overall food contribution | “How much of each food did they eat?” |
| Contributions by d15N | Protein source contributions | “Where did their protein come from?” |
| Contributions by d13C | Mixed (protein + energy) | “Carbon signal attribution” |
| Component contributions | Protein vs. energy balance | “What was the protein/energy ratio?” |
Tip
Pro tip: For bone collagen, “Contributions by d15N” = protein contributions (since N is 100% protein-derived)
| Feature | Example 1 | Example 2 | Example 3 |
|---|---|---|---|
| Isotope proxies | 1 (δ13C) | 2 | 2 |
| Components | ✗ | ✗ | ✓ |
| Concentrations | ✗ | ✓ | ✓ |
| Offsets | ✗ | ✓ | ✓ |
| Setup time | 2 min | 3 min | 5 min |
| Run time | 1 min | 1–2 min | 2–3 min |
| Estimate types | 1 | 3 | 4 |
| Realism | Training | Moderate | High |
| Use for bone collagen? | ❌ Never | ⚠️ Acceptable | ✅ Always |
Routing is essential — Unrouted models misrepresent protein contributions for bone collagen
Component contributions unlock new insights — Quantify protein vs. energy balance
Nitrogen = protein — “Contributions by d15N” directly shows protein sources
More setup = more information — Component-specific data yields richer dietary reconstructions
This is the gold standard — Always use routed models (ReSources) for archaeological collagen
❌ Forgetting header row → columns misaligned
❌ Not clicking outside → paste goes nowhere
❌ Typos in names → “Proxy names do not match” error
These names MUST match exactly across tables:
Proxy names:
Component names:
Where names must match:
Warning
One typo = model won’t run
| Error message | Cause | Fix |
|---|---|---|
| “Proxy names do not match” | “d13C” spelled differently in tables | Check spelling in Target, Sources, Offsets |
| “Component names not found” | “Protein” doesn’t match “protein” | Ensure identical case/spelling |
| “Consumer outside mixing space” | Forgot offsets OR missing sources | Add TEFs or check source list |
| Nonsensical results (>100%) | Convergence failure | Increase iterations to 100,000 |
| Model won’t run | Data inconsistency | Check all table names match |
✅ Example 1: Basic mixing equation — consumer position determines proportions
✅ Example 2: Why offsets and concentrations are essential for realistic models
✅ Example 3: How routing captures protein-selective collagen synthesis
✅ Practical skills: Data entry, copy-paste workflow, troubleshooting
✅ Interpretation: Different estimate types answer different questions
✅ When to use which: Unrouted (never for collagen) vs. Routed (always for collagen)
Continue to Module 6 — A full worked ReSources examples for dietary reconstruction
Stable Isotope Mixing Models Training | Module 4