Incorporating Apatite and Collagen Dates in one model

15 views
Skip to first unread message

Sarah Martini

unread,
Sep 10, 2025, 3:09:13 AMSep 10
to OxCal
Hello everyone!
I am trying to incorporate dates measured on both apatite and collagen fractions of bone into a phased model. I dated one bone using both fractions and found that the apatite fraction is 80 C14 years “younger” than the collagen fraction. Because of this, I would like to try to account for this offset within the phase model to make sure that apatite measurements aren’t pushing things earlier than they should. Is there a way to make this correction? I have tried

N(“appcorr”, -80, 20);
Shift(Shited Date, Apatite date, appcorr)

This does move the apatite dates back towards what I would expect them to be, but feels slightly arbitrary.
 
I have also thought of trying to use one of the Outlier Models to account for the offset but then was unsure of how I could incorporate the information that I have about what the offset might be.

Thanks!
Sarah

Christopher Ramsey

unread,
Sep 10, 2025, 4:58:33 AMSep 10
to OxCal group
The offset is likely to be in radiocarbon rather than age - so you could use Delta_R:

Plot()
{
R_Date("Normal",3000,30);
Delta_R("Apatite",-80,40);
R_Date("Offset",3000,30);
};

Though - whether a Normal distribution is what you want here, I'm not sure.

Best wishes

Christopher
> --
> You received this message because you are subscribed to the Google Groups "OxCal" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to oxcal+un...@googlegroups.com.
> To view this discussion visit https://groups.google.com/d/msgid/oxcal/b6ce176a-9466-4b4d-a1fc-c3fce050d368n%40googlegroups.com.

MILLARD, ANDREW R.

unread,
Sep 10, 2025, 6:58:28 AMSep 10
to ox...@googlegroups.com
Hello Sarah,

Generally apatite dates have been found not to be reliable for dating, because carbonate in apatite is subject to exchange with the environment which may differ between bones even in one skeleton or context.

If you believe the offset is consistent in radiocarbon content, and you have some paired collagen-apatite dates (from which the offset can be estimated) and others unpaired, then include the paired dates like this to estimate Delta_R simultaneously with the modelling:

Put this at the start of the model
Curve("IntCal20","intcal20.14c");
Delta_R("=Delta R apatite",N(0,300));

Include paired dates as
Combine("Pair1"){
Curve("IntCal20");
R_Date("Pair1 collagen",3000,30);
Delta_R("=Delta R apatite");
R_Date("Pair1 apatite",2920,30);
};

And unpaired dates as
Curve("IntCal20");
R_Date("1 collagen unpaired",3200,30);
R_Date("2 collagen unpaired",3100,30);
Delta_R("=Delta R apatite");
R_Date("3 apatite unpaired",2900,30);
R_Date("4 apatite unpaired",2800,30);

You need to ensure that the Curve is reset every time the model switches from apatite to collagen dates, and Delta_R is invoked every time the model switches from collagen to apatite, but if similar types of sample follow one another in the code you don't need to use Curve and Delta_R for each of them.

Alternatively, if you think they are offset consistently in time rather than radiocarbon content you could apply a charcoal outlier model to the apatite dates and let the program estimate the distribution of the offsets that way.

Best wishes
Andrew
--
Prof. Andrew Millard
Department of Archaeology,
Durham University, UK
Email: A.R.M...@durham.ac.uk
Personal page: https://www.durham.ac.uk/staff/a-r-millard/
Dunbar 1650 MOOC: https://www.futurelearn.com/courses/battle-of-dunbar-1650



-----Original Message-----
From: 'Christopher Ramsey' via OxCal <ox...@googlegroups.com>
Sent: 10 September 2025 09:58
To: OxCal group <ox...@googlegroups.com>
Subject: Re: Incorporating Apatite and Collagen Dates in one model

[EXTERNAL EMAIL]
To view this discussion visit https://groups.google.com/d/msgid/oxcal/9FA38319-7198-47EB-AB43-CE66C95A22DA%40arch.ox.ac.uk.

