• Essentials of Vegetation Data
  • 1 What is Vegetation?
  • 2 Protocols
    • Principles:
    • 2.1 Observation Intensity
      • 2.1.1 Scouting
      • 2.1.2 Low Intensity
      • 2.1.3 Medium Intensity
      • 2.1.4 High Intensity
    • 2.2 General Protocol
  • 3 Vegetation Databases
    • 3.1 Potential Data Schema for Vegetation Data
    • 3.2 VegLog MS Access Database
      • Site data
      • Taxon data
      • Other Vegetation details and processing
      • Reports (conversions to NASIS)
    • 3.3 Vegetation Plot Object in NASIS
  • 4 Vegnasis Vegetation Analysis Tool
    • 4.1 Plot Data Schema
    • 4.2 Missing Data
    • 4.3 Aggregating Cover
  • 5 Navigating NASIS
    • 5.1 NASIS Data Entry
      • 5.1.1 NASIS Data Extraction
    • 5.2 Getting data into EDIT
  • 6 Quality Control
    • 6.1 Loading Data
      • 6.1.1 Loading Package Example Data
      • 6.1.2 Loading Data From NASIS
    • 6.2 Evaluate Species Composition
    • 6.3 Check Structure
    • 6.4 Check Location
  • 7 Summarizing DSP Projects
    • 7.0.1 Tabular Summaries
    • 7.0.2 Ground Surface Cover
    • 7.0.3 Structural Triangle
    • 7.0.4 Structural Profile
  • 8 Composition
    • 8.1 Data Processing
    • 8.2 Associations
    • 8.3 Cluster Analysis
    • 8.4 Phylogenetically Weighted Cluster Analysis
  • 9 Structure
    • 9.1 Data Processing
    • 9.2 Structure Summary
    • 9.3 Structure Profile
    • 9.4 Functional Vegetation Attributes
    • 9.5 Ternary Plot of Structure
  • 10 Vegetation Plant Profile Diagrams
    • 10.1 Data Processing
    • 10.2 Plot Plant Profiles
      • 10.2.1 Northern Michigan hardwood forest
      • 10.2.2 Transformed Y axis
      • 10.2.3 Northern Michigan mixed forest
      • 10.2.4 Northern Michigan pine forest
      • 10.2.5 Washington conifer forest
      • 10.2.6 Generic oak savanna
  • References
  • Published with bookdown

Essentials of Vegetation Data

Chapter 5 Navigating NASIS

5.1 NASIS Data Entry

Efficient vegetation data entry into the National Soil Information System (NASIS) is often a combination of direct entry into NASIS tables and the use of different customized NASIS forms. The following instructions are just one possible scenario that I have found works for me.

  1. Establish Site record directly in site table the User Site ID and GPS coordinates.
  2. Establish date within Site Observation child table. Site > Site Observation child table

Establish VegPlot record directly in Vegetation Plot table, entering User Plot ID and select the appropriate Site Observation (seen as User Site ID and Date). Enter any other values that might be common among the plots.

Vegetation Plot table
Vegetation Plot table

Open Plot Plant Inventory child table and establish the species list. Rather than scrolling to find all the required columns, proceed to one of the following forms.

Vegetation Plot > Plot Plant Inventory child table
Vegetation Plot > Plot Plant Inventory child table

Open ESI Site-Releve form and populate the site and plot meta data. This form requires that both Site and Vegetation Plot records be checked out and editable. If the Site table is already populated, there is no need to check out the record.

ESI Site-Releve form
ESI Site-Releve form

Instead, use one of the simpler forms that only accesses data from Vegetation Plot. Use ESI Releve for simple species cover by stratum.

ESI Releve-Simple form
ESI Releve-Simple form

Use ESI Releve Structure to fill out plot details other than species composition.

ESI Releve-Structure form
ESI Releve-Structure form

Use ESI Releve-Trees-All to enter basal area tree diameters and site index.

ESI Releve-Trees-All form
ESI Releve-Trees-All form

Use ESI Releve-Transect

