knitr::opts_chunk$set( collapse = TRUE, comment = "#>", fig.height = 4, fig.width = 5, dpi = 150 )
Given a known depths and known (or modelled) ages, it is often convenient to approximate age as a continuous function of depth in an archive. This package provides tools to flexibly create age-depth relationships with various rules for interpolating age within known age-depth values, and extrapolating above and below these values. Typically, this is interpolation between known values and extrapolating using average sedimentation rates based on ages known at discrete points in a core.
Using the built-in dataset alta_lake_210Pb_ages
, which contains a Lead-210 (CRS) age-depth relationship for a core from Alta Lake, Whistler, British Columbia, we can create an age-depth model (note that age
and depth
are evaluated within .data
, if it is provided, and support tidy evaluation):
library(tidypaleo) alta_lake_adm <- age_depth_model( alta_lake_210Pb_ages, depth = depth_cm, age = age_year_ad, age_max = age_year_ad + age_error_yr, age_min = age_year_ad - age_error_yr ) alta_lake_adm
Then, we can plot the relationship:
plot(alta_lake_adm)
...Or predict raw data:
predict(alta_lake_adm, depth = seq(-1, 10, 0.5))
The default behaviour is to interpolate within known ages/depths, and extrapolate using a linear fit of ages/depths. These can be specified using transform functions, which take XY data and produce forward and inverse predictions based on them. The default call is:
age_depth_model( ..., interpolate_age = age_depth_interpolate, extrapolate_age_below = ~age_depth_extrapolate(.x, .y, x0 = last, y0 = last), extrapolate_age_above = ~age_depth_extrapolate(.x, .y, x0 = first, y0 = first), interpolate_age_limits = trans_exact, extrapolate_age_limits_below = trans_na, extrapolate_age_limits_above = trans_na )
To customize the behaviour of the predictions (e.g., disable extrapolating above or below), specify a transform function in the appropriate category. One-sided formulas are turned into functions using the rlang::as_function()
. A more advanced way might be to only use the first/last few observations to extrapolate above and below, which one could do like this:
alta_lake_adm2 <- age_depth_model( alta_lake_210Pb_ages, depth = depth_cm, age = age_year_ad, age_max = age_year_ad + age_error_yr, age_min = age_year_ad - age_error_yr, extrapolate_age_below = ~age_depth_extrapolate( tail(.x, 3), tail(.y, 3), x0 = dplyr::last, y0 = dplyr::last ), extrapolate_age_above = ~age_depth_extrapolate( head(.x, 3), head(.y, 3), x0 = dplyr::first, y0 = dplyr::first ) ) plot(alta_lake_adm2)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.