Skip to contents

Background

Fecal Indicator Bacteria (FIB) are used to track concentrations of pathogens in surface waters that may be detrimental to human health and the environment. These are commonly measured with select indicators that are present in the human gut and can enter the environment through wastewater discharges or other illicit sources. Common indicators include concentrations of E. coli, Enterococcus, or Fecal Coliform as the number of colony forming units (CFU) per 100 mL of water.

Many monitoring programs routinely measure FIB concentrations at select locations. The Environmental Protection Commission (EPC) of Hillsborough County has been tracking FIB indicators for several decades as part of their long-term monitoring. Functions in tbeptools can be used to download EPC FIB data, analyze the results, and create summary maps or plots. This vignette describes use of these functions. Most of these functions are focused on reporting for the Hillsborough River fecal coliform impairment and the associated Basin Management Action Plan (BMAP). These tools can be used to track long-term changes in FIBs in this basin to assess progress in reducing fecal coliform levels.

Data collected from the monitoring program are processed and maintained in a spreadsheet titled RWMDataSpreadsheet_ThroughCurrentReportMonth.xlsx at https://epcbocc.sharepoint.com/:x:/s/Share/EWKgPirIkoxMp9Hm_wVEICsBk6avI9iSRjFiOxX58wXzIQ?e=kAWZXl&download=1 (viewable here). These data include observations at all stations and for all parameters throughout the period of record. FIB data are collected at most stations where additional water quality data are collected. This is the same dataset used for reporting on water quality indicators in Tampa Bay (see the water quality data vignette).

Read

The main function for importing FIB data is read_importfib(). This function downloads the latest file if one is not already available at the location specified by the xlsx input argument. The function operates similarly as read_importwq() for importing water quality data. Please refer to the see the water quality data vignette for additional details on the import function.

The FIB data can be downloaded as follows:

fibdata <- read_importfib('vignettes/current_data.xlsx', download_latest = T)

A data object called fibdata is also provided with the package, although it may not contain the most current data available from EPC. View the help file for the download date.

fibdata
#> # A tibble: 76,502 × 18
#>    area   epchc_station class SampleTime             yr    mo Latitude Longitude
#>    <chr>          <dbl> <chr> <dttm>              <dbl> <dbl>    <dbl>     <dbl>
#>  1 Hills…             2 3M    2024-01-08 14:46:00  2024     1     27.9     -82.5
#>  2 Hills…             6 3M    2024-01-16 09:50:00  2024     1     27.9     -82.5
#>  3 Hills…             7 3M    2024-01-16 10:07:00  2024     1     27.9     -82.5
#>  4 Hills…             8 3M    2024-01-16 12:50:00  2024     1     27.9     -82.4
#>  5 Middl…             9 2     2024-01-16 11:58:00  2024     1     27.8     -82.4
#>  6 Middl…            11 2     2024-01-16 10:20:00  2024     1     27.8     -82.5
#>  7 Middl…            13 2     2024-01-16 10:36:00  2024     1     27.8     -82.5
#>  8 Middl…            14 2     2024-01-16 11:26:00  2024     1     27.8     -82.5
#>  9 Middl…            16 2     2024-01-30 09:10:00  2024     1     27.7     -82.5
#> 10 Middl…            19 2     2024-01-30 09:25:00  2024     1     27.7     -82.6
#> # ℹ 76,492 more rows
#> # ℹ 10 more variables: Total_Depth_m <dbl>, Sample_Depth_m <dbl>, ecoli <dbl>,
#> #   ecoli_q <chr>, ecocci <dbl>, ecocci_q <chr>, fcolif <dbl>, fcolif_q <chr>,
#> #   totcol <dbl>, totcol_q <chr>

The fibdata object includes monthly samples for FIB data at select stations in the Hillsborough River basin. Some stations include samples beginning in 1972. The default output for read_importwq() returns all stations with FIB data from EPC. If all = F for read_importfib(), only stations with AreaName in the source data as Hillsborough River, Hillsborough River Tributary, Alafia River, Alafia River Tributary, Lake Thonotosassa, Lake Thonotosassa Tributary, and Lake Roberta. Values are returned for E. coli (ecoli), Enterococcus (ecocci), Fecal Coliform (fcolif), and Total Coliform (totcol). Values shown are # of colonies per 100 mL of water (#/100mL). Qualifier columns for each are also returned with the _q suffix. Qualifier codes can be interpreted from the source spreadsheet. Concentrations noted with < or > in the raw data are reported as is, with only the numeric value shown. Samples with this notation can be determined from the qualifier columns.

The fibdata object can be used for the remaining FIB functions.

Retrieving additional FIB data

Most of the FIB functions in tbeptools were developed to work with the long-term monitoring data from the Environmental Protection Commission of Hillsborough County. Additional monitoring programs in Tampa Bay can also be used to develop a more complete description of FIB data.

The read_importwqp() function can be used to retrieve data from the USEPA Water Quality Portal for data from monitoring organizations in and around the Tampa Bay watershed. The function retrieves additional FIB data using type = 'fib' with the specified organization identified. The data can be retrieved as follows and will typically take less than one minute to download.

# get Manatee County data
mancodata <- read_importwqp(org = '21FLMANA_WQX', type = 'fib', trace = T)

# get Pinellas County data
pincodata <- read_importwqp(org = '21FLPDEM_WQX', type = 'fib', trace = T)

Analyze

The anlz_fibmap() function assigns categories to each observation in fibdata for a selected month and year. These results are then mapped using anlz_fibmap() (see below). The categories are specific to E. coli or Enterococcus and are assigned based on the station class as freshwater (class as 1 or 3F) or marine (class as 2 or 3M), respectively. A station is categorized into one of four ranges defined by the thresholds as noted in the cat column of the output, with corresponding colors appropriate for each range as noted in the col column of the output.

anlz_fibmap(fibdata)
#> # A tibble: 76,502 × 12
#>    area    epchc_station class    yr    mo Latitude Longitude ecoli ecocci ind  
#>    <chr>           <dbl> <chr> <dbl> <dbl>    <dbl>     <dbl> <dbl>  <dbl> <chr>
#>  1 Hillsb…             2 3M     2024     1     27.9     -82.5    NA     24 Ente…
#>  2 Hillsb…             6 3M     2024     1     27.9     -82.5    NA      2 Ente…
#>  3 Hillsb…             7 3M     2024     1     27.9     -82.5    NA      2 Ente…
#>  4 Hillsb…             8 3M     2024     1     27.9     -82.4    NA     10 Ente…
#>  5 Middle…             9 2      2024     1     27.8     -82.4    NA      2 Ente…
#>  6 Middle…            11 2      2024     1     27.8     -82.5    NA      2 Ente…
#>  7 Middle…            13 2      2024     1     27.8     -82.5    NA      2 Ente…
#>  8 Middle…            14 2      2024     1     27.8     -82.5    NA      2 Ente…
#>  9 Middle…            16 2      2024     1     27.7     -82.5    NA      2 Ente…
#> 10 Middle…            19 2      2024     1     27.7     -82.6    NA      2 Ente…
#> # ℹ 76,492 more rows
#> # ℹ 2 more variables: cat <fct>, col <chr>

The thresholds are from EPC and are as follows for E. coli or Enterococcus.

Indicator Threshold
E. coli 126 - 409
E. coli 410 - 999
E. coli < 126
E. coli > 999
Enterococcus < 35
Enterococcus 35 - 129
Enterococcus 130 - 999
Enterococcus > 999

The yrsel and mosel arguments can be used to filter results by year and month. Not specifying these arguments will return results for the entire period of record.

anlz_fibmap(fibdata, yrsel = 2023, mosel = 7)
#> # A tibble: 207 × 12
#>    area    epchc_station class    yr    mo Latitude Longitude ecoli ecocci ind  
#>    <chr>           <dbl> <chr> <dbl> <dbl>    <dbl>     <dbl> <dbl>  <dbl> <chr>
#>  1 Hillsb…             2 3M     2023     7     27.9     -82.5    NA    800 Ente…
#>  2 Hillsb…             6 3M     2023     7     27.9     -82.5    NA      2 Ente…
#>  3 Hillsb…             7 3M     2023     7     27.9     -82.5    NA      2 Ente…
#>  4 Hillsb…             8 3M     2023     7     27.9     -82.4    NA      2 Ente…
#>  5 Middle…             9 2      2023     7     27.8     -82.4    NA      2 Ente…
#>  6 Middle…            11 2      2023     7     27.8     -82.5    NA      2 Ente…
#>  7 Middle…            13 2      2023     7     27.8     -82.5    NA      2 Ente…
#>  8 Middle…            14 2      2023     7     27.8     -82.5    NA      2 Ente…
#>  9 Middle…            16 2      2023     7     27.7     -82.5    NA      2 Ente…
#> 10 Middle…            19 2      2023     7     27.7     -82.6    NA      2 Ente…
#> # ℹ 197 more rows
#> # ℹ 2 more variables: cat <fct>, col <chr>