ESI Releve-Transect form
ESI Releve-Transect form

Optionally, create a record for Site Association and name it the same as the relevant NASIS Project. Populate the Site child table with all the sites observed for the project. If this is an Ecological Site Verification project, you may opt to include sites observed for previous projects if they have plot data relevant for integration with the current project.

Site Association Table
Site Association Table

5.1.1 NASIS Data Extraction

NASIS is not a user friendly database in getting data back out with simple cut and paste as one might do in a spreadsheet or MS Access database. Here we use R and RStudio as a scripting environment which will allow you to call upon the data stored in NASIS and export it as a simple comma delimited spreadsheet file (*.csv). The goal is often to summarize multiple plot data into to represent a community type in the Ecosystem Dynamics Interpretive Tool (EDIT). The following workflow will require that you’ve created a NASIS site association to link your related vegetation plots, and that you have properly named the community phases in your NASIS site observations records related to each vegetation plot.

  1. Query for Ecological Site Verification Projects in your Region and load them into your local database.
Project by Project Substype, Office, and User Project ID query
Project by Project Substype, Office, and User Project ID query
  1. Get list of project user ids in R by running this script.
library(soilDB)
projects <- soilDB::get_projectmapunit_from_NASIS(SS=F)
projects <- subset(projects, select=c(projectiid, uprojectid, projectname)) |> unique()
paste(projects$uprojectid, collapse = " ")

Just copy the set of project IDs in the RStudio console without the quotes. RStudio Console

  1. Run this query in 3-4 stages to get data from all related tables. Query for sites and site associations using SiteObs by list of Site Associations, run nationally.

SiteObs by list of Site Associations query
SiteObs by list of Site Associations query
  1. Get the vegplots, run nationally.
SiteObs by list of Site Associations query
SiteObs by list of Site Associations query
  1. Get the pedons if needed, run nationally.
SiteObs by list of Site Associations query
SiteObs by list of Site Associations query
  1. Run local query for all objects.

SiteObs by list of Site Associations query
SiteObs by list of Site Associations query
#Site data  
siteass <- get_site_association_from_NASIS(SS=F)
sites <- get_site_data_from_NASIS_db(SS=F)
#Vegetation data
veg.raw <- soilDB::get_vegplot_species_from_NASIS_db(SS=F)
vegplot <- soilDB::get_vegplot_from_NASIS_db(SS=F)

Data are now available in R environment for quality control and analysis.

5.2 Getting data into EDIT

#remotes::install_github("ncss-tech/soilDB", dependencies = FALSE)

library(soilDB)

#1. Run queries in NASIS for projects ----
projects <- get_projectmilestone_from_NASIS(SS=F)
projects <- subset(projects, select=c(uprojectid, projectname)) |> unique()
paste(projects$uprojectid, collapse = " ")

#2. Run queries in NASIS for Site Association ----
siteass <- get_site_association_from_NASIS(SS=F)

sites <- get_site_data_from_NASIS_db(SS=F)

#3. Run queries in NASIS to capture all vegplots related to site associations ----
library(dplyr)
library(vegnasis)

veg.raw <- soilDB::get_vegplot_species_from_NASIS_db(SS=F)
vegplot <- soilDB::get_vegplot_from_NASIS_db(SS=F)

#4. Combine STM attributes ----
vegsite <- subset(sites, select = c(siteiid, site_id, siteobsiid, ecositeid,ecositenm,ecostatename,commphasename)) |>
  left_join(subset(vegplot, select = c(siteobsiid, vegplotid, obsintensity)), relationship = "many-to-many") |> unique()

#5. Analyse plot structure and composition ----
veg <- vegnasis::clean.veg(veg.raw)
veg$taxon <- harmonize.taxa(veg$taxon, fix = TRUE, sensu = "usda")
veg <-  veg |> fill.type.df() |> fill.hts.df()

veg.structure <- get.structure(veg)
veg.ass <- get.assoc(veg)

