\newcommand{\kghay}{kg ha\textsuperscript{-1} y\textsuperscript{-1}} \newcommand{\kghayn}{kg N ha\textsuperscript{-1} y\textsuperscript{-1}} \newcommand{\kghays}{kg S ha\textsuperscript{-1} y\textsuperscript{-1}} \newcommand{\squared}{\textsuperscript{2}}
knitr::opts_chunk$set(echo = FALSE) options(knitr.kable.NA = '', knitr.table.format = 'pandoc') require(kableExtra) `one` <- function(x) formatC(round(as.numeric(x),1),format='f',digits=1)
# # filename crosswalk # cwk <- read.csv('./data/crosswalk.csv', strip.white=TRUE) # prefixes (grab from source dir) admin_id <- 'USFS_60' # hard-coded for TESTING ONLY, USFS_60 = BTNF prefix <- paste0('../data/', admin_id, '_table_') # filenames vector; only 5 thru 17 are used fnm <- paste0(prefix, 1:17, '.csv') # read CSV files (if they exist), then assign to objects f1,f2,f3,etc sapply(seq_along(fnm), function(i) { if (file.exists(fnm[i])) { assign(paste0('f',i), read.csv(fnm[i], strip.white=TRUE), envir=.GlobalEnv) } else { cat(fnm[i], 'file not found\n') } return(NA) } )
# ### set graphical parameters # `set_par` <- function (panels = 1, pty = 's', ...) { # mgp <- c(2, 0.4, 0) # mar <- c(4, 4, 0.5, 0.5) # oma <- c(0, 0, 0, 0) # auto_rowcol <- function(n = panels) { # if (n <= 3) # c(1, n) # else if (n <= 6) # c(2, (n + 1)%/%2) # else if (n <= 12) # c(3, (n + 2)%/%3) # else c(ceiling(n/(nr <- ceiling(sqrt(n)))), nr) # } # mfrow <- auto_rowcol() # if (panels > 4) # panels <- 4 # switch(as.character(panels), `4` = par(mfrow = mfrow, # mgp = mgp, mar = mar, pty = pty, oma = oma, bty = 'L', # las = 1, cex.lab = 1.2, tcl = -0.2, ...), `3` = par(mfrow = mfrow, # mgp = mgp, mar = mar, pty = pty, oma = oma, bty = 'L', # las = 1, cex.lab = 1.4, cex.axis = 1.2, tcl = -0.2, ...), # `2` = par(mfrow = mfrow, mgp = mgp, mar = mar, # pty = pty, oma = oma, bty = 'L', las = 1, cex.axis = 0.85, # tcl = -0.2, ...), `1` = par(mfrow = mfrow, # mgp = mgp, mar = mar, pty = pty, oma = oma, bty = 'L', # las = 1, cex.axis = 0.85, tcl = -0.2, ...)) # } # ### get some value # `get_n` <- function (pick, ...) { # n <- x[x$pid==pick, 'n_plots'] # if (any(!is.finite(n))) c(NA) else n # }
\newpage
r params$unit
A critical load (CL) is the atmospheric deposition level expected to result in harmful ecosystem changes. Exceedance is the amount by which local deposition goes beyond an established CL.
\captionsetup{width=9.0cm}
tab_01 <- data.frame( Deposition = c('Nitrogen', 'Sulfur'), Minimum = round(c(f4$n_min, f4$s_min),1), Maximum = round(c(f4$n_max, f4$s_max),1)) knitr::kable(tab_01, format='latex', row.names = F, longtable = T, booktabs = T, caption = 'Estimated deposition range for this location, from the 2017-2019 three-year average of total nitrogen or total sulfur modeled by Total Deposition (TDep). Units: \\kghay.', escape = F) %>% column_spec(1, width='3.0cm') %>% column_spec(2:3, width='2.5cm')
\captionsetup{width=8.5cm}
# NONE
| Ecosystem component | Nitrogen CL | Sulfur CL |
| -------- | ------: | ------: |
| Alpine minimum: | r if(exists('f5')) { '3.0' } else {''}
| -- |
| Alpine maximum: | r if(exists('f5')) { '10.0' } else {''}
| -- |
| Aquatic minimum: | r '1.0'
| -- |
| Aquatic maximum: | r '4.1'
| -- |
| Herb minimum: | r if(exists('f12')) { one(min(f12$min_cl[f12$min_cl > 0], na.rm=T)) } else {''}
| r if(exists('f13')) { one(min(f13$min_cl[f13$min_cl > 0], na.rm=T)) } else {''}
|
| Herb median: | r if(exists('f12')) { one(median(c(f12$min_cl, f12$max_cl)[c(f12$min_cl, f12$max_cl)>0], na.rm=T)) } else {''}
| r if(exists('f13')) { one(median(c(f13$min_cl, f13$max_cl)[c(f13$min_cl, f13$max_cl)>0], na.rm=T)) } else {''}
|
| Herb maximum: | r if(exists('f12')) { one(max(f12$max_cl[f12$max_cl > 0], na.rm=T)) } else {''}
| r if(exists('f13')) { one(max(f13$max_cl[f13$max_cl > 0], na.rm=T)) } else {''}
|
| Tree growth minimum: | r one( min(f15$cl[f15$response == 'growth'],na.rm=T))
| -- |
| Tree growth median: | r one(median(f15$cl[f15$response == 'growth'],na.rm=T))
| -- |
| Tree growth maximum: | r one( max(f15$cl[f15$response == 'growth'],na.rm=T))
| -- |
| Tree survival minimum: | r one( min(f15$cl[f15$response == 'survival'],na.rm=T))
| -- |
| Tree survival median: | r one(median(f15$cl[f15$response == 'survival'],na.rm=T))
| -- |
| Tree survival maximum: | r one( max(f15$cl[f15$response == 'survival'],na.rm=T))
| -- |
| Lichen minimum: | r '1.3'
| r '2.3'
|
| Lichen maximum: | r '3.5'
| r '6.0'
|
Table: Abbreviated summary of critical loads used to establish conditions and trends by ecosystem component. Units: \kghay.
\newpage
\captionsetup{width=\textwidth}
| Ecosystem component | Source | Name | Nitrogen CL | Sulfur CL |
| -------- | -------- | -------- | ------: | ------: |
| Deposition | Model | Deposition minimum | r one(f4$n_min)
| r one(f4$s_min)
|
| Deposition | Model | Deposition maximum | r one(f4$n_max)
| r one(f4$s_max)
|
| Alpine | Area | Alpine minimum | r if(exists('f5')) { '3.0' } else {''}
| -- |
| Alpine | Area | Alpine maximum | r if(exists('f5')) { '10.0' } else {''}
| -- |
| Aquatic | Plot | Aquatic eutrophication minimum | r '1.0'
| -- |
| Aquatic | Plot | Aquatic eutrophication maximum | r '3.0'
| -- |
| Aquatic | Plot | Aquatic N- to P-limitation, fixed | r '4.1'
| -- |
| Herb | Plot | Herb richness (open, plot min.) | r if(exists('f8')) { one(f8$min[f8$ecosystem == 'open']) } else {'--'}
| -- |
| Herb | Model | Herb richness (open, surface min.) | r if(exists('f10')) { one(f10$min[f10$ecosystem == 'open']) } else {'--'}
| -- |
| Herb | Model | Herb richness (open, surface 10\% decline) | r if(exists('f10')) { one(f10$min_10[f10$ecosystem == 'open']) } else {'--'}
| -- |
| Herb | Plot | Herb richness (closed, plot min.) | r if(exists('f8')) { one(f8$min[f8$ecosystem == 'closed']) } else {'--'}
| -- |
| Herb | Model | Herb richness (closed, surface min.) | r if(exists('f10')) { one(f10$min[f10$ecosystem == 'closed']) } else {'--'}
| -- |
| Herb | Model | Herb richness (closed, surface 10\% decline)| r if(exists('f10')) { one(f10$min_10[f10$ecosystem == 'closed']) } else {'--'}
| -- |
| Herb | Area | Pardo herb minimum | -- | -- |
| Herb | Area | Pardo herb maximum | -- | -- |
| Herb | Plot | Herb occurrence minimum | r if(exists('f12')) { one(min(f12$min_cl[f12$min_cl > 0], na.rm=T)) } else {''}
| r if(exists('f13')) { one(min(f13$min_cl[f13$min_cl > 0], na.rm=T)) } else {''}
|
| Herb | Plot | Herb occurrence median | r if(exists('f12')) { one(median(c(f12$min_cl, f12$max_cl)[c(f12$min_cl, f12$max_cl)>0], na.rm=T)) } else {''}
| r if(exists('f13')) { one(median(c(f13$min_cl, f13$max_cl)[c(f13$min_cl, f13$max_cl)>0], na.rm=T)) } else {''}
|
| Herb | Plot | Herb occurrence maximum | r if(exists('f12')) { one(max(f12$max_cl[f12$max_cl > 0], na.rm=T)) } else {''}
| r if(exists('f13')) { one(max(f13$max_cl[f13$max_cl > 0], na.rm=T)) } else {''}
|
| Forest | Area | Forest minimum | -- | -- |
| Forest | Area | Forest maximum | -- | -- |
| Tree | Plot | Tree growth minimum | r one( min(f15$cl[f15$response == 'growth'],na.rm=T))
| -- |
| Tree | Plot | Tree growth minimum | r one( min(f15$cl[f15$response == 'growth'],na.rm=T))
| -- |
| Tree | Plot | Tree growth median | r one(median(f15$cl[f15$response == 'growth'],na.rm=T))
| -- |
| Tree | Plot | Tree growth maximum | r one( max(f15$cl[f15$response == 'growth'],na.rm=T))
| -- |
| Tree | Plot | Tree survival minimum | r one( min(f15$cl[f15$response == 'survival'],na.rm=T))
| -- |
| Tree | Plot | Tree survival median | r one(median(f15$cl[f15$response == 'survival'],na.rm=T))
| -- |
| Tree | Plot | Tree survival maximum | r one( max(f15$cl[f15$response == 'survival'],na.rm=T))
| -- |
| Lichen | Model | Lichen minimum | r '1.3'
| r '2.3'
|
| Lichen | Model | Lichen maximum | r '3.5'
| r '6.0'
|
| Lichen | Model | Lichen total richness | r '3.5'
| r '6.0'
|
| Lichen | Model | Lichen total richness 30\% decline | r '5.5'
| r '10.1'
|
| Lichen | Model | Sensitive lichen richness | r '3.1'
| r '2.5'
|
| Lichen | Model | Sensitive lichen richness 30\% decline | r '4.7'
| r '3.6'
|
| Lichen | Model | Forage lichen abundance | r '1.9'
| r '2.6'
|
| Lichen | Model | Forage lichen abundance 30\% decline | r '2.8'
| r '3.8'
|
| Lichen | Model | Cyanolichen abundance | r '1.3'
| r '2.3'
|
| Lichen | Model | Cyanolichen abundance 30\% decline | r '1.9'
| r '3.2'
|
| Lichen | Model | Lichen community airscores | r '1.5'
| r '2.7'
|
| Soil | Area | Mycorrhizal fungi minimum | -- | -- |
| Soil | Area | Mycorrhizal fungi maximum | -- | -- |
| Soil | Area | Nitrate leaching minimum | -- | -- |
| Soil | Area | Nitrate leaching maximum | -- | -- |
\newpage
Citation: Schwede and Lear (2014)
Description: Deposition of N- and S-containing compounds was modeled with the National Atmospheric Deposition Program Total Deposition Model (TDep). For total N deposition, the TDep model (version 2018.02) uses measurements of HNO~3~ (dry), NO~3~ (wet/dry) and NH~4~ (wet) to modify the CMAQ model (v.5.0.2), and then incorporates modeled dry deposition of gaseous NH~3~, PAN, N~2~O~5~, NO, NO~2~, HONO, and organic nitrates (Schwede and Lear 2014). For total S deposition, the TDep model (v.2018.02) uses measurements of SO~2~ (dry), pSO~4~ (dry) and SO~4~ (wet) to modify outputs of the CMAQ model (version 5.0.2). To smooth year-to-year variation, we report mean annual deposition for the three-year period 2017-2019.
Cell size: 4134 m
Most recent data: 2017-2019
Uncertainty: A weighted deposition uncertainty metric (WDUM) helps scientists and decision-makers assess CL exceedances (Walker et al. 2019). The WDUM applied to National Atmospheric Deposition Program (NADP) Total Deposition (TDep) estimates shows greater uncertainty where dry deposition makes a larger contribution to the deposition budget, particularly ammonia (NH~3~) in agricultural areas and oxidized nitrogen (NO~x~) in urban areas. Organic N deposition is an important source of uncertainty over much of the US. The WDUM can help assess spatial patterns of deposition uncertainty and inform CL assessments at the local scale.
\
# f4 <- read.csv('../data/USFS_60_table_4.csv', strip.white=TRUE) tab_04 <- data.frame( Type = c('Total N deposition (\\kghayn)', 'Percent wet N deposition (\\%)', 'Percent oxidized N (\\%)', 'Total S deposition (\\kghays)', 'Percent wet S deposition (\\%)'), round(matrix(as.numeric(f4[,2:16]), ncol=3, nrow=5, byrow=T),1)) names(tab_04) <- c('Type','Minimum','Median','Maximum') knitr::kable(tab_04, format='latex', row.names = F, longtable = T, booktabs = T, caption = 'Estimated deposition minimum, median and maximum for this location, from the 2017-2019 three-year average of total nitrogen or total sulfur modeled by Total Deposition (TDep). Percent wet deposition values are provided for clarity of deposition types. Units: \\kghay.', escape = F) %>% column_spec(1, width='2.7in') %>% column_spec(2:4, width='1.0in') %>% kable_styling(latex_options = 'repeat_header')
\newpage
Citation: Bowman et al. (2012)
Description: Researchers fertilized alpine vegetation with increasing levels of N to determine the level of deposition that changed community compositions. Plots were located in multiple sites on the eastern edge of the Rocky Mountains of Colorado. Models calculated a 2.5\% increase in Carex rupestris cover per year at 3.0 \kghayn, and increases in NO~3~ leaching below the rooting zone at 10.0 \kghayn.
Response: Response curves were not calculated in this analysis.
Notes: This CL is specific to alpine meadow habitats, but is applied more broadly due to lack of additional data and because alpine vegetation occurs in a range of habitats above treeline. The sedge species in the N-fertilization experiment occurs across the Rocky Mountains but not elsewhere. The CL is extrapolated because similar CLs exist in harsh, low-nutrient ecosystems.
Critical load of N for an increase in alpine sedge growth: 3.0 \kghayn
Critical load of N for an increase in soil N leaching: 10.0 \kghayn
Data type: surface
Cell size: 30 m
Most recent data: xxxx-xxxx
Data description: The critical loads are applied to all areas above sea level within each land unit because national datasets were inconsistent in identifying vegetated areas relative to local surveys (McClung et al. 2021). The alpine dataset is extracted from the USGS Gap Analysis Project.
\
tab_05 <- data.frame( Type = c('Increased sedge growth', 'Increased NO~3~ leaching'), round(as.matrix(f5[,2:5]),1)) knitr::kable(tab_05, format='pandoc', row.names = F, longtable = T, booktabs = T, caption = 'Alpine area (km^2^) below, at or above critical loads of N for alpine ecosystems.', escape = F, col.names = c('Type' , 'Alpine area (km^2^)' , 'Area < CL (km^2^)' , 'Area at CL (km^2^)' , 'Area > CL (km^2^)') )
\newpage
Citation: Williams et al. (2017)
Description: Critical loads of N for shifts from N to P limitation of phytoplankton biomass growth in high elevation lakes are from Williams et al. (2017), who showed accurate prediction of NO~3~ threshold exceedance in 69% of lakes at a critical load of 4.1 \kghay.
To define the CL, Williams et al. (2017) first selected a biological measure of nutrient limitation shifts, and defined its threshold value. Second, logistic regression defined lake water chemical thresholds for nitrate, dissolved inorganic nitrogen (DIN), and DIN-to-total phosphorus (TP) mass ratio DIN:TP associated with 50% and 70% probability of exceeding the biological threshold. Third, logistic regression models described the mathematical relationship between nitrogen deposition and exceedance of biological thresholds (an empirical critical load) or chemical thresholds (a modeled critical load). Logistic regression was appropriate to identify critical loads because lake water NO~3~ responses to N deposition typically show a dog-leg rather than linear pattern (see Williams et al. 2017).
Data from bioassays in 47 mountain lakes (>1200m) within federal land units were used to define biological (RR-N/RR-P = 1) and chemical (NO~3~, DIN, DIN:TP) thresholds above which biomass P limitation exceeds N limitation. Williams et al. (2017) applied this critical load to an independent sample of 385 mountain lakes with NO~3~ data to estimate the frequency it would fail to predict a limitation shift. Lake chemistry data used in analyses were obtained from the Georeferenced Lake Nutrient Chemistry (GLNC) database (Williams and Labou 2017).
Response: Across models, estimated critical loads ranged from 2.8 to 5.2 \kghayn. The best-performing model, a univariate logistic model with N deposition as the only predictor of NO~3~ threshold exceedance, gave a critical load of 4.1 \kghayn, and accurately predicted NO~3~ threshold exceedance in 69% of lakes.
Notes: The false-negative rate of the 385 mountain lakes was 13% across the western United States, but was slightly higher (22%) in the Sierras. Performance analyses suggest a 2.0 \kghayn critical load may avoid false negatives entirely. Critical load of N for shifts from N to P limitation of phytoplankton biomass growth in high elevation lakes was identified at 4.1 \kghayn.
Data type: Point
Data description: To extrapolate results beyond the lakes identified in the manuscript, we used the USGS National Hydrography Dataset Plus High Resolution to identify lakes in the western United States above 1,200 m and 1--70 ha in size. Each point was given a critical load of 4.1 \kghayn, and local N deposition was extracted from the 2017-2019 TDep total N model to calculate exceedances.
\
\captionsetup{width=5.0in}
# f6 <- read.csv('../data/USFS_60_table_6.csv', strip.white=TRUE) tab_06 <- data.frame(CL = c('4.1 \\kghayn'), round(as.matrix(f6[,2:5]),0)) caption <- 'Number of high-elevation lakes in exceedance of the N $\\rightarrow$ P shift critical loads, based on 2017-2019 TDep total N.' cnames <- c('Critical load','Total number of lakes' , 'Number of lakes < CL' , 'Number of lakes at CL' , 'Number of lakes > CL') knitr::kable(tab_06, format='latex', row.names = F, longtable = T, booktabs = T, caption = caption, escape = F, col.names = cnames ) %>% column_spec(2:5, width='0.8in')
\newpage
Citation: Baron et al. (2012)
Description: Baron et al. summarize the aquatic eutrophication literature
Response: The critical load for nutrient enrichment (increase in lake NO~3~) in western lakes ranged from 1.0--3.0 \kghayn, reflecting the nearly nonexistent vegetation in complex, snowmelt-dominated watersheds. The same critical load for northeastern lakes ranged from 3.5--6.0 \kghayn.
Notes: Keep in mind that the threshold will differ between lakes of strongly vs. weakly vegetated catchments. For eastern lakes, where ecosystems currently experience elevated N deposition, the ability to attribute biological changes directly to N deposition is confounded by decades of elevated atmospheric N deposition and land-use change.
Data type: Point
Data description: To extrapolate results beyond the lakes identified in the manuscript, we used the USGS National Hydrography Dataset Plus High Resolution to identify lakes in the western United States above 1,200 m and 1--70 ha in size. Each point was given a corresponding critical load, and local N deposition was extracted from the 2017-2019 TDep total N model to calculate exceedances.
\
# f7 <- read.csv('../data/USFS_60_table_7.csv', strip.white=TRUE) tab_07 <- data.frame(CL = c('Low (1.0 \\kghay)', 'High (3.0 \\kghay)'), round(as.matrix(f7[,2:5]),0)) caption <- 'Number of high-elevation lakes in exceedance of the nutrient enrichment critical loads, based on 2017-2019 TDep total N.' cnames <- c('Critical load','Total number of lakes' , 'Number of lakes < CL' , 'Number of lakes at CL' , 'Number of lakes > CL') knitr::kable(tab_07, format='latex', row.names = F, longtable = T, booktabs = T, caption = caption, escape = F, col.names = cnames ) %>% column_spec(2:5, width='0.8in')
\newpage
Citation: Simkin et al. (2016)
Description: This analysis used 15,136 vegetation survey plots from Simkin et al. (2016) to evaluate how plant species richness varies with nitrogen deposition, soil pH, mean annual precipitation, and mean annual temperature. Plots were classified as open-canopy (3,317) or closed-canopy (11,819) based on tree canopy cover at plot locations. Each plot has a CL value based on a modeled response with pH (for closed-canopy) or pH, precipitation and temperature (for open-canopy). Plot locations were distributed non-randomly across the continental US, with implications discussed below.
Response: Total species richness initially increases with increasing N deposition under all soil pH, temperature, and precipitation conditions. The critical load is modeled to occur at the highest level of species richness based on environmental conditions. The rate of decline in species richness varies with pH in closed-canopy sites.
Notes: Species richness increases at lower levels of deposition before reaching the critical load at maximum richness based on soil pH, precipitation, and temperature. Increases in richness are expected to be of species that are tolerant of N deposition. The critical is set at max richness as an estimate of when the increase in tolerant species leads to the loss of other species. Ecological harm may occur prior to the critical load but is not able to be determined by this dataset.
Critical load of N for a decline in herbaceous species richness under a closed canopy: variable, changes with pH
Critical load of N for a decline in herbaceous species richness under an open canopy: variable, changes with pH, precipitation, temperature
Data type: point
Plot size: variable, xxx-xxx ha
Most recent data: xxxx-xxxx
Point data description: A sample size analysis was completed to determine if there were enough points to accurately estimate a CL for a specific land unit (Lynch et al. 2020). The deposition level at which species richness declines 10\% is calculated via the maximum potential richness using pH, precip, and temperature data. When a point is in exceedance of the critical load, the expected decline was calculated using TDep Total N data from 2017-2019.
Data type: surface
Cell size: 240 m
Most recent data: xxxx-xxxx
Surface data description: Equations from Simkin et al. (2016) were used to develop a continuous surface of critical loads using PRISM 800-m 30-y mean annual precipitation and temperature, and 30-m gNATSGO DCP soil pH 0-20 cm. Each dataset was clipped to the appropriate ecosystem type using National Land Cover Database (NLCD) data. Open-canopy systems were defined by the 2016 NLCD as grassland, shrubland, and woodland, with alpine areas removed; closed-canopy systems were made up of deciduous forest, evergreen forest, and mixed forest. The deposition level at which species richness declines 10\% is calculated via the max potential richness using pH, precipitation, and temperature data. When a point is in exceedance of the critical load, the expected decline was calculated using TDep Total N data from 2017-2019.
\newpage
\captionsetup{width=\textwidth}
if (exists('f8')) { tab_08 <- data.frame( Canopy = c('Open', 'Closed'), Count = f8[,2], SampSizeMet = f8[,3], round(as.matrix(f8[,4:9]),1)) cnames <- c('Canopy' , 'Count' , 'Sample size met?' , 'Min CL' , 'Median CL' , 'Max CL' , 'Min 10\\% decline' , 'Med 10\\% decline' , 'Max 10\\% decline') caption <- 'Critical loads of N for decline in herbaceous plant species richness, and the deposition at which a 10\\% loss of richness occurs, based on point data from Simkin et al. (2016).' } else { tab_08 <- data.frame(Status = c('No point data available')) cnames <- c('Status') caption <- 'Critical loads based on point data from Simkin et al. (2016).' } knitr::kable(tab_08, format='pandoc', row.names = F, longtable = T, booktabs = T, caption = caption, escape = F, col.names = cnames )
\
if (exists('f9')) { # f9 <- read.csv('../data/USFS_60_table_9.csv', strip.white=TRUE) tab_09 <- data.frame( Canopy = c('Open', 'Closed'), Count = f9[,2], round(as.matrix(f9[,3:7]),1)) cnames <- c('Canopy' , 'Count' , 'Points < CL' , 'Points at CL' , 'Points > CL' , 'Min richness decline' , 'Max richness decline') caption <- 'The exceedance of critical loads of N, and the expected decline in richness, for point data based on 2017-2019 TDep total N.' } else { tab_09 <- data.frame(Status = c('No point data available')) cnames <- c('Status') caption <- 'Exceedances based on point data from Simkin et al. (2016).' } knitr::kable(tab_09, format='pandoc', row.names = F, longtable = T, booktabs = T, caption = caption, escape = F, col.names = cnames )
\
if (exists('f10')) { # f10 <- read.csv('../data/USFS_60_table_10.csv', strip.white=TRUE) tab_10 <- data.frame( Canopy = c('Open', 'Closed'), round(as.matrix(f10[,4:9]),1)) cnames <- c('Canopy', 'Min CL', 'Median CL', 'Max CL', 'Min 10\\% decline', 'Med 10\\% decline', 'Max 10\\% decline') caption <- 'Critical loads of N for decline in herbaceous plant species richness, and the deposition at which a 10\\% loss of richness occurs, based on modeled surfaces using equations from Simkin et al. (2016).' } else { tab_10 <- data.frame(Status = c('No surface data available')) cnames <- c('Status') caption <- 'Critical loads based on surface data.' } knitr::kable(tab_10, format='pandoc', row.names = F, longtable = T, booktabs = T, caption = caption, escape = F, col.names = cnames )
\
if (exists('f11')) { # f11 <- read.csv('../data/USFS_60_table_11.csv', strip.white=TRUE) tab_11 <- data.frame( Canopy = c('Open', 'Closed'), round(as.matrix(f11[,2:7]),1)) cnames <- c('Canopy', 'Area (km\\squared)', 'Area < CL (km\\squared)', 'Area at CL (km\\squared)', 'Area > CL (km\\squared)', 'Min richness decline', 'Max richness decline') caption <- 'The exceedance of critical loads of N, and the expected decline in richness, for modeled surface data based on 2017-2019 TDep total N.' } else { tab_11 <- data.frame(Status = c('No surface data available')) cnames <- c('Status') caption <- 'Exceedances based on surface data.' } knitr::kable(tab_11, format='latex', row.names = F, longtable = T, booktabs = T, caption = caption, escape = F, col.names = cnames ) %>% column_spec(3:7, width='0.79in')
\newpage
Citation: Clark et al. (2019) and Russell et al. (2021)
Description: This analysis used individual species presence and cover from the 15,136 vegetation survey plots from Simkin et al. (2016) to determine the critical load of N and of S for the probability of occurrence of 358 herbaceous species. Each point/species combination has a CL value that is based on a modeled response that can include pH, precip, and temp. The plots in Clark et al. (2019) are distributed non-randomly across the lower 48-states, the implications of which are discussed below.
Response: The probability of occurrence (POC) of each herbaceous species responds to N and S deposition in one of five ways. "Increasers" increase in POC as deposition increases; the critical load is set at maximum deposition of measured points as a harmful response has not yet been reached. "Decreasers" decrease in POC as deposition increases; the critical load is set at the minimum deposition of measured points since a harmful response is continuous across the distribution. A "Threshold" response (N only) initially increases as deposition increases, but then reaches a maximum POC before decreasing across the rest of the range; the critical load is set at the maximum POC since harmful responses are identified as those that reduce POC. "Saddle" responses can either increase or decrease and are dependent of passing a threshold of pH, temp, precip, or deposition; no critical load was set for these responses in this analysis. "U-shaped" responses initially decrease as deposition increases, but then reaches a minimum POC before increasing across the rest of the range; no critical load was set for these responses as additional information is needed to justify the response.
\
Notes: If a critical load was calculated to be negative based on the partial derivative equation, then the critical load was set to zero.
Critical load of N for a decline in POC of individual herbaceous species: variable; varies by species and pH, temperature, precipitation, and N deposition.
Critical load of S for a decline in POC of individual herbaceous species: variable; varies by species and pH, temperature, precipitation, and S deposition.
Data type: Point
Data description: Vegetation point data are from two different sources. The first source, Clark et al. (2019), contains the point data used to develop the regression curves. The second source, the National Park Service Vegetation Mapping Inventory program, contains species location data. Covariate data for local pH (gNATSGO), annual precipitation (PRISM), and mean annual temperature (PRISM) were extracted for each point location. In some cases, the geographic distribution of a species occurs beyond the range of environmental conditions used in the CL model.
\
if (exists('f12')) { # f12 <- read.csv('../data/USFS_60_table_12.csv', strip.white=TRUE) tab_12 <- data.frame( f12[,1:3], round(as.matrix(f12[,4:7]),1), f12[8:10]) # some text replacements tab_12[grep('saddle',tab_12[,2]),2] <- 'saddle' tab_12[grep('thresh',tab_12[,2]),2] <- 'threshold' cnames <- c('Species', 'Response', 'Count', 'Max CL', 'Min CL', 'Min dep', 'Max dep', 'Points < CL', 'Points at CL', 'Points > CL') caption <- 'Herbaceous plant species responses (probability of occurrence, POC) to \\textbf{nitrogen (N)} deposition, from Clark et al. (2019). The CL equations for each species were used to determine the range of CLs based on local environmental conditions. Exceedances are calculated at each point location relative to 2017-2019 TDep total N deposition.' } else { tab_12 <- data.frame(Status = c('No data available')) cnames <- c('Status') caption <- 'Herbaceous plant species responses.' } knitr::kable(tab_12, format='latex', row.names = F, longtable = T, booktabs = T, caption = caption, escape = F, linesep = '', col.names = cnames ) %>% column_spec(1, width='2.1in', italic=TRUE) %>% column_spec(2, width='0.55in') %>% column_spec(3, width='0.20in') %>% column_spec(4:7, width='0.30in') %>% column_spec(8:10, width='0.35in') %>% kable_styling(latex_options = 'repeat_header')
\newpage
if (exists('f13')) { # f13 <- read.csv('../data/USFS_60_table_13.csv', strip.white=TRUE) tab_13 <- data.frame( f13[,1:3], round(as.matrix(f13[,4:7]),1), f13[8:10]) # some text replacements tab_13[grep('saddle',tab_13[,2]),2] <- 'saddle' tab_13[grep('thresh',tab_13[,2]),2] <- 'threshold' cnames <- c('Species', 'Shape', 'Count', 'Max CL', 'Min CL', 'Min dep', 'Max dep', 'Points < CL', 'Points at CL', 'Points > CL') caption <- 'Herbaceous plant species responses (probability of occurrence, POC) to \\textbf{sulfur (S)} deposition, from Clark et al. (2019). The CL equations for each species were used to determine the range of CLs based on local environmental conditions. Exceedances are calculated at each point location relative to 2017-2019 TDep total S deposition.' } else { tab_13 <- data.frame(Status = c('No data available')) cnames <- c('Status') caption <- 'Herbaceous plant species responses.' } knitr::kable(tab_13, format='latex', row.names = F, longtable = T, booktabs = T, caption = caption, escape = F, linesep = '', col.names = cnames ) %>% column_spec(1, width='2.1in', italic=TRUE) %>% column_spec(2, width='0.55in') %>% column_spec(3, width='0.20in') %>% column_spec(4:7, width='0.30in') %>% column_spec(8:10, width='0.35in') %>% kable_styling(latex_options = 'repeat_header')
\newpage
Citation: Horn et al. (2018)
Description: The growth model assumes a maximum potential growth rate (as a function of tree size) modified by competition and climate (Thomas et al. 2010). First, the data were assessed to evaluate whether deposition was important for growth or survival. Several models were assessed to determine whether models with N and/or S deposition terms were more explanatory than models based only on tree size, climate, and competition. If the model with N and/or S deposition was selected over the model without the deposition terms for a given species, the relationship between deposition and growth for that species was included in the assessment.
Response: The shapes of the response curves for N were 1) increasing, 2) unimodal (hump-shaped), 3) decreasing, or 4) no response and thus flat. For S these were constrained to either 1) decreasing or 2) flat. The CL was set at the point with maximum growth or survival, in the following way for the four different response patterns as deposition increased:
1. Threshold--the CL was set at the highest growth/survival level for species with a unimodal (hump-shaped) response.
2. Decreasing-- the CL was set at less than lowest deposition level at which the species occurred and labeled decreasing.
3. Increasing— the CL was set as greater than highest deposition level at which the species occurred for response curves that increased across the whole deposition range.
4. No critical load was set if there was no trend in response.
\
Notes: Species richness increases from lower levels of deposition before reaching the critical load at maximum richness based on soil pH, precipitation, and temperature. Increases in richness are expected to be for species that are tolerant of N deposition. The critical load is set at maximum richness as an estimate of when the increase in tolerant species leads to the loss of other species. Ecological harm may occur prior to the critical load, but cannot be determined by this dataset.
Critical load of N for a decline in tree species survival: single for each tree species, variable in amount and direction of change with a combination of tree size, climate, and competition.
Critical load of N for a decline in tree species growth: single for each tree species, variable in amount and direction of change with a combination of tree size, climate, and competition.
Data type: point
Point data description: Forest Inventory and Analysis plots provide a list of tree species, later paired with nitrogen deposition and environmental covariates in the critical loads models. Level of nitrogen deposition above a critical load was used to calculate the modeled percent decline in growth or survival.
Data type: species list
Species list data description: Using a list of tree species, alongside the range of N deposition within a land unit, allows for the maximum and minimum level of response to be calculated. If the minimum deposition exceeds a species' critical load, then the species is at risk at all locations within the land unit, while if only the maximum deposition is in exceedance, then additional analysis needs to be completed to know if the species exists in the area it would be in exceedance.
Data type: surface
Surface data description: The list of tree species within a land unit is paired with Wilson et al. (2012) species distribution models at 100-m resolution and TDep modeled deposition. This information is used to calculate critical loads exceedances, expected response level, and basal area impacted.
\
if (exists('f14')) { # f14 <- read.csv('../data/USFS_60_table_14.csv', strip.white=TRUE) f14 <- t(f14) f14[c(1,5),] <- formatC(f14[c(1,5),], format='d') f14[c(2,3,4,6,7,8),] <- formatC(round(as.numeric(f14[c(2,3,4,6,7,8),]),1), format='f', digits=1) tab_14 <- data.frame( Type = c('Tree species with growth CL', 'Minimum growth CL', 'Median growth CL', 'Maximum growth CL', 'Tree species with survival CL', 'Minimum survival CL', 'Median survival CL', 'Maximum survival CL'), CriticalLoad = f14) cnames <- c('Tree CL type','Critical load (\\kghayn)') caption <- 'Tree species critical loads summary.' } else { tab_14 <- data.frame(Status = c('No data available')) cnames <- c('Status') caption <- 'Tree species critical loads summary.' } knitr::kable(tab_14, format='latex', row.names = F, longtable = T, booktabs = T, linesep = '', align = c('l','r'), caption = caption, escape = F, col.names = cnames ) %>% column_spec(1, width='5cm') %>% column_spec(2, width='5cm')
\
if (exists('f15')) { # f15 <- read.csv('../data/USFS_60_table_15.csv', strip.white=TRUE) tab_15 <- f15[order(f15$gen_spp, f15$response, f15$response_type),] tab_15[,c(4,8,9,10)] <- formatC(as.matrix(tab_15[,c(4,8,9,10)]), format='d') tab_15[,c(5,6,7,11,12)] <- formatC(round(as.matrix(tab_15[,c(5,6,7,11,12)]),1), format='f', digits=1) # some text replacements tab_15[grep('saddle',tab_15[,3]),3] <- 'saddle' tab_15[grep('thresh',tab_15[,3]),3] <- 'threshold' tab_15[grep('incr',tab_15[,3]),3] <- 'increase' tab_15[grep('decr',tab_15[,3]),3] <- 'decrease' # fill NA with blanks tab_15[tab_15 == 'NA'] <- '' # column names cnames <- c('Species', 'Response', 'Shape', 'Count', 'CL', 'Min dep', 'Max dep', 'Points < CL', 'Points at CL', 'Points > CL', 'Min response', 'Max response') # caption caption <- 'Tree species growth and survival responses (based on \\textbf{point data}). CL and deposition units: \\kghayn' } else { tab_15 <- data.frame(Status = c('No data available')) cnames <- c('Status') caption <- 'Tree species growth and survival responses (based on \\textbf{point data}).' } knitr::kable(tab_15, format='latex', row.names = F, longtable = T, booktabs = T, caption = caption, escape = F, linesep = '', col.names = cnames ) %>% column_spec(1, width='1.4in', italic=TRUE) %>% column_spec(2:3, width='0.5in') %>% column_spec(4, width='0.25in') %>% column_spec(5:7, width='0.25in') %>% column_spec(8:12, width='0.25in') %>% kable_styling(latex_options = 'repeat_header') # %>% # column_spec(1, width='2.1in', italic=TRUE) %>% # column_spec(2, width='0.55in') %>% # column_spec(3, width='0.20in') %>% # column_spec(4:7, width='0.30in') %>% # column_spec(8:10, width='0.35in') %>% # kable_styling(latex_options = 'repeat_header')
\
if (exists('f16')) { # f16 <- read.csv('../data/USFS_60_table_16.csv', strip.white=TRUE) tab_16 <- f16[order(f16$gen_spp, f16$response, f16$response_type),] tab_16[,c(4,8,9,10)] <- formatC(as.matrix(tab_16[,c(4,8,9,10)]), format='d') tab_16[,c(5,6,7,11,12)] <- formatC(round(as.matrix(tab_16[,c(5,6,7,11,12)]),1), format='f', digits=1) # some text replacements tab_16[grep('saddle',tab_16[,3]),3] <- 'saddle' tab_16[grep('thresh',tab_16[,3]),3] <- 'threshold' tab_16[grep('incr',tab_16[,3]),3] <- 'increase' tab_16[grep('decr',tab_16[,3]),3] <- 'decrease' # fill NA with blanks tab_16[tab_16 == 'NA'] <- '' # column names cnames <- c('Species', 'Response', 'Shape', 'Count', 'Critical load (\\kghayn)', 'Min deposition', 'Max deposition', 'Points < CL', 'Points at CL', 'Points > CL', 'Min response', 'Max response') # cnames <- c('Species', 'Response', 'Direction', 'Min response', 'Median response', 'Max response') # caption caption <- 'Tree species growth and survival responses (based on \\textbf{species list data}).' knitr::kable(tab_16, format='latex', row.names = F, longtable = T, booktabs = T, caption = caption, escape = F, linesep = '', col.names = cnames ) %>% column_spec(1, width='1.1in', italic=TRUE) %>% column_spec(2:3, width='0.5in') %>% column_spec(4, width='0.25in') %>% column_spec(5:7, width='0.25in') %>% column_spec(8:10, width='0.25in') %>% column_spec(11:12, width='0.25in') %>% kable_styling(latex_options = 'repeat_header') } else { tab_16 <- data.frame(Status = c('No data available')) cnames <- c('Status') caption <- 'Tree species growth and survival responses (based on \\textbf{species list data}).' knitr::kable(tab_16, format='latex', row.names = F, longtable = T, booktabs = T, caption = caption, escape = F, col.names = cnames ) }
\
# if (exists('f16')) { # f16 <- read.csv('../data/USFS_60_table_16.csv', strip.white=TRUE) # tab_16 <- f16[order(f16$gen_spp, f16$response, f16$response_type),] # tab_16[,c(4,8,9,10)] <- formatC(as.matrix(tab_16[,c(4,8,9,10)]), format='d') # tab_16[,c(5,6,7,11,12)] <- formatC(round(as.matrix(tab_16[,c(5,6,7,11,12)]),1), format='f', digits=1) # # some text replacements # tab_16[grep('saddle',tab_16[,3]),3] <- 'saddle' # tab_16[grep('thresh',tab_16[,3]),3] <- 'threshold' # tab_16[grep('incr',tab_16[,3]),3] <- 'increase' # tab_16[grep('decr',tab_16[,3]),3] <- 'decrease' # # fill NA with blanks # tab_16[tab_16 == 'NA'] <- '' # # column names # cnames <- c('Species', 'Response', 'Shape', 'Count', 'Critical load (\\kghayn)', 'Min deposition', 'Max deposition', 'Points < CL', 'Points at CL', 'Points > CL', 'Min response', 'Max response') # # cnames <- c('Species', 'Response', 'Direction', 'Min response', 'Median response', 'Max response') # # caption # caption <- 'Tree species growth and survival responses (based on \\textbf{species list data}).' # knitr::kable(tab_16, # format='latex', # row.names = F, # longtable = T, # booktabs = T, # caption = caption, # escape = F, # col.names = cnames # ) %>% # column_spec(1, width='1.1in', italic=TRUE) %>% # column_spec(2:3, width='0.5in') %>% # column_spec(4, width='0.25in') %>% # column_spec(5:7, width='0.25in') %>% # column_spec(8:10, width='0.25in') %>% # column_spec(11:12, width='0.25in') %>% # kable_styling(latex_options = 'repeat_header') # } else { # tab_16 <- data.frame(Status = c('No data available')) # cnames <- c('Status') # caption <- 'Tree species growth and survival responses (based on \\textbf{species list data}).' # knitr::kable(tab_16, # format='latex', # row.names = F, # longtable = T, # booktabs = T, # caption = caption, # escape = F, # col.names = cnames # ) # }
\newpage
Citation: Geiser et al. (2019) and Geiser et al. (2021)
Description: Lichen data are in the publicly accessible USFS national lichen database at https://gis.nacse.org/lichenair. Data originate from the USFS Forest Inventory and Analysis (FIA) and Air Resource Management (ARM) programs. The dataset includes 127,001 voucher specimens of 572 species from 2,156 plots in the eastern US and 6,699 plots in the western US for years 1990--2012. For all species on a plot, field crews assign a rating for ocular abundance on a roughly logarithmic 1--4 scale. Species with abundance ratings of 3 and 4 were considered to provide ecologically substantial contributions to nutrient cycling and to forage, nesting materials, or habitat for forest wildlife and invertebrates.
Response: Five metrics were calculated from lichen survey data:
For the abundance-based models (items 1--4 in list above), Geiser et al. (2019) used quantile regression at the 90^th^ percentile to separately model the upper bounds of four lichen responses (total species richness, sensitive species richness, forage lichen abundance and cyanolichen abundance) as a function of N or S deposition. The CL for each lichen response was defined as the point along the prediction response curve resulting in a 20\% decline from its maximum value, at which ecological harm would occur. Geiser et al. (2019) reported these CLs at 3.5, 3.1, 1.9, and 1.3 \kghayn and 6.0, 2.5, 2.6, and 2.3 \kghays, respectively. Each CL is interpreted as the deposition value below which no detrimental change in richness/abundance occurs.
For the composition-based models (item 5 in list above), Geiser et al. (2021) calculated a community composition "airscore" for each plot as the community-weighted mean of species' deposition optima, where optima were calculated as the deposition value at which each species reached its peak detection frequency from 9,000+ nationwide plots. Therefore, airscores depict air quality as the average central tendency of deposition tolerances among all species in a community, weighted by species' abundances. The airscores CL is defined as the uppermost N or S deposition value at which the slope of a nonlinear regression surface did not significantly depart from zero, which occurs at 1.5 \kghayn and 2.7 \kghays, respectively (Geiser et al. 2021). Each CL is interpreted as the deposition value below which no detrimental change in community compositions occurs.
Deposition data for calculation of lichen CLs are from CMAQ version 5.0.2 (leading up to 2012 for most recent plot visits), and data for estimation of exceedances are from CMAQ version 5.3.2 (most up-to-date data, up to year 2017).
Notes: The geographic distribution of forage lichens and cyanolichens was constrained (masked) by tolerable habitats (must include forested land within suitable climate conditions) further described in Lynch et al. (2020).
Data type: point
Point data description: Plot data from the USFS Forest Inventory and Analysis (FIA) and Air Resource Management (ARM) programs provide a list of epiphytic macrolichen species per site, later paired with N and S deposition originating from CMAQ version 5.3.2 estimated at plot locations.
\newpage
if (exists('f17')) { # f17 <- read.csv('../data/USFS_60_table_17.csv', strip.white=TRUE) tab_17 <- data.frame(f17) tab_17 <- rbind(tab_17[1:4,], c('Community airscores','N','1.5',rep('NA',7)), tab_17[5:8,], c('Community airscores','S','2.7',rep('NA',7))) tab_17[,1] <- rep(c('Total species richness', 'Sensitive richness', 'Forage lichen abundance', 'Cyanolichen abundance', 'Community airscores'),2) tab_17[,c(6:8)] <- formatC(round(as.numeric(as.matrix(tab_17[,c(6:8)])),0), format='d') tab_17[,c(3:5,9:10)] <- formatC(round(as.numeric(as.matrix(tab_17[,c(3:5,9:10)])),1), format='f', digits=1) # fill NA with blanks tab_17[tab_17 == 'NA'] <- '' # column names cnames <- c('Lichen metric', 'Element', 'Critical load', 'Dep. at 30\\% decline', 'Dep. at 50\\% decline', 'Area < CL (km\\squared)', 'Area at CL (km\\squared)', 'Area > CL (km\\squared)', 'Min response', 'Max response') # caption caption <- 'Critical loads for lichens, based on decline in richness/abundance or change in community composition airscores, and the area in exceedance of each CL. Deposition estimates use 2015-2017 CMAQ total N or total S. Deposition units: \\kghay. Area units: km\\squared.' knitr::kable(tab_17, format='latex', row.names = F, longtable = T, booktabs = T, linesep = '', caption = caption, escape = F, col.names = cnames ) %>% column_spec(1, width='0.8in') %>% column_spec(2, width='0.375in') %>% column_spec(3:10, width='0.475in') %>% kable_styling(latex_options = 'repeat_header') } else { tab_17 <- data.frame(Status = c('No data available')) cnames <- c('Status') caption <- 'Lichen critical loads.' knitr::kable(tab_17, format='latex', row.names = F, longtable = T, booktabs = T, caption = caption, escape = F, col.names = cnames ) }
\newpage
\setlength{\parindent}{-0.5in} \setlength{\leftskip}{0.5in} \setlength{\parskip}{8pt} \noindent
Bowman, W.D., J. Murgel, T. Blett, and E. Porter. 2012. Nitrogen critical loads for alpine vegetation and soils in Rocky Mountain National Park. Journal of Environmental Management 103:165-171.
Clark, C.M., S.M. Simkin, E.B. Allen, W.D. Bowman, J. Belnap, M.L. Brooks, S.L. Collins, L.H. Geiser, F.S. Gilliam, S.E. Jovan, L.H. Pardo, B.K. Schulz, C.J. Stevens, K.N. Suding, H.L. Throop, and D.M. Waller. 2019. Potential vulnerability of 348 herbaceous species to atmospheric deposition of nitrogen and sulfur in the United States. Nature Plants 5:697-705.
Geiser, L.H., P.R. Nelson, S. Jovan, H.T. Root, and C.C. Clark. 2019. Assessing ecological risks from atmospheric deposition of nitrogen and sulfur to US forests using epiphytic macrolichens. Diversity 11(6):87. doi:10.3390/d11060087{target="_blank"}
Geiser, L.H., H.T. Root, R.J. Smith, S. Jovan, L. St. Clair, and K.L. Dillman. 2021. Lichen-based critical loads for deposition of nitrogen and sulfur in US forests. Environmental Pollution 291:118187. doi:10.1016/j.envpol.2021.118187{target="_blank"}
Horn, K.J., R.Q. Thomas, C.M. Clark, L.H. Pardo, M.E. Fenn, G.B. Lawrence, S.S. Perakis, E.A.H. Smithwick, D. Baldwin, S. Braun, A. Nordin, C.H. Perry, J.N. Phelan, P.G. Schaberg, S.B. St. Clair, R. Warby, and S. Watmough. 2018. Growth and survival relationships of 71 tree species with nitrogen and sulfur deposition across the conterminous US. PLoS ONE 13:e0205296.
Lynch, J.A., J. Phelan, L.H. Pardo, T.C. McDonnell, C.M. Clark, M.D. Bell, L.H. Geiser, and R.J. Smith. 2020. National Critical Load Database (NCLD) for U.S. Critical Loads of Sulfur and Nitrogen (v. 3.2). National Atmospheric Deposition Program, Wisconsin State Laboratory, Madison, WI.
McClung, J., M.D. Bell, and E. Felker-Quinn. 2021. Extrapolating critical loads of nitrogen for alpine vegetation and assessing exceedance in national parks based on TDep Total N from 2002–2016. Natural Resource Report NPS/NRSS/ARD/NRR—2021/2240. National Park Service. Fort Collins, Colorado.
Pardo, L.H., M.E. Fenn, C.L. Goodale, L.H. Geiser, C.T. Driscoll, E.B. Allen, J.S. Baron, R. Bobbink, W.D. Bowman, C.M. Clark, B. Emmett, F.S. Gilliam, T.L. Greaver, S.J. Hall, E.A. Lilleskov, L. Liu, J.A. Lynch, K.J. Nadelhoffer, S.S. Perakis, M.J. Robin-Abbott, J.L. Stoddard, K.C. Weathers, and R.L. Dennis. 2011. Effects of nitrogen deposition and empirical nitrogen critical loads for ecoregions of the United States. Ecological Applications 21:3049-3082.
Schwede, D. B., and G. G. Lear. 2014. A novel hybrid approach for estimating total deposition in the United States. Atmospheric Environment 92:207–220.
Simkin, S.M., E.B. Allen, W.D. Bowman, C.M. Clark, J. Belnap, M.L. Brooks, B.S. Cade, S.L. Collins, L.H. Geiser, F.S. Gilliam, S.E. Jovan, L.H. Pardo, B.K. Schulz, C.J. Stevens, K.N. Suding, H.L. Throop, and D.M. Waller. 2016. Conditional vulnerability of plant diversity to atmospheric nitrogen deposition across the United States. Proceedings of the National Academy of Sciences 113:4086-4091.
Thomas, R.Q., C.D. Canham, K.C. Weathers, and C.L. Goodale. 2010. Increased tree carbon storage in response to nitrogen deposition in the US. Nature Geoscience 3:13–17.
Williams, J.J., J.A. Lynch, J.E. Saros, and S.G. Labou. 2017. Critical loads of atmospheric N deposition for phytoplankton nutrient limitation shifts in western US mountain lakes. Ecosphere 8:e01955.
Wilson, B.T., A.J. Lister, and R.I. Riemann. 2012. A nearest-neighbor imputation approach to mapping tree species over large areas using forest inventory plots and moderate resolution raster data. Forest Ecology and Management 271:182–198.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.