The areasel argument can indicate either "Alafia" or "Hillsborough" to select data for the corresponding river basins, where rows in fibdata are filtered based on the the selection. All stations are returned if this argument is set as NULL (default). The Alafia River basin includes values in the area column of fibdata as "Alafia River" and "Alafia River Tributary". The Hillsborough River basin includes values in the area column of fibdat as "Hillsborough River", "Hillsborough River Tributary", "Lake Thonotosassa", "Lake Thonotosassa Tributary", and "Lake Roberta". Not all areas may be present based on the selection for yrsel and mosel. All valid options for areasel include "Alafia River", "Hillsborough River", "Big Bend", "Cockroach Bay", "East Lake Outfall", "Hillsborough Bay", "Little Manatee", "Lower Tampa Bay", "McKay Bay", "Middle Tampa Bay", "Old Tampa Bay", "Palm River", "Tampa Bypass Canal", or "Valrico Lake".

anlz_fibmap(fibdata, yrsel = 2023, mosel = 7, areasel = 'Hillsborough River')
#> # A tibble: 47 × 12
#>    area    epchc_station class    yr    mo Latitude Longitude ecoli ecocci ind  
#>    <chr>           <dbl> <chr> <dbl> <dbl>    <dbl>     <dbl> <dbl>  <dbl> <chr>
#>  1 Hillsb…             2 3M     2023     7     27.9     -82.5    NA    800 Ente…
#>  2 Hillsb…           105 3M     2023     7     28.0     -82.4    NA    128 Ente…
#>  3 Hillsb…           106 1      2023     7     28.1     -82.4   144    232 E. c…
#>  4 Lake T…           107 3F     2023     7     28.0     -82.3   570   1550 E. c…
#>  5 Hillsb…           108 3F     2023     7     28.1     -82.2   187    276 E. c…
#>  6 Lake T…           118 3F     2023     7     28.1     -82.3     4      7 E. c…
#>  7 Hillsb…           120 3F     2023     7     28.1     -82.4   100    410 E. c…
#>  8 Lake T…           135 3F     2023     7     28.1     -82.3     4      4 E. c…
#>  9 Hillsb…           137 3M     2023     7     28.0     -82.5    NA    680 Ente…
#> 10 Hillsb…           143 3F     2023     7     28.1     -82.1   800   1333 E. c…
#> # ℹ 37 more rows
#> # ℹ 2 more variables: cat <fct>, col <chr>

The anlz_fibmatrix() function creates a summary of FIB categories by station and year as output for the show_fibmatrix() function described below. The function assigns Microbial Water Quality Assessment (MWQA) letter categories for each station and year based on the likelihood that fecal coliform concentrations will exceed 400 CFU / 100 mL for a given year. By default, the results for each year are based on a right-centered window that uses the previous two years and the current year to calculate probabilities from the monthly samples (lagyr = 3). The columns for each station and year include the estimated geometric mean of fecal coliform concentrations (gmean) and a category indicating a letter outcome based on the likelihood of exceedences (cat).

anlz_fibmatrix(fibdata)
#> # A tibble: 8,800 × 4
#>       yr epchc_station gmean cat  
#>    <dbl> <fct>         <dbl> <chr>
#>  1  1985 2             52.4  B    
#>  2  1985 6              7.21 A    
#>  3  1985 7              4.64 A    
#>  4  1985 8              9.49 A    
#>  5  1985 9              6.32 A    
#>  6  1985 11             5.18 A    
#>  7  1985 13             4    A    
#>  8  1985 14             6.35 A    
#>  9  1985 16             4    A    
#> 10  1985 19             4    A    
#> # ℹ 8,790 more rows

