Title: | Statistical Toolbox for Radiometric Geochronology |
---|---|
Description: | Plots U-Pb data on Wetherill and Tera-Wasserburg concordia diagrams. Calculates concordia and discordia ages. Performs linear regression of measurements with correlated errors using 'York', 'Titterington', 'Ludwig' and Omnivariant Generalised Least-Squares ('OGLS') approaches. Generates Kernel Density Estimates (KDEs) and Cumulative Age Distributions (CADs). Produces Multidimensional Scaling (MDS) configurations and Shepard plots of multi-sample detrital datasets using the Kolmogorov-Smirnov distance as a dissimilarity measure. Calculates 40Ar/39Ar ages, isochrons, and age spectra. Computes weighted means accounting for overdispersion. Calculates U-Th-He (single grain and central) ages, logratio plots and ternary diagrams. Processes fission track data using the external detector method and LA-ICP-MS, calculates central ages and plots fission track and other data on radial (a.k.a. 'Galbraith') plots. Constructs total Pb-U, Pb-Pb, Th-Pb, K-Ca, Re-Os, Sm-Nd, Lu-Hf, Rb-Sr and 230Th-U isochrons as well as 230Th-U evolution plots. |
Authors: | Pieter Vermeesch [aut, cre] |
Maintainer: | Pieter Vermeesch <[email protected]> |
License: | GPL-3 |
Version: | 6.4.2 |
Built: | 2024-11-14 08:27:16 UTC |
Source: | https://github.com/pvermees/isoplotr |
Calculates U-Pb, Pb-Pb, Th-Pb, Ar-Ar, K-Ca, Re-Os, Sm-Nd, Rb-Sr, Lu-Hf, U-Th-He, Th-U and fission track ages and propagates their analytical uncertainties. Includes options for single grain, isochron and concordia_ages.
age(x, ...) ## Default S3 method: age( x, method = "U238-Pb206", oerr = 1, sigdig = NA, exterr = FALSE, J = c(NA, NA), zeta = c(NA, NA), rhoD = c(NA, NA), d = diseq(), ... ) ## S3 method for class 'UPb' age( x, type = 1, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, common.Pb = 0, discordance = discfilter(), ... ) ## S3 method for class 'PbPb' age( x, isochron = TRUE, common.Pb = 2, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, projerr = FALSE, ... ) ## S3 method for class 'ArAr' age( x, isochron = FALSE, i2i = TRUE, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, projerr = FALSE, ... ) ## S3 method for class 'KCa' age( x, isochron = FALSE, i2i = TRUE, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, projerr = FALSE, ... ) ## S3 method for class 'UThHe' age(x, isochron = FALSE, central = FALSE, i = NULL, oerr = 1, sigdig = NA, ...) ## S3 method for class 'fissiontracks' age(x, central = FALSE, i = NULL, oerr = 1, sigdig = NA, exterr = FALSE, ...) ## S3 method for class 'ThU' age( x, isochron = FALSE, Th0i = 0, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, ... ) ## S3 method for class 'ThPb' age( x, isochron = TRUE, i2i = TRUE, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, projerr = FALSE, ... ) ## S3 method for class 'ReOs' age( x, isochron = TRUE, i2i = TRUE, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, projerr = FALSE, ... ) ## S3 method for class 'SmNd' age( x, isochron = TRUE, i2i = TRUE, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, projerr = FALSE, ... ) ## S3 method for class 'RbSr' age( x, isochron = TRUE, i2i = TRUE, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, projerr = FALSE, ... ) ## S3 method for class 'LuHf' age( x, isochron = TRUE, i2i = TRUE, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, projerr = FALSE, ... ) ## S3 method for class 'PD' age( x, nuclide, isochron = TRUE, i2i = TRUE, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, projerr = FALSE, ... )
age(x, ...) ## Default S3 method: age( x, method = "U238-Pb206", oerr = 1, sigdig = NA, exterr = FALSE, J = c(NA, NA), zeta = c(NA, NA), rhoD = c(NA, NA), d = diseq(), ... ) ## S3 method for class 'UPb' age( x, type = 1, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, common.Pb = 0, discordance = discfilter(), ... ) ## S3 method for class 'PbPb' age( x, isochron = TRUE, common.Pb = 2, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, projerr = FALSE, ... ) ## S3 method for class 'ArAr' age( x, isochron = FALSE, i2i = TRUE, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, projerr = FALSE, ... ) ## S3 method for class 'KCa' age( x, isochron = FALSE, i2i = TRUE, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, projerr = FALSE, ... ) ## S3 method for class 'UThHe' age(x, isochron = FALSE, central = FALSE, i = NULL, oerr = 1, sigdig = NA, ...) ## S3 method for class 'fissiontracks' age(x, central = FALSE, i = NULL, oerr = 1, sigdig = NA, exterr = FALSE, ...) ## S3 method for class 'ThU' age( x, isochron = FALSE, Th0i = 0, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, ... ) ## S3 method for class 'ThPb' age( x, isochron = TRUE, i2i = TRUE, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, projerr = FALSE, ... ) ## S3 method for class 'ReOs' age( x, isochron = TRUE, i2i = TRUE, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, projerr = FALSE, ... ) ## S3 method for class 'SmNd' age( x, isochron = TRUE, i2i = TRUE, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, projerr = FALSE, ... ) ## S3 method for class 'RbSr' age( x, isochron = TRUE, i2i = TRUE, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, projerr = FALSE, ... ) ## S3 method for class 'LuHf' age( x, isochron = TRUE, i2i = TRUE, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, projerr = FALSE, ... ) ## S3 method for class 'PD' age( x, nuclide, isochron = TRUE, i2i = TRUE, exterr = FALSE, i = NULL, oerr = 1, sigdig = NA, projerr = FALSE, ... )
x |
can be:
OR
|
... |
additional arguments |
method |
one of either |
oerr |
indicates whether the analytical uncertainties of the output are reported as:
(only used when |
sigdig |
number of significant digits for the uncertainty
estimate (only used if |
exterr |
propagate the external (decay constant and calibration factor) uncertainties? |
J |
two-element vector with the J-factor and its standard error. |
zeta |
two-element vector with the zeta-factor and its standard error. |
rhoD |
two-element vector with the track density of the dosimeter glass and its standard error. |
d |
an object of class |
type |
scalar flag indicating whether
|
i |
index of a particular aliquot |
common.Pb |
common lead correction:
|
discordance |
discordance calculator. This is an object of
class
|
isochron |
logical flag indicating whether each analysis
should be considered separately ( |
projerr |
logical. If |
i2i |
‘isochron to intercept’: calculates the initial (aka
‘inherited’, ‘excess’, or ‘common’)
|
central |
logical flag indicating whether each analysis should
be considered separately ( |
Th0i |
initial
|
nuclide |
a text string corresponding to a valid entry for
|
if x
is a scalar or a vector, returns the age using
the geochronometer given by method
and its standard error.
if x
has class UPb
and type=1
, returns a
table with the following columns: t.75
, err[t.75]
,
t.68
, err[t.68]
, t.76
, err[t.76]
,
(t.82
, err[t.82]
,) t.conc
, err[t.conc]
,
(disc
) or err[p.conc]
,) containing the
Pb/
U-age and standard error, the
Pb/
U-age and standard error, the
Pb/
Pb-age and standard error, (the
Pb/
Th-age and standard error,) the single
grain concordia_age and standard error, (and the % discordance or
p-value for concordance,) respectively.
if x
has class UPb
and type=2, 3, 4
or
5
, returns the output of the concordia
function.
if x
has class PbPb
, ThPb
, ArAr
,
KCa
, RbSr
, SmNd
, ReOs
, LuHf
,
ThU
or UThHe
and isochron=FALSE
, returns a
table of Pb-Pb, Th-Pb, Ar-Ar, K-Ca, Rb-Sr, Sm-Nd, Re-Os, Lu-Hf,
Th-U or U-Th-He ages and their standard errors.
if x
has class ThU
and isochron=FALSE
,
returns a 5-column table with the Th-U ages, their standard errors,
the initial U/
U-ratios, their standard errors,
and the correlation coefficient between the ages and the initial
ratios.
if x
has class PbPb
, ThPb
, ArAr
,
KCa
, RbSr
, SmNd
, ReOs
, LuHf
,
UThHe
or ThU
and isochron=TRUE
, returns the
output of the isochron
function.
if x
has class fissiontracks
and
central=FALSE
, returns a table of fission track ages and
standard errors.
if x
has class fissiontracks
or UThHe
and central=TRUE
, returns the output of the
central
function.
attach(examples) tUPb <- age(UPb,type=1) tconc <- age(UPb,type=2) tdisc <- age(UPb,type=3) tArAr <- age(ArAr) tiso <- age(ArAr,isochron=TRUE,i2i=TRUE) tcentral <- age(FT1,central=TRUE)
attach(examples) tUPb <- age(UPb,type=1) tconc <- age(UPb,type=2) tdisc <- age(UPb,type=3) tArAr <- age(ArAr) tiso <- age(ArAr,isochron=TRUE,i2i=TRUE) tcentral <- age(FT1,central=TRUE)
Groups a set of functions that take one (or more) ages (and their uncertainties) as input and produces the U–Pb, Th–Pb, Pb–Pb, Ar–Ar, K–Ca, Rb–Sr, Sm–Nd, Lu–Hf, Re–Os, concordia or Stacey-Kramers ratios as output.
age2ratio( tt, st = 0, ratio = "Pb206U238", exterr = FALSE, d = diseq(), J, sJ = 0, bratio = 0.895 )
age2ratio( tt, st = 0, ratio = "Pb206U238", exterr = FALSE, d = diseq(), J, sJ = 0, bratio = 0.895 )
tt |
a scalar or (except when |
st |
a scalar or (except when |
ratio |
one of |
exterr |
logical. If |
d |
an object of class diseq. |
J |
the J-factor of the Ar–Ar system (only used if
|
sJ |
the standard error of |
bratio |
branching ratio of |
If ratio
is 'Pb207U235'
, 'U238Pb206'
,
'Pb207Pb206'
, 'Pb208Th232'
, 'Ar40Ar39'
,
'Ca40K40'
, 'Hf176Lu176'
, 'Sr87Rb87'
,
'Os187Re187'
or 'Nd143Sm147'
: either a
two-element vector or a two-column matrix with the predicted
isotopic ratio(s) and its/their standard error(s).
If ratio
is 'Wetherill'
, 'Tera-Wasserburg'
or
'U-Th-Pb'
: a two-element list containing
x
: the concordia ratios
cov
: the covariance matrix of the concordia ratios
If ratio
is 'Stacey-Kramers'
: a three-column matrix
with predicted Pb/
Pb,
Pb/
Pb and
Pb/
Pb
ratios.
ratios <- c('Pb206U238','Pb207U235','U238Pb206','Pb207Pb206', 'Pb208Th232','Wetherill','Tera-Wasserburg','U-Th-Pb', 'Ar40Ar39','Ca40K40','Hf176Lu176','Sr87Rb87', 'Os187Re187','Nd143Sm147','Stacey-Kramers') for (ratio in ratios){ r <- age2ratio(tt=1000,st=10,ratio=ratio,J=1,sJ=0.1) print(r) }
ratios <- c('Pb206U238','Pb207U235','U238Pb206','Pb207Pb206', 'Pb208Th232','Wetherill','Tera-Wasserburg','U-Th-Pb', 'Ar40Ar39','Ca40K40','Hf176Lu176','Sr87Rb87', 'Os187Re187','Nd143Sm147','Stacey-Kramers') for (ratio in ratios){ r <- age2ratio(tt=1000,st=10,ratio=ratio,J=1,sJ=0.1) print(r) }
Produces a plot of boxes whose widths correspond to the cumulative
amount of Ar (or any other variable), and whose heights
express the analytical uncertainties. Only propagates the
analytical uncertainty associated with decay constants and
J-factors after computing the plateau composition.
agespectrum(x, ...) ## Default S3 method: agespectrum( x, oerr = 3, plateau = TRUE, random.effects = FALSE, levels = NA, clabel = "", plateau.col = c("#00FF0080", "#FF000080"), non.plateau.col = "#00FFFF80", sigdig = 2, line.col = "red", lwd = 2, xlab = "cumulative fraction", ylab = "X", hide = NULL, omit = NULL, ... ) ## S3 method for class 'other' agespectrum( x, oerr = 3, plateau = TRUE, random.effects = FALSE, levels = NA, clabel = "", plateau.col = c("#00FF0080", "#FF000080"), non.plateau.col = "#00FFFF80", sigdig = 2, line.col = "red", lwd = 2, xlab = "cumulative fraction", ylab = "X", hide = NULL, omit = NULL, ... ) ## S3 method for class 'ArAr' agespectrum( x, oerr = 3, plateau = TRUE, random.effects = FALSE, levels = NA, clabel = "", plateau.col = c("#00FF0080", "#FF000080"), non.plateau.col = "#00FFFF80", sigdig = 2, exterr = FALSE, line.col = "red", lwd = 2, i2i = FALSE, hide = NULL, omit = NULL, ... )
agespectrum(x, ...) ## Default S3 method: agespectrum( x, oerr = 3, plateau = TRUE, random.effects = FALSE, levels = NA, clabel = "", plateau.col = c("#00FF0080", "#FF000080"), non.plateau.col = "#00FFFF80", sigdig = 2, line.col = "red", lwd = 2, xlab = "cumulative fraction", ylab = "X", hide = NULL, omit = NULL, ... ) ## S3 method for class 'other' agespectrum( x, oerr = 3, plateau = TRUE, random.effects = FALSE, levels = NA, clabel = "", plateau.col = c("#00FF0080", "#FF000080"), non.plateau.col = "#00FFFF80", sigdig = 2, line.col = "red", lwd = 2, xlab = "cumulative fraction", ylab = "X", hide = NULL, omit = NULL, ... ) ## S3 method for class 'ArAr' agespectrum( x, oerr = 3, plateau = TRUE, random.effects = FALSE, levels = NA, clabel = "", plateau.col = c("#00FF0080", "#FF000080"), non.plateau.col = "#00FFFF80", sigdig = 2, exterr = FALSE, line.col = "red", lwd = 2, i2i = FALSE, hide = NULL, omit = NULL, ... )
x |
a three-column matrix whose first column gives the amount of
OR an object of class |
... |
optional parameters to the generic |
oerr |
indicates whether the analytical uncertainties of the output are reported in the plot title as:
|
plateau |
logical flag indicating whether a plateau age should
be calculated. If |
random.effects |
if if |
levels |
a vector with additional values to be displayed as different background colours of the plot symbols. |
clabel |
label of the colour legend |
plateau.col |
Fill colours of the rectangles used to mark the steps belonging to
the age plateau. This can either be a single colour or multiple
colours to form a colour ramp (to be used if a single colour: multiple colours: a colour palette: a reversed palette: For empty boxes, set |
non.plateau.col |
if |
sigdig |
the number of significant digits of the numerical values reported in the title of the graphical output. |
line.col |
colour of the average age line |
lwd |
width of the average age line |
xlab |
x-axis label |
ylab |
y-axis label |
hide |
vector with indices of aliquots that should be removed from the plot. |
omit |
vector with indices of aliquots that should be plotted but omitted from age plateau calculation |
exterr |
propagate the external (decay constant and calibration factor) uncertainties? |
i2i |
‘isochron to intercept’: calculates the initial (aka
‘inherited’, ‘excess’, or ‘common’) |
IsoplotR
defines the ‘plateau age’ as the weighted mean age
(using a random effects model with two sources of dispersion) of
the longest sequence (in terms of cumulative Ar content)
of consecutive heating steps that pass the modified Chauvenet
criterion (see
weightedmean
). Note that this
definition is different (and simpler) than the one used by
Isoplot
(Ludwig, 2003). However, it is important to mention
that all definitions of an age plateau are heuristic by nature and
should not be used for quantitative inference. It is possible (and
likely) that the plateau steps exhibit significant
overdispersion. This overdispersion can be manually reduced by
removing individual heating steps with the optional omit
argument.
If plateau=TRUE
, returns a list containing the output of the
weightedmean
function, plus the following items:
the fraction of Ar contained in the
plateau
indices of the steps that are retained for the plateau age calculation
attach(examples) par(mfrow=c(2,1)) agespectrum(ArAr) # removing the first 6 steps yields the longest plateau # that passes the chi-square test for homogeneity agespectrum(ArAr,omit=1:6)
attach(examples) par(mfrow=c(2,1)) agespectrum(ArAr) # removing the first 6 steps yields the longest plateau # that passes the chi-square test for homogeneity agespectrum(ArAr,omit=1:6)
Plot a dataset as a Cumulative Age Distribution (CAD), also known as a ‘empirical cumulative distribution function’.
cad(x, ...) ## Default S3 method: cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", hide = NULL, ... ) ## S3 method for class 'other' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", hide = NULL, ... ) ## S3 method for class 'detritals' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "rainbow", hide = NULL, ... ) ## S3 method for class 'UPb' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", type = 4, cutoff.76 = 1100, cutoff.disc = discfilter(), common.Pb = 0, hide = NULL, ... ) ## S3 method for class 'PbPb' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", common.Pb = 1, hide = NULL, ... ) ## S3 method for class 'ArAr' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", i2i = FALSE, hide = NULL, ... ) ## S3 method for class 'KCa' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", i2i = FALSE, hide = NULL, ... ) ## S3 method for class 'ThPb' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", i2i = TRUE, hide = NULL, ... ) ## S3 method for class 'ThU' cad( x, pch = NA, verticals = TRUE, xlab = "age [ka]", col = "black", Th0i = 0, hide = NULL, ... ) ## S3 method for class 'ThPb' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", i2i = TRUE, hide = NULL, ... ) ## S3 method for class 'ReOs' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", i2i = TRUE, hide = NULL, ... ) ## S3 method for class 'SmNd' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", i2i = TRUE, hide = NULL, ... ) ## S3 method for class 'RbSr' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", i2i = TRUE, hide = NULL, ... ) ## S3 method for class 'LuHf' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", i2i = TRUE, hide = NULL, ... ) ## S3 method for class 'UThHe' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", hide = NULL, ... ) ## S3 method for class 'fissiontracks' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", hide = NULL, ... )
cad(x, ...) ## Default S3 method: cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", hide = NULL, ... ) ## S3 method for class 'other' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", hide = NULL, ... ) ## S3 method for class 'detritals' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "rainbow", hide = NULL, ... ) ## S3 method for class 'UPb' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", type = 4, cutoff.76 = 1100, cutoff.disc = discfilter(), common.Pb = 0, hide = NULL, ... ) ## S3 method for class 'PbPb' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", common.Pb = 1, hide = NULL, ... ) ## S3 method for class 'ArAr' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", i2i = FALSE, hide = NULL, ... ) ## S3 method for class 'KCa' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", i2i = FALSE, hide = NULL, ... ) ## S3 method for class 'ThPb' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", i2i = TRUE, hide = NULL, ... ) ## S3 method for class 'ThU' cad( x, pch = NA, verticals = TRUE, xlab = "age [ka]", col = "black", Th0i = 0, hide = NULL, ... ) ## S3 method for class 'ThPb' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", i2i = TRUE, hide = NULL, ... ) ## S3 method for class 'ReOs' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", i2i = TRUE, hide = NULL, ... ) ## S3 method for class 'SmNd' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", i2i = TRUE, hide = NULL, ... ) ## S3 method for class 'RbSr' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", i2i = TRUE, hide = NULL, ... ) ## S3 method for class 'LuHf' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", i2i = TRUE, hide = NULL, ... ) ## S3 method for class 'UThHe' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", hide = NULL, ... ) ## S3 method for class 'fissiontracks' cad( x, pch = NA, verticals = TRUE, xlab = "age [Ma]", col = "black", hide = NULL, ... )
x |
a numerical vector OR an object of class |
... |
optional arguments to the generic |
pch |
plot character to mark the beginning of each CAD step |
verticals |
logical flag indicating if the horizontal lines of the CAD should be connected by vertical lines |
xlab |
x-axis label |
col |
if For all other data formats, the name or code for a colour to give to a single sample dataset |
hide |
vector with indices of aliquots that should be removed from the plot. |
type |
scalar indicating whether to plot the
|
cutoff.76 |
the age (in Ma) below which the
|
cutoff.disc |
discordance cutoff filter. This is an object of
class |
common.Pb |
common lead correction:
|
i2i |
‘isochron to intercept’: calculates the initial (aka
‘inherited’, ‘excess’, or ‘common’)
|
Th0i |
initial
|
Empirical cumulative distribution functions or cumulative age
distributions are the most straightforward way to visualise the
probability distribution of multiple dates. Suppose that we have a
set of dates
. The CAD is a step function that
sets out the rank order of the dates against their numerical value:
where 1() = 1 if
is true and 1(
) = 0
if
is false. CADs have two desirable properties
(Vermeesch, 2007). First, they do not require any pre-treatment or
smoothing of the data. This is not the case for histograms or
kernel density estimates. Second, it is easy to superimpose several
CADs on the same plot. This facilitates the intercomparison of
multiple samples. The interpretation of CADs is straightforward but
not very intuitive. The prominence of individual age components is
proportional to the steepness of the CAD. This is different from
probability density estimates such as histograms, in which such
components stand out as peaks.
Vermeesch, P., 2007. Quantitative geomorphology of the White Mountains (California) using detrital apatite fission track thermochronology. Journal of Geophysical Research: Earth Surface, 112(F3).
attach(examples) cad(DZ,verticals=FALSE,pch=20)
attach(examples) cad(DZ,verticals=FALSE,pch=20)
Computes the logratio mean composition of a continuous mixture of fission track or U-Th-He data and returns the corresponding age and fitting parameters. Only propagates the systematic uncertainty associated with decay constants and calibration factors after computing the weighted mean isotopic composition. Does not propagate the uncertainty of any initial daughter correction, because this is neither a purely random or purely systematic uncertainty.
central(x, ...) ## Default S3 method: central(x, ...) ## S3 method for class 'UThHe' central(x, compositional = FALSE, model = 1, ...) ## S3 method for class 'fissiontracks' central(x, exterr = FALSE, ...)
central(x, ...) ## Default S3 method: central(x, ...) ## S3 method for class 'UThHe' central(x, compositional = FALSE, model = 1, ...) ## S3 method for class 'fissiontracks' central(x, exterr = FALSE, ...)
x |
an object of class |
... |
optional arguments |
compositional |
logical. If |
model |
only relevant if
|
exterr |
include the zeta or decay constant uncertainty into the error propagation for the central age? |
The central age assumes that the observed age distribution is the combination of two sources of scatter: analytical uncertainty and true geological dispersion.
For fission track data, the analytical uncertainty is assumed to obey Binomial counting statistics and the geological dispersion is assumed to follow a lognormal distribution.
For U-Th-He data, the U-Th-(Sm)-He compositions and uncertainties are assumed to follow a logistic normal distribution.
For all other data types, both the analytical uncertainties and the true ages are assumed to follow lognormal distributions.
The difference between the central age and the weighted mean age is usually small unless the data are imprecise and/or strongly overdispersed.
The uncertainty budget of the central age does not include the
uncertainty of the initial daughter correction (if any), for the
same reasons as discussed under the weightedmean
function.
If x
has class UThHe
and compositional
is TRUE
, returns a list containing the following items:
(if the input data table contains Sm) or uv (if it does not): the mean log[U/He], log[Th/He] (, and log[Sm/He]) composition.
the covariance matrix of uvw
or uv
.
the reduced Chi-square statistic of data concordance,
i.e. , where
is the sum of squares of the
log[U/He]-log[Th/He] compositions.
the fitting model.
the degrees of freedom () of the fit (only
reported if
model=1
).
the p-value of a Chi-square test with df
degrees of freedom (only reported if model=1
.)
a two- or three-element vector with:t
: the 'barycentric' age, i.e. the age corresponding to uvw
.s[t]
: the standard error of t
.disp[t]
: the standard error of t
enhanced by a
factor of (only reported if
model=1
).
the geological overdispersion term. If model=3
,
this is a two-element vector with the standard deviation of the
(assumedly) Normal dispersion and its standard error. w=0
if
model<3
.
OR, otherwise:
a two-element vector with the central age and its standard error.
a two-element vector with the overdispersion (standard deviation) of the excess scatter, and its standard error.
the reduced Chi-square statistic of data concordance,
i.e. , where
is a Chi-square statistic
of the EDM data or ages
the degrees of freedom ()
the p-value of a Chi-square test with df
degrees of freedom
Galbraith, R.F. and Laslett, G.M., 1993. Statistical models for mixed fission track ages. Nuclear Tracks and Radiation Measurements, 21(4), pp.459-470.
Vermeesch, P., 2008. Three new ways to calculate average (U-Th)/He ages. Chemical Geology, 249(3), pp.339-347.
weightedmean
, radialplot
,
helioplot
attach(examples) print(central(UThHe)$age)
attach(examples) print(central(UThHe)$age)
Given a parameter estimate and its standard error,
calculate the corresponding 1-sigma, 2-sigma or
confidence interval, in absolute or
relative units.
ci(x = 0, sx, oerr = 3, df = NULL, absolute = FALSE)
ci(x = 0, sx, oerr = 3, df = NULL, absolute = FALSE)
x |
scalar estimate |
sx |
scalar or vector with the standard error of x without and
(optionally) with |
oerr |
indicates if the confidence intervals should be reported as:
|
df |
(optional) number of degrees of freedom. Only used if
|
absolute |
logical. Returns absolute uncertainties even if
|
Several of IsoplotR
's plotting functions (including
isochron
, weightedmean
,
concordia
, radialplot
and
helioplot
) return lists of parameters and their
standard errors. For ‘model-1’ fits, if the data pass a
Chi-square test of homogeneity, then just one estimate for the
standard error is reported. This estimate can be converted to
a confidence interval by multiplication with the appropriate
quantile of a Normal distribution. Datasets that fail the
Chi-square test are said to be ‘overdispersed’ with respect to
the analytical uncertainties. The simplest way (‘model-1’) to
deal with overdispersion is to inflate the standard error with
a premultiplier. In this case,
IsoplotR
returns two estimates of the standard error.
To convert the second estimate to a confidence interval
requires multiplication with the desired quantile of a
t-distribution with the appropriate degrees of freedom.
A scalar or vector of the same size as sx
.
attach(examples) fit <- isochron(PbPb,plot=FALSE,exterr=FALSE) err <- ci(x=fit$age[1],sx=fit$age[-1],oerr=5,df=fit$df) message('age=',signif(fit$age[1],4),'Ma, ', '2se=',signif(err[1],2),'%, ', '2se(with dispersion)=',signif(err[2],2),'%')
attach(examples) fit <- isochron(PbPb,plot=FALSE,exterr=FALSE) err <- ci(x=fit$age[1],sx=fit$age[-1],oerr=5,df=fit$df) message('age=',signif(fit$age[1],4),'Ma, ', '2se=',signif(err[1],2),'%, ', '2se(with dispersion)=',signif(err[2],2),'%')
S3 classes to store geochronological data generated by
read.data
or diseq
.
is.UPb(x) is.PbPb(x) is.ThPb(x) is.ArAr(x) is.KCa(x) is.PD(x) is.RbSr(x) is.SmNd(x) is.LuHf(x) is.ReOs(x) is.ThU(x) is.UThHe(x) is.fissiontracks(x) is.detritals(x) is.other(x) is.diseq(x) as.UPb(x, format = 3, ierr = 1, d = diseq()) as.PbPb(x, format = 1, ierr = 1) as.ArAr(x, format = 3, ierr = 1) as.ThPb(x, format = 1, ierr = 1) as.KCa(x, format = 1, ierr = 1) as.RbSr(x, format = 1, ierr = 1) as.ReOs(x, format = 1, ierr = 1) as.SmNd(x, format = 1, ierr = 1) as.LuHf(x, format = 1, ierr = 1) as.ThU( x, format = 1, ierr = 1, U8Th2 = 0, Th02i = c(0, 0), Th02U48 = c(0, 0, 1e+06, 0, 0, 0, 0, 0, 0) ) as.UThHe(x, ierr = 1) as.fissiontracks(x, format = 1, ierr = 1) as.detritals(x) as.other(x, format = NULL, ierr = 1)
is.UPb(x) is.PbPb(x) is.ThPb(x) is.ArAr(x) is.KCa(x) is.PD(x) is.RbSr(x) is.SmNd(x) is.LuHf(x) is.ReOs(x) is.ThU(x) is.UThHe(x) is.fissiontracks(x) is.detritals(x) is.other(x) is.diseq(x) as.UPb(x, format = 3, ierr = 1, d = diseq()) as.PbPb(x, format = 1, ierr = 1) as.ArAr(x, format = 3, ierr = 1) as.ThPb(x, format = 1, ierr = 1) as.KCa(x, format = 1, ierr = 1) as.RbSr(x, format = 1, ierr = 1) as.ReOs(x, format = 1, ierr = 1) as.SmNd(x, format = 1, ierr = 1) as.LuHf(x, format = 1, ierr = 1) as.ThU( x, format = 1, ierr = 1, U8Th2 = 0, Th02i = c(0, 0), Th02U48 = c(0, 0, 1e+06, 0, 0, 0, 0, 0, 0) ) as.UThHe(x, ierr = 1) as.fissiontracks(x, format = 1, ierr = 1) as.detritals(x) as.other(x, format = NULL, ierr = 1)
x |
|
format |
data format. See |
ierr |
input error. See |
d |
an object of class |
U8Th2 |
|
Th02i |
2-element vector with the assumed initial
|
Th02U48 |
9-element vector with the measured composition of
the detritus, containing |
IsoplotR
uses the following S3 classes to store
geochronological data: UPb
, PbPb
, ThPb
,
KCa
, UThHe
, fissiontracks
,
detritals
and PD
, where the latter is the parent
class of the simple parent-daughter chronometers RbSr
,
SmNd
, LuHf
and ReOs
. All these classes
have overloaded versions of the generic length()
function and `[`
subsetting method.
Additional functions for each class include as.X(x)
,
which converts the data table x
to an object of class
X
; and is.X(x)
, which checks if x
has
class X
.
UPb
: a list containing:
x
a matrix containing the isotopic measurements
format
a number between 1 and 8
d
an object of class diseq
, i.e. the output of
the diseq
function
ArAr
: a list containing
x
a matrix containing the isotopic measurements
J
a two-element vector with the J-factor and its uncertainty
format
a number between 1 and 3
ThU
: a list containing
x
a matrix containing the isotopic measurements
format
a number between 1 and 4
Th02
a two element vector with the assumed initial
Th/
Th-ratio of Th-bearing
detritus. Only aplicable to formats 1 and 2.
Th02U48
9-element vector with the measured composition of Th-bearing detritus
U8Th2
the measured U/
Th
activity ratio of the whole rock. Only applicable to formats
3 and 4
PbPb
, ThPb
, KCa
, PD
, RbSr
,
SmNd
, LuHf
, or ReOs
: a list containing
x
a matrix containing the isotopic measurements
format
a number between 1 and 3
UThHe
: a matrix of He, U, Th (and Sm) measurements
fissiontracks
: a list containing
format
a number between 1 and 3
x
a matrix of spontaneous and induced fission track
counts (only included if format=1
)
rhoD
the track density of the dosimeter glass,
extracted from the input data (only included if format=1
)
zeta
the zeta calibration constant extracted from the
input data (only included if format<3
)
Ns
a list containing the spontaneous fission track
counts (only included if format>1
)
U
a list of lists containing the U-concentration or
U/Ca-ratio measurements for each of the analysed grains (only
included if format>1
)
sU
a list of lists containing the standard errors of
the U-concentration or U/Ca-ratio measurements for each of the
analysed grains (only include if format>1
)
spotSize
the laser ablation spot size (only included
if format>1
)
detritals
: a list of named vectors, one for each
detrital sample.
diseq
: is a class that contains the output of the
diseq
function, which stores initial disequilibrium
data for U–Pb geochronology.
is.X(x)
returns a logical value.
as.X(x)
returns an object of class X
.
read.data diseq
attach(examples) ns <- length(UPb) concordia(UPb[-ns,]) if (is.PD(RbSr)) print('RbSr has class PD')
attach(examples) ns <- length(UPb) concordia(UPb[-ns,]) if (is.PD(RbSr)) print('RbSr has class PD')
Plots U-Pb data on Wetherill, Tera-Wasserburg or U-Th-Pb concordia
diagrams, calculates concordia_ages and compositions, evaluates the
equivalence of multiple
(Pb/
U-
Pb/
U,
Pb/
Pb-
Pb/
U, or
Th/
Th-
Pb/
U)
compositions, computes the weighted mean isotopic composition and
the corresponding concordia_age using the method of maximum
likelihood, computes the MSWD of equivalence and concordance and
their respective Chi-squared p-values. Performs linear regression
and computes the upper and lower intercept ages (for Wetherill) or
the lower intercept age and the
Pb/
Pb
intercept (for Tera-Wasserburg), taking into account error
correlations and decay constant uncertainties.
concordia( x = NULL, tlim = NULL, type = 1, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", concordia.col = "darksalmon", exterr = FALSE, show.age = 0, oerr = 3, sigdig = 2, common.Pb = 0, ticks = 5, anchor = 0, hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", ... )
concordia( x = NULL, tlim = NULL, type = 1, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", concordia.col = "darksalmon", exterr = FALSE, show.age = 0, oerr = 3, sigdig = 2, common.Pb = 0, ticks = 5, anchor = 0, hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", ... )
x |
an object of class |
tlim |
age limits of the concordia line |
type |
one of
|
show.numbers |
logical flag ( |
levels |
a vector with |
clabel |
label for the colour legend (only used if
|
ellipse.fill |
Fill colour for the error ellipses. This can either be a single colour or multiple colours to form a colour ramp. Examples: a single colour: multiple colours: a colour palette: a reversed palette: For empty ellipses, set |
ellipse.stroke |
the stroke colour for the error
ellipses. Follows the same formatting guidelines as
|
concordia.col |
colour of the concordia line |
exterr |
show decay constant uncertainties? |
show.age |
one of either:
|
oerr |
indicates whether the analytical uncertainties of the output are reported in the plot title as:
|
sigdig |
number of significant digits for the concordia/discordia age |
common.Pb |
common lead projection:
|
ticks |
either a scalar indicating the desired number of age ticks to be placed along the concordia line, OR a vector of tick ages. |
anchor |
control parameters to fix the intercept age or common Pb composition of the isochron fit. This can be a scalar or a vector. If If If If |
hide |
vector with indices of aliquots that should be removed from the concordia diagram |
omit |
vector with indices of aliquots that should be plotted but omitted from concordia or discordia age calculation |
omit.fill |
fill colour that should be used for the omitted aliquots. |
omit.stroke |
stroke colour that should be used for the omitted aliquots. |
... |
optional arguments passed on to |
The concordia diagram is a graphical means of assessing the
internal consistency of U-Pb data. It sets out the measured
Pb/
U- and
Pb/
U-ratios against each other (‘Wetherill’
diagram); or, equivalently, the
Pb/
Pb- and
Pb/
U-ratios (‘Tera-Wasserburg’
diagram). Alternatively, for data format 7 and 8, it is also
possible to plot
Pb/
Th against the
Pb/
U. The space of concordant isotopic
compositions is marked by a curve, the ‘concordia line’. Isotopic
ratio measurements are shown as 100(1-
alpha
)% confidence
ellipses. Concordant samples plot near to, or overlap with, the
concordia line. They represent the pinnacle of geochronological
robustness. Samples that plot away from the concordia line but are
aligned along a linear trend form an isochron (or ‘discordia’ line)
that can be used to infer the composition of the non-radiogenic
(‘common’) lead or to constrain the timing of prior lead loss.
If show.age=1
, returns a list with the following items:
a named vector with the (weighted mean) U-Pb composition
the covariance matrix of the (weighted mean) U-Pb composition
a vector with three items (equivalence
,
concordance
and combined
) containing the MSWD (Mean
of the Squared Weighted Deviates, a.k.a the reduced Chi-squared
statistic) of isotopic equivalence, age concordance and combined
goodness of fit, respectively.
a vector with three items (equivalence
,
concordance
and combined
) containing the p-value of
the Chi-square test for isotopic equivalence, age concordance and
combined goodness of fit, respectively.
a three-element vector with the number of degrees of
freedom used for the mswd
calculation.
a two-or three-element vector with:t
: the concordia_age (in Ma)s[t]
: the standard error of t
disp[t]
: the standard error of t
augmented by
to account for any overdispersion.
If show.age=2
, 3
or 4
, returns a list with the
following items:
the fitting model (=show.age-1
).
a vector with the upper and lower intercept ages (if
type=1
) or the lower intercept age and common Pb
intercept(s) (if type=2
). If show.age=4
, includes an
overdispersion term as well.
the covariance matrix of the elements in par
.
the logarithm of par
the logarithm of cov
a matrix with on or two rows:
s
: the standard errors of the parameter estimates
disp
: the standard errors of the parameter estimates
augmented by to account for overdispersed
datasets (only reported if
show.age=2
).
the degrees of freedom of the concordia fit (concordance + equivalence)
p-value of a Chi-square test for age homogeneity
(only reported if type=3
).
mean square of the weighted deviates – a
goodness-of-fit measure. mswd > 1
indicates overdispersion
w.r.t the analytical uncertainties (not reported if
show.age=3
).
the number of aliquots in the dataset
Ludwig, K.R., 1998. On the treatment of concordant uranium-lead ages. Geochimica et Cosmochimica Acta, 62(4), pp.665-676.
attach(examples) concordia(UPb,show.age=2) dev.new() concordia(UPb,type=2,xlim=c(24.9,25.4), ylim=c(0.0508,0.0518),ticks=249:254,exterr=TRUE) dev.new() concordia(UPb,show.age=2,anchor=c(2,260))
attach(examples) concordia(UPb,show.age=2) dev.new() concordia(UPb,type=2,xlim=c(24.9,25.4), ylim=c(0.0508,0.0518),ticks=249:254,exterr=TRUE) dev.new() concordia(UPb,show.age=2,anchor=c(2,260))
Takes geochronology data as input and produces a five-column table with the variables, their uncertainties and error correlations as output. These can subsequently be used for York regression.
data2york(x, ...) ## Default S3 method: data2york(x, format = 1, ...) ## S3 method for class 'other' data2york(x, ...) ## S3 method for class 'UPb' data2york(x, option = 1, tt = 0, ...) ## S3 method for class 'ArAr' data2york(x, inverse = TRUE, ...) ## S3 method for class 'ThPb' data2york(x, inverse = FALSE, ...) ## S3 method for class 'KCa' data2york(x, inverse = FALSE, ...) ## S3 method for class 'PbPb' data2york(x, inverse = TRUE, ...) ## S3 method for class 'PD' data2york(x, exterr = FALSE, inverse = FALSE, ...) ## S3 method for class 'UThHe' data2york(x, ...) ## S3 method for class 'ThU' data2york(x, type = 2, generic = TRUE, ...)
data2york(x, ...) ## Default S3 method: data2york(x, format = 1, ...) ## S3 method for class 'other' data2york(x, ...) ## S3 method for class 'UPb' data2york(x, option = 1, tt = 0, ...) ## S3 method for class 'ArAr' data2york(x, inverse = TRUE, ...) ## S3 method for class 'ThPb' data2york(x, inverse = FALSE, ...) ## S3 method for class 'KCa' data2york(x, inverse = FALSE, ...) ## S3 method for class 'PbPb' data2york(x, inverse = TRUE, ...) ## S3 method for class 'PD' data2york(x, exterr = FALSE, inverse = FALSE, ...) ## S3 method for class 'UThHe' data2york(x, ...) ## S3 method for class 'ThU' data2york(x, type = 2, generic = TRUE, ...)
x |
a five or six column matrix OR an object of class
|
... |
optional arguments |
format |
one of
|
option |
one of
|
tt |
the age of the sample. This is only used if
|
inverse |
toggles between normal and inverse isochron
ratios. If If |
exterr |
If |
type |
Return ‘Rosholt’ or ‘Osmond’ ratios? Rosholt ( Osmond ( |
generic |
If If or if |
a five-column table that can be used as input for
york
-regression.
f <- system.file("RbSr1.csv",package="IsoplotR") dat <- read.csv(f) yorkdat <- data2york(dat) fit <- york(yorkdat)
f <- system.file("RbSr1.csv",package="IsoplotR") dat <- read.csv(f) yorkdat <- data2york(dat) fit <- york(yorkdat)
Define a discordance cutoff to filter U–Pb data.
discfilter(option = 0, before = TRUE, cutoff)
discfilter(option = 0, before = TRUE, cutoff)
option |
one of five options:
Further details in Vermeesch (2021). |
before |
logical flag indicating whether the discordance
filter should be applied before ( |
cutoff |
a two-element vector with the minimum (negative) and
maximum (positive) allowed discordance. Default values vary
between the different options. To view them, enter
|
The most reliable U–Pb age constraints are obtained from
(zircon) grains whose Pb/
U and
Pb/
Pb ages are statistically
indistinguishable from each other. U–Pb compositions that
fulfil this requirements are called ‘concordant’. Those that
violate it are called ‘discordant’. The discordance of the
Pb/
U and
Pb/
Pb
systems can be defined in five different ways. By setting a
cutoff for any of these criteria, U–Pb data can be filtered
for data quality.
a list with the input parameters. Default values for
cutoff
are
c(-48,140)
if option=='t'
;
c(-5,15)
if option=='r'
;
c(-0.36,0.96)
if option=='sk'
;
c(-1.6,4.7)
if option=='a'
; and
c(-2,5.8)
if option=='c'
.
Vermeesch (2021) “On the treatment of discordant data in detrital zircon U–Pb geochronology”, Geochronology.
cad
, kde
,
radialplot
dscf <- discfilter(option='c',before=TRUE,cutoff=c(-1,1)) weightedmean(x=examples$UPb,exterr=FALSE,sigdig=2, cutoff.disc=dscf,common.Pb=3)
dscf <- discfilter(option='c',before=TRUE,cutoff=c(-1,1)) weightedmean(x=examples$UPb,exterr=FALSE,sigdig=2, cutoff.disc=dscf,common.Pb=3)
The U-Pb method conventionally assumes initial secular
equilibrium of all the intermediate daughters of the
U-
Pb and
U-
Pb decay chains. Violation of
this assumption may produce inaccurate results.
diseq
sets up initial disequilibrium parameters that are subsequently
passed on to the read.data
function for incorporation in
other functions.
diseq( U48 = list(x = 1, sx = 0, option = 0, m = 0, M = 20, x0 = 1, sd = 10), ThU = list(x = 1, sx = 0, option = 0, m = 0, M = 20, x0 = 1, sd = 10), RaU = list(x = 1, sx = 0, option = 0, m = 0, M = 20, x0 = 1, sd = 10), PaU = list(x = 1, sx = 0, option = 0, m = 0, M = 20, x0 = 1, sd = 10), buffer = 1e-05 )
diseq( U48 = list(x = 1, sx = 0, option = 0, m = 0, M = 20, x0 = 1, sd = 10), ThU = list(x = 1, sx = 0, option = 0, m = 0, M = 20, x0 = 1, sd = 10), RaU = list(x = 1, sx = 0, option = 0, m = 0, M = 20, x0 = 1, sd = 10), PaU = list(x = 1, sx = 0, option = 0, m = 0, M = 20, x0 = 1, sd = 10), buffer = 1e-05 )
U48 |
a list containing seven items ( If If If
|
ThU |
a list containing seven items ( If If If If
|
RaU |
a list containing seven items ( If If
|
PaU |
a list containing seven items ( If If
|
buffer |
small amount of padding to avoid singularities in the
prior distribution, which uses a logistic transformation:
|
There are three ways to correct for the initial disequilibrium
between the activity of U,
U,
Th, and
Ra; or between
U
and
Pa:
Specify the assumed initial activity ratios and calculate how
much excess Pb and
Pb these would have
produced.
Measure the current activity ratios to infer the initial ratios. This approach only works for young samples.
The initial Th/
U activity ratio
can also be estimated by providing the Th/U-ratio of the magma.
a list with the following items:
the same as the corresponding input arguments
a boolean flag indicating whether
option=TRUE
and/or x=1
for all activity ratios
the eigenvectors of the disequilibrium matrix exponential
the inverse of Q
a named vector of all the relevant decay constants
d <- diseq(U48=list(x=0,option=1),ThU=list(x=2,option=1), RaU=list(x=2,option=1),PaU=list(x=2,option=1)) fn <- system.file("diseq.csv",package="IsoplotR") UPb <- read.data(fn,method='U-Pb',format=2,d=d) concordia(UPb,type=2,xlim=c(0,700),ylim=c(0.05,0.5))
d <- diseq(U48=list(x=0,option=1),ThU=list(x=2,option=1), RaU=list(x=2,option=1),PaU=list(x=2,option=1)) fn <- system.file("diseq.csv",package="IsoplotR") UPb <- read.data(fn,method='U-Pb',format=2,d=d) concordia(UPb,type=2,xlim=c(0,700),ylim=c(0.05,0.5))
Calculates the pairwise dissimilarity between detrital age distributions, using either the Wasserstein-2 or Kolmogorov-Smirnov distance.
diss(x, ...) ## Default S3 method: diss(x, y, method = "KS", ...) ## S3 method for class 'detritals' diss(x, method = "W2", ...)
diss(x, ...) ## Default S3 method: diss(x, y, method = "KS", ...) ## S3 method for class 'detritals' diss(x, method = "W2", ...)
x |
an object of class |
... |
extra arguments (not used) |
y |
a vector of numbers |
method |
either |
The Kolmogorov-Smirnov statistic is the maximum vertical difference between two empirical cumulative distribution functions. The Wasserstein distance is a function of the area between them. Both dissimilarity measures are useful for multidimensional scaling.
an object of class dist
.
Written by Pieter Vermeesch, using modified code from
Mathieu Vrac's CDFt
package (KolmogorovSmirnov
function), and Dominic Schuhmacher's transport
package
(transport1d
function).
d <- diss(examples$DZ,method='KS') mds(d)
d <- diss(examples$DZ,method='KS') mds(d)
Constructs an error ellipse at a given confidence level from its centre and covariance matrix
ellipse(x, y, covmat, alpha = 0.05, n = 50)
ellipse(x, y, covmat, alpha = 0.05, n = 50)
x |
x-coordinate (scalar) for the centre of the ellipse |
y |
y-coordinate (scalar) for the centre of the ellipse |
covmat |
the [ |
alpha |
the probability cutoff for the error ellipses |
n |
the resolution (number of segments) of the error ellipses |
an [nx2
] matrix of plot coordinates
x = 99; y = 101; covmat <- matrix(c(1,0.9,0.9,1),nrow=2) ell <- ellipse(x,y,covmat) plot(c(90,110),c(90,110),type='l') polygon(ell,col=rgb(0,1,0,0.5)) points(x,y,pch=21,bg='black')
x = 99; y = 101; covmat <- matrix(c(1,0.9,0.9,1),nrow=2) ell <- ellipse(x,y,covmat) plot(c(90,110),c(90,110),type='l') polygon(ell,col=rgb(0,1,0,0.5)) points(x,y,pch=21,bg='black')
Plots Th-U data on a
U/
U-
Th/
U evolution
diagram, a
U/
U-age diagram, or (if
U/
U is assumed to be in secular
equilibrium), a
Th/
Th-
U/
Th diagram;
calculates isochron ages.
evolution( x, xlim = NULL, ylim = NULL, tticks = NULL, aticks = NULL, oerr = 3, transform = FALSE, Th0i = 0, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", line.col = "darksalmon", isochron = FALSE, model = 1, exterr = FALSE, sigdig = 2, hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", ... )
evolution( x, xlim = NULL, ylim = NULL, tticks = NULL, aticks = NULL, oerr = 3, transform = FALSE, Th0i = 0, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", line.col = "darksalmon", isochron = FALSE, model = 1, exterr = FALSE, sigdig = 2, hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", ... )
x |
an object of class |
xlim |
x-axis limits |
ylim |
y-axis limits |
tticks |
time intervals of the evolution grid |
aticks |
initial activity ratio ticks of the evolution grid |
oerr |
indicates whether the analytical uncertainties of the output are reported in the plot title as:
|
transform |
if |
Th0i |
initial
|
show.numbers |
label the error ellipses with the grain numbers? |
levels |
a vector with additional values to be displayed as different background colours within the error ellipses. |
clabel |
label of the colour legend. |
ellipse.fill |
fill colour for the error ellipses. This can either be a single colour or multiple colours to form a colour ramp. Examples: a single colour: multiple colours: a colour palette: a reversed palette: For empty ellipses, set |
ellipse.stroke |
the stroke colour for the error
ellipses. Follows the same formatting guidelines as
|
line.col |
colour of the age grid |
isochron |
fit an isochron to the data? |
model |
if
|
exterr |
propagate the decay constant uncertainty in the isochron age? |
sigdig |
number of significant digits for the isochron age |
hide |
vector with indices of aliquots that should be removed from the plot. |
omit |
vector with indices of aliquots that should be plotted but omitted from the isochron age calculation. |
omit.fill |
fill colour that should be used for the omitted aliquots. |
omit.stroke |
stroke colour that should be used for the omitted aliquots. |
... |
optional arguments to the generic |
Similar to the concordia
diagram (for U-Pb data) and
the helioplot
diagram (for U-Th-He data), the
evolution diagram simultaneously displays the isotopic composition
and age of U-series data. For carbonate data (Th-U formats 1 and
2), the Th-U evolution diagram consists of a scatter plot that sets
out the U/
U-activity ratios against the
Th/
U-activity ratios as error ellipses, and
displays the initial
U/
U-activity ratios
and ages as a set of intersecting lines. Alternatively, the
U/
U-ratios can also be set out against the
Th-
U-
U-ages. In both types of
evolution diagrams,
IsoplotR
provides the option to project
the raw measurements along the best fitting isochron line and
thereby remove the detrital Th-component. This
procedure allows a visual assessment of the degree of homogeneity
within a dataset, as is quantified by the MSWD.
Neither the U-series evolution diagram, nor the
U/
U vs. age plot is applicable to igneous
datasets (Th-U formats 3 and 4), in which
U and
U are in secular equilibrium. For such datasets,
IsoplotR
produces an Osmond-style regression plot that is
decorated with a fanning set of isochron
lines.
Ludwig, K.R. and Titterington, D.M., 1994. Calculation
of Th/U isochrons, ages, and errors. Geochimica et
Cosmochimica Acta, 58(22), pp.5031-5042.
Ludwig, K.R., 2003. Mathematical-statistical treatment of data and
errors for Th/U geochronology. Reviews in Mineralogy and
Geochemistry, 52(1), pp.631-656.
attach(examples) evolution(ThU) dev.new() evolution(ThU,transform=TRUE,isochron=TRUE,model=1)
attach(examples) evolution(ThU) dev.new() evolution(ThU,transform=TRUE,isochron=TRUE,model=1)
IsoplotR
Built-in datasets for U-Pb, Pb-Pb, Ar-Ar, K-Ca, Re-Os, Sm-Nd, Rb-Sr, Lu-Hf, U-Th-He, Th-U, fission track and detrital geochronology.
examples
is an 18-item list containing:
UPb
: an object of class UPb
containing a high
precision U-Pb dataset of Kamo et al. (1996) packaged with Ken
Ludwig (2003)'s Isoplot
program.
PbPb
: an object of class PbPb
containing a Pb-Pb
dataset from Connelly et al. (2017).
ThPb
: an object of class ThPb
containing the Th-Pb
data for allanite sample MF482 of Janots and Rubatto (2014).
DZ
: an object of class detrital
containing a detrital
zircon U-Pb dataset from Namibia (Vermeesch et al., 2015).
ArAr
: an object of class ArAr
containing a
Ar/
Ar spectrum of Skye basalt produced by Sarah
Sherlock (Open University).
KCa
: an object of class KCa
containing a
K/
Ca dataset for sample 140025 grain h spot 5
of Harrison et al. (2010).
UThHe
: an object of class UThHe
containing a
U-Th-Sm-He dataset of Fish Lake apatite produced by Daniel Stockli
(UT Austin).
FT1
: an object of class fissiontracks
containing a
synthetic external detector dataset.
FT2
: an object of class fissiontracks
containing a
synthetic LA-ICP-MS-based fission track dataset using the zeta
calibration method.
FT3
: an object of class fissiontracks
containing a
synthetic LA-ICP-MS-based fission track dataset using the absolute
dating approach.
ReOs
: an object of class ReOs
containing a
Os/
Re-dataset from Selby (2007).
SmNd
: an object of class SmNd
containing a
Nd/
Sm-dataset from Lugmair et al. (1975).
RbSr
: an object of class RbSr
containing an
Rb/
Sr-dataset from Compston et al. (1971).
LuHf
: an object of class LuHf
containing an
Lu/
Hf-dataset from Barfod et al. (2002).
ThU
: an object of class ThU
containing a synthetic
‘Osmond-type’ dataset from Titterington and Ludwig (1994).
MountTom
: an object of class other
containing a
collection of zircon fission track ages and errors from Brandon
(1992).
LudwigMean
: an object of class other
containing a
collection of Pb/
U-ages and errors of the
example dataset by Ludwig (2003).
LudwigKDE
: an object of class 'other'
containing the
Pb/
U-ages (but not the errors) of the
example dataset by Ludwig (2003).
LudwigSpectrum
: an object of class 'other'
containing
the Ar abundances,
Ar/
Ar-ages and
errors of the example dataset by Ludwig (2003).
LudwigMixture
: an object of class 'other'
containing
a dataset of dispersed zircon fission track ages of the example
dataset by Ludwig (2003).
Brandon, M.T., 1992. Decomposition of fission-track grain-age distributions. American Journal of Science, 292(8), pp.535-564.
Barfod, G.H., Albarede, F., Knoll, A.H., Xiao, S., Telouk, P., Frei, R. and Baker, J., 2002. New Lu-Hf and Pb-Pb age constraints on the earliest animal fossils. Earth and Planetary Science Letters, 201(1), pp.203-212.
Compston, W., Berry, H., Vernon, M.J., Chappell, B.W. and Kaye, M.J., 1971. Rubidium-strontium chronology and chemistry of lunar material from the Ocean of Storms. In Lunar and Planetary Science Conference Proceedings (Vol. 2, p. 1471).
Connelly, J.N., Bollard, J. and Bizzarro, M., 2017. Pb-Pb chronometry and the early Solar System. Geochimica et Cosmochimica Acta, 201, pp.345-363.
Galbraith, R. F. and Green, P. F., 1990: Estimating the component ages in a finite mixture, Nuclear Tracks and Radiation Measurements, 17, 197-206.
Harrison, T.M., Heizler, M.T., McKeegan, K.D. and Schmitt, A.K.,
2010. In situ K-
Ca ‘double-plus’ SIMS dating
resolves Klokken feldspar
K-
Ar paradox. Earth
and Planetary Science Letters, 299(3-4), pp.426-433.
Janots, E. and Rubatto, D., 2014. U-Th-Pb dating of collision in the external Alpine domains (Urseren zone, Switzerland) using low temperature allanite and monazite. Lithos, 184, pp. 155-166.
Kamo, S.L., Czamanske, G.K. and Krogh, T.E., 1996. A minimum U-Pb age for Siberian flood-basalt volcanism. Geochimica et Cosmochimica Acta, 60(18), 3505-3511.
Ludwig, K. R., and D. M. Titterington., 1994.
"Calculation of Th/U isochrons, ages, and errors."
Geochimica et Cosmochimica Acta 58.22, 5031-5042.
Ludwig, K. R., 2003. User's manual for Isoplot 3.00: a geochronological toolkit for Microsoft Excel. No. 4.
Lugmair, G.W., Scheinin, N.B. and Marti, K., 1975. Sm-Nd age and history of Apollo 17 basalt 75075-Evidence for early differentiation of the lunar exterior. In Lunar and Planetary Science Conference Proceedings (Vol. 6, pp. 1419-1429).
Selby, D., 2007. Direct Rhenium-Osmium age of the Oxfordian-Kimmeridgian boundary, Staffin bay, Isle of Skye, UK, and the Late Jurassic time scale. Norsk Geologisk Tidsskrift, 87(3), p.291.
Vermeesch, P. and Garzanti, E., 2015. Making geological sense of ‘Big Data’ in sedimentary provenance analysis. Chemical Geology, 409, pp.20-27.
Vermeesch, P., 2008. Three new ways to calculate average (U-Th)/He ages. Chemical Geology, 249(3),pp.339-347.
attach(examples) concordia(UPb) agespectrum(ArAr) isochron(ReOs) radialplot(FT1) helioplot(UThHe) evolution(ThU) kde(DZ) radialplot(LudwigMixture) agespectrum(LudwigSpectrum) weightedmean(LudwigMean)
attach(examples) concordia(UPb) agespectrum(ArAr) isochron(ReOs) radialplot(FT1) helioplot(UThHe) evolution(ThU) kde(DZ) radialplot(LudwigMixture) agespectrum(LudwigSpectrum) weightedmean(LudwigMean)
Plot U-Th(-Sm)-He data on a (log[He/Th] vs. log[U/He]) logratio plot or U-Th-He ternary diagram
helioplot( x, logratio = TRUE, model = 1, show.barycentre = TRUE, show.numbers = FALSE, oerr = 3, contour.col = c("white", "red"), levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#0000FF80"), ellipse.stroke = "black", sigdig = 2, xlim = NA, ylim = NA, fact = NA, hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", ... )
helioplot( x, logratio = TRUE, model = 1, show.barycentre = TRUE, show.numbers = FALSE, oerr = 3, contour.col = c("white", "red"), levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#0000FF80"), ellipse.stroke = "black", sigdig = 2, xlim = NA, ylim = NA, fact = NA, hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", ... )
x |
an object of class |
logratio |
Boolean flag indicating whether the data should be shown on bivariate log[He/Th] vs. log[U/He] diagram, or a U-Th-He ternary diagram. |
model |
choose one of the following statistical models:
|
show.barycentre |
show the mean composition as a white ellipse? |
show.numbers |
show the grain numbers inside the error ellipses? |
oerr |
indicates whether the analytical uncertainties of the output are reported in the plot title as:
|
contour.col |
two-element vector with the fill colours to be assigned to the minimum and maximum age contour |
levels |
a vector with additional values to be displayed as different background colours within the error ellipses. |
clabel |
label of the colour scale |
ellipse.fill |
Fill colour for the error ellipses. This can either be a single colour or multiple colours to form a colour ramp. Examples: a single colour: multiple colours: a colour palette: a reversed palette: For empty ellipses, set |
ellipse.stroke |
the stroke colour for the error
ellipses. Follows the same formatting guidelines as
|
sigdig |
number of significant digits for the barycentric age |
xlim |
optional limits of the x-axis (log[U/He]) of the
logratio plot. If |
ylim |
optional limits of the y-axis (log[Th/He]) of the
logratio plot. If |
fact |
three-element vector with scaling factors of the
ternary diagram if |
hide |
vector with indices of aliquots that should be removed from the plot. |
omit |
vector with indices of aliquots that should be plotted but omitted from the barycentric age calculation. |
omit.fill |
fill colour that should be used for the omitted aliquots. |
omit.stroke |
stroke colour that should be used for the omitted aliquots. |
... |
optional arguments to the generic |
U, Th, Sm and He are compositional data. This means that it is not so much the absolute concentrations of these elements that bear the chronological information, but rather their relative proportions. The space of all possible U-Th-He compositions fits within the constraints of a ternary diagram or ‘helioplot’ (Vermeesch, 2008, 2010). If Sm is included as well, then this expands to a three-dimensional tetrahaedral space (Vermeesch, 2008). Data that fit within these constrained spaces must be subjected to a logratio transformation prior to statistical analysis (Aitchison, 1986). In the case of the U-Th-He-(Sm)-He system, this is achieved by first defining two (or three) new variables:
and then performing the desired statistical analysis (averaging, uncertainty propagation, ...) on the transformed data. Upon completion of the mathematical operations, the results can then be mapped back to U-Th-(Sm)-He space using an inverse logratio transformation:
,
,
where . In the context of
U-Th-(Sm)-He dating, the barycentric age (which is
equivalent to the 'central age' of Vermeesch, 2008) is defined as
the date that corresponds to the compositional mean, which is
equivalent to the arithmetic mean composition in logratio space.
IsoplotR
's helioplot
function performs this
calculation using the same algorithm that is used to obtain the
weighted mean U-Pb composition for the concordia
age
calculation. Overdispersion is treated similarly as in a regression
context (see isochron
). Thus, there are options to
augment the uncertainties with a factor (model
1); to ignore the analytical uncertainties altogether (model 2); or
to add a constant overdispersion term to the analytical
uncertainties (model 3). The
helioplot
function visualises
U-Th-(Sm)-He data on either a ternary diagram or a bivariate
vs.
contour plot. These diagrams
provide a convenient way to simultaneously display the isotopic
composition of samples as well as their chronological meaning. In
this respect, they fulfil the same purpose as the U-Pb
concordia
diagram and the U-series
evolution
plot.
Aitchison, J., 1986, The statistical analysis of compositional data: London, Chapman and Hall, 416 p.
Vermeesch, P., 2008. Three new ways to calculate average (U-Th)/He ages. Chemical Geology, 249(3), pp.339-347.
Vermeesch, P., 2010. HelioPlot, and the treatment of overdispersed (U-Th-Sm)/He data. Chemical Geology, 271(3), pp.108-111.
attach(examples) helioplot(UThHe) dev.new() helioplot(UThHe,logratio=FALSE)
attach(examples) helioplot(UThHe) dev.new() helioplot(UThHe,logratio=FALSE)
Plots cogenetic U-Pb, Ar-Ar, K-Ca, Pb-Pb, Th-Pb, Rb-Sr, Sm-Nd,
Re-Os, Lu-Hf, U-Th-He or Th-U data as X-Y scatterplots, fits an
isochron curve through them using the york
,
titterington
or ludwig
function, and computes the
corresponding isochron age, including decay constant uncertainties.
isochron(x, ...) ## Default S3 method: isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", xlab = "x", ylab = "y", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, title = TRUE, model = 1, wtype = 1, anchor = 0, show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", ... ) ## S3 method for class 'other' isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", xlab = "x", ylab = "y", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, title = TRUE, model = 1, wtype = 1, anchor = 0, flippable = 0, show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", ... ) ## S3 method for class 'UPb' isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", joint = TRUE, ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", type = 1, ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, exterr = FALSE, model = 1, show.ellipses = 1 * (model != 2), anchor = 0, hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", y0option = 1, taxis = FALSE, ... ) ## S3 method for class 'PbPb' isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", inverse = TRUE, ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, exterr = FALSE, model = 1, wtype = 1, anchor = 0, growth = FALSE, show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", ... ) ## S3 method for class 'ArAr' isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", inverse = TRUE, ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, exterr = FALSE, model = 1, wtype = 1, anchor = 0, show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", taxis = FALSE, ... ) ## S3 method for class 'ThPb' isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", inverse = FALSE, ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, exterr = FALSE, model = 1, wtype = 1, anchor = 0, show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", taxis = FALSE, ... ) ## S3 method for class 'KCa' isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", inverse = FALSE, ci.col = "gray80", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", line.col = "black", lwd = 1, plot = TRUE, exterr = FALSE, model = 1, wtype = 1, anchor = 0, show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", taxis = FALSE, bratio = 0.895, ... ) ## S3 method for class 'RbSr' isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", inverse = FALSE, ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, exterr = FALSE, model = 1, wtype = 1, anchor = 0, show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", taxis = FALSE, ... ) ## S3 method for class 'ReOs' isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", inverse = FALSE, ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, exterr = FALSE, model = 1, wtype = 1, anchor = 0, show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", taxis = FALSE, ... ) ## S3 method for class 'SmNd' isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", inverse = FALSE, ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, exterr = FALSE, model = 1, wtype = 1, anchor = 0, show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", taxis = FALSE, ... ) ## S3 method for class 'LuHf' isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", inverse = FALSE, ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, exterr = FALSE, model = 1, wtype = 1, anchor = 0, show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", taxis = FALSE, ... ) ## S3 method for class 'UThHe' isochron( x, sigdig = 2, oerr = 3, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, model = 1, wtype = 1, anchor = 0, show.ellipses = 2 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", ... ) ## S3 method for class 'ThU' isochron( x, type = 2, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, exterr = FALSE, model = 1, wtype = "a", show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", y0option = 4, ... )
isochron(x, ...) ## Default S3 method: isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", xlab = "x", ylab = "y", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, title = TRUE, model = 1, wtype = 1, anchor = 0, show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", ... ) ## S3 method for class 'other' isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", xlab = "x", ylab = "y", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, title = TRUE, model = 1, wtype = 1, anchor = 0, flippable = 0, show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", ... ) ## S3 method for class 'UPb' isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", joint = TRUE, ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", type = 1, ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, exterr = FALSE, model = 1, show.ellipses = 1 * (model != 2), anchor = 0, hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", y0option = 1, taxis = FALSE, ... ) ## S3 method for class 'PbPb' isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", inverse = TRUE, ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, exterr = FALSE, model = 1, wtype = 1, anchor = 0, growth = FALSE, show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", ... ) ## S3 method for class 'ArAr' isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", inverse = TRUE, ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, exterr = FALSE, model = 1, wtype = 1, anchor = 0, show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", taxis = FALSE, ... ) ## S3 method for class 'ThPb' isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", inverse = FALSE, ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, exterr = FALSE, model = 1, wtype = 1, anchor = 0, show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", taxis = FALSE, ... ) ## S3 method for class 'KCa' isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", inverse = FALSE, ci.col = "gray80", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", line.col = "black", lwd = 1, plot = TRUE, exterr = FALSE, model = 1, wtype = 1, anchor = 0, show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", taxis = FALSE, bratio = 0.895, ... ) ## S3 method for class 'RbSr' isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", inverse = FALSE, ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, exterr = FALSE, model = 1, wtype = 1, anchor = 0, show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", taxis = FALSE, ... ) ## S3 method for class 'ReOs' isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", inverse = FALSE, ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, exterr = FALSE, model = 1, wtype = 1, anchor = 0, show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", taxis = FALSE, ... ) ## S3 method for class 'SmNd' isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", inverse = FALSE, ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, exterr = FALSE, model = 1, wtype = 1, anchor = 0, show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", taxis = FALSE, ... ) ## S3 method for class 'LuHf' isochron( x, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", inverse = FALSE, ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, exterr = FALSE, model = 1, wtype = 1, anchor = 0, show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", taxis = FALSE, ... ) ## S3 method for class 'UThHe' isochron( x, sigdig = 2, oerr = 3, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, model = 1, wtype = 1, anchor = 0, show.ellipses = 2 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", ... ) ## S3 method for class 'ThU' isochron( x, type = 2, oerr = 3, sigdig = 2, show.numbers = FALSE, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", ci.col = "gray80", line.col = "black", lwd = 1, plot = TRUE, exterr = FALSE, model = 1, wtype = "a", show.ellipses = 1 * (model != 2), hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", y0option = 4, ... )
x |
EITHER a matrix with the following five columns:
OR an object of class |
... |
optional arguments to be passed on to |
oerr |
indicates whether the analytical uncertainties of the output are reported in the plot title as:
|
sigdig |
the number of significant digits of the numerical values reported in the title of the graphical output |
show.numbers |
logical flag ( |
levels |
a vector with additional values to be displayed as different background colours within the error ellipses. |
clabel |
label for the colour scale |
xlab |
text label for the horizontal plot axis |
ylab |
text label for the vertical plot axis |
ellipse.fill |
Fill colour for the error ellipses. This can either be a single colour or multiple colours to form a colour ramp. Examples: a single colour: multiple colours: a colour palette: a reversed palette: For empty ellipses, set |
ellipse.stroke |
the stroke colour for the error
ellipses. Follows the same formatting guidelines as
|
ci.col |
the fill colour for the confidence interval of the intercept and slope. |
line.col |
colour of the isochron line |
lwd |
line width |
plot |
if |
title |
add a title to the plot? |
model |
construct the isochron using either:
|
wtype |
controls the parameter responsible for the overdispersion in model-3 regression. If
otherwise,
|
anchor |
control parameters to fix the intercept age or common Pb composition of the isochron fit. This can be a scalar or a vector. If If If |
show.ellipses |
show the data as:
|
hide |
vector with indices of aliquots that should be removed from the plot. |
omit |
vector with indices of aliquots that should be plotted but omitted from the isochron age calculation. |
omit.fill |
fill colour that should be used for the omitted aliquots. |
omit.stroke |
stroke colour that should be used for the omitted aliquots. |
flippable |
controls if generic data (where |
joint |
logical. Only applies to U-Pb data formats 4 and
above. If |
type |
if
if
if
|
exterr |
propagate external sources of uncertainty (J, decay constant)? |
y0option |
controls the type of y-intercept or activity ratio that is reported along with the isochron age. Only relevant to U-Pb data and Th-U data formats 1 and 2. For U-Pb data:
For Th-U data:
|
taxis |
logical. If |
inverse |
toggles between normal and inverse isochrons. If the
isochron plots If If |
growth |
add Stacey-Kramers Pb-evolution curve to the plot? |
bratio |
the |
Given several aliquots from a single sample, isochrons allow the
non-radiogenic component of the daughter nuclide to be quantified
and separated from the radiogenic component. In its simplest form,
an isochron is obtained by setting out the amount of radiogenic
daughter against the amount of radioactive parent, both normalised
to a non-radiogenic isotope of the daughter element, and fitting a
straight line through these points by least squares regression
(Nicolaysen, 1961). The slope and intercept then yield the
radiogenic daughter-parent ratio and the non-radiogenic daughter
composition, respectively. There are several ways to fit an
isochron. The easiest of these is total least squares
regression, which weighs all data points equally. In the presence
of quantifiable analytical uncertainty, it is equally
straightforward to use the inverse of the y-errors as weights. It
is significantly more difficult to take into account uncertainties
in both the x- and the y-variable (York, 1966). IsoplotR
does so for its U-Th-He isochron calculations. The York (1966)
method assumes that the analytical uncertainties of the x- and
y-variables are independent from each other. This assumption is
rarely met in geochronology. York (1968) addresses this issue with
a bivariate error weighted linear least squares algorithm that
accounts for covariant errors in both variables. This algorithm was
further improved by York et al. (2004) to ensure consistency with
the maximum likelihood approach of Titterington and Halliday
(1979).
IsoplotR
uses the York et al. (2004) algorithm for its
Ar-Ar, K-Ca, Pb-Pb, Th-Pb, Rb-Sr, Sm-Nd, Re-Os and Lu-Hf
isochrons. The maximum likelihood algorithm of Titterington and
Halliday (1979) was generalised from two to three dimensions by
Ludwig and Titterington (1994) for U-series disequilibrium dating.
Also this algorithm is implemented in IsoplotR
. Finally, the
constrained maximum likelihood algorithms of Ludwig (1998) and
Vermeesch (2020) are used for isochron regression of U-Pb data. The
extent to which the observed scatter in the data can be explained
by the analytical uncertainties can be assessed using the Mean
Square of the Weighted Deviates (MSWD, McIntyre et al., 1966),
which is defined as:
where are the data,
are the fitted values,
and
is the covariance matrix of
, and
are the degrees of freedom, where
is the
dimensionality of the linear fit. MSWD values that are far smaller
or greater than 1 indicate under- or overdispersed measurements,
respectively. Underdispersion can be attributed to overestimated
analytical uncertainties.
IsoplotR
provides three
alternative strategies to deal with overdispersed data:
Attribute the overdispersion to an underestimation of the
analytical uncertainties. In this case, the excess scatter can be
accounted for by inflating those uncertainties by a factor
.
Ignore the analytical uncertainties and perform a total least squares regression.
Attribute the overdispersion to the presence of 'geological scatter'. In this case, the excess scatter can be accounted for by adding an overdispersion term that lowers the MSWD to unity.
If x
has class PbPb
, ThPb
,
ArAr
, KCa
, RbSr
, SmNd
, ReOs
or LuHf
, or UThHe
, returns a list with the
following items:
the intercept of the straight line fit and its standard error.
the slope of the fit and its standard error.
the covariance of the slope and intercept
the degrees of freedom of the linear fit (
for non-anchored fits)
a two- or three-element list containing:
y
: the atmospheric Ar/
Ar or initial
Ca/
Ca,
Os/
Os,
Sr/
Rb,
Nd/
Nd,
Hf/
Hf or
Pb/
Pb
ratio.
s[y]
: the standard error of y
disp[y]
: the standard error of y
enhanced by
(only applicable if
model=1
).
a three-element list containing:
t
: the Pb/
Pb,
Pb/
Th,
Ar/
Ar,
K/
Ca,
Os/
Re,
Sr/
Rb,
Nd/
Nd or
Hf/
Hf age.
s[t]
: the standard error of t
disp[t]
: the standard error of t
enhanced by
(only applicable if
model=1
).
the mean square of the residuals (a.k.a 'reduced
Chi-square') statistic (omitted if model=2
).
the p-value of a Chi-square test for linearity
(omitted if model=2
)
the overdispersion term, i.e. a two-element vector with
the standard deviation of the (assumed) normally distributed
geological scatter that underlies the measurements, and its
standard error (only returned if model=3
).
(only reported if x
has class PbPb
and
growth
is TRUE
) the intercept(s) of the isochron with
the Stacey-Kramers mantle evolution curve.
OR, if x
has class ThU
:
if x$type=1
or x$type=3
: the best fitting
Th/
Th intercept,
Th/
U slope,
U/
Th
intercept and
U/
U slope, OR, if
x$type=2
or x$type=4
: the best fitting
U/
U intercept,
Th/
Th slope,
U/
U
intercept and
U/
Th slope.
the covariance matrix of par
.
the degrees of freedom for the linear fit, i.e. if
x$format=1
or x$format=2
, and if
x$format=3
or x$format=4
if type=1
: the Th/
Th
intercept; if
type=2
: the Th/
U
intercept; if
type=3
: the Th/
Th
intercept; if
type=4
: the Th/
U
intercept and its propagated uncertainty.
if type=1
: the Th/
U slope;
if
type=2
: the Th/
Th slope; if
type=3
: the U/
U slope; if
type=4
: the U/
Th slope and its
propagated uncertainty.
the covariance between a
and b
.
the mean square of the residuals (a.k.a 'reduced Chi-square') statistic.
the p-value of a Chi-square test for linearity.
a three-element vector containing:
y
: the initial U/
U-ratio
s[y]
: the standard error of y
disp[y]
: the standard error of y
enhanced by
.
a two (or three) element vector containing:
t
: the initial U/
U-ratio
s[t]
: the standard error of t
disp[t]
: the standard error of t
enhanced by
(only reported if
model=1
).
the overdispersion term, i.e. a two-element vector with the standard deviation of the (assumedly) Normally distributed geological scatter that underlies the measurements, and its standard error.
a matrix with the following columns: the X-variable for the isochron plot, the analytical uncertainty of X, the Y-variable for the isochron plot, the analytical uncertainty of Y, and the correlation coefficient between X and Y.
the x-label of the isochron plot
the y-label of the isochron plot
OR if x
has class UPb
:
if model=1
or 2
, a three element vector
containing the isochron age and the common Pb isotope ratios. If
model=3
, adds a fourth element with the overdispersion
parameter .
the covariance matrix of par
the logarithm of par
the logarithm of cov
the number of analyses in the dataset
the degrees of freedom for the linear fit, i.e.
the y-intercept and its standard error
the isochron slope and its standard error
the covariance between a
and b
.
the mean square of the residuals (a.k.a 'reduced Chi-square') statistic.
the p-value of a Chi-square test for linearity.
a two or three-element vector containing:
y
: the initial Pb/
Pb-ratio (if
type=1
and x$format=4,5
or 6
);
Pb/
Pb-ratio (if
type=2
and
x$format=4,5
or 6
);
Pb/
Pb-ratio (if
type=1
and
x$format=7
or 8
);
Pb/
Pb-ratio (if
type=2
and
x$format=7
or 8
);
Pb/
Pb-ratio (if
type=3
and
x$format=7
or 8
); or
Pb/
Pb-ratio (if
type=4
and
x$format=7
or 8
).
s[y]
: the standard error of y
disp[y]
: the standard error of y
enhanced by
(only returned if
model=1
)
the y-axis label of the isochron plot
a two (or three) element vector containing:
t
: the isochron age
s[t]
: the standard error of t
disp[t]
: the standard error of t
enhanced by
(only reported if
model=1
).
the x-label of the isochron plot
the y-label of the isochron plot
OR, if x
has class other
and x$format
is
either 4
or 5
and flippable
is not 0
,
returns
Dd
: the ratio of the inherited radiogenic daughter to its
nonradiogenic sister isotope
DP
: the ratio fo the radiogic daughter to its radioactive parent
cov.DdDP
: the covariance between Dd
and DP
.
In the remaining types of other
data, the intercept a
and b
are returned along with their covariance.
Ludwig, K.R. and Titterington, D.M., 1994. Calculation of
Th/U isochrons, ages, and errors. Geochimica et
Cosmochimica Acta, 58(22), pp.5031-5042.
Ludwig, K.R., 1998. On the treatment of concordant uranium-lead ages. Geochimica et Cosmochimica Acta, 62(4), pp.665-676.
Nicolaysen, L.O., 1961. Graphic interpretation of discordant age measurements on metamorphic rocks. Annals of the New York Academy of Sciences, 91(1), pp.198-206.
Titterington, D.M. and Halliday, A.N., 1979. On the fitting of parallel isochrons and the method of maximum likelihood. Chemical Geology, 26(3), pp.183-195.
Vermeesch, P., 2020. Unifying the U-Pb and Th-Pb methods: joint isochron regression and common Pb correction, Geochronology, 2, 119-131.
York, D., 1966. Least-squares fitting of a straight line. Canadian Journal of Physics, 44(5), pp.1079-1086.
York, D., 1968. Least squares fitting of a straight line with correlated errors. Earth and Planetary Science Letters, 5, pp.320-324.
York, D., Evensen, N.M., Martinez, M.L. and De Basebe Delgado, J., 2004. Unified equations for the slope, intercept, and standard errors of the best straight line. American Journal of Physics, 72(3), pp.367-375.
attach(examples) isochron(RbSr) fit <- isochron(ArAr,inverse=FALSE,plot=FALSE) dev.new() isochron(ThU,type=4)
attach(examples) isochron(RbSr) fit <- isochron(ArAr,inverse=FALSE,plot=FALSE) dev.new() isochron(ThU,type=4)
A list of documented functions may be viewed by typing
help(package='IsoplotR')
. Detailed instructions are
provided at https://www.ucl.ac.uk/~ucfbpve/isoplotr/. Further
details about the theoretical background are provided by
Vermeesch (2018).
Maintainer: Pieter Vermeesch [email protected]
Vermeesch, P., 2018, IsoplotR: a free and open toolbox for geochronology. Geoscience Frontiers, 9, 1479-1493, doi: 10.1016/j.gsf.2018.04.001.
Useful links:
Creates one or more kernel density estimates using a combination of the Botev (2010) bandwidth selector and the Abramson (1982) adaptive kernel bandwidth modifier.
kde(x, ...) ## Default S3 method: kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'other' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'UPb' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, type = 4, cutoff.76 = 1100, cutoff.disc = discfilter(), common.Pb = 0, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'detritals' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = FALSE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, ncol = NA, samebandwidth = TRUE, normalise = TRUE, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'PbPb' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, common.Pb = 2, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'ArAr' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, i2i = FALSE, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'KCa' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, i2i = FALSE, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'ThPb' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, i2i = FALSE, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'ThU' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [ka]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, Th0i = 0, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'ReOs' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, i2i = TRUE, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'SmNd' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, i2i = TRUE, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'RbSr' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, i2i = TRUE, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'LuHf' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, i2i = TRUE, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'UThHe' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'fissiontracks' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, hide = NULL, nmodes = 0, sigdig = 2, ... )
kde(x, ...) ## Default S3 method: kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'other' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'UPb' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, type = 4, cutoff.76 = 1100, cutoff.disc = discfilter(), common.Pb = 0, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'detritals' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = FALSE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, ncol = NA, samebandwidth = TRUE, normalise = TRUE, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'PbPb' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, common.Pb = 2, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'ArAr' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, i2i = FALSE, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'KCa' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, i2i = FALSE, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'ThPb' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, i2i = FALSE, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'ThU' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [ka]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, Th0i = 0, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'ReOs' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, i2i = TRUE, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'SmNd' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, i2i = TRUE, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'RbSr' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, i2i = TRUE, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'LuHf' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, i2i = TRUE, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'UThHe' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, hide = NULL, nmodes = 0, sigdig = 2, ... ) ## S3 method for class 'fissiontracks' kde( x, from = NA, to = NA, bw = NA, adaptive = TRUE, log = FALSE, n = 512, plot = TRUE, rug = TRUE, xlab = "age [Ma]", ylab = "", kde.col = rgb(1, 0, 1, 0.6), hist.col = rgb(0, 1, 0, 0.2), show.hist = TRUE, bty = "n", binwidth = NA, hide = NULL, nmodes = 0, sigdig = 2, ... )
x |
a vector of numbers OR an object of class |
... |
optional arguments to be passed on to |
from |
minimum age of the time axis. If |
to |
maximum age of the time axis. If |
bw |
the bandwidth of the KDE. If |
adaptive |
logical flag controlling if the adaptive KDE modifier of Abramson (1982) is used |
log |
transform the ages to a log scale if |
n |
horizontal resolution (i.e., the number of segments) of the density estimate. |
plot |
show the KDE as a plot |
rug |
add a rug plot? |
xlab |
the x-axis label |
ylab |
the y-axis label |
kde.col |
the fill colour of the KDE specified as a four
element vector of |
hist.col |
the fill colour of the histogram specified as a
four element vector of |
show.hist |
logical flag indicating whether a histogram should be added to the KDE |
bty |
change to |
binwidth |
scalar width of the histogram bins, in Myr if
|
hide |
vector with indices of aliquots that should be removed from the plot. |
nmodes |
label the |
sigdig |
the number of significant digits to which the modes
should be labelled. Only used if |
type |
scalar indicating whether to plot the
|
cutoff.76 |
the age (in Ma) below which the
|
cutoff.disc |
discordance cutoff filter. This is an object of
class |
common.Pb |
common lead correction:
|
ncol |
scalar value indicating the number of columns over which the KDEs should be divided. |
samebandwidth |
logical flag indicating whether the same
bandwidth should be used for all samples. If
|
normalise |
logical flag indicating whether or not the KDEs should all integrate to the same value. |
i2i |
‘isochron to intercept’: calculates the initial (aka
‘inherited’, ‘excess’, or ‘common’)
|
Th0i |
initial
|
Given a set of age estimates
,
histograms and KDEs are probability density estimators that display
age distributions by smoothing. Histograms do this by grouping the
data into a number of regularly spaced bins. Alternatively, kernel
density estimates (KDEs; Vermeesch, 2012) smooth data by applying a
(Gaussian) kernel:
where is the probability of observing a value
under a Normal distribution with mean
and
standard deviation
.
is the smoothing
parameter or ‘bandwidth’ of the kernel density estimate, which may
or may not depend on the age
. If
depends on
, then
is known as an ‘adaptive’ KDE. The
default bandwidth used by
IsoplotR
is calculated using the
algorithm of Botev et al. (2010) and modulated by the adaptive
smoothing approach of Abramson (1982). The rationale behind
adaptive kernel density estimation is to use a narrower bandwidth
near the peaks of the sampling distribution (where the ordered
dates are closely spaced in time), and a wider bandwidth in the
distribution's sparsely sampled troughs. Thus, the resolution of
the density estimate is optimised according to data availability.
If x
has class UPb
, PbPb
, ArAr
,
KCa
, ReOs
, SmNd
, RbSr
,
UThHe
, fissiontracks
or ThU
, returns an
object of class KDE
, i.e. a list containing the
following items:
horizontal plot coordinates
vertical plot coordinates
the base bandwidth of the density estimate
the data values from the input to
the kde
function
copied from the input
a two-column matrix with the x
and y
values of the nmodes
most prominent modes. Only returned
if nmodes
is a positive integer or 'all'
.
an object of class histogram
.
Only returned if show.hist
is TRUE
or, if x
has class =detritals
, an object of class
KDEs
, i.e. a list containing the following items:
a named list with objects of class KDE
the beginning of the common time scale
the end of the common time scale
the maximum probability density of all the KDEs
the x-axis label to be used by plot.KDEs(...)
Abramson, I.S., 1982. On bandwidth variation in kernel estimates-a square root law. The annals of Statistics, pp.1217-1223.
Botev, Z. I., J. F. Grotowski, and D. P. Kroese. "Kernel density estimation via diffusion." The Annals of Statistics 38.5 (2010): 2916-2957.
Vermeesch, P., 2012. On the visualisation of detrital age distributions. Chemical Geology, 312, pp.190-194.
kde(examples$UPb) dev.new() kde(examples$FT1,log=TRUE) dev.new() kde(examples$DZ,from=1,to=3000,kernel="epanechnikov")
kde(examples$UPb) dev.new() kde(examples$FT1,log=TRUE) dev.new() kde(examples$DZ,from=1,to=3000,kernel="epanechnikov")
Implements the maximum likelihood algorithm for Total-Pb/U isochron regression of Ludwig (1998) and extends the underlying methodology to accommodate U-Th-Pb data and initial U-series disequilibrium.
ludwig( x, model = 1, anchor = 0, exterr = FALSE, type = "joint", plot = FALSE, ... ) ludwig( x, model = 1, anchor = 0, exterr = FALSE, type = "joint", plot = FALSE, ... )
ludwig( x, model = 1, anchor = 0, exterr = FALSE, type = "joint", plot = FALSE, ... ) ludwig( x, model = 1, anchor = 0, exterr = FALSE, type = "joint", plot = FALSE, ... )
x |
an object of class |
model |
one of three regression models:
|
anchor |
control parameters to fix the intercept age or common Pb composition of the isochron fit. This can be a scalar or a vector. If If If If |
exterr |
propagate external sources of uncertainty (i.e. decay constants)? |
type |
only relevant if
|
plot |
logical. Only relevant for datasets with measured
disequilibrium. If |
... |
optional arguments |
The 3-dimensional regression algorithm of Ludwig and Titterington
(1994) was modified by Ludwig (1998) to fit so-called 'Total Pb-U
isochrons'. These are constrained to a radiogenic endmember
composition that falls on the concordia
line. In its
most sophisticated form, this algorithm does not only allow for
correlated errors between variables, but also between
aliquots. IsoplotR
currently uses this algorithm to
propagate decay constant uncertainties in the total Pb-U isochron
ages.
a vector with the lower concordia intercept, the common
Pb ratios, the dispersion parameter (if model=3
), and the
initial U/
U and
Th/
U activity ratio (in the presence of
initial disequilibrium).
the covariance matrix of par
the degrees of freedom of the model fit ( if
x$format<4
or if
x$format>3
, where
is the number of aliquots).
the mean square of weighted deviates (a.k.a. reduced Chi-square statistic) for the fit.
p-value of a Chi-square test for the linear fit
Ludwig, K.R., 1998. On the treatment of concordant uranium-lead ages. Geochimica et Cosmochimica Acta, 62(4), pp.665-676.
Ludwig, K.R. and Titterington, D.M., 1994. Calculation of
Th/U isochrons, ages, and errors. Geochimica et
Cosmochimica Acta, 58(22), pp.5031-5042.
concordia
, titterington
,
isochron
f <- system.file("UPb4.csv",package="IsoplotR") d <- read.data(f,method="U-Pb",format=4) fit <- ludwig(d)
f <- system.file("UPb4.csv",package="IsoplotR") d <- read.data(f,method="U-Pb",format=4) fit <- ludwig(d)
Returns the predicted Pb/
U and
Pb/
U ratios for any given time with or
without initial U-series disequilibrium.
mclean(tt = 0, d = diseq(), exterr = FALSE)
mclean(tt = 0, d = diseq(), exterr = FALSE)
tt |
the age of the sample |
d |
an object of class diseq |
exterr |
propagate the uncertainties associated with decay
constants and the |
U decays to Pb in 14 (for U) or 11/12 (for
U) steps. Conventional U-Pb geochronology assumes
that secular equilibrium between all the short lived intermediate
daughters was established at the time of isotopic closure. Under
this assumption, the relative abundances of those intermediate
daughters can be neglected and the age equation reduces to a simple
function of the measured Pb/U ratios. In reality, however, the
assumption of initial secular equilibrium is rarely met. Accounting
for disequilibrium requires a more complex set of age equations,
which are based on a coupled system of differetial equations. The
solution to this system of equations is given by a matrix
exponential.
IsoplotR
solves this matrix exponential for any
given time, using either the assumed initial activity ratios, or
(for young samples) the measured activity ratios of the longest
lived intermediate daughters. Based on a Matlab
script by
Noah McLean.
a list containing the initial and present-day atomic
abundances of the U-
Pb and
U-
Pb decay chains; the
Pb/
U,
Pb/
U and
Pb/
Pb ratios at time
tt
; the
derivatives of the Pb/
U,
Pb/
U and
Pb/
Pb ratios with respect to time;
and the derivatives of the
Pb/
U,
Pb/
U and
Pb/
Pb ratios with respect to the
intermediate decay constants and
U/
U-ratio.
Noah McLean (algorithm) and Pieter Vermeesch (code)
d <- diseq(U48=list(x=0,option=1),ThU=list(x=2,option=1), RaU=list(x=2,option=1),PaU=list(x=2,option=1)) mclean(tt=2,d=d)
d <- diseq(U48=list(x=0,option=1),ThU=list(x=2,option=1), RaU=list(x=2,option=1),PaU=list(x=2,option=1)) mclean(tt=2,d=d)
Performs classical or nonmetric Multidimensional Scaling analysis
mds(x, ...) ## Default S3 method: mds( x, classical = FALSE, plot = TRUE, shepard = FALSE, nnlines = FALSE, pos = NULL, col = "black", bg = "white", xlab = NA, ylab = NA, asp = 1, ... ) ## S3 method for class 'detritals' mds( x, method = "KS", classical = FALSE, plot = TRUE, shepard = FALSE, nnlines = FALSE, pos = NULL, col = "black", bg = "white", xlab = NA, ylab = NA, hide = NULL, asp = 1, ... )
mds(x, ...) ## Default S3 method: mds( x, classical = FALSE, plot = TRUE, shepard = FALSE, nnlines = FALSE, pos = NULL, col = "black", bg = "white", xlab = NA, ylab = NA, asp = 1, ... ) ## S3 method for class 'detritals' mds( x, method = "KS", classical = FALSE, plot = TRUE, shepard = FALSE, nnlines = FALSE, pos = NULL, col = "black", bg = "white", xlab = NA, ylab = NA, hide = NULL, asp = 1, ... )
x |
a dissimilarity matrix OR an object of class
|
... |
optional arguments to the generic |
classical |
logical flag indicating whether classical
( |
plot |
show the MDS configuration (if |
shepard |
logical flag indicating whether the graphical output
should show the MDS configuration ( |
nnlines |
if |
pos |
a position specifier for the labels (if
|
col |
plot colour (may be a vector) |
bg |
background colour (may be a vector) |
xlab |
a string with the label of the x axis |
ylab |
a string with the label of the y axis |
asp |
aspect ratio of the MDS configuration. See
|
method |
either |
hide |
vector with indices of aliquots that should be removed from the plot. |
Multidimensional Scaling (MDS) is a dimension-reducting technique
that takes a matrix of pairwise ‘dissimilarities’ between objects
(e.g., age distributions) as input and produces a configuration of
two (or higher-) dimensional coordinates as output, so that the
Euclidean distances between these coordinates approximate the
dissimilarities of the input matrix. Thus, an MDS-configuration
serves as a ‘map’ in which similar samples cluster closely together
and dissimilar samples plot far apart. In the context of detrital
geochronology, the dissimilarity between samples is given by the
statistical distance between age distributions. There are many ways
to define this statistical distance. IsoplotR
uses the
Kolmogorov-Smirnov (KS) statistic due to its simplicity and the
fact that it behaves like a true distance in the mathematical sense
of the word (Vermeesch, 2013). The KS-distance is given by the
maximum vertical distance between two cad
step
functions. Thus, the KS-distance takes on values between zero
(perfect match between two age distributions) and one (no overlap
between two distributions). Calculating the KS-distance between
samples two at a time populates a symmetric dissimilarity matrix
with positive values and a zero diagonal. IsoplotR
implements two algorithms to convert this matrix into a
configuration. The first (‘classical’) approach uses a sequence of
basic matrix manipulations developed by Young and Householder
(1938) and Torgerson (1952) to achieve a linear fit between the
KS-distances and the fitted distances on the MDS configuration. The
second, more sophisticated (‘nonmetric’) approach subjects the
input distances to a transformation prior to fitting a
configuration:
where is the KS-distance between samples
and
(for
) and
is the ‘disparity’ (Kruskal, 1964). Fitting an MDS
configuration then involves finding the disparity transformation
that maximises the goodness of fit (or minimises the ‘stress’)
between the disparities and the fitted distances. The latter two
quantities can also be plotted against each other as a 'Shepard
plot'.
Returns an object of class MDS
, i.e. a list
containing the following items:
a two-column vector of the fitted configuration
a logical flag indicating whether the MDS
configuration was obtained by classical (TRUE
) or
nonmetric (FALSE
) MDS
the dissimilarity matrix used for the MDS analysis
(only if classical=TRUE
) the final stress
achieved (in percent)
Kruskal, J., 1964. Multidimensional scaling by optimizing goodness of fit to a nonmetric hypothesis. Psychometrika 29 (1), 1-27.
Torgerson, W. S. Multidimensional scaling: I. Theory and method. Psychometrika, 17(4): 401-419, 1952.
Vermeesch, P., 2013. Multi-sample comparison of detrital age distributions. Chemical Geology, 341, pp.140-146.
Young, G. and Householder, A. S. Discussion of a set of points in terms of their mutual distances. Psychometrika, 3(1):19-22, 1938.
attach(examples) mds(DZ,nnlines=TRUE,pch=21,cex=5) dev.new() mds(DZ,shepard=TRUE)
attach(examples) mds(DZ,nnlines=TRUE,pch=21,cex=5) dev.new() mds(DZ,shepard=TRUE)
Linear regression with inter-sample error correlations.
ogls(x, ...) ## Default S3 method: ogls(x, random.effects = FALSE, ...) ## S3 method for class 'other' ogls(x, random.effects = FALSE, ...)
ogls(x, ...) ## Default S3 method: ogls(x, random.effects = FALSE, ...) ## S3 method for class 'other' ogls(x, random.effects = FALSE, ...)
x |
either a |
... |
optional arguments |
random.effects |
logical. If |
a list of the slope and intercept of the best fit line as well as their standard errors and covariance.
Pieter Vermeesch and Mathieu Daëron
Daëron, M., 2023. Making the Case for Reconciled
47 Calibrations Using Omnivariant Generalized
Least-Squares Regression (No. EGU23-10066). Copernicus
Meetings.
Daëron & Vermeesch, in prep. Omnivariant Generalized Least Squares
Regression: Theory, Geochronological Applications, and Making the
Case for Reconciled 47 calibrations, Chemical Geology.
fn <- system.file('UW137.csv',package='IsoplotR') UW137 <- read.data(fn,method='other',format=6) fit <- ogls(UW137)
fn <- system.file('UW137.csv',package='IsoplotR') UW137 <- read.data(fn,method='other',format=6) fit <- ogls(UW137)
Applies a common-Pb correction to a U-Pb dataset using either the Stacey-Kramers mantle evolution model, isochron regression, or any nominal initial Pb isotope composition.
Pb0corr(x, option = 3, omit4c = NULL)
Pb0corr(x, option = 3, omit4c = NULL)
x |
an object of class |
option |
one of either
|
omit4c |
vector with indices of aliquots that should be
omitted from the isochron regression (only used if
|
IsoplotR
implements nine different methods to correct for
the presence of non-radiogenic (‘common’) lead. This includes three
strategies tailored to datasets that include Pb
measurements, three strategies tailored to datasets that include
Pb measurements, and a further three strategies for
datasets that only include
Pb and
Pb.
Pb is the only one of lead's four stable isotopes that
does not have a naturally occurring radioactive parent. This makes
it very useful for common-Pb correction:
where marks the radiogenic
Pb or
Pb component;
is the measured ratio; and
is the non-radiogenic component.
IsoplotR
offers three different ways to determine
. The first and easiest option
is to simply use a nominal value such as the
Pb/
Pb-ratio of a cogenetic feldspar,
assuming that this is representative for the common-Pb composition
of the entire sample. A second method is to determine the
non-radiogenic isotope composition by fitting an isochron line
through multiple aliquots of the same sample, using the
3-dimensional regression algorithm of Ludwig (1998).
Unfortunately, neither of these two methods is applicable to
detrital samples, which generally lack identifiable cogenetic
minerals and aliquots. For such samples, IsoplotR
infers the
common-Pb composition from the two-stage crustal evolution model of
Stacey and Kramers (1975). The second stage of this model is
described by:
where and
. These
Equations can be solved for
and
using the method of
maximum likelihood. The
Pb/
Pb-ratio is
corrected in exactly the same way, using
.
In the absence of Pb measurements, a
Pb-based
common lead correction can be used:
where marks the non-radiogenic
-component, which is obtained by removing the
radiogenic component for any given age.
If neither Pb nor
Pb were measured,
then a
Pb-based common lead correction can be used:
where is the fraction of common lead, and
is obtained by projecting the U-Pb
measurements on the concordia line in Tera-Wasserburg space. Like
before, the initial lead composition
can be obtained in three
possible ways: by analysing a cogenetic mineral, by isochron
regression through multiple aliquots, or from the Stacey and
Kramers (1975) model.
Besides the common-Pb problem, a second reason for U-Pb discordance
is radiogenic Pb-loss during igneous and metamorphic activity.
This moves the data away from the concordia line along a linear
array, forming an isochron or ‘discordia’ line. IsoplotR
fits this line using the Ludwig (1998) algorithm. If the data are
plotted on a Wetherill concordia diagram, the program will not only
report the usual lower intercept with the concordia line, but the
upper intercept as well. Both values are geologically meaningful as
they constrain both the initial igneous age as well as the timing
of the partial resetting event.
Returns a list in which x.raw
contains the original data and
x
the common Pb-corrected compositions. All other items in
the list are inherited from the input data.
Ludwig, K.R., 1998. On the treatment of concordant uranium-lead ages. Geochimica et Cosmochimica Acta, 62(4), pp.665-676.
Stacey, J.T. and Kramers, 1., 1975. Approximation of terrestrial lead isotope evolution by a two-stage model. Earth and Planetary Science Letters, 26(2), pp.207-221.
attach(examples) corrected <- Pb0corr(UPb,option=2) concordia(corrected) # produces identical results as: dev.new() concordia(UPb,common.Pb=2)
attach(examples) corrected <- Pb0corr(UPb,option=2) concordia(corrected) # produces identical results as: dev.new() concordia(UPb,common.Pb=2)
Implements the discrete mixture modelling algorithms of Galbraith and Laslett (1993) and applies them to fission track and other geochronological datasets.
peakfit(x, ...) ## Default S3 method: peakfit(x, k = "auto", sigdig = 2, oerr = 3, log = TRUE, np = 3, ...) ## S3 method for class 'fissiontracks' peakfit( x, k = 1, exterr = FALSE, sigdig = 2, log = TRUE, oerr = 3, np = 3, ... ) ## S3 method for class 'UPb' peakfit( x, k = 1, type = 4, cutoff.76 = 1100, cutoff.disc = discfilter(), common.Pb = 0, exterr = FALSE, sigdig = 2, log = TRUE, oerr = 3, np = 3, ... ) ## S3 method for class 'PbPb' peakfit( x, k = 1, exterr = FALSE, sigdig = 2, log = TRUE, common.Pb = 0, oerr = 3, np = 3, ... ) ## S3 method for class 'ArAr' peakfit( x, k = 1, exterr = FALSE, sigdig = 2, log = TRUE, i2i = FALSE, oerr = 3, np = 3, ... ) ## S3 method for class 'ThPb' peakfit( x, k = 1, exterr = FALSE, sigdig = 2, log = TRUE, i2i = FALSE, oerr = 3, np = 3, ... ) ## S3 method for class 'KCa' peakfit( x, k = 1, exterr = FALSE, sigdig = 2, log = TRUE, i2i = FALSE, oerr = 3, np = 3, ... ) ## S3 method for class 'ReOs' peakfit( x, k = 1, exterr = FALSE, sigdig = 2, log = TRUE, i2i = TRUE, oerr = 3, np = 3, ... ) ## S3 method for class 'SmNd' peakfit( x, k = 1, exterr = FALSE, sigdig = 2, log = TRUE, i2i = TRUE, oerr = 3, np = 3, ... ) ## S3 method for class 'RbSr' peakfit( x, k = 1, exterr = FALSE, sigdig = 2, log = TRUE, i2i = TRUE, oerr = 3, np = 3, ... ) ## S3 method for class 'LuHf' peakfit( x, k = 1, exterr = FALSE, sigdig = 2, log = TRUE, i2i = TRUE, oerr = 3, np = 3, ... ) ## S3 method for class 'ThU' peakfit( x, k = 1, exterr = FALSE, sigdig = 2, log = TRUE, oerr = 3, Th0i = 0, np = 3, ... ) ## S3 method for class 'UThHe' peakfit(x, k = 1, sigdig = 2, log = TRUE, oerr = 3, np = 3, ...)
peakfit(x, ...) ## Default S3 method: peakfit(x, k = "auto", sigdig = 2, oerr = 3, log = TRUE, np = 3, ...) ## S3 method for class 'fissiontracks' peakfit( x, k = 1, exterr = FALSE, sigdig = 2, log = TRUE, oerr = 3, np = 3, ... ) ## S3 method for class 'UPb' peakfit( x, k = 1, type = 4, cutoff.76 = 1100, cutoff.disc = discfilter(), common.Pb = 0, exterr = FALSE, sigdig = 2, log = TRUE, oerr = 3, np = 3, ... ) ## S3 method for class 'PbPb' peakfit( x, k = 1, exterr = FALSE, sigdig = 2, log = TRUE, common.Pb = 0, oerr = 3, np = 3, ... ) ## S3 method for class 'ArAr' peakfit( x, k = 1, exterr = FALSE, sigdig = 2, log = TRUE, i2i = FALSE, oerr = 3, np = 3, ... ) ## S3 method for class 'ThPb' peakfit( x, k = 1, exterr = FALSE, sigdig = 2, log = TRUE, i2i = FALSE, oerr = 3, np = 3, ... ) ## S3 method for class 'KCa' peakfit( x, k = 1, exterr = FALSE, sigdig = 2, log = TRUE, i2i = FALSE, oerr = 3, np = 3, ... ) ## S3 method for class 'ReOs' peakfit( x, k = 1, exterr = FALSE, sigdig = 2, log = TRUE, i2i = TRUE, oerr = 3, np = 3, ... ) ## S3 method for class 'SmNd' peakfit( x, k = 1, exterr = FALSE, sigdig = 2, log = TRUE, i2i = TRUE, oerr = 3, np = 3, ... ) ## S3 method for class 'RbSr' peakfit( x, k = 1, exterr = FALSE, sigdig = 2, log = TRUE, i2i = TRUE, oerr = 3, np = 3, ... ) ## S3 method for class 'LuHf' peakfit( x, k = 1, exterr = FALSE, sigdig = 2, log = TRUE, i2i = TRUE, oerr = 3, np = 3, ... ) ## S3 method for class 'ThU' peakfit( x, k = 1, exterr = FALSE, sigdig = 2, log = TRUE, oerr = 3, Th0i = 0, np = 3, ... ) ## S3 method for class 'UThHe' peakfit(x, k = 1, sigdig = 2, log = TRUE, oerr = 3, np = 3, ...)
x |
either an |
... |
optional arguments (not used) |
k |
the number of discrete age components to be
sought. Setting this parameter to |
sigdig |
number of significant digits to be used for any legend in which the peak fitting results are to be displayed. |
oerr |
indicates whether the analytical uncertainties of the output are reported in the plot legend as:
|
log |
take the logs of the data before applying the mixture model? |
np |
number of parameters for the minimum age model. Must be either 3 or 4. |
exterr |
propagate the external sources of uncertainty into the component age errors? |
type |
scalar indicating whether to plot the
|
cutoff.76 |
the age (in Ma) below which the
|
cutoff.disc |
discordance cutoff filter. This is an object of
class |
common.Pb |
common lead correction:
|
i2i |
‘isochron to intercept’: calculates the initial (aka
‘inherited’, ‘excess’, or ‘common’)
|
Th0i |
initial
|
Consider a dataset of dates
with analytical uncertainties
. Define
and
. Suppose that these
values are derived from a
mixture of
populations with means
. Such a discrete mixture may be
mathematically described by
where
is the
proportion of the population that belongs to the
component, and
. This equation
can be solved by the method of maximum likelihood (Galbraith and
Laslett, 1993).
IsoplotR
implements the Bayes Information
Criterion (BIC) as a means of automatically choosing . This
option should be used with caution, as the number of peaks steadily
rises with sample size (
). If one is mainly interested in
the youngest age component, then it is more productive to use an
alternative parameterisation, in which all grains are assumed to
come from one of two components, whereby the first component is a
single discrete age peak (
, say) and the second
component is a continuous distribution (as descibed by the
central
age model), but truncated at this discrete
value. IsoplotR
uses a normal likelihood function
(section 6.11 of Galbraith, 2005) for the minimum age model.
This may result in some inaccuracy for young and/or uranium-poor
fission track samples.
Returns a list with the following items:
a 2 x k
matrix with the following rows:
t
: the ages of the k
peaks
s[t]
: the standard errors of t
a 2 x k
matrix with the following rows:
p
: the proportions of the k
peaks
s[p]
: the standard errors of p
the log-likelihood of the fit
a vector of text expressions to be used in a figure legend
Galbraith, R.F. and Laslett, G.M., 1993. Statistical models for mixed fission track ages. Nuclear Tracks and Radiation Measurements, 21(4), pp.459-470.
Galbraith, R.F. 2005, Statistics for fission track analysis. Chapman and Hall/CRC, 229p.
attach(examples) peakfit(FT1,k=2) peakfit(LudwigMixture$x,k='min')
attach(examples) peakfit(FT1,k=2) peakfit(LudwigMixture$x,k='min')
Implementation of a graphical device developed by Rex Galbraith to display several estimates of the same quantity that have different standard errors. Serves as a vehicle to display finite and continuous mixture models.
radialplot(x, ...) ## Default S3 method: radialplot( x, from = NA, to = NA, z0 = NA, transformation = "log", sigdig = 2, show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", k = 0, np = 3, markers = NULL, oerr = 3, units = "", hide = NA, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'other' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, transformation = "log", sigdig = 2, show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", k = 0, np = 3, markers = NULL, oerr = 3, units = "", hide = NA, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'fissiontracks' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, transformation = "arcsin", sigdig = 2, show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, exterr = FALSE, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'UPb' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, transformation = "log", type = 4, cutoff.76 = 1100, cutoff.disc = discfilter(), show.numbers = FALSE, pch = 21, sigdig = 2, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, exterr = FALSE, common.Pb = 0, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'PbPb' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, sigdig = 2, transformation = "log", show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, exterr = FALSE, common.Pb = 2, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'ArAr' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, sigdig = 2, transformation = "log", show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, exterr = FALSE, i2i = FALSE, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'KCa' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, sigdig = 2, transformation = "log", show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, exterr = FALSE, i2i = FALSE, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'ThPb' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, sigdig = 2, transformation = "log", show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, exterr = FALSE, i2i = TRUE, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'UThHe' radialplot( x, from = NA, to = NA, xlim = NULL, z0 = NA, sigdig = 2, transformation = "log", show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'ReOs' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, sigdig = 2, transformation = "log", show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, exterr = FALSE, i2i = TRUE, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'SmNd' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, sigdig = 2, transformation = "log", show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, exterr = FALSE, i2i = TRUE, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'RbSr' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, sigdig = 2, transformation = "log", show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, exterr = FALSE, i2i = TRUE, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'LuHf' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, sigdig = 2, transformation = "log", show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, exterr = FALSE, i2i = TRUE, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'ThU' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, sigdig = 2, transformation = "log", show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, Th0i = 0, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... )
radialplot(x, ...) ## Default S3 method: radialplot( x, from = NA, to = NA, z0 = NA, transformation = "log", sigdig = 2, show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", k = 0, np = 3, markers = NULL, oerr = 3, units = "", hide = NA, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'other' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, transformation = "log", sigdig = 2, show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", k = 0, np = 3, markers = NULL, oerr = 3, units = "", hide = NA, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'fissiontracks' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, transformation = "arcsin", sigdig = 2, show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, exterr = FALSE, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'UPb' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, transformation = "log", type = 4, cutoff.76 = 1100, cutoff.disc = discfilter(), show.numbers = FALSE, pch = 21, sigdig = 2, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, exterr = FALSE, common.Pb = 0, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'PbPb' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, sigdig = 2, transformation = "log", show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, exterr = FALSE, common.Pb = 2, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'ArAr' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, sigdig = 2, transformation = "log", show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, exterr = FALSE, i2i = FALSE, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'KCa' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, sigdig = 2, transformation = "log", show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, exterr = FALSE, i2i = FALSE, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'ThPb' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, sigdig = 2, transformation = "log", show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, exterr = FALSE, i2i = TRUE, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'UThHe' radialplot( x, from = NA, to = NA, xlim = NULL, z0 = NA, sigdig = 2, transformation = "log", show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'ReOs' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, sigdig = 2, transformation = "log", show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, exterr = FALSE, i2i = TRUE, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'SmNd' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, sigdig = 2, transformation = "log", show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, exterr = FALSE, i2i = TRUE, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'RbSr' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, sigdig = 2, transformation = "log", show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, exterr = FALSE, i2i = TRUE, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'LuHf' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, sigdig = 2, transformation = "log", show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, exterr = FALSE, i2i = TRUE, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'ThU' radialplot( x, from = NA, to = NA, z0 = NA, xlim = NULL, sigdig = 2, transformation = "log", show.numbers = FALSE, pch = 21, levels = NA, clabel = "", bg = c("yellow", "red"), col = "black", markers = NULL, k = 0, np = 3, Th0i = 0, oerr = 3, hide = NULL, omit = NULL, omit.col = NA, ... )
x |
Either an OR and object of class |
... |
additional arguments to the generic |
from |
minimum age limit of the radial scale |
to |
maximum age limit of the radial scale |
z0 |
central value |
transformation |
one of either |
sigdig |
the number of significant digits of the numerical values reported in the title of the graphical output. |
show.numbers |
boolean flag ( |
pch |
plot character (default is a filled circle) |
levels |
a vector with additional values to be displayed as different background colours of the plot symbols. |
clabel |
label of the colour legend |
bg |
Fill colour for the plot symbols. This can either be a
single colour or multiple colours to form a colour ramp (to be
used if a single colour: multiple colours: a colour palette: a reversed palette: for plot symbols, set |
col |
text colour to be used if |
k |
number of peaks to fit using the finite mixture models of
Galbraith and Laslett (1993). Setting |
np |
number of parameters for the minimum age model. Must be either 3 or 4. |
markers |
vector of ages of radial marker lines to add to the plot. |
oerr |
indicates whether the analytical uncertainties of the output are reported in the plot title as:
|
units |
measurement units to be displayed in the legend. |
hide |
vector with indices of aliquots that should be removed from the radial plot. |
omit |
vector with indices of aliquots that should be plotted but omitted from the central age calculation or mixture models. |
omit.col |
colour that should be used for the omitted aliquots. |
xlim |
maximum limit of the x-axis. If provided as a vector, uses the last value of that vector and ignores the first one. |
exterr |
include the external sources of uncertainty into the error propagation for the central age and mixture models? |
type |
scalar indicating whether to plot the
|
cutoff.76 |
the age (in Ma) below which the
|
cutoff.disc |
discordance cutoff filter. This is an object of
class |
common.Pb |
common lead correction:
|
i2i |
‘isochron to intercept’: calculates the initial
(aka ‘inherited’, ‘excess’, or ‘common’) Note that choosing this option introduces a degree of circularity in the central age calculation. In this case the radial_plot plot just serves as a way to visualise the residuals of the data around the isochron, and one should be careful not to over-interpret the numerical output. |
Th0i |
initial
|
The radial plot (Galbraith, 1988, 1990) is a graphical device that
was specifically designed to display heteroscedastic data, and is
constructed as follows. Consider a set of dates
and uncertainties
. Define
to be a transformation of
(e.g.,
),
and let
be its propagated analytical uncertainty
(i.e.,
in the case of a logarithmic
transformation). Create a scatter plot of
values,
where
and
,
where
is some reference value such as the mean. The
slope of a line connecting the origin of this scatter plot with any
of the
s is proportional to
and, hence,
the date
.
These dates can be more easily visualised by drawing a radial scale at some convenient distance from the origin and annotating it with labelled ticks at the appropriate angles. While the angular position of each data point represents the date, its horizontal distance from the origin is proportional to the precision. Imprecise measurements plot on the left hand side of the radial plot, whereas precise age determinations are found further towards the right. Thus, radial plots allow the observer to assess both the magnitude and the precision of quantitative data in one glance.
does not produce any numerical output, but does report the central age and the results of any mixture modelling in the title. An asterisk is added to the plot title if the initial daughter correction is based on an isochron regression, to highlight the circularity of using an isochron to compute a central age, and to indicate that the reported uncertainties do not include the uncertainty of the initial daughter correction. This is because this uncertainty is neither purely random nor purely systematic.
Galbraith, R.F., 1988. Graphical display of estimates having differing standard errors. Technometrics, 30(3), pp.271-281.
Galbraith, R.F., 1990. The radial plot: graphical assessment of spread in ages. International Journal of Radiation Applications and Instrumentation. Part D. Nuclear Tracks and Radiation Measurements, 17(3), pp.207-214.
Galbraith, R.F. and Laslett, G.M., 1993. Statistical models for mixed fission track ages. Nuclear Tracks and Radiation Measurements, 21(4), pp.459-470.
attach(examples) radialplot(FT1) dev.new() radialplot(LudwigMixture,k='min')
attach(examples) radialplot(FT1) dev.new() radialplot(LudwigMixture,k='min')
Cast a .csv
file or a matrix into one of IsoplotR
's
data classes
read.data(x, ...) ## Default S3 method: read.data( x, method = "U-Pb", format = 1, ierr = 1, d = diseq(), Th02i = c(0, 0), Th02U48 = c(0, 0, 1e+06, 0, 0, 0, 0, 0, 0), U8Th2 = 0, ... ) ## S3 method for class 'data.frame' read.data( x, method = "U-Pb", format = 1, ierr = 1, d = diseq(), Th02i = c(0, 0), Th02U48 = c(0, 0, 1e+06, 0, 0, 0, 0, 0, 0), U8Th2 = 0, ... ) ## S3 method for class 'matrix' read.data( x, method = "U-Pb", format = 1, ierr = 1, d = diseq(), Th02i = c(0, 0), Th02U48 = c(0, 0, 1e+06, 0, 0, 0, 0, 0, 0), U8Th2 = 0, ... )
read.data(x, ...) ## Default S3 method: read.data( x, method = "U-Pb", format = 1, ierr = 1, d = diseq(), Th02i = c(0, 0), Th02U48 = c(0, 0, 1e+06, 0, 0, 0, 0, 0, 0), U8Th2 = 0, ... ) ## S3 method for class 'data.frame' read.data( x, method = "U-Pb", format = 1, ierr = 1, d = diseq(), Th02i = c(0, 0), Th02U48 = c(0, 0, 1e+06, 0, 0, 0, 0, 0, 0), U8Th2 = 0, ... ) ## S3 method for class 'matrix' read.data( x, method = "U-Pb", format = 1, ierr = 1, d = diseq(), Th02i = c(0, 0), Th02U48 = c(0, 0, 1e+06, 0, 0, 0, 0, 0, 0), U8Th2 = 0, ... )
x |
either a file name ( |
... |
optional arguments to the |
method |
one of |
format |
formatting option, depends on the value of
if
where optional columns are marked in round brackets if
if
if
if
if
where if
where if
where if
where if
where all values are activity ratios if
if
|
ierr |
indicates whether the analytical uncertainties of the input are provided as:
|
d |
an object of class |
Th02i |
2-element vector with the assumed initial
|
Th02U48 |
9-element vector with the measured composition of
the detritus, containing |
U8Th2 |
|
IsoplotR provides the following example input files:
U-Pb: UPb1.csv
, UPb2.csv
, UPb3.csv
,
UPb4.csv
, UPb5.csv
, UPb6.csv
,
UPb7.csv
, UPb8.csv
Pb-Pb: PbPb1.csv
, PbPb2.csv
, PbPb3.csv
Th-Pb: ThPb1.csv
, ThPb2.csv
, ThPb3.csv
Ar-Ar: ArAr1.csv
, ArAr2.csv
, ArAr3.csv
K-Ca: KCa1.csv
, KCa2.csv
, KCa3.csv
Re-Os: ReOs1.csv
, ReOs2.csv
, ReOs3.csv
Sm-Nd: SmNd1.csv
, SmNd2.csv
, SmNd3.csv
Rb-Sr: RbSr1.csv
, RbSr2.csv
, RbSr3.csv
Lu-Hf: LuHf1.csv
, LuHf2.csv
, LuHf3.csv
Th-U: ThU1.csv
, ThU2.csv
, ThU3.csv
ThU4.csv
fissiontracks: FT1.csv
, FT2.csv
,
FT3.csv
U-Th-He: UThHe.csv
, UThSmHe.csv
detritals: DZ.csv
other: LudwigMixture.csv
, LudwigMean.csv
,
LudwigKDE.csv
, LudwigSpectrum.csv
The contents of these files can be viewed using the
system.file(...)
function. For example, to read the
ArAr1.csv
file:
fname <- system.file('ArAr1.csv',package='IsoplotR')
ArAr <- read.data(fname,method='Ar-Ar',format=1)
An object of class UPb
, PbPb
, ThPb
,
KCa
, RbSr
, SmNd
, LuHf
, ReOs
,
UThHe
, fissiontracks
, detritals
or
PD
. See classes
for further details.
f1 <- system.file("UPb1.csv",package="IsoplotR") file.show(f1) # inspect the contents of 'UPb1.csv' d1 <- read.data(f1,method="U-Pb",format=1) concordia(d1) f2 <- system.file("ArAr1.csv",package="IsoplotR") d2 <- read.data(f2,method="Ar-Ar",format=1) agespectrum(d2) f3 <- system.file("ReOs1.csv",package="IsoplotR") d3 <- read.data(f3,method="Re-Os",format=1) isochron(d2) f4 <- system.file("FT1.csv",package="IsoplotR") d4 <- read.data(f4,method="fissiontracks",format=1) radialplot(d4) f5 <- system.file("UThSmHe.csv",package="IsoplotR") d5 <- read.data(f5,method="U-Th-He") helioplot(d5) f6 <- system.file("ThU2.csv",package="IsoplotR") d6 <- read.data(f6,method="Th-U",format=2) evolution(d6) # one detrital zircon U-Pb file (detritals.csv) f7 <- system.file("DZ.csv",package="IsoplotR") d7 <- read.data(f7,method="detritals") kde(d7) # four 'other' files (LudwigMixture.csv, LudwigSpectrum.csv, # LudwigMean.csv, LudwigKDE.csv) f8 <- system.file("LudwigMixture.csv",package="IsoplotR") d8 <- read.data(f8,method="other",format=2) radialplot(d8)
f1 <- system.file("UPb1.csv",package="IsoplotR") file.show(f1) # inspect the contents of 'UPb1.csv' d1 <- read.data(f1,method="U-Pb",format=1) concordia(d1) f2 <- system.file("ArAr1.csv",package="IsoplotR") d2 <- read.data(f2,method="Ar-Ar",format=1) agespectrum(d2) f3 <- system.file("ReOs1.csv",package="IsoplotR") d3 <- read.data(f3,method="Re-Os",format=1) isochron(d2) f4 <- system.file("FT1.csv",package="IsoplotR") d4 <- read.data(f4,method="fissiontracks",format=1) radialplot(d4) f5 <- system.file("UThSmHe.csv",package="IsoplotR") d5 <- read.data(f5,method="U-Th-He") helioplot(d5) f6 <- system.file("ThU2.csv",package="IsoplotR") d6 <- read.data(f6,method="Th-U",format=2) evolution(d6) # one detrital zircon U-Pb file (detritals.csv) f7 <- system.file("DZ.csv",package="IsoplotR") d7 <- read.data(f7,method="detritals") kde(d7) # four 'other' files (LudwigMixture.csv, LudwigSpectrum.csv, # LudwigMean.csv, LudwigKDE.csv) f8 <- system.file("LudwigMixture.csv",package="IsoplotR") d8 <- read.data(f8,method="other",format=2) radialplot(d8)
Takes bivariate data with (correlated) uncertainties as input and produces a scatter plot with error ellipses or crosses as output. (optionally) displays the linear fit on this diagram, and can show a third variable as a colour scale.
scatterplot( xy, oerr = 3, show.numbers = FALSE, show.ellipses = 1, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", fit = NULL, add = FALSE, empty = FALSE, ci.col = "gray80", line.col = "black", lwd = 1, hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", addcolourbar = TRUE, bg, cex, xlim = NULL, ylim = NULL, xlab, ylab, asp = NA, log = "", taxis = FALSE, box = !taxis, xaxt = ifelse(taxis, "n", "s"), ... )
scatterplot( xy, oerr = 3, show.numbers = FALSE, show.ellipses = 1, levels = NA, clabel = "", ellipse.fill = c("#00FF0080", "#FF000080"), ellipse.stroke = "black", fit = NULL, add = FALSE, empty = FALSE, ci.col = "gray80", line.col = "black", lwd = 1, hide = NULL, omit = NULL, omit.fill = NA, omit.stroke = "grey", addcolourbar = TRUE, bg, cex, xlim = NULL, ylim = NULL, xlab, ylab, asp = NA, log = "", taxis = FALSE, box = !taxis, xaxt = ifelse(taxis, "n", "s"), ... )
xy |
matrix with columns |
oerr |
indicates whether the analytical uncertainties of the output are reported as:
|
show.numbers |
logical flag ( |
show.ellipses |
show the data as:
|
levels |
a vector with additional values to be displayed as different background colours within the error ellipses. |
clabel |
label for the colour scale |
ellipse.fill |
Fill colour for the error ellipses. This can either be a single colour or multiple colours to form a colour ramp. Examples: a single colour: multiple colours: a colour palette: a reversed palette: For empty ellipses, set |
ellipse.stroke |
the stroke colour for the error
ellipses. Follows the same formatting guidelines as
|
fit |
the output of |
add |
if |
empty |
set up an empty plot with the right axis limits to fit the data |
ci.col |
the fill colour for the confidence interval of the intercept and slope. |
line.col |
colour of the regression line |
lwd |
line width of the regression line |
hide |
vector with indices of aliquots that should be removed from the plot. |
omit |
vector with indices of aliquots that should be plotted but omitted from the isochron age calculation. |
omit.fill |
fill colour that should be used for the omitted aliquots. |
omit.stroke |
stroke colour that should be used for the omitted aliquots. |
addcolourbar |
add a colour bar to display the colours used to
|
bg |
background colour for the plot symbols (only used if
|
cex |
plot symbol magnification. |
xlim |
(optional) two-element vector with the x-axis limits |
ylim |
(optional) two-element vector with the y-axis limits |
xlab |
(optional) x-axis label (only used when
|
ylab |
(optional) y-axis label (only used when
|
asp |
the y/x aspect ratio, see ‘plot.window’. |
log |
same as the eponymous argument to the generic
|
taxis |
logical. If |
box |
logical. If |
xaxt |
see |
... |
optional arguments to format the points and text. |
X <- c(1.550,12.395,20.445,20.435,20.610,24.900, 28.530,50.540,51.595,86.51,106.40,157.35) Y <- c(.7268,.7809,.8200,.8116,.8160,.8302, .8642,.9534,.9617,1.105,1.230,1.440) sX <- X*0.02 sY <- Y*0.01 dat <- cbind(X,sX,Y,sY) scatterplot(dat,fit=york(dat),show.ellipses=2)
X <- c(1.550,12.395,20.445,20.435,20.610,24.900, 28.530,50.540,51.595,86.51,106.40,157.35) Y <- c(.7268,.7809,.8200,.8116,.8160,.8302, .8642,.9534,.9617,1.105,1.230,1.440) sX <- X*0.02 sY <- Y*0.01 dat <- cbind(X,sX,Y,sY) scatterplot(dat,fit=york(dat),show.ellipses=2)
Determines the zeta calibration constant of a fission track dataset (EDM or LA-ICP-MS) given its true age and analytical uncertainty.
set.zeta(x, tst, exterr = FALSE, oerr = 1, sigdig = NA, update = TRUE)
set.zeta(x, tst, exterr = FALSE, oerr = 1, sigdig = NA, update = TRUE)
x |
an object of class |
tst |
a two-element vector with the true age and its standard error |
exterr |
logical flag indicating whether the external uncertainties associated with the age standard or the dosimeter glass (for the EDM) should be accounted for when propagating the uncertainty of the zeta calibration constant. |
oerr |
indicates whether the analytical uncertainties of the output are reported as:
(only used when |
sigdig |
the number of significant digits (only used when
|
update |
logical flag indicating whether the function should return an updated version of the input data, or simply return a two-element vector with the calibration constant and its standard error. |
The fundamental fission track age is given by:
(eq.1)
where is the number of spontaneous fission tracks
measured over an area
,
is the
U-concentration in atoms per unit volume,
is the fission decay constant,
is the
etchable fission track length, and the factor 2 is a geometric
factor accounting for the fact that etching reveals tracks from
both above and below the internal crystal surface. Two analytical
approaches are used to measure
: neutron activation
and LAICPMS. The first approach estimates the
U-concentration indirectly, using the induced fission
of neutron-irradiated
U as a proxy for the
U. In the most common implementation of this approach,
the induced fission tracks are recorded by an external detector
made of mica or plastic that is attached to the polished grain
surface (Fleischer and Hart, 1972; Hurford and Green, 1983). The
fission track age equation then becomes:
(eq.2)
where is the number of induced fission tracks counted in
the external detector over the same area as the spontaneous tracks,
is a ‘zeta’-calibration factor that incorporates both
the fission decay constant and the etchable fission track length,
and
is the number of induced fission tracks per unit
area counted in a co-irradiated glass of known
U-concentration.
allows the
-factor to be
‘recycled’ between irradiations.
LAICPMS is an alternative means of determining the
U-content of fission track samples without the need for
neutron irradiation. The resulting U-concentrations can be plugged
directly into the fundamental age equation (eq.1). but this is
limited by the accuracy of the U-concentration measurements, the
fission track decay constant and the etching and counting
efficiencies. Alternatively, these sources of bias may be removed
by normalising to a standard of known fission track age and
defining a new ‘zeta’ calibration constant
:
(eq.3)
where may either stand for the
U-concentration (in ppm) or for the U/Ca (for
apatite) or U/Si (for zircon) ratio measurement (Vermeesch, 2017).
an object of class fissiontracks
with an updated
x$zeta
value or (if update
is FALSE
), a
2-element matrix with the zeta estimate and its uncertainty.
Fleischer, R. and Hart, H. Fission track dating: techniques and problems. In Bishop, W., Miller, J., and Cole, S., editors, Calibration of Hominoid Evolution, pages 135-170. Scottish Academic Press Edinburgh, 1972.
Hurford, A. J. and Green, P. F. The zeta age calibration of fission-track dating. Chemical Geology, 41:285-317, 1983.
Vermeesch, P., 2017. Statistics for LA-ICP-MS based fission track dating. Chemical Geology, 456, pp.19-27.
attach(examples) print(FT1$zeta) FT <- set.zeta(FT1,tst=c(250,5)) print(FT$zeta)
attach(examples) print(FT1$zeta) FT <- set.zeta(FT1,tst=c(250,5)) print(FT$zeta)
Get and set preferred values for decay constants, isotopic
abundances, molar masses, fission track etch efficiences, and
etchable lengths, and mineral densities, either individually or via
a .json
file format.
settings(setting = NA, ..., fname = NA, reset = FALSE)
settings(setting = NA, ..., fname = NA, reset = FALSE)
setting |
unless
|
... |
depends on the value for For For For For For For |
fname |
the path of a |
reset |
logical. If |
if setting=NA
and fname=NA
, returns a
.json
string
if ...
contains only the name of an isotope, isotopic ratio,
element, or mineral and no new value, then settings
returns
either a scalar with the existing value, or a two-element vector
with the value and its uncertainty.
Decay constants:
U,
U: Jaffey, A. H., et
al. "Precision measurement of half-lives and specific
activities of U
and U
."
Physical Review C 4.5 (1971): 1889.
Th: Le Roux, L. J., and
L. E. Glendenin. "Half-life of
Th.", Proceedings of the
National Meeting on Nuclear Energy, Pretoria, South Africa. 1963.
U,
Th: Cheng, H., Edwards, R.L.,
Shen, C.C., Polyak, V.J., Asmerom, Y., Woodhead, J., Hellstrom, J.,
Wang, Y., Kong, X., Spotl, C. and Wang, X., 2013. Improvements in
Th dating,
Th and
U half-life
values, and U-Th isotopic measurements by multi-collector
inductively coupled plasma mass spectrometry. Earth and Planetary
Science Letters, 371, pp.82-91.
Pa,
Ra: Audi, G., Bersillon, O.,
Blachot, J. and Wapstra, A.H., 2003. The NUBASE evaluation of
nuclear and decay properties. Nuclear Physics A, 729(1), pp.3-128.
Sm: Villa, I.M., Holden, N.E., Possolo, A., Ickert, R.B.,
Hibbert, D.B. and Renne, P.R., 2020. IUPAC-IUGS recommendation on
the half-lives of Sm and
Sm. Geochimica et
Cosmochimica Acta, 285, pp.70-77.
Nd: Zhao, Motian, et al. "Absolute measurements of neodymium isotopic abundances and atomic weight by MC-ICPMS." International Journal of Mass Spectrometry 245.1 (2005): 36-40.
Re: Smoliar, Michael I., Richard J. Walker, and John W. Morgan. "Re-Os ages of group IIA, IIIA, IVA, and IVB iron meteorites." Science 271.5252 (1996): 1099-1102.
Ar: Renne, Paul R., et
al. "Response to the comment by WH Schwarz et al. on "Joint
determination of K decay constants and
Ar*/
K for the Fish Canyon sanidine standard,
and improved accuracy for
Ar/
Ar
geochronology" by PR Renne et al.(2010)." Geochimica et
Cosmochimica Acta 75.17 (2011): 5097-5100.
Rb: Villa, I.M., De Bievre, P., Holden, N.E. and Renne, P.R., 2015.
"IUPAC-IUGS recommendation on the half life of Rb".
Geochimica et Cosmochimica Acta, 164, pp.382-385.
Lu: Soederlund, Ulf, et al. "The Lu decay constant
determined by Lu-Hf and U-Pb isotope systematics of Precambrian mafic
intrusions." Earth and Planetary Science Letters 219.3 (2004): 311-324.
Isotopic ratios:
Ar: Lee, Jee-Yon, et al. "A redetermination of the isotopic abundances of atmospheric Ar." Geochimica et Cosmochimica Acta 70.17 (2006): 4507-4512.
K: Garner, E.L., et al. "Absolute isotopic abundance ratios and the atomic weight of a reference sample of potassium". J. Res. Natl. Bur. Stand. A 79.6 (1975): 713-725.
Ca: Moore, L.J. and Machlan, L.A., 1972. High-accuracy determination of calcium in blood serum by isotope dilution mass spectrometry. Analytical chemistry, 44(14), pp.2291-2296.
Rb: Catanzaro, E. J., et al. "Absolute isotopic abundance ratio and atomic weight of terrestrial rubidium." J. Res. Natl. Bur. Stand. A 73 (1969): 511-516.
Sr: Moore, L. J., et al. "Absolute isotopic abundance ratios and atomic weight of a reference sample of strontium." J. Res. Natl. Bur. Stand. 87.1 (1982): 1-8.
and (for Sr/
Sr):
Compston, W., Berry, H., Vernon, M.J., Chappell, B.W. and Kaye, M.J., 1971. Rubidium-strontium chronology and chemistry of lunar material from the Ocean of Storms. In Lunar and Planetary Science Conference Proceedings (Vol. 2, p. 1471).
Sm: Chang, Tsing-Lien, et al. "Absolute isotopic composition and atomic weight of samarium." International Journal of Mass Spectrometry 218.2 (2002): 167-172.
Re: Gramlich, John W., et al. "Absolute isotopic abundance ratio and atomic weight of a reference sample of rhenium." J. Res. Natl. Bur. Stand. A 77 (1973): 691-698.
Os: Voelkening, Joachim, Thomas Walczyk, and Klaus G. Heumann. "Osmium isotope ratio determinations by negative thermal ionization mass spectrometry." Int. J. Mass Spect. Ion Proc. 105.2 (1991): 147-159.
Lu: De Laeter, J. R., and N. Bukilic.
"Solar abundance of Lu and s-process nucleosynthesis."
Physical Review C 73.4 (2006): 045806.
Hf: Patchett, P. Jonathan. "Importance of the Lu-Hf isotopic system in studies of planetary chronology and chemical evolution." Geochimica et Cosmochimica Acta 47.1 (1983): 81-91.
Pb: Stacey, J.T. and Kramers, J. "Approximation of terrestrial lead isotope evolution by a two-stage model." Earth and Planetary Science Letters, 26(2) (1975): 207-221.
U: Hiess, Joe, et
al. "U/
U systematics in terrestrial uranium-bearing minerals."
Science 335.6076 (2012): 1610-1614.
# load and show the default constants that come with IsoplotR json <- system.file("constants.json",package="IsoplotR") settings(fname=json) print(settings()) # use the decay constant of Kovarik and Adams (1932) settings('lambda','U238',0.0001537,0.0000068) print(settings('lambda','U238')) # returns the 238U/235U ratio of Hiess et al. (2012): print(settings('iratio','U238U235')) # use the 238U/235U ratio of Steiger and Jaeger (1977): settings('iratio','U238U235',138.88,0) print(settings('iratio','U238U235'))
# load and show the default constants that come with IsoplotR json <- system.file("constants.json",package="IsoplotR") settings(fname=json) print(settings()) # use the decay constant of Kovarik and Adams (1932) settings('lambda','U238',0.0001537,0.0000068) print(settings('lambda','U238')) # returns the 238U/235U ratio of Hiess et al. (2012): print(settings('iratio','U238U235')) # use the 238U/235U ratio of Steiger and Jaeger (1977): settings('iratio','U238U235',138.88,0) print(settings('iratio','U238U235'))
Implements the maximum likelihood algorithm of Ludwig and Titterington (1994) for linear regression of three dimensional data with correlated uncertainties.
titterington(x)
titterington(x)
x |
an |
Ludwig and Titterington (1994)'s 3-dimensional linear regression
algorithm for data with correlated uncertainties is an extension of
the 2-dimensional algorithm by Titterington and Halliday (1979),
which itself is equivalent to the algorithm of York et al. (2004).
Given triplets of (approximately) collinear measurements
,
and
(for
),
their uncertainties
,
and
,
and their covariances cov[
], cov[
] and
cov[
], the
titterington
function fits two
slopes and intercepts with their uncertainties. It computes the
MSWD as a measure of under/overdispersion. Overdispersed datasets
(MSWD>1) can be dealt with in the same three ways that are
described in the documentation of the isochron
function.
A four-element list of vectors containing:
4-element vector c(a,b,A,B)
where a
is
the intercept of the X-Y
regression, b
is the slope of the X-Y
regression, A
is the intercept of the X-Z
regression, and
B
is the slope of the X-Z
regression.
[4x4]
-element covariance matrix of par
the mean square of the residuals (a.k.a 'reduced Chi-square') statistic
p-value of a Chi-square test for linearity
the number of degrees of freedom for the
Chi-square test (2-4)
the percentile of the
t-distribution with
degrees of freedom
Ludwig, K.R. and Titterington, D.M., 1994. Calculation
of Th/U isochrons, ages, and errors. Geochimica et
Cosmochimica Acta, 58(22), pp.5031-5042.
Titterington, D.M. and Halliday, A.N., 1979. On the fitting of parallel isochrons and the method of maximum likelihood. Chemical Geology, 26(3), pp.183-195.
York, D., Evensen, N.M., Martinez, M.L. and De Basebe Delgado, J., 2004. Unified equations for the slope, intercept, and standard errors of the best straight line. American Journal of Physics, 72(3), pp.367-375.
d <- matrix(c(0.1677,0.0047,1.105,0.014,0.782,0.015,0.24,0.51,0.33, 0.2820,0.0064,1.081,0.013,0.798,0.015,0.26,0.63,0.32, 0.3699,0.0076,1.038,0.011,0.819,0.015,0.27,0.69,0.30, 0.4473,0.0087,1.051,0.011,0.812,0.015,0.27,0.73,0.30, 0.5065,0.0095,1.049,0.010,0.842,0.015,0.27,0.76,0.29, 0.5520,0.0100,1.039,0.010,0.862,0.015,0.27,0.78,0.28), nrow=6,ncol=9) colnames(d) <- c('X','sX','Y','sY','Z','sZ','rXY','rXZ','rYZ') titterington(d)
d <- matrix(c(0.1677,0.0047,1.105,0.014,0.782,0.015,0.24,0.51,0.33, 0.2820,0.0064,1.081,0.013,0.798,0.015,0.26,0.63,0.32, 0.3699,0.0076,1.038,0.011,0.819,0.015,0.27,0.69,0.30, 0.4473,0.0087,1.051,0.011,0.812,0.015,0.27,0.73,0.30, 0.5065,0.0095,1.049,0.010,0.842,0.015,0.27,0.76,0.29, 0.5520,0.0100,1.039,0.010,0.862,0.015,0.27,0.78,0.28), nrow=6,ncol=9) colnames(d) <- c('X','sX','Y','sY','Z','sZ','rXY','rXZ','rYZ') titterington(d)
Averages heteroscedastic data either using the ordinary weighted mean, or using a random effects model with two sources of variance. Computes the MSWD of a normal fit without overdispersion. Implements a modified Chauvenet criterion to detect and reject outliers. Only propagates the systematic uncertainty associated with decay constants and calibration factors after computing the weighted mean isotopic composition. Does not propagate the uncertainty of any initial daughter correction, because this is neither a purely random or purely systematic uncertainty.
weightedmean(x, ...) ## Default S3 method: weightedmean( x, from = NA, to = NA, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, ranked = FALSE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'other' weightedmean( x, from = NA, to = NA, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, ranked = FALSE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'UPb' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, type = 4, cutoff.76 = 1100, oerr = 3, cutoff.disc = discfilter(), exterr = FALSE, ranked = FALSE, common.Pb = 0, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'PbPb' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, exterr = FALSE, common.Pb = 2, ranked = FALSE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'ThU' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, ranked = FALSE, Th0i = 0, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'ArAr' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, exterr = FALSE, ranked = FALSE, i2i = FALSE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'KCa' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, exterr = FALSE, ranked = FALSE, i2i = FALSE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'ThPb' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, exterr = FALSE, ranked = FALSE, i2i = TRUE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'ReOs' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, exterr = FALSE, ranked = FALSE, i2i = TRUE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'SmNd' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, exterr = FALSE, ranked = FALSE, i2i = TRUE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'RbSr' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, exterr = FALSE, i2i = TRUE, ranked = FALSE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'LuHf' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, exterr = FALSE, i2i = TRUE, ranked = FALSE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'UThHe' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, ranked = FALSE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'fissiontracks' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, exterr = FALSE, ranked = FALSE, hide = NULL, omit = NULL, omit.col = NA, ... )
weightedmean(x, ...) ## Default S3 method: weightedmean( x, from = NA, to = NA, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, ranked = FALSE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'other' weightedmean( x, from = NA, to = NA, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, ranked = FALSE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'UPb' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, type = 4, cutoff.76 = 1100, oerr = 3, cutoff.disc = discfilter(), exterr = FALSE, ranked = FALSE, common.Pb = 0, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'PbPb' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, exterr = FALSE, common.Pb = 2, ranked = FALSE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'ThU' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, ranked = FALSE, Th0i = 0, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'ArAr' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, exterr = FALSE, ranked = FALSE, i2i = FALSE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'KCa' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, exterr = FALSE, ranked = FALSE, i2i = FALSE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'ThPb' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, exterr = FALSE, ranked = FALSE, i2i = TRUE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'ReOs' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, exterr = FALSE, ranked = FALSE, i2i = TRUE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'SmNd' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, exterr = FALSE, ranked = FALSE, i2i = TRUE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'RbSr' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, exterr = FALSE, i2i = TRUE, ranked = FALSE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'LuHf' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, exterr = FALSE, i2i = TRUE, ranked = FALSE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'UThHe' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, ranked = FALSE, hide = NULL, omit = NULL, omit.col = NA, ... ) ## S3 method for class 'fissiontracks' weightedmean( x, random.effects = FALSE, detect.outliers = TRUE, plot = TRUE, from = NA, to = NA, levels = NA, clabel = "", rect.col = c("#00FF0080", "#FF000080"), outlier.col = "#00FFFF80", sigdig = 2, oerr = 3, exterr = FALSE, ranked = FALSE, hide = NULL, omit = NULL, omit.col = NA, ... )
x |
a two column matrix of values (first column) and their
standard errors (second column) OR an object of class
|
... |
optional arguments |
from |
minimum y-axis limit. Setting |
to |
maximum y-axis limit. Setting |
random.effects |
if if |
detect.outliers |
logical flag indicating whether outliers should be detected and rejected using Chauvenet's Criterion. |
plot |
logical flag indicating whether the function should produce graphical output or return numerical values to the user. |
levels |
a vector with additional values to be displayed as different background colours of the plot symbols. |
clabel |
label of the colour legend |
rect.col |
Fill colour for the measurements or age estimates. This can
either be a single colour or multiple colours to form a colour
ramp (to be used if a single colour: multiple colours: a colour palette: a reversed palette: For empty boxes, set |
outlier.col |
if |
sigdig |
the number of significant digits of the numerical values reported in the title of the graphical output. |
oerr |
indicates whether the analytical uncertainties of the output are reported in the plot title as:
|
ranked |
plot the aliquots in order of increasing age? |
hide |
vector with indices of aliquots that should be removed from the weighted mean plot. |
omit |
vector with indices of aliquots that should be plotted but omitted from the weighted mean calculation. |
omit.col |
colour that should be used for the omitted aliquots. |
type |
scalar indicating whether to plot the
|
cutoff.76 |
the age (in Ma) below which the
|
cutoff.disc |
discordance cutoff filter. This is an object of
class |
exterr |
propagate decay constant uncertainties? |
common.Pb |
common lead correction:
|
Th0i |
initial
|
i2i |
‘isochron to intercept’: calculates the initial
(aka ‘inherited’, ‘excess’, or ‘common’) Note that choosing this option introduces a degree of circularity in the weighted age calculation. In this case the weighted mean plot just serves as a way to visualise the residuals of the data around the isochron, and one should be careful not to over-interpret the numerical output. |
Let be a set of n age estimates
determined on different aliquots of the same sample, and let
be their analytical
uncertainties.
IsoplotR
then calculates the weighted mean of
these data using one of two methods:
The ordinary error-weighted mean:
A random effects model with two sources of variance:
where is the mean,
is the total variance
and
is the 'overdispersion'. This equation can be
solved for
and
by the method of maximum
likelihood.
IsoplotR uses a modified version of Chauvenet's criterion for outlier detection:
Compute the error-weighted mean () of the
age determinations
using their analytical uncertainties
For each , compute the probability
that
that
for
(ordinary weighted mean) or
(random effects model)
Let . If
, then reject the j
date, reduce
by one (i.e.,
) and repeat steps 1 through 3
until the surviving dates pass the third step.
If the analytical uncertainties are small compared to the scatter
between the dates (i.e. if for all
),
then this generalised algorithm reduces to the conventional
Chauvenet criterion. If the analytical uncertainties are large and
the data do not exhibit any overdispersion, then the heuristic
outlier detection method is equivalent to Ludwig (2003)'s ‘2-sigma’
method.
The uncertainty budget of the weighted mean does not include the uncertainty of the initial daughter correction (if any). This uncertainty is neither a purely systematic nor a purely random uncertainty and cannot easily be propagated with conventional geochronological data processing algorithms. This caveat is especially pertinent to chronometers whose initial daughter composition is determined by isochron regression. You may note that the uncertainties of the weighted mean are usually much smaller than those of the isochron. In this case the isochron errors are more meaningful, and the weighted mean plot should just be used to inspect the residuals of the data around the isochron.
Returns a list with the following items:
a two or three element vector with:
t
: the weighted mean. An asterisk is added to the plot title
if the initial daughter correction is based on an isochron
regression, to mark the circularity of using an isochron to compute
a weighted mean.
s[t]
: the standard error of the weighted mean, excluding the
uncertainty of the initial daughter correction. This is because
this uncertainty is neither purely random nor purely systematic.
a two-element vector with the (over)dispersion and its standard error.
the Mean Square of the Weighted Deviates (a.k.a. ‘reduced Chi-square’ statistic)
the number of degrees of freedom of the Chi-square test
for homogeneity (, where
is the number of
samples).
the p-value of a Chi-square test with
degrees of freedom, testing the null hypothesis that the underlying
population is not overdispersed.
vector of logical flags indicating which steps are included into the weighted mean calculation
list of plot parameters for the weighted mean
diagram, including mean
(the mean value), ci
(a grey
rectangle with the (1 s.e., 2 s.e. or 100[1-]%,
depending on the value of
oerr
) confidence interval ignoring
systematic errors), ci.exterr
(a grey rectangle with the
confidence interval including systematic errors), dash1
and
dash2
(lines marking the confidence interval augmented by
overdispersion if
random.effects=FALSE
),
and marking the confidence limits of a normal distribution whose
standard deviation equals the overdispersion parameter if
random.effects=TRUE
).
ages <- c(251.9,251.59,251.47,251.35,251.1,251.04,250.79,250.73,251.22,228.43) errs <- c(0.28,0.28,0.63,0.34,0.28,0.63,0.28,0.4,0.28,0.33) weightedmean(cbind(ages,errs)) attach(examples) weightedmean(LudwigMean)
ages <- c(251.9,251.59,251.47,251.35,251.1,251.04,250.79,250.73,251.22,228.43) errs <- c(0.28,0.28,0.63,0.34,0.28,0.63,0.28,0.4,0.28,0.33) weightedmean(cbind(ages,errs)) attach(examples) weightedmean(LudwigMean)
Implements the unified regression algorithm of York et al. (2004) which, although based on least squares, yields results that are consistent with maximum likelihood estimates of Titterington and Halliday (1979).
york(x)
york(x)
x |
a 4 or 5-column matrix with the X-values, the analytical uncertainties of the X-values, the Y-values, the analytical uncertainties of the Y-values, and (optionally) the correlation coefficients of the X- and Y-values. |
Given n pairs of (approximately) collinear measurements
and
(for
), their uncertainties
and
, and their covariances
cov[
], the
york
function finds the best fitting
straight line using the least-squares algorithm of York et
al. (2004). This algorithm is modified from an earlier method
developed by York (1968) to be consistent with the maximum
likelihood approach of Titterington and Halliday (1979). It
computes the MSWD as a measure of under/overdispersion.
Overdispersed datasets (MSWD>1) can be dealt with in the same three
ways that are described in the documentation of the
isochron
function.
A seven-element list of vectors containing:
the intercept of the straight line fit and its standard error
the slope of the fit and its standard error
the covariance of the slope and intercept
the mean square of the residuals (a.k.a ‘reduced Chi-square’) statistic
degrees of freedom of the linear fit
p-value of a Chi-square value with df
degrees of freedom
Titterington, D.M. and Halliday, A.N., 1979. On the fitting of parallel isochrons and the method of maximum likelihood. Chemical Geology, 26(3), pp.183-195.
York, Derek, et al., 2004. Unified equations for the slope, intercept, and standard errors of the best straight line. American Journal of Physics 72.3, pp.367-375.
data2york
, titterington
,
isochron
, ludwig
X <- c(1.550,12.395,20.445,20.435,20.610,24.900, 28.530,50.540,51.595,86.51,106.40,157.35) Y <- c(.7268,.7849,.8200,.8156,.8160,.8322, .8642,.9584,.9617,1.135,1.230,1.490) n <- length(X) sX <- X*0.01 sY <- Y*0.005 rXY <- rep(0.8,n) dat <- cbind(X,sX,Y,sY,rXY) fit <- york(dat) scatterplot(dat,fit=fit)
X <- c(1.550,12.395,20.445,20.435,20.610,24.900, 28.530,50.540,51.595,86.51,106.40,157.35) Y <- c(.7268,.7849,.8200,.8156,.8160,.8322, .8642,.9584,.9617,1.135,1.230,1.490) n <- length(X) sX <- X*0.01 sY <- Y*0.005 rXY <- rep(0.8,n) dat <- cbind(X,sX,Y,sY,rXY) fit <- york(dat) scatterplot(dat,fit=fit)