Composites#
In this tutorial, we introduce how to generate composites of proxies with cfr
.
Required data to complete this tutorial:
HadCRUT5 analysis gridded data: HadCRUT.5.0.1.0.analysis.anomalies.ensemble_mean.nc
[1]:
%load_ext autoreload
%autoreload 2
import cfr
print(cfr.__version__)
2023.6.28
Load a ProxyDatabase
#
[2]:
pdb = cfr.ProxyDatabase().fetch('PAGES2kv2')
fig, ax = pdb.plot()
Create composites for each archive type#
We take corals as an example.
[3]:
pdb_corals = pdb.filter(by='ptype', keys='coral')
fig, ax = pdb_corals.plot()
Without calibration to an instrumental target#
[4]:
pdb_corals = pdb_corals.make_composite(bin_width=10)
Analyzing ProxyRecord: 100%|██████████| 104/104 [00:00<00:00, 1097.86it/s]
Bootstrapping: 100%|██████████| 110/110 [00:01<00:00, 72.46it/s]
[5]:
fig, ax = pdb_corals.plot_composite(left_ylim=[4, -4])
With calibration to an instrumental target#
We load instrumental temperature observations as a target for scaling the proxy values.
[6]:
obs = cfr.ClimateField().fetch(
'HadCRUTv5', vn='tas_mean', lat_name='latitude', lon_name='longitude',
)
obs = obs.rename('tas')
fig, ax = obs[-1].plot()
>>> The target file seems existed at: ./data/HadCRUT.5.0.1.0.analysis.anomalies.ensemble_mean.nc . Loading from it instead of downloading ...
[7]:
pdb_corals = pdb_corals.make_composite(obs=obs, bin_width=10)
Analyzing ProxyRecord: 100%|██████████| 104/104 [00:16<00:00, 6.31it/s]
Bootstrapping: 100%|██████████| 110/110 [00:01<00:00, 72.24it/s]
[8]:
# Check the composite infomation:
print('proxy_comp:\n', pdb_corals.composite['proxy_comp'].index)
print('proxy_num:\n', pdb_corals.composite['proxy_num'])
print('df_obs:\n', pdb_corals.composite['df_obs'])
print('slope:\n', pdb_corals.composite['slope'])
print('intercept:\n', pdb_corals.composite['intercept'])
proxy_comp:
Float64Index([ 925.0, 935.0, 945.0, 955.0, 965.0, 975.0, 985.0, 995.0,
1005.0, 1015.0,
...
1925.0, 1935.0, 1945.0, 1955.0, 1965.0, 1975.0, 1985.0, 1995.0,
2005.0, 2015.0],
dtype='float64', length=110)
proxy_num:
[ 1. 1. 1. 1. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 1. 1. 1. 1.
1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.
2. 3. 3. 3. 5. 5. 5. 5. 5. 5. 5. 5. 5. 4.
4. 4. 4. 5. 5. 5. 5. 6. 7. 7. 7. 7. 8. 8.
9. 11. 12. 13. 13. 13. 13. 13. 16. 15. 17. 17. 17. 21.
21. 22. 29. 34. 38. 38. 41. 43. 48. 51. 56. 62. 71. 84.
93. 93. 98. 100. 101. 101. 99. 99. 98. 88. 26. 8.]
df_obs:
Ocn_065 Ocn_075 Ocn_078 Ocn_167 Ocn_091 Ocn_093 Ocn_096 \
1855.0 -0.078002 NaN NaN -0.205589 NaN NaN NaN
1865.0 -0.107282 -0.411357 NaN NaN NaN NaN NaN
1875.0 -0.069256 NaN NaN NaN NaN NaN NaN
1885.0 -0.167440 -0.293635 NaN -0.343136 NaN NaN -0.235500
1895.0 -0.307275 -0.263564 NaN -0.357457 -0.017921 -0.017921 NaN
1905.0 -0.427641 -0.295720 -0.477541 -0.336948 -0.499484 -0.499484 -0.251661
1915.0 -0.353616 -0.353642 -0.404239 -0.303997 -0.385642 -0.385642 NaN
1925.0 -0.007981 -0.215696 -0.231768 -0.243615 -0.203692 -0.203692 -0.178444
1935.0 0.081627 -0.230150 -0.178130 -0.255383 -0.181764 -0.181764 -0.194397
1945.0 0.108087 0.067905 0.041306 -0.134179 -0.115930 -0.115930 0.038444
1955.0 -0.048694 -0.150163 -0.095860 0.028338 -0.069165 -0.069165 -0.025822
1965.0 -0.100463 -0.232314 -0.147204 -0.099432 -0.175826 -0.175826 -0.169241
1975.0 0.013478 0.003847 -0.015949 -0.021495 0.127029 0.127029 0.172228
1985.0 0.156720 0.173390 0.118942 0.151294 0.117000 0.117000 0.045851
1995.0 0.400384 0.336906 0.236005 0.367082 0.125404 0.125404 0.243892
2005.0 0.332481 0.536344 0.339151 0.470025 0.545965 0.545965 0.476881
2015.0 0.669136 0.831119 0.576251 0.745144 0.560249 0.560249 0.550467
2025.0 1.034172 0.674760 0.776059 0.855508 0.839295 0.839295 0.943164
Ocn_086 Ocn_101 Ocn_070 ... Ocn_090 Ocn_119 Ocn_109 \
1855.0 NaN NaN -0.036022 ... NaN NaN NaN
1865.0 NaN NaN 0.228898 ... NaN NaN NaN
1875.0 NaN NaN 0.060659 ... NaN NaN NaN
1885.0 -0.156775 NaN -0.062139 ... NaN NaN NaN
1895.0 -0.307884 NaN -0.347920 ... NaN NaN -0.357971
1905.0 -0.297574 NaN -0.488638 ... NaN NaN -0.448553
1915.0 -0.258138 -0.441400 -0.443611 ... -0.282402 -0.386272 -0.378508
1925.0 -0.026011 -0.340216 -0.165828 ... -0.157599 -0.173787 -0.119391
1935.0 0.118868 -0.342152 -0.059643 ... -0.046964 -0.000825 -0.168527
1945.0 -0.142440 -0.016425 0.097489 ... -0.142528 NaN 0.074254
1955.0 0.033336 0.007120 -0.052192 ... -0.087915 0.083237 -0.041556
1965.0 -0.105926 -0.221945 -0.036882 ... -0.176294 -0.070780 -0.148954
1975.0 -0.037005 0.085508 -0.049525 ... -0.044368 0.011463 0.109753
1985.0 0.080488 0.091893 0.078563 ... 0.149136 0.116943 0.089410
1995.0 0.111560 0.228314 0.328462 ... 0.226947 0.383008 0.235536
2005.0 0.230500 0.345507 0.296928 ... 0.463342 0.396233 0.550538
2015.0 0.516225 0.439639 0.585526 ... 0.614403 0.622542 0.588246
2025.0 0.623775 0.876263 0.971606 ... 0.875553 0.618683 0.758172
Ocn_097 Ocn_159 Ocn_087 Ocn_153 Ocn_169 Ocn_071 Ocn_072
1855.0 NaN NaN NaN NaN -0.124460 -0.057067 -0.057067
1865.0 NaN NaN NaN NaN NaN NaN NaN
1875.0 NaN NaN NaN NaN NaN NaN NaN
1885.0 NaN NaN NaN -0.650625 NaN NaN NaN
1895.0 NaN NaN NaN -0.448504 -0.385324 -0.352457 -0.352457
1905.0 NaN NaN NaN -0.590030 -0.302197 -0.241020 -0.241020
1915.0 -0.296292 -0.386272 -0.285957 -0.428159 -0.365019 -0.327906 -0.327906
1925.0 -0.154915 -0.173787 -0.370671 -0.389576 -0.337369 -0.220641 -0.220641
1935.0 -0.034458 -0.000825 -0.052273 -0.284132 -0.037596 0.019260 0.019260
1945.0 -0.157033 NaN NaN -0.023910 0.156792 0.194008 0.194008
1955.0 -0.120586 0.083237 -0.043128 -0.269210 -0.009653 0.000416 0.000416
1965.0 -0.196732 -0.070780 -0.267265 -0.183740 -0.059642 -0.016300 -0.016300
1975.0 -0.043380 0.011463 -0.091441 -0.019263 -0.089854 -0.158615 -0.158615
1985.0 0.154048 0.116943 0.284636 0.164937 0.195618 0.186119 0.186119
1995.0 0.145717 0.383008 0.526384 0.244548 0.413396 0.424772 0.424772
2005.0 0.398888 0.396233 0.325635 0.227715 0.569829 0.486187 0.486187
2015.0 0.561737 0.622542 0.649129 0.569747 0.757358 0.632914 0.632914
2025.0 0.948811 0.618683 0.167864 0.515677 0.686676 0.606151 0.606151
[18 rows x 104 columns]
slope:
-0.6464239809667213
intercept:
-0.17071413691565712
[9]:
fig, ax = pdb_corals.plot_composite()
cfr.showfig(fig)
cfr.savefig(fig, './figs/coral_composites.pdf')
Figure saved at: "figs/coral_composites.pdf"
The composite of ice core records#
[10]:
pdb_ice = pdb.filter(by='ptype', keys='ice')
fig, ax = pdb_ice.plot()
[11]:
# can also use the obs file path
pdb_ice = pdb_ice.make_composite(
obs_nc_path='./data/HadCRUT.5.0.1.0.analysis.anomalies.ensemble_mean.nc',
vn='tas_mean',
lat_name='latitude', lon_name='longitude',
bin_width=10,
)
Analyzing ProxyRecord: 100%|██████████| 49/49 [00:07<00:00, 6.19it/s]
Bootstrapping: 100%|██████████| 207/207 [00:02<00:00, 75.13it/s]
[12]:
# Check the composite infomation:
print('proxy_comp:\n', pdb_ice.composite['proxy_comp'].index)
print('proxy_num:\n', pdb_ice.composite['proxy_num'])
print('df_obs:\n', pdb_ice.composite['df_obs'])
print('slope:\n', pdb_ice.composite['slope'])
print('intercept:\n', pdb_ice.composite['intercept'])
proxy_comp:
Float64Index([ -45.0, -35.0, -25.0, -15.0, -5.0, 5.0, 15.0, 25.0,
35.0, 45.0,
...
1925.0, 1935.0, 1945.0, 1955.0, 1965.0, 1975.0, 1985.0, 1995.0,
2005.0, 2015.0],
dtype='float64', length=207)
proxy_num:
[ 2. 2. 3. 3. 3. 18. 16. 13. 18. 14. 17. 16. 14. 18. 13. 18. 14. 16.
17. 14. 19. 16. 18. 21. 17. 21. 16. 20. 22. 17. 22. 18. 20. 21. 18. 22.
18. 19. 22. 18. 22. 17. 20. 22. 18. 22. 19. 19. 23. 19. 22. 21. 19. 23.
20. 21. 21. 18. 23. 21. 24. 20. 22. 24. 19. 24. 22. 20. 24. 22. 22. 22.
21. 22. 23. 25. 20. 23. 25. 20. 25. 23. 22. 27. 25. 24. 26. 25. 26. 26.
28. 26. 24. 29. 27. 28. 28. 28. 28. 28. 29. 26. 28. 30. 26. 33. 31. 28.
33. 31. 33. 29. 30. 33. 30. 31. 30. 31. 32. 30. 34. 31. 30. 34. 32. 34.
29. 34. 37. 34. 38. 35. 34. 38. 36. 38. 36. 34. 38. 36. 38. 34. 36. 38.
37. 37. 39. 39. 41. 39. 40. 40. 41. 42. 39. 43. 41. 41. 44. 40. 44. 42.
41. 42. 43. 45. 43. 43. 45. 41. 45. 44. 45. 47. 45. 46. 46. 46. 48. 46.
48. 46. 46. 48. 46. 48. 46. 46. 48. 46. 48. 46. 46. 47. 45. 47. 45. 43.
45. 42. 44. 42. 41. 38. 31. 11. 2.]
df_obs:
Ant_023 Ant_024 Asi_243 Ant_012 Ant_020 Arc_029 Arc_035 \
1855.0 NaN NaN NaN NaN NaN NaN -0.544404
1865.0 NaN NaN NaN NaN NaN NaN -1.502903
1875.0 NaN NaN NaN NaN NaN NaN -0.258968
1885.0 NaN NaN 0.139995 NaN NaN NaN -1.165765
1895.0 NaN NaN -0.118933 NaN NaN NaN -0.901769
1905.0 NaN NaN -0.369459 NaN NaN NaN -0.423163
1915.0 NaN NaN -0.175235 NaN NaN NaN -0.415551
1925.0 NaN NaN -0.018831 NaN NaN NaN 0.422681
1935.0 NaN NaN -0.057067 NaN NaN 0.982628 0.938740
1945.0 NaN NaN 0.236839 NaN NaN 0.605695 0.881770
1955.0 NaN NaN 0.168506 NaN NaN 0.482568 0.531032
1965.0 -0.313322 -0.254678 -0.196634 -0.341578 -0.291192 0.043077 0.411174
1975.0 -0.048645 0.048729 0.050542 0.085363 0.074353 -0.205496 -0.082302
1985.0 0.250237 0.089260 0.159978 0.166971 0.081973 0.137414 -0.202886
1995.0 0.113013 -0.000761 0.513645 0.007126 -0.016603 0.697608 -0.035937
2005.0 0.299738 0.373660 1.225578 0.181132 0.019020 1.511603 1.337034
2015.0 0.581113 0.690693 1.341981 0.409122 0.289375 2.538029 1.494854
2025.0 0.562213 0.334915 1.250265 0.372908 0.166680 2.870229 1.436367
Ant_001 Ant_006 Ant_022 ... Ant_017 Arc_072 Arc_005 \
1855.0 NaN NaN NaN ... NaN -0.280897 NaN
1865.0 NaN NaN NaN ... NaN -0.670608 NaN
1875.0 NaN NaN NaN ... NaN -0.585217 NaN
1885.0 NaN NaN NaN ... NaN -0.660067 -1.021925
1895.0 NaN NaN NaN ... NaN -0.562983 -0.988451
1905.0 NaN NaN NaN ... NaN -0.417878 -0.421623
1915.0 NaN NaN NaN ... NaN -1.320367 -0.896916
1925.0 NaN NaN NaN ... NaN 0.060131 0.202105
1935.0 NaN NaN NaN ... NaN 0.981169 0.843957
1945.0 NaN NaN NaN ... NaN 0.236257 0.611468
1955.0 NaN NaN NaN ... NaN 0.802106 0.256081
1965.0 -0.267722 -0.349686 -0.267722 ... -0.392996 -0.407866 0.320030
1975.0 -0.075961 NaN -0.075961 ... NaN 0.204257 -0.309642
1985.0 0.228602 NaN 0.228602 ... NaN 0.049942 0.021850
1995.0 0.067558 NaN 0.067558 ... NaN 0.754574 0.284505
2005.0 0.158230 NaN 0.158230 ... NaN 1.515841 1.444607
2015.0 0.323441 0.688752 0.323441 ... 0.659774 2.208421 2.110374
2025.0 0.403138 0.470683 0.403138 ... 0.846148 2.474902 2.550203
Ant_019 Ant_014 Arc_018 Ant_025 Ant_004 Ant_021 Ant_026
1855.0 NaN NaN -0.292929 NaN NaN NaN NaN
1865.0 NaN NaN -0.650675 NaN NaN NaN NaN
1875.0 NaN NaN -0.600465 NaN NaN NaN NaN
1885.0 NaN NaN -0.653229 NaN NaN NaN NaN
1895.0 NaN NaN -0.552476 NaN NaN NaN NaN
1905.0 NaN NaN -0.400410 NaN NaN NaN NaN
1915.0 NaN NaN -1.298685 NaN NaN NaN NaN
1925.0 NaN NaN 0.085491 NaN NaN NaN NaN
1935.0 NaN NaN 0.992762 NaN NaN NaN NaN
1945.0 NaN NaN 0.266806 NaN NaN NaN NaN
1955.0 NaN NaN 0.835667 NaN NaN NaN NaN
1965.0 -0.298497 -0.385644 -0.436804 -0.312661 -0.352912 -0.298170 -0.379588
1975.0 -0.056960 -0.006243 0.231445 -0.049492 -0.018038 0.052657 0.015876
1985.0 0.276860 0.211112 0.051274 0.254946 0.203027 0.095440 0.139570
1995.0 0.165074 -0.073291 0.760437 0.137430 0.219234 0.015530 -0.135029
2005.0 0.334288 0.415313 1.557320 0.312354 0.203737 0.088824 0.516788
2015.0 NaN 0.428496 2.293309 NaN 0.279991 0.308260 0.388682
2025.0 NaN 0.605878 2.555290 NaN 0.308316 0.210523 0.646564
[18 rows x 49 columns]
slope:
2.1356484756840626
intercept:
-0.42256908349096667
[13]:
fig, ax = pdb_ice.plot_composite()
cfr.showfig(fig)
cfr.savefig(fig, './figs/ice_composite.pdf')
Figure saved at: "figs/ice_composite.pdf"
Make a composite of multiple archives#
[16]:
pdb = pdb.make_composite(obs=obs, bin_width=10)
Analyzing ProxyRecord: 100%|██████████| 692/692 [01:59<00:00, 5.79it/s]
Bootstrapping: 100%|██████████| 877/877 [00:18<00:00, 47.86it/s]
[17]:
fig, ax = pdb.plot_composite()
cfr.showfig(fig)
cfr.savefig(fig, './figs/pages2k_composite.pdf')
Figure saved at: "figs/pages2k_composite.pdf"
Let’s try out annual binning:
[18]:
pdb = pdb.make_composite(obs=obs, bin_width=1)
fig, ax = pdb.plot_composite()
Analyzing ProxyRecord: 100%|██████████| 692/692 [02:09<00:00, 5.33it/s]
Bootstrapping: 100%|██████████| 8755/8755 [03:00<00:00, 48.63it/s]
[ ]: