Supplementary details supporting the analysis of OSL and C14 dates, lithics and shellfish from the 1989 excavations at Madjebebe (Malakanunja II)

Ben Marwick, benmarwick@gmail.com

This document contains the source code used to generate the plots and statistics presented in the manuscript. It is provided to give the reader additional insight into the data analysis workflow and allow anyone to reproduce our analysis and further explore the analyses and data for themselves.

OSL and C14 dates

chrono_data_tidied

library(mjb1989excavationpaper)
chrono_data <- get_chrono_data()

OK, let’s have a look at what get_chrono_data actually does. You can print the body of any function by calling it without a parenthesis.

get_chrono_data
function () 
{
    dates_1989 <- read.csv("data/Date_table_from_paper_on_1989_dig.csv")
    return(dates_1989)
}
<environment: namespace:mjb1989excavationpaper>

And let’s have a quick at the raw data too:

chrono_data_tidied

Let’s see the chrono_data_tidied data

interpolate_chrono_data

interpolate_chrono_data
function (dates_1989) 
{
    cal.date.lo <- loess(age2plot ~ Depth.m, dates_1989[dates_1989$Method %in% 
        c("C14", "TL", "OSL"), ], span = 0.4)
    cal.date.pr <- predict(cal.date.lo, data.frame(Depth.m = seq(0, 
        5, 0.01)))
    cal.date.pr <- data.frame(age = cal.date.pr, depth = names(cal.date.pr))
    oldest_depth = 287
    oldest <- cal.date.pr[cal.date.pr$depth == oldest_depth, 
        ]$age
    base_of_dense_depth = 250
    dense <- cal.date.pr[cal.date.pr$depth == base_of_dense_depth, 
        ]$age
    return(list(oldest_depth = oldest_depth, oldest = oldest, 
        base_of_dense_depth = base_of_dense_depth, dense = dense, 
        cal.date.lo = cal.date.lo))
}
<bytecode: 0x10d04fd10>
<environment: namespace:mjb1989excavationpaper>
plot_chrono_data
function (dates_1989, oldest_depth, oldest, base_of_dense_depth, 
    dense) 
{
    library(ggplot2)
    library(grid)
    limits <- aes(ymax = age2plot + Error/1000, ymin = age2plot - 
        Error/1000, colour = factor(Method))
    library(scales)
    p1 <- ggplot(dates_1989, aes(Depth.m, age2plot, label = Lab.Code)) + 
        geom_smooth(data = dates_1989[!(dates_1989$Lab.Code %in% 
            c("ANUA-9915")), ], method = "loess", se = FALSE, 
            span = 0.5, colour = "grey", alpha = 0.2, size = 1) + 
        geom_point(size = 2, aes(colour = factor(Method), shape = factor(Method))) + 
        geom_linerange(limits) + geom_text(angle = 0, hjust = -0.2, 
        vjust = 0.2, size = 2) + xlab("meters below surface") + 
        ylab("x 1000 years cal. BP") + scale_colour_discrete(name = "Dating\nmethod") + 
        scale_shape_discrete(name = "Dating\nmethod") + scale_y_continuous(labels = comma, 
        breaks = seq(0, 100, 20)) + scale_x_reverse() + annotate("segment", 
        x = oldest_depth/100, y = oldest, xend = 4.75, yend = oldest, 
        colour = "grey30") + annotate("segment", x = oldest_depth/100, 
        y = 0, xend = oldest_depth/100, yend = oldest, colour = "grey30") + 
        annotate("text", x = 3, y = 15, label = paste0("lowest artefacts (", 
            round(oldest, 0), " ka BP)"), size = 3) + annotate("segment", 
        x = base_of_dense_depth/100, y = dense, xend = 4.75, 
        yend = dense, colour = "grey30") + annotate("segment", 
        x = base_of_dense_depth/100, y = 0, xend = base_of_dense_depth/100, 
        yend = dense, , colour = "grey30") + annotate("text", 
        x = 2.5, y = 15, label = paste0("base of dense \noccupation layer (", 
            round(dense, 0), " ka BP)"), size = 3) + theme_bw() + 
        coord_flip() + theme(axis.title.x = element_text(size = 17), 
        axis.title.y = element_text(size = 17, angle = 90), axis.text.x = element_text(size = 15, 
            colour = "black"), axis.text.y = element_text(size = 15, 
            colour = "black"))
    ggsave(file = "figures/Fig_5_MKII_dates_from_1989_for_paper.svg", 
        width = 200, height = 200, units = "mm")
    return(p1)
}
<bytecode: 0x111866cd8>
<environment: namespace:mjb1989excavationpaper>
chrono_data_plotted <- plot_chrono_data(chrono_data_tidied, 
                        oldest_depth = chrono_data_interpolated$oldest_depth,
                        oldest = chrono_data_interpolated$oldest,
                        base_of_dense_depth = chrono_data_interpolated$base_of_dense_depth,
                        dense = chrono_data_interpolated$dense)
chrono_data_plotted

Based on the TL age estimates and the artefact distribution, Roberts et al. (1990a) suggested first occupation at the site began 55 ± 5 ka. Although the excavators were conservative in their interpretation s€”stressing the upper (i.e. 50 ka) limit of this age range and taking the lower limit of the high density band of artefacts (2.4 m bs) as the actual level of initial occupation €” we confirm here that the lowest artefacts occur in Spit 49, 2.76 €“ 2.8 m deep below surface and are bracketed by the original OSL age estimate of 55.5 ± 8.2 ka (KTL-162) and the TL estimate of 65 ± 14 ka (KTL-141). Subsequent redating of several of the lower samples at MJB using single grain and single aliquot OSL methods reduced the error ranges for the lower dates substantially, but did not alter the original results (Roberts et al. 1998).

At the time of Roberts et al. (1998) publication and commentary no calibration curve was available for radiocarbon dates greater than 11 ka, and hence the issue of underestimation of calendar years could not be resolved. A calibration curve is now available back to 50 ka (Reimer et al. 2013). The IntCal13 calibration curve results in a calibrated age for the 13.39 ka age (ANU-7006) as 15,001 €“ 17,429 cal BP, overlapping at 1sdƒ with the TL age of 15 ± 3 ka (KTL-165) at equivalent depth. Kamminga and Allen€™s (1973) 18.04 ka age (SUA-265) calibrates to c. 22.4 - 21.0 ka, overlapping at 1sdƒ with the TL age of 24 ± 5 ka (KTL-97) at equivalent depth. The 14.9 ka age (ANU-7007) provided by Roberts et al. (1998) calibrates to 18.5 - 17.8 ka, and remains within 1σ of the TL age of KTL-97. These new calibrations show that conventional radiocarbon years do substantially under-estimate the ages of the sediments and that calendar ages show a strong correlation with luminescence ages.

plotting_slopes_chrono_data

chrono_data_slopes_plot <- plotting_slopes_chrono_data(chrono_data_tidied)
# show plot
chrono_data_slopes_plot$the_plot