Computing Annual Trends with fasstr

fasstr, the Flow Analysis Summary Statistics Tool for R, is a set of R functions to tidy, summarize, analyze, trend, and visualize streamflow data. This package summarizes continuous daily mean streamflow data into various daily, monthly, annual, and long-term statistics, completes trending and frequency analyses, with outputs in both table and plot formats.

This vignette documents the usage of the compute_annual_trends() function in fasstr. This vignette is a high-level adjunct to the details found in the function documentation (see ?compute_annual_trends()). You’ll learn what arguments to provide to the function to customize your analysis, what analyses are computed, and what outputs are produced.

Overview

Determining trends in streamflow data can provide information on potential changes in hydrological processes over time. The annual trending analysis with fasstr allows for customization of both the inputs and outputs. This function takes up to 107 annual streamflow metrics (calculated using various annual fasstr functions) and calculates prewhitened, non-parametric trends using the Mann-Kendall test performed using the zyp R package. See the zyp documentation for more information on the methods.

Each annual metric/time-series is analyzed for trends using trend-free prewhitening to remove lag-1 correlation (may artificially detect a significant trend). The slope of each metric over time is then estimated using the Theil-Sen approach. If the estimated slope is different from zero, then the data are detrended by the slope and the AR(1) 1s calculated for the detrended time series. The residuals and the trend are combined and then tested for significance using the Mann-Kendall trend test.

The trending function results in a list containing two tibble data frame outputs and, if selected, plot for each metric trended.

  1. Annual_Trends_Data - data used for analysis calculated from various annual fasstr functions
  2. Annual_Trends_Results - results of the zyp trending analysis, and includes various other statistics
  3. ‘Sep_Maximum’ - an example of each of 107 plots produced (one for each metric)

Function and Data Inputs

  • compute_annual_trends()

To determine annual trends from a daily streamflow data set, the compute_annual_trends() function will take daily data, either from HYDAT using the station_number argument or your own data frame of data using the data argument to complete the analysis. To complete a custom trends analysis of data please see the zyp functions for more information.

Usage, Options, and Outputs

Analysis Data

This function is provided to calculate trends on a multitude of annual metrics, as calculate by various annual and monthly fasstr functions. The functions will calculate metrics from each of the following functions:

  • calc_annual_stats() - calculate annual summary statistics
  • calc_annual_cumulative_stats() - calculate annual and seasonal cumulative flows, both volume and yield
  • calc_annual_flow_timing() - calculate annual flow timing
  • calc_annual_lowflows() - calculate annual lowflows
  • calc_annual_normal_days() - calculate annual days above and below normal
  • calc_monthly_stats() - calculate annual monthly summary statistics

While each of the different metrics have default variables for their arguments, many of them can be customized. The following table shows which arguments are used for which statistics and what the defaults are. See the documentation for more information.

Argument Corresponding Function Default
annual_percentiles calc_annual_stats() c(10,90)
monthly_percentiles calc_monthly_stats() c(10,20)
stats_days calc_annual_stats() & calc_monthly_stats() 1
stats_align calc_annual_stats() & calc_monthly_stats() "right"
lowflow_days calc_annual_lowflows() c(1,3,7,30)
lowflow_align calc_annual_lowflows() "right"
timing_percent calc_annual_flow_timing() c(25,33.3,50,75)
normal_percentiles calc_annual_normal_days() c(25,75)

With fasstr version 0.4.0, the months argument is now included in the trending function to specify which months of the year to include for trending. For example, selecting months = 7:9 means that all annual and monthly statistics will be calculated just from July through September to be tested for trends. This gives the user more flexibility to trend more statistics. Since selecting months may complicate seasonal totals, seasonal yields and seasonal volumes are not included in the results if not all 12 months are selected.

Examples

Example with default arguments:

compute_annual_trends(station_number = "08NM116",
                      zyp_method = "zhang",
                      start_year = 1973, end_year = 2013)

Example with custom arguments:

compute_annual_trends(station_number = "08NM116",
                      zyp_method = "zhang",
                      start_year = 1973, end_year = 2013,
                      annual_percentiles = c(10,90),
                      monthly_percentiles = c(10,20),
                      stats_days = 1,
                      stats_align = "right",
                      lowflow_days = c(1,3,7,30),
                      lowflow_align = "right",
                      timing_percent = c(25,33,50,75),
                      normal_percentiles = c(25,75))

Example with custom months arguments that will trend data only from May through September:

compute_annual_trends(station_number = "08NM116",
                      zyp_method = "zhang",
                      start_year = 1973, end_year = 2013,
                      months = 5:9)

This annual data is provided in the Annual_Trends_Data tibble objects. The following is an example of the output, including all the annual metrics and a first few years of data used for the zyp trends analysis:

To provide examples of the outputs, an analysis will be completed on a Mission Creek HYDAT station from 1973 to 2013. The argument zyp_method is described below in the Analysis Results section:

trends_analysis <- compute_annual_trends(station_number = "08NM116",
                                         zyp_method = "zhang",
                                         start_year = 1973, end_year = 2013)

The following is an example of the outputted Annual_Trends_Data tibble:

trends_analysis$Annual_Trends_Data

Analysis Results

To complete a trends analysis, a variable to the zyp_method argument must be provided, either "zhang" or "yuepilon", designating the two different approaches to analyzing data for trends. The zhang method is recommended for hydrologic applications over yuepilon (see zyp documentation for more information on the differences between the two methods). After running the function, the results of the trending analysis will be outputted in the Annual_Trends_Results tibble data frame. See the zyp documentation for how to interpret the results. The results tibble contains the following columns:

Column Name Description
Statistic the annual statistic used for trending
lbound the lower bound of the trend’s confidence interval (zyp)
trend the Sens’ slope (trend) per unit time (zyp)
trendp the Sen’s slope (trend) over the time period (zyp)
ubound the upper bound of the trend’s confidence interval (zyp)
tau Kendall’s tau statistic computed on the final detrended timeseries (zyp)
sig Kendall’s P-value computed for the final detrended timeseries (zyp)
nruns the number of runs required to converge upon a trend (zyp)
autocor the autocorrelation of the final detrended timeseries (zyp)
valid_frac the fraction of the data which is valid (not NA) once autocorrelation is removed (zyp)
linear the least squares fit trend on the same data (zyp)
intercept the intercept of the Sen’s slope (trend) (zyp)
min_year the minimum year used in the trending
max_year the maximum year used in the trending
n_years the number of years with data for trending
mean the mean of all values used for trending
median the median of all values used for trending
min the minimum of all values used for trending
max the maximum of all values used for trending

The following is an example of the outputted Annual_Trends_Results tibble from the Mission Creek HYDAT station from 1973 to 2013:

trends_analysis$Annual_Trends_Results