Sarah Martini

unread,
Sep 10, 2025, 8:58:47 AMSep 10
to OxCal
Dear Christopher and Andrew,
Thank you for these suggestions to use Delta_R. I have two follow up questions.

One is about the syntax for calling up the Delta_R. I tried to implement Andrew's suggestions using this code:
 Plot()
 {
  Curve("SHCal20","shcal20.14c");
  Delta_R("Delta R apatite", N(0,300));
  Combine("PairAC")
  {
   Curve("SHCal20");
   R_DATE("H03008c",1480,20);
   Delta_R("Delta R apatite");
   R_DATE("H03008a",1400,20);
  };
  Curve("SHCal20");
  Delta_R("Delta R apatite");
  R_DATE("H03007",1420,20);
  R_DATE("HH06007",1670,20);
 };

The resulting error messages and lack of difference between the modelled and unmodelled dates (at least for the last two) tells me I'm doing something wrong. Any ideas where I went wrong?
deltaRissues.png

The other is about the correct model/estimation to use for Delta_R. If I understand correctly, Andrew suggested that Delta_R could be estimated by inputting a normal distribution centered on 0 with 300 c14 yr variance. This seems very high for what I am working with. Is there an output of the model that I should actually be able to re-input into a new model?  Or would it be possible (at least not wrong) to use a different distribution such as N(-80, 100). 

Thanks for all of the help and explanations!
Sarah 

MILLARD, ANDREW R.

unread,
Sep 10, 2025, 9:47:37 AMSep 10
to ox...@googlegroups.com

Hello Sarah,

 

That was an error in my writing out the model. After the first declaration of SHCal and ‘Delta R apatite’ you need to put = in front like this

 

Plot()

{

  Curve("SHCal20","shcal20.14c");

  Delta_R("Delta R apatite", N(0,300));

  Combine("PairAC")

  {

   Curve("=SHCal20");

   R_DATE("H03008c",1480,20);

   Delta_R("=Delta R apatite");

   R_DATE("H03008a",1400,20);

  };

  Curve("=SHCal20");

  Delta_R("=Delta R apatite");

  R_DATE("H03007",1420,20);

  R_DATE("HH06007",1670,20);

};

 

 

Best wishes 

Andrew 

-- 

Prof. Andrew Millard 

Department of Archaeology,

Durham University, UK 

Email: A.R.M...@durham.ac.uk  

Personal page: https://www.durham.ac.uk/staff/a-r-millard/ 

Dunbar 1650 MOOC: https://www.futurelearn.com/courses/battle-of-dunbar-1650 

 

Image

 

From: ox...@googlegroups.com <ox...@googlegroups.com> On Behalf Of Sarah Martini
Sent: 10 September 2025 13:59
To: OxCal <ox...@googlegroups.com>
Subject: Re: Incorporating Apatite and Collagen Dates in one model

 

You don't often get email from sjmar...@gmail.com. Learn why this is important

[EXTERNAL EMAIL]

Dear Christopher and Andrew,

Thank you for these suggestions to use Delta_R. I have two follow up questions.

 

One is about the syntax for calling up the Delta_R. I tried to implement Andrew's suggestions using this code:

 Plot()
 {
  Curve("SHCal20","shcal20.14c");
  Delta_R("Delta R apatite", N(0,300));
  Combine("PairAC")
  {
   Curve("SHCal20");
   R_DATE("H03008c",1480,20);
   Delta_R("Delta R apatite");
   R_DATE("H03008a",1400,20);
  };
  Curve("SHCal20");
  Delta_R("Delta R apatite");
  R_DATE("H03007",1420,20);
  R_DATE("HH06007",1670,20);
 };

 

The resulting error messages and lack of difference between the modelled and unmodelled dates (at least for the last two) tells me I'm doing something wrong. Any ideas where I went wrong?

Sarah Martini

unread,
Sep 10, 2025, 11:35:59 AMSep 10
to OxCal
Very cool, that works. Thank you so much!

