Age model and chronology construction
Simon Goring
1 Building Chronologies
Time is central to understanding paleoecological change. For this reason, having reliable and robust chronologies within paleoecological analysis is critical for understanding change. This workbook will illustrate simple workflows for generating three of the most commonly used age models (clasical, Bacon and BChron), and for understanding their outputs.
1.1 Work Plan
This workbook will show the user how to:
- Obtain data from the Neotoma Paleoecological Database
- Work with Neotoma’s reported chronologies & understand their strengths & weaknesses
- Obtain the raw geochronological data for a record
- Build an age model using the chronological data using the Bayesian method in
BChron
2 Obtaining data from the Neotoma Paleoecological Database
Data from Neotoma can be accessed using the neotoma
package for R. To download data from Neotoma we first need to load the library and issue a request for data. Neotoma can return site information, more complete dataset information and the full download information. Let’s start by looking at datasets with pollen information.
install.packages('neotoma')
Now, let’s search for data and see what we get:
library(neotoma)
library(analogue)
library(Bchron)
pollen_sites <- get_dataset(datasettype = 'pollen', gpid = 'Mexico')
This returns 19 datasets for Switzerland. You can access the help for get_dataset()
using the R command ?get_dataset
, and you can then see more information about search terms available.
Given the number of sites, it might be a bit annoting to just print out the whole list of sites using print(pollen_sites)
, or just by typing pollen_sites
. There are two ways of viewing the sites spatially, either plot(pollen_sites)
or plot_leaflet(pollen_sites)
. Let’s have a bit of fun by using the plot_leaflet()
function:
plot_leaflet(pollen_sites)
Given these datasets, we might as well choose one to download. In this case, we will be using the Cenote San Jose Chulchaca record. This pollen record is dataset 2396
, part of the Latin American Pollen Database, and we can see more information about the dataset by using the browse()
function in the neotoma
package:
browse(2396)
The record seems well constructed, but we will use it to illustrate reconstruction using BChron
. First, we will download the dataset:
cen_pol <- get_download(2396)
## API call was successful. Returned record for Cenote San JoseChulchaca
## Warning in split_indices(.group, .n): '.Random.seed' is not an integer
## vector but of type 'NULL', so ignored
Stratiplot(cen_pol, sort = 'wa', group="TRSH")
3 Building the Age Model
The age model is stored within a download
object’s sample.meta
element. There is a helper function in the neotoma
package, ages()
:
ages(cen_pol[[1]])
depth | thickness | age.older | age | age.younger | chronology.name | age.type | chronology.id | sample.id | dataset.id | unit.name | |
---|---|---|---|---|---|---|---|---|---|---|---|
2 | 1 | NA | NA | 9 | NA | Leyden 1995b | Radiocarbon years BP | 1179 | 48974 | 2396 | NA |
28 | 5 | NA | NA | 45 | NA | Leyden 1995b | Radiocarbon years BP | 1179 | 48975 | 2396 | NA |
3 | 9 | NA | NA | 82 | NA | Leyden 1995b | Radiocarbon years BP | 1179 | 48976 | 2396 | NA |
4 | 13 | NA | NA | 118 | NA | Leyden 1995b | Radiocarbon years BP | 1179 | 48977 | 2396 | NA |
5 | 17 | NA | NA | 154 | NA | Leyden 1995b | Radiocarbon years BP | 1179 | 48978 | 2396 | NA |
6 | 21 | NA | NA | 191 | NA | Leyden 1995b | Radiocarbon years BP | 1179 | 48979 | 2396 | NA |
These ages are the result of the construction of a chronology. In the case of the Cenote San Jose Chulchaca record we can use the command length(cen_pol[[1]]$chronologies)
to see that there are three chronologies. The function get_chroncontrol()
provides us with the chronological controls used to generate the age model:
cen_chron <- get_chroncontrol(cen_pol)
## $`2396`
## Chronology for Cenote San Jose Chulchaca, dataset ID: 2396
## Leyden 1995b: Default model, constructed using linear interpolation.
## Model age span: 0 to 2230
## Model age units: Radiocarbon years BP
##
## depth thickness age age.young age.old control.type chron.control.id
## 1 0 NA 0 0 0 Core top 6665
## 2 65 6 590 520 660 Radiocarbon 6666
## 3 85 6 1010 920 1200 Radiocarbon 6667
## 4 99 6 1860 1710 2010 Radiocarbon 6668
##
## Accessed 2018-01-09 22:00h.
##
## attr(,"class")
## [1] "chroncontrol_list" "list"
With this record we can pull the depths from lob_pol[[1]]$sample.meta$depth
to predict the model at, and use the chronology controls as the tie points for the chronology.
cen_chron[[1]]$chron.control$thickness[1] <- 5
cen_chron[[1]]$chron.control$age.young[1] <- cen_chron[[1]]$chron.control$age.young[1] - 1
cen_model <- Bchronology( ages = cen_chron[[1]]$chron.control$age,
ageSds = cen_chron[[1]]$chron.control$age - cen_chron[[1]]$chron.control$age.young,
positions = cen_chron[[1]]$chron.control$depth,
positionThicknesses = cen_chron[[1]]$chron.control$thickness,
predictPositions = cen_pol[[1]]$sample.meta$depth,
calCurves = c("normal", rep("intcal13", 3)))
When the model is run it gives us the relatively complex BchronologyRun
object. The object itself is described in the help for Bchronology
. We can look at the posterior estimates for the model using the lob_model$thetaPredict
element of the lob_model
variable. Here we can see that the posteriors are arranged so that each depth is in a single column, with approximately (or exactly) 1000 rows, representing draws from the predicted distributions.
Given these results, we can use the plot
function for the chronology:
plot(cen_model)
To then look at the model, and make assessments. You now have a new age model for your record!