Use of interval() for modeling parents/children

50 views
Skip to first unread message

ronny.fr...@gmail.com

unread,
Mar 3, 2022, 7:39:40 AMMar 3
to OxCal
Dear all,
just a quick question for my understanding of the proper use of the command "interval()".

Let's presume we know of the family relationship between dated individuals.
We know who are the parents, the children and also that they have did of older age.

We sequence the children after their parents.
And we also want to add the "generational gap", i.e. the typical time between two generations. For that we would like to use the "interval()" command.

Where would we put "interval()" in the bayesian model?
Please look at the two ways below.
We would not argue what a typically value of that generational gap would be (hence the large uncertainty). This is another discussion.

But where would we place the "interval()" command?

Thanks all!!
Best
Ronny
 

// ========================================
 // ========================================
Plot("Sequence generations and Intervall outside")
 {
Sequence()
 {
  Boundary("Start ParentsA");
  Phase("ParentsA")
  {
    R_Date("Parent1A",3610,25);
    R_Date("Parent2A",3617,25);
  };
  Interval(N(25,10));
  Boundary("Transition ParentsA/ChildrenA");
  Phase("ChildrenA")
  {
    R_Date("Child1A",3581,25);
    R_Date("Child2A",3579,25);
  };
  Boundary("End ChildrenA");
Difference("DiffA", "Start ParentsA", "Transition ParentsA/ChildrenA");
 };
};
 line();

 // ========================================
 // ========================================
 Plot("Sequence generations and Intervall inside")
 {
Sequence()
 {
  Boundary("Start ParentsB");
  Phase("ParentsB")
  {
    R_Date("Parent1B",3610,25);
    R_Date("Parent2B",3617,25);
   Interval(N(25,10));
  };
  Boundary("Transition ParentsB/ChildrenB");
  Phase("ChildrenB")
  {
    R_Date("Child1B",3581,25);
    R_Date("Child2B",3579,25);
  };
  Boundary("End ChildrenB");
Difference("DiffB", "Start ParentsB", "Transition ParentsB/ChildrenB");
 };
};

Christopher Ramsey

unread,
Mar 3, 2022, 7:46:00 AMMar 3
to OxCal group
The easiest way to consider how Interval works is to consider a Date or R_Date command in its place. The Interval command will return the difference between the constraints on either side - or if you like the interval an event at this point in the model would have freedom to move.

For this reason you normally put the interval within a phase bracketed by boundaries:

Boundary("Start ParentsA");
Phase("ParentsA")
{
R_Date("Parent1A",3610,25);
R_Date("Parent2A",3617,25);
Interval(N(25,10));
};
Boundary("Transition ParentsA/ChildrenA");

Here it will give the difference between the two boundaries - and apply the prior estimate to this. The code as below will instead find the interval between the last of the two parents and the second boundary.

If you use View > Model specification you can sort this out from the variables.

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 on the web visit https://groups.google.com/d/msgid/oxcal/bef0c740-7df0-43dc-a86a-ee4097bb3847n%40googlegroups.com.

ronny.fr...@gmail.com

unread,
Mar 3, 2022, 7:56:02 AMMar 3
to OxCal
Thanks Christopher,

so the "interval()" command is the entirely wrong command for our use case then?

We want to add an additional constrain to the sequence of parents/children where
we prescribe the time that typically passes between two generations.

If I understand correctly, "interval()" is not doing that.
"Interval" FINDS the difference between dates, but we want to PRESCRIBE a time span between
the dates of the parents and their children.

Could we use gap() for that or how would be the best way of adding this to the model?

Best and thanks a lot!
Ronny


Richard Staff

unread,
Mar 3, 2022, 8:30:30 AMMar 3
to ox...@googlegroups.com
Hi Ronny,

You can include that generational constraint directly on the Difference function that you already have (rather than needing an additional Interval function), so something more like:

 Plot("Sequence generations")
 {
  Sequence()
  {
   Boundary("Start ParentsA");
   Phase("ParentsA")
   {
    R_Date("Parent1A",3610,25);
    R_Date("Parent2A",3617,25);
   };
   Boundary("Transition ParentsA/ChildrenA");
   Phase("ChildrenA")
   {
    R_Date("Child1A",3581,25);
    R_Date("Child2A",3579,25);
   };
   Boundary("End ChildrenA");
   Difference("DiffA", "Transition ParentsA/ChildrenA", "Start ParentsA", N(25,10));
  };
 };

Hope that helps!

Richard 🙂

Dr Richard Staff
Research Fellow in Quaternary Geochronology
Scottish Universities Environmental Research Centre (SUERC)
University of Glasgow
Tel.: +44 (0)1355 270198

   Researchgate Free Icon of SuperTiny  


From: ox...@googlegroups.com <ox...@googlegroups.com> on behalf of ronny.fr...@gmail.com <ronny.fr...@gmail.com>
Sent: 03 March 2022 12:56
To: OxCal <ox...@googlegroups.com>
Subject: Re: Use of interval() for modeling parents/children
 

Helene Agerskov Rose

unread,
Mar 4, 2022, 3:13:12 AMMar 4
to OxCal
Dear Ronni
It might be useful for you to have a look at this paper where they model generational gaps based on aDNA. 
Meadows J, Rinne C, Immel A, Fuchs K, Krause-Kyora B, Drummer C (2020) High-precision Bayesian chronological modeling on a calibration plateau: The Niedertiefenbach gallery grave. Radiocarbon 62 (5):1261-1284. doi:10.1017/RDC.2020.76

Examples from the model code:

   Phase("KH150620, KH150622 and KH150623 must be full siblings")

   {

    Date("=KH150620 KIA-53047");

    Date("=KH150622 KIA-53048");

    Date("=KH150623 GrM-14444");

    Span("difference between KH150620, KH150622 and KH150623", U(0,15));

   };

   Phase("4th degree between KH150630 and KH150641")

   {

    Date("=KH150630 KIA-53050");

    Date("=KH150641 KIA-52282");

    Span("difference between KH150630 and KH150641", U(0,100));

   };

All the best,
Helene

John Meadows

unread,
Mar 4, 2022, 5:16:58 AMMar 4
to ox...@googlegroups.com
the difference being that here we do not specify who is the parent and who is the child, simply that e.g. 2nd degree kinship means that the dates of birth were separated by at most 2 generations

NB 1. thanks to cross-referencing the Difference function allows one individual to be linked genetically to several others with different degrees of kinship
2. also bear in mind genetic kinship constrains differences between birth dates; hypothetically identical twins might die 100 years apart but their birth date is identical
John

Erik Marsh

unread,
Mar 4, 2022, 6:48:17 AMMar 4
to OxCal
Ronny, 
Your first model is what you're looking for. It prescribes an interval of 25±10 years between (the deaths) of the parents and the children.
"Interval" can be used two ways: if you give it an argument (25±10), as you have here, it works as a command with prior information and prescribes the known length of time between events (see code below). If you don't give it an argument, it works as a query, "Interval();", and will estimate the time passed based on the surrounding data. Span and Difference are also queries.

• I don't think you need a boundary between parents and children (I like to avoid unnecessary boundaries and phases).
• As John points out, keep in mind your dates are dating material formed a few years before death (unless they are dates on teeth). If you have estimated the age at death, you can subtract that to estimate birth age. There's an example in this paper:

Millard, A.R., Annis, R.G., Caffell, A.C., Dodd, L.L., Fischer, R., Gerrard, C.M., Graves, C.P., Hendy, J., Mackenzie, L., Montgomery, J., Nowell, G.M., Radini, A., Beaumont, J., Koon, H.E.C., Speller, C.F., 2020. Scottish soldiers from the Battle of Dunbar 1650: A prosopographical approach to a skeletal assemblage. PLOS ONE 15, e0243369. https://doi.org/10.1371/journal.pone.0243369

• The generational gap for non-industrial societies is 19.4±1.9 for the first child and 34.6±5.2 for the last child. It is shorter for mothers and longer for fathers. For these purposes, you could simplify this to a uniform interval with the means. You could add more information, for example, by specifying which date is for the mother and father and the specific intervals for each. You could venture to assume the father is older, since this is a near-universal. Fathers are on average 7.0±4.8 years older at first marriage.
All of this is from this very useful paper: 
Fenner, J.N., 2005. Cross-cultural estimation of the human generation interval for use in genetics-based population divergence studies. American Journal of Physical Anthropology 128, 415–423. https://doi.org/10.1002/ajpa.20188

Hope this helps
Erik

Sequence()
 {
  Boundary("Start ParentsA");
  Phase("ParentsA")
  {
    R_Date("Parent1A",3610,25);
    R_Date("Parent2A",3617,25);
  };
  Interval(U(19.4,34.6));

  Phase("ChildrenA")
  {
    R_Date("Child1A",3581,25);
    R_Date("Child2A",3579,25);
  };
  Boundary("End ChildrenA");
 };

ronny.fr...@gmail.com

unread,
Mar 7, 2022, 7:26:43 AMMar 7
to OxCal

Thank you all for the very helpful suggestions.
Again, the OxCal discussion group is THE place to look for answers.
Much appreciated!

Best
Ronny
Reply all
Reply to author
Forward
0 new messages