One last follow-up so that I can make sure I'm understanding what this does. 

I noticed now the change in the Delta_R from what I input versus the modelled output in the table: from a normal distribution (0,300) to a range between -162 and -36 (with a median at -96). Does that mean that it is this narrower, modelled Delta_R that is what is applied to the modelled apatite dates?

I really appreciate all of your help!
Sarah

MILLARD, ANDREW R.

unread,
Sep 10, 2025, 12:21:29 PMSep 10
to ox...@googlegroups.com

The Normal(0,300)  is the prior allowing that we have a vague idea before we make measurements about what the Delta_R will be. The posterior with median -96 and 95% probability range -165 to -33 is the updated value after seeing the data for the paired sample and is applied to all the apatite samples.

[EXTERNAL EMAIL]

Christopher Ramsey

unread,
Sep 10, 2025, 12:59:05 PMSep 10
to OxCal group
Dear both

The only caveat with this is that it assumes the offset is the same for the different samples. If you don't want this you would need a different Delta_R for each bone.

Best wishes

Christopher

> On 10 Sep 2025, at 17:21, MILLARD, ANDREW R. <a.r.m...@durham.ac.uk> wrote:
>
> The Normal(0,300) is the prior allowing that we have a vague idea before we make measurements about what the Delta_R will be. The posterior with median -96 and 95% probability range -165 to -33 is the updated value after seeing the data for the paired sample and is applied to all the apatite samples.
> Best wishes
> Andrew
> --
> Prof. Andrew Millard
> Department of Archaeology,
> Durham University, UK
> Email: A.R.M...@durham.ac.uk Personal page: https://www.durham.ac.uk/staff/a-r-millard/ Dunbar 1650 MOOC: https://www.futurelearn.com/courses/battle-of-dunbar-1650 <image001.png> From: ox...@googlegroups.com <ox...@googlegroups.com> On Behalf Of Sarah Martini
> Email: A.R.M...@durham.ac.uk Personal page: https://www.durham.ac.uk/staff/a-r-millard/ Dunbar 1650 MOOC: https://www.futurelearn.com/courses/battle-of-dunbar-1650 From: ox...@googlegroups.com <ox...@googlegroups.com> On Behalf Of Sarah Martini
> Sent: 10 September 2025 13:59
> To: OxCal <ox...@googlegroups.com>
> Subject: Re: Incorporating Apatite and Collagen Dates in one model
> You don't often get email from sjmar...@gmail.com. Learn why this is important
> [EXTERNAL EMAIL]
> Dear Christopher and Andrew,
> Thank you for these suggestions to use Delta_R. I have two follow up questions.
> One is about the syntax for calling up the Delta_R. I tried to implement Andrew's suggestions using this code:
> Plot()
> {
> Curve("SHCal20","shcal20.14c");
> Delta_R("Delta R apatite", N(0,300));
> Combine("PairAC")
> {
> Curve("SHCal20");
> R_DATE("H03008c",1480,20);
> Delta_R("Delta R apatite");
> R_DATE("H03008a",1400,20);
> };
> Curve("SHCal20");
> Delta_R("Delta R apatite");
> R_DATE("H03007",1420,20);
> R_DATE("HH06007",1670,20);
> };
> The resulting error messages and lack of difference between the modelled and unmodelled dates (at least for the last two) tells me I'm doing something wrong. Any ideas where I went wrong? The other is about the correct model/estimation to use for Delta_R. If I understand correctly, Andrew suggested that Delta_R could be estimated by inputting a normal distribution centered on 0 with 300 c14 yr variance. This seems very high for what I am working with. Is there an output of the model that I should actually be able to re-input into a new model? Or would it be possible (at least not wrong) to use a different distribution such as N(-80, 100).
> To view this discussion visit https://groups.google.com/d/msgid/oxcal/LO4P265MB4226CF12936A772BE2282F19810EA%40LO4P265MB4226.GBRP265.PROD.OUTLOOK.COM.


Reply all
Reply to author
Forward
0 new messages