Bayesian planktic foraminifera calibration, for Python.
GPL-3.0 License
Experimental Bayesian planktic foraminifera calibration, for Python.
Please note that this package is currently under development. It will eat your pet hamster.
First, load key packages and an example dataset:
import numpy as np
import bayfox as bfox
example_file = bfox.get_example_data('VM21-30.csv')
d = np.genfromtxt(example_file, delimiter=',', names=True, missing_values='NA')
This data (from Koutavas and Joanides 2012) has three columns giving, down-core depth, sediment age (calendar years BP) and δ18O for G. ruber (white) (‰; VPDB). The core site is in the Eastern Equatorial Pacific.
We can make a prediction of sea-surface temperature (SST) with predict_seatemp()
:
prediction = bfox.predict_seatemp(d['d18O_ruber'], d18osw=0.239, prior_mean=24.9, prior_std=7.81)
The values we're using for priors are roughly based on the range of SSTs we've seen for G. ruber sediment
cores in the modern period, though the prior standard deviation is twice the spread in the modern
record. Let's use δ18O of modern seawater (‰; VSMOW) near the site (LeGrande and Schmidt 2006). We'll assume it's constant -- for simplicity.
We're also not correcting these proxies for changes in global ice volume, so these numbers will be off. Ideally we'd make
this correction to δ18Oc series before the prediction. See the
erebusfall
package for simple ice-volume correction in Python.
To see actual numbers from the prediction, directly parse prediction.ensemble
or use prediction.percentile()
to get
the 5%, 50% and 95% percentiles. You can also plot your prediction with bfox.predictplot(prediction)
.
This uses the pooled Bayesian calibration model, which is calibrated on annual SSTs. We can consider foram-specific variability with:
prediction = bfox.predict_seatemp(d['d18O_ruber'], d18osw=0.239, prior_mean=24.9, prior_std=7.81,
foram='G. ruber')
which uses our hierarchical model calibrated on annual SSTs. We can also estimate foram-specific seasonal effects with:
prediction = bfox.predict_seatemp(d['d18O_ruber'], d18osw=0.239, prior_mean=24.9, prior_std=7.81,
foram='G. ruber', seasonal_seatemp=True)
This uses our hierarchical model calibrated on seasonal SSTs. Be sure to specify the foraminifera if you use this option.
You can also predict δ18O for planktic calcite using similar options, using the predict_d18oc()
function.
To install bayfox with pip, run:
pip install bayfox
To install bayfox with conda, run:
conda install -c sbmalev bayfox
bayfox is not compatible with Python 2.
bayfox is available under the Open Source GPLv3 (https://www.gnu.org/licenses).