This will be a quick and dirty walkthrough of how to get results froma raw leaf physiognomic dataset.
This package contains functions that enable the quick analysis of aquantitative leaf physiognomic dataset.
We provide a function for Digital Leaf Physiognomy(dilp()), which estimates paleoclimate via multiple linearregressions calibrated with a modern dataset.
We also provide functions for Leaf Margin Analysis(temp_slr()) and Leaf Area Analysis(precip_slr()), simple linear regressions that estimatemean annual temperature (MAT) and mean annual precipitation (MAP)respectively.
Lastly, we provide a function for reconstructing fossil leaf mass perarea (lma()), a functional trait that reflects leafresource economy.
In this vignette, we’ll walk you through the standard workflow for acomplete leaf physiognomic dataset, using the includedMcAbeeExample dataset.
For ease of use, a template spreadsheet for data collection can befound here:DiLP Data Collection Template.
If you encounter any problems, or would like to request a feature,please create an issueon the githubpage.
# If the dataset is in good shape, this is all you need to dodilp_results<-dilp(McAbeeExample)lma_results<-lma(McAbeeExample)# This just grabs the key data points from the resultsdata.frame(Site =c("McAbee H1","McAbee H2"),MAT_MLR = dilp_results$results$MAT.MLR,MAT_SLR = dilp_results$results$MAT.SLR,MAP_MLR = dilp_results$results$MAP.MLR,MAP_SLR = dilp_results$results$MAP.SLR,site_mean_LMA = lma_results$lowe_site_mean_lma$value)#> Site MAT_MLR MAT_SLR MAP_MLR MAP_SLR site_mean_LMA#> 1 McAbee H1 13.54419 11.18065 106.7353 126.7697 73.68178#> 2 McAbee H2 11.63970 9.36000 133.6330 135.8734 67.58568And that’s basically it! Climate estimates and associated informationcan be found in the output generated bydilp(), and leafmass per area reconstructions can be found in the output generated bylma().
Read on for a breakdown of key DiLP and LMA components and helperfunctions.
To go a bit more in depth, if the dataset is correctly formatted, allthat needs to be done is to pass it through thedilp()function, which takes the following steps to produce paleoclimateestimates.
First, the data is processed using thedilp_processing()function, which cleans up the raw dataset and generates derivedphysiognomic characters based on the raw physiognomic data.
Next, possible errors and outlier measurements are identified usingthedilp_errors() anddilp_outliers()functions.
Finally, Mean Annual Temperature (MAT) and Mean Annual Precipitation(MAP) are estimated using both multiple and simple linear regressions.Default parameters used are from the global regressions provided byPeppe et al. (2011).
All this information will be contained within the returned list.
# Elements of DiLP results:print(paste0("dilp_results$",names(dilp_results)))#> [1] "dilp_results$processed_leaf_data"#> [2] "dilp_results$processed_morphotype_data"#> [3] "dilp_results$processed_site_data"#> [4] "dilp_results$errors"#> [5] "dilp_results$outliers"#> [6] "dilp_results$results"After generatingdilp() results, make sure to checkwhether any common errors were discovered within the dataset.
There are no errors in theMcAbeeExample dataset, but ifthere were, this table would identify the specimens in the originaldataset that triggered the errors.
dilp_results$errors#> Check Specimen1#> 1 Entire tooth count not NA none#> 2 Entire tooth count : IP not NA none#> 3 Entire perimeter ratio not NA none#> 4 FDR not between 0-1 none#> 5 External perimeter not larger than internal perimeter none#> 6 Feret is not larger than minimum Feret none#> 7 Perimeter ratio not greater than 1 noneSimilarly, check if there are any outlier datapoints. These aren’tnecessarily errors, but it may be worth double checking the originalmeasurements.
In theMcAbeeExample dataset, three specimens areidentified as outliers in tooth count:internal perimeter ratio, threespecimens are outliers in leaf area, and four specimens are outliers inperimeter ratio. In this case, each of these were re-examined and foundto be acceptable outliers.
dilp_results$outliers#> Variable Outlier1 Outlier2 Outlier3 Outlier4#> 1 fdr <NA> <NA> <NA> <NA>#> 2 tc_ip BU-712-1117 BU-712-1169A BU-712-1176A <NA>#> 3 leaf_area BU-712-2173A BU-712-2105A BU-712-2124 <NA>#> 4 perimeter_ratio M-2015-1-1 BU-712-1073A BU-712-1165 M-2015-1-62Now, let’s take a look at the results. Paleoclimate reconstructionswill be generated for each unique site found within the dataset.
The Margin, FDR, TC.IP, Ln.leaf.area, Ln.TC.IP, and Ln.PR columnssimply report the site-level values for the parameters used in the DiLPregressions. The MAT.MLR and MAP.MLR columns report the temperature andprecipitation results using those parameters. The MAT.SLR and MAP.SLRcolumns report temperature and precipitation results using simple linearregressions. Positive and negative error for all paleoclimate estimatesare reported as well.
dilp_results$results#> site margin fdr tc_ip ln_leaf_area ln_tc_ip ln_pr#> 1 McAbee H1 32.25806 0.6965086 2.562487 6.792833 0.6070757 0.2047427#> 2 McAbee H2 23.33333 0.7012671 2.651242 7.037892 0.6218561 0.1504205#> MAT.MLR MAT.MLR.error MAT.SLR MAT.SLR.error MAP.MLR MAP.MLR.error.plus#> 1 13.54419 4 11.18065 4.8 106.7353 87.74914#> 2 11.63970 4 9.36000 4.8 133.6330 109.86219#> MAP.MLR.error.minus MAP.SLR MAP.SLR.error.plus MAP.SLR.error.minus#> 1 48.15775 126.7697 106.5412 57.88926#> 2 60.29365 135.8734 114.1923 62.04646Finally,dilp_cca() can be called to make sure that yoursites fit within the physiognomic space encompassed by the calibrationdata.
If a site you are testing falls outside the bounds of the calibrationdata, the DiLP regressions may not be able to accurately reconstruct thepaleoclimate of that site.
In this case, both McAbee localities do fall within the bounds of thecalibration data; thus, the use of DiLP is appropriate here.
Leaf mass per area reconstructions can be generated from a smallersubset of leaf physiognomic data than is needed for DiLP paleoclimateestimates. All you really need is leaf area and petiole width.
The standard suite of DiLP traits already includes leaf area andpetiole width, so here we will just continue using the includedMcAbeeExample dataset.
lma_results<-lma(McAbeeExample)print(paste0("lma_results$",names(lma_results)))#> [1] "lma_results$species_mean_lma" "lma_results$royer_site_mean_lma"#> [3] "lma_results$lowe_site_mean_lma" "lma_results$lowe_site_variance_lma"As withdilp(), results forlma() are savedwithin a list. lma_results$species_mean_lma includes the reconstructedmean LMA for every species-site pair in the dataset. Upper and lowerprediction intervals are calculated as well.
lma_results$species_mean_lma#> site morphotype n petiole_metric lower value upper#> 1 McAbee H1 M1 10 0.0018166221 81.37167 105.44818 136.64852#> 2 McAbee H1 M5 3 0.0011067149 54.54670 87.26130 139.59661#> 3 McAbee H1 M8 8 0.0011510539 66.35987 88.58058 118.24193#> 4 McAbee H1 M12 1 0.0010808383 38.37080 86.47620 194.89128#> 5 McAbee H1 M13 1 0.0006070381 30.77894 69.37268 156.35916#> 6 McAbee H1 M18 1 0.0011637972 39.46986 88.95393 200.47708#> 7 McAbee H1 M19 1 0.0008073257 34.32356 77.35576 174.33838#> 8 McAbee H1 M24 5 0.0002309535 33.24559 47.95859 69.18289#> 9 McAbee H1 M28 1 0.0002175761 20.78085 46.87783 105.74787#> 10 McAbee H1 M41 1 0.0002994371 23.48554 52.96009 119.42543#> 11 McAbee H1 M44 1 0.0005108600 28.81385 64.94883 146.40011#> 12 McAbee H1 M73 1 0.0003778943 25.67425 57.88359 130.50081#> 13 McAbee H1 M79 2 0.0003960090 33.14315 58.92822 104.77386#> 14 McAbee H1 M91 1 0.0001524066 18.12949 40.91735 92.34838#> 15 McAbee H2 M1 3 0.0008877491 50.14134 80.21339 128.32102#> 16 McAbee H2 M8 2 0.0010796906 48.64042 86.44111 153.61845#> 17 McAbee H2 M18 1 0.0002132426 20.62123 46.51895 104.94097#> 18 McAbee H2 M19 4 0.0006803596 48.21879 72.46130 108.89200#> 19 McAbee H2 M22 3 0.0008971039 50.34260 80.53524 128.83571#> 20 McAbee H2 M24 2 0.0007082087 41.40139 73.58031 130.77005#> 21 McAbee H2 M28 1 0.0004553366 27.57296 62.15600 140.11437#> 22 McAbee H2 M29 1 0.0001254609 16.82558 37.98658 85.76111#> 23 McAbee H2 M31 2 0.0003283234 30.84620 54.85640 97.55577#> 24 McAbee H2 M47 2 0.0009868057 46.99765 83.52115 148.42836#> 25 McAbee H2 M76 1 0.0001534697 18.17789 41.02614 92.59292#> 26 McAbee H2 M94 1 0.0001232820 16.71284 37.73320 85.19165#> 27 McAbee H2 M97 1 0.0005314955 29.25363 65.93877 148.62843Three different metrics of site level LMA are calculated.
royer_site_mean_lma and lowe_site_mean_lma use slightly differentregressions to show the average LMA of all species at a site.
lowe_site_variance_lma shows the variance of species-mean LMA valuesat a site.
# Royer Site Mean LMAlma_results$royer_site_mean_lma#> site n lower value upper#> 1 McAbee H1 14 64.42873 72.90997 82.50765#> 2 McAbee H2 13 57.33929 65.48619 74.79063Sometimes, you may not have a full leaf physiognomic dataset recordedfor a site. In that case, simple linear regressions can be used toestimate MAT (temp_slr()) andMAP(precip_slr()) so long as you have margin state or leafarea data, respectively.
See the documentation for either function to learn about thedifferent regressions that are preloaded into the functions. In thiscase, we’ll use the Peppe2018 regression for MAT and the Wilf1998regression for MAP.
temp_slr(McAbeeExample,regression ="Peppe2018")#> site n lower MAT upper#> 1 McAbee H1 31 7.142065 12.14206 17.14206#> 2 McAbee H2 30 5.410667 10.41067 15.41067precip_slr(McAbeeExample,regression ="Wilf1998")#> site n lower MAP upper#> 1 McAbee H1 17 27.07551 89.55803 217.9242#> 2 McAbee H2 13 30.95183 102.37976 249.1237You can also use your own regressions for both of these functions aslong as you provide the slope, the constant, and the standard error.