Markku – really interesting question. Great answer, John, this code runs well. As an alternative, you can code this with Sequence + Interval, since V_Sequence + Gap locks you into normally-distributed gaps. The code below is identical for R10 and allows you change the gaps, say, to uniform distributions, for example, Interval(U(12,22)); For teeth, normal distributions are pretty reliable (I'm thinking of
Millard et al.'s 2020 application of
AlQahtani et al. 2010). But for other bones, uniform distributions may be better; depends on the bone. Can I ask what your gaps are based on for the cortical and cancellous bone? I haven't always been able to find good information for all bones, or it's a little vague because tissue starts forming at one age and then continues forming for a long time. A quick google search suggest cancellous bone (which bone is it, precisely?) forms from the embryo through age 25, so that shouldn't be put in a sequence that assumes it is after the other bones.
A good reason to try this: when I switch the normal gaps to more relaxed uniform intervals, the agreement indices go up (John also relaxed the precision of the gaps).
You don't need the First and Last queries – instead, look at the Boundary to estimate birth and death date (as in John's code).
Other suggestions you might want to try:
• use a post-bomb curve, since errors extend into this period (and why you get the 'out of range' warning). I'm guessing you want Northern Hemisphere zone 1 (roughly north of 40°N), which includes IntCal20 for pre-bomb ranges. This shouldn't affect the final results much. Curve("Bomb21NH1","bomb21nh1.14c");
• incorporate an estimated age at death (from traditional osteological methods) – this may be what most improves your final result, and should constrain the distributions nicely even if the estimate is imprecise. Again, this can be a uniform distribution if it's imprecise or not possible to provide a normally-distributed estimate (often the case, especially age estimates for middle-aged adults).
• the sequence of gaps means that if one is inaccurate or overestimates precision, the error will propagate down sequence. Instead, you could define individual intervals between Birth and each bone, which is a more reliable interval than one bone after another. And then cross-reference those into a standard Sequence – this what I would try. Just an idea.
I agree with John, some 'fake constraints' could help (especially if there is historic information that can exclude a low probability peak from about AD 1880–1920).
Hope this helps–
Erik
Boundary("Birth R10");
Interval(N(2,1));
R_Date("pars petrosa R10",239,19);
R_Date("cortical bone R10",105,19);
R_Date("cancellous bone R10",87,20);