date_mcd estimates the Mean Ceramic Date of an assemblage.

date_mcd(object, ...)

date_event(object, ...)

refine_dates(object, ...)

# S4 method for CountMatrix
date_mcd(object, dates, errors = NULL,
  level = 0.95, n = 1000, ...)

# S4 method for CountMatrix
date_event(object, level = 0.95, cutoff = 90,

# S4 method for DateModel
refine_dates(object, method = c("jackknife",
  "bootstrap"), n = 1000, ...)



A \(m \times p\) matrix of count data (typically of class CountMatrix).


Further arguments to be passed to internal methods.


A length-\(p\) numeric vector giving the mid-date of each type (year AD).


A length-\(p\) numeric vector giving the absolute error of each date.


A length-one numeric vector giving the confidence level.


A non-negative integer giving the number of bootstrap replications (see below).


An integer giving the cumulative percentage of variance used to select CA factorial components for linear model fitting (see details). All compounds with a cumulative percentage of variance of less than the cutoff value will be retained.


A character string specifying the resampling method to be used. This must be one of "jackknife", "bootstrap" (see details). Any unambiguous substring can be given.


date_mcd returns a data.frame with the following columns:


An identifier to link each row to an assemblage.


The Mean Ceramic Date.


The error on the MCD.


The lower boundary of the confidence interval.


The upper boundary of the confidence interval.

date_event returns an object of class DateModel.

refine_dates returns a data.frame.


date_event estimates the event and accumulation dates of an assemblage.

refine_dates checks the stability of a date model with resampling methods.


Bellanger et al. did not publish the data supporting their demonstration: no replication of their results is possible and this implementation must be considered experimental. date_event may be subject to major changes in a future release.

Refining methods can lead to much longer execution times and larger output objects. To monitor the execution of these re-sampling procedures, a progress bar will automatically be displayed if the pbapply package is installed on your machine.

Mean Ceramic Date

The Mean Ceramic Date (MCD) is a point estimate of the occupation of an archaeological site (South 1977). The MCD is estimated as the weighted mean of the date midpoints of the ceramic types (based on absolute dates or the known production interval) found in a given assemblage. The weights are the relative frequencies of the respective types in the assemblage.

A bootstrapping procedure is used to estimate the confidence interval of a given MCD. For each assemblage, a large number of new bootstrap replicates is created, with the same sample size, by resampling the original assemblage with replacement. MCDs are calculated for each replicates and upper and lower boundaries of the confidence interval associated with each MCD are then returned. Confidence interval are not estimated for assemblages with only a single type (NAs are returned).

Event and Accumulation Dates

This is an implementation of the chronological modeling method proposed by Bellanger and Husi (2012, 2013).

Event and accumulation dates are density estimates of the occupation and duration of an archaeological site (Bellanger and Husi 2012, 2013). The event date is an estimation of the terminus post-quem of an archaeological assemblage. The accumulation date represents the "chronological profile" of the assemblage. According to Bellanger and Husi (2012), accumulation date can be interpreted "at best [...] as a formation process reflecting the duration or succession of events on the scale of archaeological time, and at worst, as imprecise dating due to contamination of the context by residual or intrusive material." In other words, accumulation dates estimate occurrence of archaeological events and rhythms of the long term.

This method relies on strong archaeological and statistical assumptions. Use it only if you know what you are doing (see references below and the vignette: utils::vignette("dating", package = "tabula")).

Date Model Checking

refine_date can be used to check the stability of the resulting DateModel with resampling methods.

If jackknife is used, one type/fabric is removed at a time and all statistics are recalculated. In this way, one can assess whether certain type/fabric has a substantial influence on the date estimate. A six columns data.frame is returned, giving the results of the resampling procedure (jackknifing fabrics) for each assemblage (in rows) with the following columns:


An identifier to link each row to an assemblage.


The jackknife event date estimate.


The lower boundary of the associated prediction interval.


The upper boundary of the associated prediction interval.


The standard error of predicted means.


The jackknife estimate of bias.

If bootstrap is used, a large number of new bootstrap assemblages is created, with the same sample size, by resampling each of the original assemblage with replacement. Then, examination of the bootstrap statistics makes it possible to pinpoint assemblages that require further investigation. A six columns data.frame is returned, giving the bootstrap distribution statistics for each replicated assemblage (in rows) with the following columns:


An identifier to link each row to an assemblage.


Minimum value.


Sample quantile to 0.05 probability.


Mean value (event date).


Sample quantile to 0.95 probability.


Maximum value.


Bellanger, L. & Husi, P. (2013). Mesurer et modéliser le temps inscrit dans la matière à partir d'une source matérielle : la céramique médiévale. In Mesure et Histoire Médiévale. Histoire ancienne et médiévale. Paris: Publication de la Sorbonne, p. 119-134.

Bellanger, L. & Husi, P. (2012). Statistical Tool for Dating and Interpreting Archaeological Contexts Using Pottery. Journal of Archaeological Science, 39(4), 777-790. DOI: 10.1016/j.jas.2011.06.031.

Bellanger, L., Tomassone, R. & Husi, P. (2008). A Statistical Approach for Dating Archaeological Contexts. Journal of Data Science, 6, 135-154.

Bellanger, L., Husi, P. & Tomassone, R. (2006). Une approche statistique pour la datation de contextes archéologiques. Revue de Statistique Appliquée, 54(2), 65-81.

Bellanger, L., Husi, P. & Tomassone, R. (2006). Statistical Aspects of Pottery Quantification for the Dating of Some Archaeological Contexts. Archaeometry, 48(1), 169-183. DOI: 10.1111/j.1475-4754.2006.00249.x.

Poblome, J. & Groenen, P. J. F. (2003). Constrained Correspondence Analysis for Seriation of Sagalassos Tablewares. In Doerr, M. & Apostolis, S. (eds.), The Digital Heritage of Archaeology. Athens: Hellenic Ministry of Culture.

South, S. A. (1977). Method and Theory in Historical Archaeology. New York: Academic Press.

See also


## Mean Ceramic Date ## Coerce the zuni dataset to an abundance (count) matrix zuni_counts <- as_count(zuni) ## Set the start and end dates for each ceramic type zuni_dates <- list( LINO = c(600, 875), KIAT = c(850, 950), RED = c(900, 1050), GALL = c(1025, 1125), ESC = c(1050, 1150), PUBW = c(1050, 1150), RES = c(1000, 1200), TULA = c(1175, 1300), PINE = c(1275, 1350), PUBR = c(1000, 1200), WING = c(1100, 1200), WIPO = c(1125, 1225), SJ = c(1200, 1300), LSJ = c(1250, 1300), SPR = c(1250, 1300), PINER = c(1275, 1325), HESH = c(1275, 1450), KWAK = c(1275, 1450) ) ## Calculate date midpoints and errors zuni_mid <- vapply(X = zuni_dates, FUN = mean, FUN.VALUE = numeric(1)) zuni_error <- vapply(X = zuni_dates, FUN = diff, FUN.VALUE = numeric(1)) / 2 ## Calculate MCD ## (we use a bootstrapping procedure to estimate the confidence interval) zuni_mcd <- date_mcd(zuni_counts, dates = zuni_mid, errors = zuni_error) head(zuni_mcd)
#> id date error lower upper #> 1 LZ1105 1162.5000 49.03861 1160.5609 1162.630 #> 2 LZ1103 1137.8378 18.82518 1135.1952 1138.447 #> 3 LZ1100 1154.4643 24.20615 1154.2346 1157.687 #> 4 LZ1099 1090.6250 26.51650 1090.1506 1090.693 #> 5 LZ1097 1092.1875 26.51650 1087.2620 1093.679 #> 6 LZ1096 841.0714 43.59484 837.0617 844.874
## Plot dates keep_sites <- c("CS11", "CS12", "CS144", "CS195", "CS40", "LZ0219", "LZ0280", "LZ0367", "LZ0508", "LZ0560", "LZ1076", "LZ1087") set_dates(zuni_counts) <- list(value = zuni_mcd$date, error = zuni_mcd$error) plot_date(zuni_counts, select = keep_sites, sort = "asc") + ggplot2::theme_bw()
## Event and accumulation dates (Bellanger et al.) ## See the vignette: # \donttest{ utils::vignette("dating", package = "tabula")
#> starting httpd help server ...
#> done
# }