veg.over <- veg |> subset(ht.max > 5) |> group_by(plot, taxon, type) |> summarise(cover=cover.agg(cover))
veg.under <- veg |> subset(ht.max <= 5) |> group_by(plot, taxon, type) |> summarise(cover=cover.agg(cover))


#5. Summary Plant Composition Table for export as spreadsheet for pasting into EDIT ----
Veg.group <- veg |> left_join(vegsite, by=join_by(plot==vegplotid),relationship = "many-to-many") |> subset(!is.na(plot)) |>
  #Create a group
  mutate(group = paste(ecositeid, ecositenm, ecostatename, commphasename))

EDITsum <- vegnasis::summary.ESIS(Veg.group, group = 'group',normalize = TRUE, lowerQ = 0, upperQ = 1, breaks = c(0.5,5,12), forEDIT = TRUE) |>
  #Round up for high cover
  mutate(cover.High=ifelse(cover.High < 0.1,0.1,cover.High)) |>
  #Override plant type
  mutate(type = case_when(symbol %in% 'COCAC3' ~ 'Forb/Herb',
                          symbol %in% 'CASP14' ~ 'Forb/Herb',
                          symbol %in% 'PRSU3' ~ 'Shrub/Subshrub',
                          symbol %in% '2LICHN' ~ 'Biological Crusts',
                          symbol %in% 'Orchidaceae' ~ 'Forb/Herb',
                          TRUE ~ type),
         #Set sort order based on type
         type.top = case_when(type %in% 'Tree' ~ 1,
                              type %in% 'Shrub/Subshrub' ~ 2,
                              type %in% 'Vine/Liana' ~ 3,
                              type %in% 'Grass/grass-like (Graminoids)' ~ 4,
                              type %in% 'Forb/Herb' ~ 5,
                              type %in% 'Fern/fern ally' ~ 6,
                              type %in% 'Nonvascular' ~ 7,
                              type %in% 'Biological Crusts' ~ 8,
                              TRUE ~ 9)) |> arrange(group,overstory,type.top, desc(taxon.cover), taxon)

#Unit conversion is optional because EDIT allows either SI or USC data entry.
EDITsum.USC <- EDITsum |> mutate(Bottom = ht.USC(Bottom), Top = ht.USC(Top), dbh.Low=dbh.USC(dbh.Low), dbh.High=dbh.USC(dbh.High), BA.Low=BA.to.USC(BA.Low), BA.High=BA.to.USC(BA.High))
write.csv(EDITsum, 'EDITsum.csv', row.names = FALSE, na = "")

#6. EDIT Stand Structure ----

veg.str <- summary.crown.thickness(veg, breaks = c(0.15,0.3,0.6,1.4,4,12,24,37)) |> structure.fill.zero() |> subset(type %in% c('tree', 'shrub/vine', 'grass/grasslike',  'forb'))

veg.str <- veg.str |> left_join(vegsite, by=join_by(plot==vegplotid),relationship = "many-to-many") |> subset(!is.na(plot)) |>
  #Create a group
  mutate(group = paste(ecositeid, ecositenm, ecostatename, commphasename))


veg.str.pct <- veg.str |> group_by(group, type, stratum, stratum.label, bottom, top) |>
  summarise(X25 = quantile(Cover, 0.25),
            X50 = quantile(Cover, 0.5),
            X75 = quantile(Cover, 0.75))

write.csv(veg.str.pct, 'veg.str.pct.csv', row.names = FALSE, na = "")

Find your comma delimited spreadsheet, ‘EDITsum.csv’, open and then copy and paste the relevant portions into EDIT. Be cognizant of whether EDIT is set on SI (metric) units or USC (US Customary or English) units. Vegnasis package analyses data in SI units, but you can optionally convert all data to USC prior to exporting it as a spreadsheet. Or you can set EDIT to accept SI units.

Copy from Spreadsheet just the portion related to this community, either overstory or understory.
Copy from Spreadsheet just the portion related to this community, either overstory or understory.
Paste into EDIT into the correct Forest Overstory or Understory Species composition table
Paste into EDIT into the correct Forest Overstory or Understory Species composition table