install.packages("kairos")
We are delighted to announce that kairos 1.0.0 has just landed on on CRAN! kairos is a toolkit for absolute dating and analysis of chronological patterns. This package includes functions for chronological modeling and dating of archaeological assemblages from count data. It allows to compute time point estimates and density estimates of the occupation and duration of an archaeological site.
You can install it from CRAN with:
This first release includes:
- Mean ceramic date estimation (South 1977) with
mcd()
- Event and accumulation date estimation (Bellanger and Husi 2012) with
event()
- Aoristic analysis (Ratcliffe 2000) with
aoristic()
- Chronological apportioning (Roberts et al. 2012) with
apportion()
This post highlights the basics of the package using the zuni
dataset (Peeples and Schachner 2012).
## Load the zuni dataset
# install.packages("folio")
data("zuni", package = "folio")
## 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)
)
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 found in a given assemblage. The weights are the conditional frequencies of the respective types in the assemblage.
## Calculate date midpoint for each ceramic type
zuni_mid <- vapply(X = zuni_dates, FUN = mean, FUN.VALUE = numeric(1))
## Calculate MCD
zuni_mcd <- mcd(zuni_counts, dates = zuni_mid)
head(zuni_mcd)
LZ1105 LZ1103 LZ1100 LZ1099 LZ1097 LZ1096
1162 1138 1154 1091 1092 841
## Assess the sampling error
zuni_boot <- bootstrap(zuni_mcd, level = 0.95, probs = NULL)
head(zuni_boot)
min mean max lower upper
LZ1105 1100 1162.229 1220 1161.1344 1163.3236
LZ1103 1030 1139.130 1218 1137.5082 1140.7518
LZ1100 1029 1153.328 1237 1151.4411 1155.2149
LZ1099 1078 1091.061 1100 1090.7921 1091.3299
LZ1097 919 1090.436 1212 1087.1609 1093.7111
LZ1096 738 840.346 1048 836.3994 844.2926
Event and Accumulation Date
Event and accumulation dates are density estimates of the occupation and duration of an archaeological site (Bellanger and Husi 2012). 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.
Event dates are estimated by fitting a Gaussian multiple linear regression model on the factors resulting from a correspondence analysis. This model results from the known dates of a selection of reliable contexts and allows to predict the event dates of the remaining assemblages.
## Assume that some assemblages are reliably dated
## (this is NOT a real example)
zuni_dates <- c(
LZ0569 = 1097, LZ0279 = 1119, CS16 = 1328, LZ0066 = 1111,
LZ0852 = 1216, LZ1209 = 1251, CS144 = 1262, LZ0563 = 1206,
LZ0329 = 1076, LZ0005Q = 859, LZ0322 = 1109, LZ0067 = 863,
LZ0578 = 1180, LZ0227 = 1104, LZ0610 = 1074
)
## Model the event and accumulation date for each assemblage
model <- event(zuni_counts, dates = zuni_dates, cutoff = 90)
## Estimate the event date of the assemblages
zuni_event <- predict_event(model, margin = 1, level = 0.95)
head(zuni_event)
date lower upper error
LZ1105 1168 1158 1178 4
LZ1103 1143 1139 1147 1
LZ1100 1156 1148 1164 3
LZ1099 1099 1092 1106 3
LZ1097 1088 1080 1097 3
LZ1096 839 829 849 4
The accumulation date is defined as the weighted mean of the event date of the ceramic types found in a given assemblage. The weights are the conditional frequencies of the respective types in the assemblage.
## Estimate accumulation dates
zuni_acc <- predict_accumulation(model)
head(zuni_acc)
LZ1105 LZ1103 LZ1100 LZ1099 LZ1097 LZ1096
1170 1140 1158 1087 1092 875
Event and accumulation dates can be displayed as density curves (see Bellanger and Husi 2012 for the interpretation of the curves). The probability density of the event date can be approximated by a normal distribution, while the accumulation time can be estimated by a Gaussian mixture. The distribution function of the accumulation time is quite close to the definition of the tempo plot introduced by Dye (2016): an estimates of the cumulative occurrence of archaeological events.
## Activity plot
## The event date is plotted as a line
## The accumulation time is shown as a grey filled area
plot(model, type = "activity", event = TRUE, select = "LZ1105")
## Tempo plot
plot(model, type = "tempo", select = "LZ1105")
Aoristic Analysis
Aoristic analysis (Ratcliffe 2000) can be used to determine the probability of contemporaneity of archaeological sites or assemblages. The aoristic analysis distributes the probability of an event uniformly over each temporal fraction of the period considered. The aoristic sum is then the distribution of the total number of events to be assumed within this period.
## Keep only assemblages that have a sample size of at least 10
zuni_keep <- apply(X = zuni, MARGIN = 1, FUN = function(x) sum(x) >= 10)
## Calculate date ranges for each assemblage
zuni_span <- apply(
X = zuni[zuni_keep, ],
FUN = function(x, dates) range(unlist(dates[x > 0])),
MARGIN = 1,
dates = zuni_dates
)
## Coerce to a data.frame
zuni_span <- as.data.frame(t(zuni_span))
names(zuni_span) <- c("from", "to")
## Calculate aoristic sum (weights)
aorist_weigth <- aoristic(zuni_span, step = 50, weight = TRUE)
plot(aorist_weigth)
## Rate of change
roc_weigth <- roc(aorist_weigth, n = 30)
plot(roc_weigth)
References
Reuse
Citation
@online{frerebeau2021,
author = {Nicolas Frerebeau},
title = {Kairos 1.0.0},
date = {2021-11-10},
url = {https://www.tesselle.org/posts/2021-11-10-kairos-100},
langid = {en}
}