Calculate transfer functions
Source:vignettes/calculate-transfer-functions.Rmd
calculate-transfer-functions.Rmd
Overview
This vignette explains, for the two special cases of isotope diffusion in polar firn and time uncertainty in layer-counted chronologies, how to calculate spectral transfer functions which describe the expected loss in spectral power as a function of frequency. For time uncertainty, the loss applies to the spectrum of the common signal recorded by the spatial average of an array of layer-counted proxy records (the “stacked” record); for diffusion, it applies to the loss in average spectral power of individual isotope records.
The documentation utilises as examples the code for calculating the transfer functions for the DML and WAIS isotope records studied in Münch and Laepple (2018). There, you will also find a detailed description of the basic method (see Appendix B).
Dependencies
For the modelling of time uncertainty the suggested package
simproxyage
is required, so we need to check whether it is
available:
has.simproxyage <- proxysnr:::check.simproxyage()
#>
#> Checking simproxyage availability... ok.
In case you have not installed simproxyage
and you try
to rebuild this vignette, you will receive a message with installation
instructions here. The vignette will still build, though without
actually calculating any time uncertainty transfer function.
General settings
First, we set up general variables and parameters that are required for the calculations.
For convenience, list objects are used for saving the transfer functions:
# for diffusion transfer function
dtf <- list()
# for time uncertainty transfer function
ttf <- list()
A specific resolution of the created surrogate white noise time series is used for the diffusion calculations, for which, in general, a higher resolution compared to the target resolution of the isotope records is adopted. This is necessary for numerical stability of the diffusion results at the high-frequency end.
Here, the target resolution of the isotope records is 1 yr (annual resolution) and a simulation resolution of 0.5 yr has proven sufficient for the numerical stability of the results:
res <- 1/2
Finally, we specify the number of Monte Carlo simulations used to obtain the transfer functions. In general, an average of a large number of simulations is needed to reduce the spectral uncertainties and obtain smooth estimates. However, to reduce computation time, only a small number of simulations is used here for the vignette:
ns <- 10
Note that for the results of Münch and Laepple (2018),
ns
has been set to 100,000
, which required a
computation time of 1–3 hours depending on the dataset (using a 2.4 GHz
Intel Core i5 processor).
DML1 isotope records
In the following, we document all dataset-specific parameters needed for the calculations along the example of the DML1 dataset of isotope records.
Specify the number of proxy records (“cores”) in the studied array:
nc <- 15
Specify the time axis common to all proxy records in the array in units of the original (target) resolution of the records (here, years), which gives the number of proxy data points:
Specify the time points of age control points where the time uncertainty is assumed to be zero:
acp <- c(1994, 1884, 1816, 1810)
Set the rate of the random process which perturbs the proxy record chronologies, so here the rate of missing or double-counting of a layer; we use symmetric rates here:
rate <- 0.013
(Specify a numeric vector with two entries to use asymmetric rates.)
For the diffusion simulations, estimates of the diffusion length (in
units of the record resolution) are needed as a function of time since
deposition. Along with proxysnr
, the diffusion length
estimates for the DML and WAIS cores are provided in the internal
dataset diffusion.length
. Calculation of these estimates is
documented in the package source under
./data-raw/produce-internal-data.R
, where .
is
the root of the package source directory. For further information see
the publication Münch and Laepple (2018).
We can now run the diffusion model,
set.seed(4122018)
dtf$dml1 <- CalculateDiffusionTF(nt = nt / res, nc = nc, ns = ns,
sigma = proxysnr:::diffusion.length$dml1[, -1],
res = res)
and the time uncertainty model with Gaussian white noise as surrogate data:
set.seed(4122018)
if (has.simproxyage) {
suppressMessages(
ttf$dml1 <- CalculateTimeUncertaintyTF(t = t, acp = acp, nt = nt, nc = nc,
ns = ns, rate = rate,
surrogate.fun = rnorm)
)
} else {
ttf <- NULL
}
The other isotope records
We run the calculations for the DML2 isotope records…
set.seed(4122018)
nc <- 3
t <- seq(1994, 1000)
nt <- length(t)
acp <- c(1994, 1884, 1816, 1810, 1459, 1259)
rate <- 0.013
dtf$dml2 <- CalculateDiffusionTF(nt = nt / res, nc = nc, ns = ns,
sigma = proxysnr:::diffusion.length$dml2[, -1],
res = res)
if (has.simproxyage) {
suppressMessages(
ttf$dml2 <- CalculateTimeUncertaintyTF(t = t, acp = acp, nt = nt, nc = nc,
ns = ns, rate = rate,
surrogate.fun = rnorm)
)
}
… and the WAIS isotope records:
set.seed(4122018)
nc <- 5
t <- seq(2000, 1800)
nt <- length(t)
acp <- c(2000, 1992, 1964, 1885, 1837, 1816, 1810)
rate <- 0.027
dtf$wais <- CalculateDiffusionTF(nt = nt / res, nc = nc, ns = ns,
sigma = proxysnr:::diffusion.length$wais[, -1],
res = res)
if (has.simproxyage) {
suppressMessages(
ttf$wais <- CalculateTimeUncertaintyTF(t = t, acp = acp, nt = nt, nc = nc,
ns = ns, rate = rate,
surrogate.fun = rnorm)
)
}
Plot the transfer functions
The obtained transfer functions can be plotted with:
PlotTF(dtf = dtf, ttf = ttf,
names = c("DML1", "DML2", "WAIS"),
col = c("black", "firebrick", "dodgerblue"))

Fig. 1: Estimates of the spectral transfer functions for the effects of site-specific diffusion (a) and time uncertainty (b) for three arrays of firn-core isotope records: DML1 (black), DML2 (red) and WAIS (blue) (as studied in Münch and Laepple, 2018). Plotted is in each case the average transfer function from 10 Monte Carlo simulations.
The transfer functions for simulations with ns = 10^5
as
used and shown in Münch and Laepple (2018), Fig. B1, are provided along
proxysnr
in the variables ?diffusion.tf
and
?time.uncertainty.tf
.
These can be plotted by simply omitting the transfer function parameters in the plot call:
Literature cited
Münch, T. and Laepple, T.: What climate signal is contained in decadal- to centennial-scale isotope variations from Antarctic ice cores?, Clim. Past, 14, 2053-2070, doi: 10.5194/cp-14-2053-2018, 2018.