# libraries for the notebook library(tidyverse) source("R/generate_bn_count_map.R")
A species having an origin outside a specific location or region is considered non-native. The term invasive implies the non-native species has the tendency to distribute in a way considered harmful to the new habitat by out competing native species. Not all non-native species are necessarily invasive. Maintaining lists of known non-native species occurrences can be useful to understanding patterns of distribution and monitoring possible invasion.
There are approximately 6000 distinct non-native species (plant and animal) currently documented in the Lower 48 United States [@Simpson2018]. Not every species is found or will be found in a given state. The purpose of this provisional bio-geographic analysis package is to create a state-by-state list of non-native (i.e. invasive) species found in adjacent states, but not yet documented in the state of interest.
The bio-geographic analysis package uses the Biodiversity Information Serving Our Nation (BISON) species occurrence database https://bison.usgs.gov to determine species occurrences in the United States and its Territories. The data in BISON provide researchers with records of biological occurrence gathered across multiple agencies and organizations as a single, online resource.
This package was motivated by work undertaken for the Western Governors Association, supporting their Biosecurity and Invasive Species Initiative. The original analysis was designed to answer the following questions:
1) What species occur in the Western States? These states are defined as states west of Minnesota (MN), Iowa (IA), Missouri ), Arkansas (AR), and Louisiana (LA).
2) What species occur in the states immediately adjacent to the Western States?
* Defined as: MN, IA, MO, AR, LA
3) What species from the Tier States (part 2) DO NOT occur in the Western States (part 1)?
4) Which result species from part 3 are non-native?
This original analysis was expanded and refined to individual states across the Lower 48 Unites States by applying a similar logic at a new scale to benefit a larger user group. Stakeholders like the Western Governor Association can use the "Bad Neighbor" analysis to see a list of species of concern to develop monitoring and management strategies before invasion. Results from the package can help state biologists, foresters, and rangeland managers in federal agencies like the Bureau of Land Management set species priorities for control treatments to benefit land conservation and promote healthy ecosystems.
The Bad Neighbor analysis can be run on any type of taxon for which the Biodiversity Information Serving Our Nation (BISON) species occurrence database has records. For the sake of illustration, a subset of taxonomic classes and families were selected to demonstrate the analysis. Those groups include species of high concern in the plant, animal and insect kingdoms. Groups chosen were:
1) Specific groups of plants:
- Tree/Shrub
- Grass
- Ivy/Vines
- Forb/Herb
2) Insects
3) Birds
Taxonomy does not accurately describe how an end user might approach grouping invasive species. For example, at the Class level, there are 56 entries describing the non-native species in [[@Simpson2018]. A more intuitive approach might be to group species into informal classifications like tree/shrub. The problem here is there is no one Family or Class that describes this sub-group; hence informal.
The USDA PLANTS database provides a habitat flag to describe the generalized growth habit of various species like tree, shrub, subshrub, or combinations thereof. Therefore, a list of taxonomic Families that incorporate tree/shrub can be developed from the PLANTS habitat.
A series of families related by habit have been formed and a bad neighbor analysis is run for each of these groups. Each of the informal groups listed below have an associated lookup table for the hierarchy homonym strings:
The following outlines the various stages of running the Bad Neighbor BAP. The process is developed in three primary steps:
State list
1) Query individual state for a list of all species at a given taxonomic group. The species group list can be generated from any valid taxonomic group;
Buffer States List
2) Query adjacent states for a list of all species at a given taxonomic group;
Bad Neighbor List
3) Intersect lists 1 and 2 to find a list of species in 2 (buffer states) not currently documented in 1 (state); this is the Bad Neighbor list.
The processing is done in several R scripts stored in the R
directory:
process_bad_neighbor_groups.R
is a wrapper function executing all necessary steps;state_bad_neighbor_query.R
is the primary BISON query and parsing function to develop both the state and buffer state lists of non-native species;state_all_species_query.R
is a second BISON query/parsing function returning all species in a given state. This is included for possible future work, but the results are not used here;export_bad_neighbor_list.R
is a wrapper function to run the intersect between states and the buffer states to create the bad neighbor list and export the results to JSON. Result files are located in the results_json
directory;generate_bn_count_map.R
is a function to generate a chloropleth map of results;generate_state_report_text.R
, state_fips_lookup.R
, and get_hierarchy_string.R
are helper functions.A portion of the development of the code uses a USGS non-native species list [@Simpson2018-data] to verify and qualify results from the BISON service. The BISON queries used in to generate the bad neighbor results uses these data internally to indicate non-native status.
The results have been run and saved in a csv file.
comb_all_results <- readr::read_csv("result_csv/combine_all_plant_bad_neighbor.csv")
Of the 6000 non-native species, there are a total of r sum(comb_all_results$bad_neighbor_count)
"Bad Neighbor" occurrences of those species in the Lower 48 United States. The table below describes the results by taxon group as total and the relative contribution, or threat, for each group.
comb_all_results %>% group_by(family) %>% # group by family summarise(contrib_bad_neighbor = sum(bad_neighbor_count)) %>% # calculate the sum of each group mutate(pct_contrib_bad_neighbor = (contrib_bad_neighbor / sum(contrib_bad_neighbor) * 100)) %>% arrange(pct_contrib_bad_neighbor) %>% rename(`Taxon Group` = family, `Number of Bad Neighbors` = contrib_bad_neighbor, `Pct of Bad Neighbor` = pct_contrib_bad_neighbor)
The chart below illustrates the relative threat from each of the taxon groups.
comb_all_results %>% group_by(family) %>% # group by family summarise(contrib_bad_neighbor = sum(bad_neighbor_count)) %>% # calculate the sum of each group mutate(pct_contrib_bad_neighbor = (contrib_bad_neighbor / sum(contrib_bad_neighbor))) %>% # calculate percent ggplot(aes(x = reorder(family, pct_contrib_bad_neighbor), y = pct_contrib_bad_neighbor)) + geom_bar(stat = "identity") + scale_y_continuous(labels = scales::percent) + # change the y-axis labels to percent labs(title = "Percent Threat of Sample Groups Bad Neighbors", x = "Bad Neighbor Group", y = "Relative Contribution") + theme_bw() + theme(plot.title = ggplot2::element_text(size = ggplot2::rel(1.5)))
The results indicate the Forb/Herb group present the greatest overall threat, with Tree/Shrub, Insects, and Grass close behind. Recall, a Bad Neighbor is defined as a species that is not yet documented in a given state. Therefore, these results suggest many states are not yet invaded. Birds are a smaller Bad Neighbor, possibly because of migration and ease of movement. The low (almost zero) results for Ivy/Vines suggest the species in this group already occur in the states, or the taxon itself is under-represented in BISON.
The potential for a species to disperse will differ by group, as will the potential level of threat. A plant species can be spread through natural pollination/propagation, animal digestion and feces, or human transportation, and are thus limited by these mechanisms. Human transportation is a particular risk for the spread many non-native plant and animal groups. Birds are free moving and can settle in suitable habitats. However, elements of geography and climate will also serve to limit distribution into some incompatible regions.
The uncertainty associated with the limits of occurrence data should be considered when generating a species list. Of particular import to this work is the accuracy of the data itself. The BISON database provide the best available data, but is by no means absolute. The presence of a species occurrence in the database does not suggest this is the only occurrence. Rather, the occurrence is the only occurrence observed and recorded. Likewise, the absence of a record does not mean the species does not occur in a region, only that it has not been observed and recorded.
Similarly, the results presented here are limited to the state scale from the potential inaccuracy or unavailable location data associated with individual occurrence records. Many records are only resolved to a county within a state, or just a state. Therefore, results are only generated to the resolved state, which provides the greatest level of accuracy.
The specific metrics for potential risk of invasion is beyond the scope of this work. The results of the Bad Neighbor analysis can provide a starting point for more robust and specific analysis of threats related to an area and/or species of interest.
The species list generated for a given state are a starting point for further analysis. These lists are specific to a geography and are of use to managers in those areas. The following is an illustration of how specific taxon group results might be presented to a user when a particular state is selected. The user would "click", or select, a state of interest, and be presented with a summary of the results and list of Bad Neighbor species in the taxon group.
The generate_state_report.R
function was written to produce the text:
source("R/generate_state_report_text.R") # print a text report cat(generate_state_report_text("Colorado", group_name = "Insect", comb_all_results_insects))
The species list is stored as json in the results_json
directory. The data were generated on a taxon group-by-group basis, then by state. The separate taxon group json files (e.g. tree/shrub, ivy/vines, forb/herb, grasses) need to be combined into a single list for plant groups. The insect group will be used for illustration since this is only a single taxon group.
The final result can combine the list of scientific names with a link to BISON for more information.
# load the insect result file. This includes all summaries and species list species_list <- jsonlite::fromJSON("result_json/insect/Insecta/Colorado_Insecta_bad_neighbor.json") # parse the result to generate a table of species species_list$species_list %>% select(name, tsn) %>% # create an html link from the result mutate(link = str_c("<a href ='https://bison.usgs.gov/index.jsp?scientificName=", name, "&ITIS=itis' target='_blank'>")) %>% rename("ScientificName" = name, "TSN" = tsn) #rename for clarity
Maps can help describe the problem and where it is occurring. A chloropleth map describes the location of the states under greatest threat. The results of the Bad Neighbor Analysis contain the number of species in adjacent states that are not currently documented in the state of interest. Therefore, plotting this count as a color intensity describes those states that are under most threat. The first map is for all groups combined.
comb_all_results %>% group_by(state_name) %>% summarise(species_count = sum(bad_neighbor_count)) %>% generate_bn_count_map(taxon = "All Groups")
The summary map shows all states have Bad Neighbors from some group. The areas of red in the map indicate those states under the greatest threat from its neighbors; that is, there are an increasing number of non-native species in neighboring states that are not yet documented in the state itself. The package provides a list of the actual bad neighbor species a land manager in the state might use to prioritize monitoring.
States that are colored green present a more nuanced result. Most simply, a lower number of bad neighbors can indicate a lack of non-native species. However, a more realistic interpretation is the state is already host to most of the non-native species present in adjacent states. Florida, for example, is dark green and only has 171 Bad Neighbors, but is known to already be host to many non-native species. Several states in green also lack neighbors (Canada is not used in this analysis). Maine, for example, has only a single neighbor, which limits both the analysis and the interpretation.
Presenting the data relative to the number of non-native species already documented in the state (calculated as: bad neighbor / state non-native) demonstrates a slightly different version of the map.
comb_all_results %>% group_by(state_name) %>% # Normalize the data mutate(relative = bad_neighbor_count / state_nn_species_count) %>% summarise(species_count = sum(relative)) %>% generate_bn_count_map(taxon = "All Groups", relative = TRUE)
In the relative case the levels of intensity now demonstrate a different pattern. For example, Georgia is now more intensely under threat because there are fewer documented non-native species in the state. Nevada remains under threat. Several other states indicating a high level of bad neighbors in absolute terms now show a lower level of threat, possibly because the state already has a large number of documented non-native species present.
The result maps from each individual taxon group are presented below in descending order.
Forb/Herb
comb_all_results_forbs <- readr::read_csv("result_csv/forbs_comb_result.csv") # summarize the results to count all tree_shrub species per state comb_all_results_forbs %>% group_by(state_name) %>% summarize(species_count = sum(bad_neighbor_count)) %>% # pass to the plot function generate_bn_count_map(taxon = "Forb/Herb")
The map for the Forb/Herb taxon groups visually indicates all states have some level of bad neighbors; the mid-greens seen across the map have over 50 bad neighbors extending to over 200 in the red states. The presence of yellow and red show states have not yet observed the invading species. The highest level of bad neighbors is seen in the southwest U.S.
Now, the threat relative to documented non-natives.
comb_all_results_forbs %>% group_by(state_name) %>% # Normalize the data mutate(relative = bad_neighbor_count / state_nn_species_count) %>% summarise(species_count = sum(relative)) %>% generate_bn_count_map(taxon = "Forb/Herb", relative = TRUE)
The overall threat seems lower (more green), with only Nevada standing out. The map suggests many of the states already contain a number of non-native species that is relatively similar to the possible bad neighbors.
Tree/Shrub
comb_all_results_trees <- readr::read_csv("result_csv/trees_comb_result.csv") # summarize the results to count all tree_shrub species per state comb_all_results_trees %>% group_by(state_name) %>% summarize(species_count = sum(bad_neighbor_count)) %>% # pass to the plot function generate_bn_count_map(taxon = "Tree/Shrub")
The distribution for the Tree/Shrub taxon groups is similar to that of the Forb/Herb groups. The levels of bad neighbors in mid-green, with 50-100 neighbors in this case, are higher for this group. Like the Forb/Herb group, the highest level of bad neighbors is in the southwest U.S., which might suggest an ecosystem component limiting movement of these plant groups.
Now, the threat relative to documented non-natives.
comb_all_results_trees %>% group_by(state_name) %>% # Normalize the data mutate(relative = bad_neighbor_count / state_nn_species_count) %>% summarise(species_count = sum(relative)) %>% generate_bn_count_map(taxon = "Tree/Shrub", relative = TRUE)
The threat is again relatively low compared to the absolute bad neighbors above.
Insect
# load the saved file comb_all_results_insects <- readr::read_csv("result_csv/insects_comb_result.csv") # summarize the results to count all tree_shrub species per state comb_all_results_insects %>% group_by(state_name) %>% summarize(species_count = sum(bad_neighbor_count)) %>% # pass to the plot function generate_bn_count_map(taxon = "Insect")
The map of the Insect taxon group visually indicates more red, or more states that have not yet been invaded, but are under threat. Much of the red is across the southern half of the country. There is a notable red state in the northeast (Vermont). However, the overall numeric range of bad neighbors is lower than that of the Forb/Herb and Tree/Shrub groups.
Now, the threat relative to documented non-natives.
comb_all_results_insects %>% group_by(state_name) %>% # Normalize the data mutate(relative = bad_neighbor_count / state_nn_species_count) %>% summarise(species_count = sum(relative)) %>% generate_bn_count_map(taxon = "Insect", relative = TRUE)
Once again, the relative threat is low compared to the absolute bad neighbors.
Grass
# load the saved file comb_all_results_grasses <- readr::read_csv("result_csv/grasses_comb_result.csv") # summarize the results to count all tree_shrub species per state comb_all_results_grasses %>% group_by(state_name) %>% summarize(species_count = sum(bad_neighbor_count)) %>% # pass to the plot function generate_bn_count_map(taxon = "Grass")
Visually, the distribution of bad neighbors for the Grasses taxon groups is similar to both the Forb/Herb and Tree/Shrub groups, as is the numeric range. There is again an increase in bad neighbors in the southwest.
Now, the threat relative to documented non-natives.
comb_all_results_grasses %>% group_by(state_name) %>% # Normalize the data mutate(relative = bad_neighbor_count / state_nn_species_count) %>% summarise(species_count = sum(relative)) %>% generate_bn_count_map(taxon = "Grass", relative = TRUE)
Birds
# load the saved file comb_all_results_birds <- readr::read_csv("result_csv/birds_comb_result.csv") # summarize the results to count all tree_shrub species per state comb_all_results_birds %>% group_by(state_name) %>% summarize(species_count = sum(bad_neighbor_count)) %>% # pass to the plot function generate_bn_count_map(taxon = "Bird")
Birds are highly mobile, but these results suggest mobility is limited by some other factors in various parts of the county. Those states in green, indicate a low level of bad neighbors, which can be interpreted as already invaded. The central U.S. seems to have a steady level of mid-green, which suggests birds move freely between these ecosystems. The red colors indicate an increasing level of bad neighbors. The west U.S. has several states in red, which can be explained on a high level through the presence of mountains limiting mobility/opportunity. However, the red in the southeast is not as easily explained and requires further study.
Now, the threat relative to documented non-natives.
comb_all_results_birds %>% group_by(state_name) %>% # Normalize the data mutate(relative = bad_neighbor_count / state_nn_species_count) %>% summarise(species_count = sum(relative)) %>% generate_bn_count_map(taxon = "Bird", relative = TRUE)
This threat map continues to demonstrate a relatively high threat for several states in the south, but other parts of the country show a lower threat level.
Ivy/Vine
# load the saved file comb_all_results_ivy <- readr::read_csv("result_csv/ivy_comb_result.csv") # summarize the results to count all tree_shrub species per state comb_all_results_ivy %>% group_by(state_name) %>% summarize(species_count = sum(bad_neighbor_count)) %>% # pass to the plot function generate_bn_count_map(taxon = "Ivy/Vine")
The map for Ivy/Vine bad neighbors indicates there is a lack of data for this taxon, seen as states in gray. The earlier interpretation of the ivy/vine taxon groups as being under-represented in BISON seems to be the case. Further interpretation of these results is obscured, since data gaps preclude the full generation of whether a bad neighbor is actually present.
Now, the threat relative to documented non-natives.
comb_all_results_ivy %>% group_by(state_name) %>% # Normalize the data mutate(relative = bad_neighbor_count / state_nn_species_count) %>% summarise(species_count = sum(relative)) %>% generate_bn_count_map(taxon = "Ivy/Vine", relative = TRUE)
This map continues to demonstrate the under-representation of the taxon groups in BISON, seen as states in gray indicating no data. The overall patterns are consistent with the previous groups, indicating a lower level of threat relative to the documented non-native species already present in the states.
Overall, the results from this Bad Neighbor analysis indicate the threat from so-called bad neighbors is relatively low in most cases simply because the states already have many occurrences of non-native species documented. The results do not suggest no action should be taken. States should remain diligent in the documentation of non-native species; the under-representation of many species (e.g. Ivy/Vine) suggest the problem might be worse than shown here.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.