Show

The show_fibmap() function creates a map of FIB sites and thresholds based on output from anlz_fibmap(). The same arguments that apply to anlz_fibmap() also apply to show_fibmap() such that freshwater and marine stations categorized by relevant thresholds are plotted by a selected year, month, and area. Unlike anlz_fibmap(), the yrsel and mosel arguments are required.

show_fibmap(fibdata, yrsel = 2023, mosel = 7, areasel = NULL)

Sites for the Hillsborough or Alafia river basins can be shown using areasel argument.

show_fibmap(fibdata, yrsel = 2023, mosel = 7, areasel = 'Hillsborough River')
show_fibmap(fibdata, yrsel = 2023, mosel = 7, areasel = 'Alafia River')

Additional information about a site can be seen by placing the cursor over a location. A map inset can also be seen by clicking the arrow in the button left.

The show_fibmatrix() function creates a stoplight graphic of summarized FIB data at selected stations for each year of available data [1]. The matrix colors are based on the likelihood that fecal indicator bacteria concentrations exceed 400 CFU / 100 mL in a given year (using Fecal Coliform, fcolif in fibdata). The likelihoods are categorized as A, B, C, D, or E (Microbial Water Quality Assessment or MWQA categories) with corresponding colors, where the breakpoints for each category are <10%, 10-30%, 30-50%, 50-75%, and >75% (right-closed). Methods and rationale for this categorization scheme are provided by the Florida Department of Environmental Protection, Figure 8 in [2] and [1].

By default, the results for each year are based on a right-centered window that uses the previous two years and the current year to calculate probabilities from the monthly samples (lagyr = 3). This example shows results using only the monthly observations in each year.

show_fibmatrix(fibdata, lagyr = 1)

The default stations are those used in TBEP report #05-13 [3] for the Hillsborough River Basin Management Action Plan (BMAP) subbasins. These include Blackwater Creek (WBID 1482, EPC stations 143, 108), Baker Creek (WBID 1522C, EPC station 107), Lake Thonotosassa (WBID 1522B, EPC stations 135, 118), Flint Creek (WBID 1522A, EPC station 148), and the Lower Hillsborough River (WBID 1443E, EPC stations 105, 152, 137). Other stations in fibdata can be plotted using the stas argument.

show_fibmatrix(fibdata, stas = c(115, 116))

The yrrng argument can also be used to select a year range, where the default is 1985 to the most current year of data in fibdata.

show_fibmatrix(fibdata, yrrng = c(1990, 2020))

If preferred, the matrix can also be returned in an HTML table that can be sorted and scrolled. Only the first ten rows are shown by default. The default number of rows (10) can be changed with the nrows argument. Use a sufficiently large number to show all rows.

show_fibmatrix(fibdata, asreact = TRUE)

A plotly (interactive, dynamic plot) can be returned by setting the plotly argument to TRUE.

show_fibmatrix(fibdata, plotly = TRUE)

From these plots, we can view locations and general trends in FIB data for the Hillsborough and Alafia river basins. Additional functions may be added in the future to evaluate FIB data at other locations.

References

[1]
G. Morrison, H. N. Swanson, V. J. Harwood, C. M. Wapnick, T. Hansen, H. S. Greening, Using a ’Decision Matrix’ Approach to Develop a Fecal Coliform BMAP for Impaired Waters in the Hillsborough River Watershed, Tampa Bay Estuary Program, Tampa Bay Regional Planning Council, St. Petersburg, Florida, 2009.
[2]
PBS & J, Terra Ceia Consulting, LLC, University of South Florida, Development of a decision-support tool to support the implementation of fecal coliform BMAPs in the Hillsborough River Watershed, Florida Department of Environmental Protection, Jacksonville, Florida, 2008. http://publicfiles.dep.state.fl.us/DEAR/BMAP/Tampa/MST%20Report/Fecal%20BMAP%20DST%20Final%20Report%20--%20June%202008.pdf.
[3]
E. Sherwood, G. Morrison, Hillsborough River Fecal Coliform BMAP Update (2013), Tampa Bay Estuary Program, St. Petersburg, Florida, 2013. https://drive.google.com/file/d/1MZnK3cMzV7LRg6dTbCKX8AOZU0GNurJJ/view?usp=drivesdk.