htmltools::img(src = knitr::image_uri("jornadalogo.png"), alt = 'logo', style = 'position:absolute; top:0; right:0; padding:10px;')
knitr::opts_chunk$set(echo = FALSE , message = FALSE , warning = FALSE)
The U.S. Department of Agriculture Natural Resources Conservation Service (NRCS) defines ecological sites as "a distinctive kind of land with specific physical characteristics that differs from other kinds of land in its ability to produce a distinctive kind and amount of vegetation" (USDA–NRCS, 2006). Ecological sites determine not only the ecological potential of a site, but also how a site can respond to natural disturbance and management actions. Ecological sites have been delineated for many areas using physical and biotic features and are linked to soil map units. Soils, climate, hydrology, geology, physiographic features, plants species occurrences, plant community composition, annual biomass production, and plant-wildlife interactions all contribute to the proerties of ecological sites. Ecological Site Descriptions (ESDs) describe the underlying factors associated with a specific ecological site, as well as different ecological states within a given site based on factors such as grazing, fire, drought, and other management actions. For an example of an ESD, see EDIT Jornada.
Using ecological monitoring data, the overall status of an Ecological Site can be summarized into an Ecological Site Summary (ESS). At the site level, ecological site summaries generated from monitoring data can tell us about the condition and health of ecological sites based on indicators such as cover by structure and functional group, species dominance, species occurrences, canopy gap measurements, and soil stability measurements. These indicators can help inform the user of the ecological state of a given plot or overall site (i.e. shrubland state vs. grassland state). Identifying the ecological state allows us to not only determine the degree of departure from the corresponding reference ecological states, but also to inform management and restoration actions accordingly by determining the best pathway to a less degraded state. For more on state and transition models (STMs), see see Bestelmeyer et al., 2017. A major data source for developing these summaries is the Assessment, Inventory, and Monitoring (AIM) Program along with the Landscape Monitoring Framework (LMF). AIM and LMF include almost 25,000 plots throughout the western United States (see AIM Data Portal) stored in the Terrestrial AIM Database (TerrADat). Data garnered from AIM and LMF plots is both generalizable and scalable and thus applicable to management decisions across multiple disciplines at both local and national levels.
An Ecological Site Summary (ESS) tool has been developed to help users visualize the overall status of their region of interest within a specific ecological site, or across an ecological site group. This information can be summarized within a given administrative state or across political boundaries for landscape scale analysis. Ecological site summaries are generated using an R Markdown script with an interactive HTML output in which users can query summary tables, download full or filtered summary tables to view in Excel, explore interactive figures, and download static figures for their own use.
This report is an automated process and can be continually updated as new data becomes available each year or as lines of inquiry shift. This ESS information can be included in decision making processes for BLM managers, as it can help inform land use plans, grazing permit renewals, shrub or invasive species treatments, and/or seed menu development for ecological restoration and reclamation.
This report generates many tables and figures that can be queried, filtered, and downloaded to meet your management and reporting needs. Multiple output types are used to meet multiple needs, so select the most relevant and useful output.
This report is generated in RMarkdown. If you have R limitations and would prefer the report to be generated for you, use this template to request that Jornada run the report.
In cases where ESDs are not developed, grouping AIM data by other features can provide similar information, and potentially lead to the development of new ESDs. For this purpose, it may be informative to group data by features such as watershed units, soil map units, or biophysical settings. Spatial groupings may also be beneficial if you want to compare data that's in the same ecological site but across multiple management units such as grazing allotments, pastures, prescribed burn areas, etc. Grouping indicators by other spatial attributes is available in a customized report on page two of this template.
Download the RMarkdown script and supporting files by downloading the full Ecological Site Summary repository in a zipped folder here. Unzip the folder into your local drive documents (i.e. C:/Users/JSmith/Documents/EcologicalSiteSummaries). Open the ESS_Tool.Rmd file that's in the repository you unzipped to your local drive. Open the file using RStudio. The supporting documents in this folder will be necessary to run the script. This is an RMarkdown script with an HTML output.
Read this document alongside the RMarkdown script.
Download the TerrADat geodatabase from the external users sharepoint into the same folder as this repository. This is necessary for the file paths in this script to work properly. Make sure you have TerrADat, TerrADatSpeciesIndicators, LMF, LMFSpeciesIndicators, and tblStateSpecies in the geodatabase. Make sure the geodatabase is named TerrADat.
To generate these reports, you need to specify your ecological site(s) of interest. You can specify a single ecological site that is restricted by state lines or create a list of multiple ecological sites that can span political boundaries. Give the object "EcologicalSiteId" as Ecological Site Id in the section below:
# Set your defaults in this section here. #Define your ecological site(s) of interest below (full ecological site id) #You can list as many as you want, or just 1. library(SiteSummaryTool) EcologicalSiteId <- EcologicalSiteId #Set the path to TerrADat (this will be NULL if working within BLM network) #If working within BLM network, TerrADat_Path = NULL (this tool will direct to AIMPub) #BLM <- TRUE if internal (on VPN). BLM <- FALSE if external #EDIT_List_Path <- path to this repository TerrADat_Path <- TerrADat_Path EDIT_List_Path <- EDIT_List_Path #Set the path to your R library (make sure it's on local folder not network drive) LibraryPath <- LibraryPath BLM <- BLM State <- State
The rest of the report is automated and requires no edits. Click the Knit button at the top of your RStudio session and knit to an HTML. The output HTML document will be saved in the repository folder. View the document in Google Chrome or Firefox (some features will be disabled in Internet Explorer). You need to be connected to the internet to run the report, but you can view it without internet (note that the basemap feature will be disabled offline).
``` {r ESS Demo, echo = FALSE, include = FALSE}
InstallPackages(LibraryPath = LibraryPath)
```r ##The state species list table should also live in this geodatabase TDat_LMF <- Combine_AIM_LMF(TerrADat_Path = TerrADat_Path, EDIT_List_Path = EDIT_List_Path, Internal = BLM) EcoSitePlots <- SubsetEcologicalSite(TDat_LMF, EcologicalSiteId) Species_Indicator <- Combine_AIM_LMF_Species(TerrADat_Path = TerrADat_Path, Internal = BLM) Species_plots_ecosite <- SubsetEcologicalSite_Species(EcoSitePlots, Species_Indicator) SpeciesList <- ReadSpeciesList(TerrADat_Path = TerrADat_Path, Internal = BLM)
This report uses boxplots to summarize cover values into quartiles while keeping outliers visible. The figures in this report are interactive within the tool. Hovering over the dots on the plot will give you the Plot ID of the plot from which the measure was obtained, as well as the individual species from which the measurement was obtained if applicable. Hovering over the boxplot will give you quartile values. The interactive figures can be downloaded as static figures to incorporate into reports. The following image explains how to interpret a boxplot.
Below is a map of plots surveyed to date. Plots in our ecological site of interest are highlighted in red. \
MakeMap(EcologicalSiteId, TDat_LMF, EcoSitePlots)
PlotMetadata(dataframe = TDat_LMF)
PlotMetadata(dataframe = EcoSitePlots)
Percent cover summaries use data from Line-point intercept (LPI) method to determine average cover of individual species, as well as summaries by structure and functional group cover, noxious versus non-noxious cover, woody vs. non-woody cover, and cover by Sage-Grouse group. From the AIM data, we can make some simple figures showing cover values. These figures, along with the summary tables, can quickly be incorporated into any documents where this data is used (i.e. NEPA documents for grazing permit renewals, shrub treatments, etc).
SFG_Plots_Interactive <- SummaryFigures(SpeciesList, Species_plots_ecosite, EcologicalSiteId, SummaryVar = "GrowthHabitSub", Interactive = TRUE) ggplotly(SFG_Plots_Interactive[["Graminoid"]])
SFG_Plots_Static <- SummaryFigures(SpeciesList, Species_plots_ecosite, EcologicalSiteId, SummaryVar = "GrowthHabitSub", Interactive = FALSE) SFG_Plots_Static[["Graminoid"]]
ggplotly(SFG_Plots_Interactive[["Forb"]] , tooltip = "text")
SFG_Plots_Static[["Forb"]]
ggplotly(SFG_Plots_Interactive[["SubShrub"]] , tooltip = "text")
SFG_Plots_Static[["SubShrub"]]
ggplotly(SFG_Plots_Interactive[["Shrub"]] , tooltip = "text")
SFG_Plots_Static[["Shrub"]]
ggplotly(SFG_Plots_Interactive[["Tree"]] , tooltip = "text")
SFG_Plots_Static[["Tree"]]
ggplotly(SFG_Plots_Interactive[["Succulent"]] , tooltip = "text")
SFG_Plots_Static[["Succulent"]]
NoxiousPlot_Interactive <- SummaryFigures(SpeciesList, Species_plots_ecosite, EcologicalSiteId, SummaryVar = "Noxious", Interactive = TRUE) ggplotly(NoxiousPlot_Interactive)
SummaryFigures(SpeciesList, Species_plots_ecosite, EcologicalSiteId, SummaryVar = "Noxious", Interactive = FALSE)
Species_Plots_Static[["Graminoid.Perennial"]]
Species_Plots_Static[["Forb.Annual"]]
Species_Plots_Static[["Forb.Perennial"]]
ggplotly(Species_Plots_Interactive[["Shrub.Perennial"]] , tooltip = "text")
Species_Plots_Static[["Shrub.Perennial"]]
Note that sage-grouse groups may not be attributed for every state. Consult with your project lead before using these values in reporting.
Note that these groups may not be attributed for every state. Consult with your project lead before using these values in reporting.
Foliar cover values are summarized in tables below. Tables summarize data across the ecological site as well as by plot within the ecological site. Note that percent cover on a per-plot basis is not cumulative because we are calculating cover from any hit on line point intercept. Percent cover values per plot could therefore potentially add up to over 100. See Ground Cover Summary Table for total foliar cover estimates. Per plot measurements are intended to allow you to compare plot level data to the status of the ecological site as a whole.
Percent cover by species by plot within your specified ecological site.
SummaryTables(EcoSitePlots, Species_plots_ecosite, SummaryVar = "Species", SummarizeBy = "Plot")
Percent cover by species averaged across the ecological site.
SummaryTables(EcoSitePlots, Species_plots_ecosite, SummaryVar = "Species", SummarizeBy = "EcologicalSite")
Average percent cover by structure and functional group across your specified ecological site.
SummaryTables(EcoSitePlots, Species_plots_ecosite, SummaryVar = "GrowthHabitSub", SummarizeBy = "Plot")
Average percent cover by structure and functional group across your specified ecological site.
SummaryTables(EcoSitePlots, Species_plots_ecosite, SummaryVar = "GrowthHabitSub", SummarizeBy = "EcologicalSite")
Percent cover by noxious versus non-noxious plants by plot within your specified ecological site.
SummaryTables(EcoSitePlots, Species_plots_ecosite, SummaryVar = "Noxious", SummarizeBy = "Plot")
Percent cover by noxious versus non-noxious plants averaged across your specified ecological site.
SummaryTables(EcoSitePlots, Species_plots_ecosite, SummaryVar = "Noxious", SummarizeBy = "EcologicalSite")
SummaryTables(EcoSitePlots, Species_plots_ecosite, SummaryVar = "Woody", SummarizeBy = "Plot")
Percent cover by woody versus herbaceous plants averaged across your specified ecological site.
SummaryTables(EcoSitePlots, Species_plots_ecosite, SummaryVar = "Woody", SummarizeBy = "EcologicalSite")
Note that these groups may not be attributed in every state. Consult with your project lead before using these values in reporting
Percent cover by Sage-Grouse group by plot within your specified ecological site.
SummaryTables(EcoSitePlots, Species_plots_ecosite, SummaryVar = "SageGrouseGroup", SummarizeBy = "Plot")
Note that these groups may not be attributed in every state. Consult with your project lead before using these values in reporting
Percent cover by Sage-Grouse group averaged across your specified ecological site.
SummaryTables(EcoSitePlots, Species_plots_ecosite, SummaryVar = "SageGrouseGroup", SummarizeBy = "EcologicalSite")
SummaryTables(EcoSitePlots, Species_plots_ecosite, SummaryVar = "PreferredForb", SummarizeBy = "Plot")
Percent cover by preferred forbs averaged across your specified ecological site.
SummaryTables(EcoSitePlots, Species_plots_ecosite, SummaryVar = "PreferredForb", SummarizeBy = "EcologicalSite")
It is unlikely that all species on a plot will be detected in line point intercept. It can be inferred that these species that were never detected in LPI have "low abundance" across this ecological site. To determine all species detected on plots throughout an ecological site (or other grouping feature), we can pull in all species detected from all other methods using the accumulated species indicator. This can give us an idea of overall diversity across the ecological site, indicate seed bank and restoration potential, and inform us more about community composition and species trends as plots are repeatedly surveyed.
This table contains species that were only ever detected in species richness inventory on a per plot basis within the ecological site.
SummaryTables(EcoSitePlots, Species_plots_ecosite, SummaryVar = "TraceSpecies", SummarizeBy = "Plot")
This table contains species that were only ever detected in species richness inventory across the entire ecological site.
SummaryTables(EcoSitePlots, Species_plots_ecosite, SummaryVar = "TraceSpecies", SummarizeBy = "EcologicalSite")
In addition to species-specific indicators, we can summarize ground cover indicators to get percent cover values for bare ground, total rock, total litter, and total foliar. Additional indicators that can be included here are Lichen ("LC") , Moss ("M") , Duff ("D"), and/or Cyanobacteria ("CY"). These calculations are informative for assessing the status of the ecological site as a whole, susceptibility to erosion, and/or cross-walking AIM data to Rangeland Health Assessments when used in conjunction with species specific calculations.
ggplotly(SummaryFigures(SpeciesList, Species_plots_ecosite, EcologicalSiteId, SummaryVar = "GroundCover", Interactive = TRUE))
SummaryFigures(SpeciesList, Species_plots_ecosite, EcologicalSiteId, SummaryVar = "GroundCover", Interactive = FALSE)
Ground cover indicator values by plot within the specified ecological site.
SummaryTables(EcoSitePlots, Species_plots_ecosite, SummaryVar = "GroundCover", SummarizeBy = "Plot")
Ground cover values averaged across the specified ecological site.
SummaryTables(EcoSitePlots, Species_plots_ecosite, SummaryVar = "GroundCover", SummarizeBy = "EcologicalSite")
Looking at height data in conjunction with canopy gap data helps inform the vegetation structure across a site.
ggplotly(SummaryFigures_Height(Species_plots_ecosite, EcologicalSiteId, SummaryVar = "Height", GroupBy = "GrowthHabit", Interactive = TRUE), tooltip = "text")
SummaryFigures_Height(Species_plots_ecosite, EcologicalSiteId, SummaryVar = "Height", GroupBy = "GrowthHabit", Interactive = FALSE)
Height_species_interactive <- SummaryFigures_Height(Species_plots_ecosite, EcologicalSiteId, SummaryVar = "Height", GroupBy = "Species", Interactive = TRUE) ggplotly((Height_species_interactive[["Graminoid.Annual"]]), tooltip = "text")
Height_species_static <- SummaryFigures_Height(Species_plots_ecosite, EcologicalSiteId, SummaryVar = "Height", GroupBy = "Species", Interactive = FALSE) Height_species_static[["Graminoid.Annual"]]
ggplotly(Height_species_interactive[["Graminoid.Perennial"]] , tooltip = "text")
Height_species_static[["Graminoid.Perennial"]]
ggplotly(Height_species_interactive[["Forb.Annual"]] , tooltip = "text")
Height_species_static[["Forb.Annual"]]
ggplotly(Height_species_interactive[["Forb.Perennial"]] , tooltip = "text")
Height_species_static[["Forb.Perennial"]]
ggplotly(Height_species_interactive[["SubShrub.Perennial"]] , tooltip = "text")
Height_species_static[["SubShrub.Perennial"]]
ggplotly(Height_species_interactive[["Shrub.Perennial"]] , tooltip = "text")
Height_species_static[["Shrub.Perennial"]]
ggplotly(Height_species_interactive[["Tree.Perennial"]] , tooltip = "text")
Height_species_static[["Tree.Perennial"]]
ggplotly(Height_species_interactive[["Succulent.Perennial"]] , tooltip = "text")
Height_species_static[["Succulent.Perennial"]]
ggplotly(SummaryFigures_Height(Species_plots_ecosite, EcologicalSiteId, SummaryVar = "Height", GroupBy = "Sagebrush", Interactive = TRUE), tooltip = "text")
SummaryFigures_Height(Species_plots_ecosite, EcologicalSiteId, SummaryVar = "Height", GroupBy = "Sagebrush", Interactive = FALSE)
SummaryTables_Height(Species_plots_ecosite, SummaryVar = "Height", SummarizeBy = "Plot", GroupBy = "GrowthHabit")
SummaryTables_Height(Species_plots_ecosite, SummaryVar = "Height", SummarizeBy = "EcologicalSite", GroupBy = "GrowthHabit")
SummaryTables_Height(Species_plots_ecosite, SummaryVar = "Height", SummarizeBy = "Plot", GroupBy = "Species")
SummaryTables_Height(Species_plots_ecosite, SummaryVar = "Height", SummarizeBy = "EcologicalSite", GroupBy = "Species")
SummaryTables_Height(Species_plots_ecosite, SummaryVar = "Height", SummarizeBy = "Plot", GroupBy = "Sagebrush")
SummaryTables_Height(Species_plots_ecosite, SummaryVar = "Height", SummarizeBy = "EcologicalSite", GroupBy = "Sagebrush")
Canopy gap intercept can inform us about potential wind erosion, weed invasion, and wildlife habitat. When combined with vegetation height measurements, gap measurements can inform us about vegetation structure (see p. 41 in the Monitoring Manual for methods). Canopy gap, bare soil, and vegetation heights c an also be used to determine thresholds at which vegetation structure may lead to a shift in ecological states.
ggplotly(SummaryFigures(SpeciesList, Species_plots_ecosite, EcologicalSiteId, SummaryVar = "Gap", Interactive = TRUE), tooltip = "text")
SummaryFigures(SpeciesList, Species_plots_ecosite, EcologicalSiteId, SummaryVar = "Gap", Interactive = FALSE)
The table below shows gap size classes represented within each plot within the specified ecological site.
SummaryTables(EcoSitePlots, Species_plots_ecosite, SummaryVar = "Gap", SummarizeBy = "Plot")
Below is a summary of average percent cover within each gap size class across the specified ecological site.
SummaryTables(EcoSitePlots, Species_plots_ecosite, SummaryVar = "Gap", SummarizeBy = "EcologicalSite")
Soil stability provides information on soil structure development and resistance to erosion. The soil stability test measures the soil's stability when exposed to rapid wetting, and reflects soil biotic integrity (see page 47 in the Monitoring Manual.)
ggplotly(SummaryFigures(SpeciesList, Species_plots_ecosite, EcologicalSiteId,SummaryVar = "SoilStability", Interactive = TRUE), tooltip = "text")
SummaryFigures(SpeciesList, Species_plots_ecosite, EcologicalSiteId,SummaryVar = "SoilStability", Interactive = FALSE)
Below are the soil stability ratings for each individual plot within the specified ecological site.
SummaryTables(EcoSitePlots, Species_plots_ecosite, SummaryVar = "SoilStability", SummarizeBy = "Plot")
Below are the average soil stability ratings within the specified ecological site.
SummaryTables(EcoSitePlots, Species_plots_ecosite, SummaryVar = "SoilStability", SummarizeBy = "EcologicalSite")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.