Eruption-age likelihoods from single-zircon U-Pb dates (for astroMCBchron)
Source:R/upb_grain_loglik.R
upb_grain_loglik.Rdupb_grain_loglik() turns single-zircon dates of one or more ash beds into one
eruption-age log-likelihood function per bed, for the date_loglik argument of
astroMCBchron. Instead of a weighted mean, every grain is modelled as a
draw from a mixture of
a crystallisation interval: the grain crystallised uniformly between the eruption age te and te + D (antecrystic growth before eruption), with the duration D marginalised over a uniform prior between 0 and
D_max;inherited or recycled grains (probability
p_inherit): uniform overW_inheritbefore the eruption;grains with residual Pb loss (probability
p_pbloss): uniform overW_pblossafter the eruption,
each convolved with the analytical uncertainty of the grain. The likelihood of te
is computed on a grid, so no grain has to be rejected beforehand. With D_max = 0
and no mixture components the result is the likelihood of a weighted mean; with a large
D_max the eruption age approaches the youngest concordant grains (as in the
Bayesian eruption-age estimator of Keller et al., 2018). Which regime applies depends on
the ratio of the crystallisation interval to the analytical uncertainty of the grains,
which is why the choice is left to the data rather than fixed beforehand.
The functions return a log-likelihood (not a posterior): no prior is placed on te,
so the stratigraphic order and the astrochronology in astroMCBchron act as the
prior. astroMCBchron normalises each function numerically and combines it with
its outlier mixture.
Usage
upb_grain_loglik(
grains,
D_max = 0.6,
p_inherit = 0.1,
p_pbloss = 0.05,
W_inherit = 20,
W_pbloss = 3,
step = 0.002,
nD = 61
)Arguments
- grains
Single-grain dates (data frame) with the columns
id(name of the bed, character or factor),age(single-grain date, numeric, in Ma or any other age unit used consistently withD_max,W_inherit,W_pblossandstep) and eithersd(analytical 1 sigma uncertainty) orsd2(analytical 2 sigma uncertainty, halved). Rows with missing ages or uncertainties are skipped. Required, no default.- D_max
Maximum duration of the crystallisation interval before the eruption (numeric, >= 0, in age units); the duration D is marginalised over a uniform prior between 0 and
D_max. 0 gives the likelihood of a weighted mean, large values move the eruption age towards the youngest grains.Default=0.6(Ma).- p_inherit
Probability that a grain is inherited or recycled (numeric, >= 0;
p_inherit + p_pblossmust be < 1); such grains are modelled as uniform overW_inheritolder than the eruption.Default=0.1.- p_pbloss
Probability that a grain suffered residual Pb loss (numeric, >= 0); such grains are modelled as uniform over
W_pblossyounger than the eruption.Default=0.05.- W_inherit
Width of the inherited-grain component, i.e. how much older than the eruption inherited grains can be (numeric, > 0, in age units).
Default=20(Ma).- W_pbloss
Width of the Pb-loss component, i.e. how much younger than the eruption grains with Pb loss can appear (numeric, > 0, in age units).
Default=3(Ma).- step
Grid step of the eruption age on which the likelihood is computed (numeric, > 0, in age units); smaller steps are more precise and slower.
Default=0.002(2 kyr for ages in Ma).- nD
Number of grid values of the crystallisation duration D between 0 and
D_maxused for the marginalisation (integer, >= 1).Default=61.
Value
A list with loglik (named list of functions, one per bed, of the eruption
age in age units) and summary (data.frame per bed: number of grains, maximum-
likelihood eruption age, mean and 2 sd of the normalised likelihood, youngest grain and
weighted mean with MSWD for comparison).
References
Keller, C.B., Schoene, B., Samperton, K.M., 2018. A stochastic sampling approach to zircon eruption age interpretation. Geochemical Perspectives Letters 8, 31-35.
Examples
set.seed(2)
g <- data.frame(id = rep(c("ashA", "ashB"), each = 8),
age = c(430 + runif(8, 0, 0.1) + rnorm(8, 0, 0.04),
431 + runif(8, 0, 0.1) + rnorm(8, 0, 0.04)),
sd = 0.04)
g$age[3] <- 433.2 # one inherited grain
gl <- upb_grain_loglik(g)
gl$summary
#> id n te_ml te_mean te_2sd youngest youngest_2sd wm_all wm_all_2sd
#> 1 ashA 8 430.0012 429.9858 0.1104326 430.0072 0.08 430.4641 0.02828427
#> 2 ashB 8 431.0032 430.9885 0.1037042 430.9652 0.08 431.0666 0.02828427
#> mswd_all
#> 1 765.789909
#> 2 2.186294