Generate Yearling Rulesets

Raw catch from the trap does not consistently differentiate between yearling and young of year (YOY) Chinook. FlowWest presented a proposed methodology at a life history diversity (LHD) ruleset workshop (see lhd shiny for workshop materials) and worked with watershed experts to define a methodology to systematically determine life history for each tributary (described below).

Approach

  1. Set weekly cutoff values: Use visual determination on fork length over time scatter plots to set weekly cutoff values of yearlings vs YOY.
  2. Generate daily cutoff values: Use linear interpolation to extrapolate weekly cutoffs into daily values.
  3. Review & update: Share proposed cutoff values with watershed experts to review. Update as needed.
  4. Apply cutoff to catch data: Use daily cutoff values to generate a yearling column in the catch data.

Set Weekly Cutoff Values & Generate daily cutoff values

FlowWest proposed weekly cutoff values and used these weekly cutoff values to generate daily values using a linear approximation function, approxfun.

generate_cutoff <- approxfun(date, fork_length_cutoff, rule = 2)

The plot below shows the updated cutoff values with linear interpolation of weekly cutoffs for Deer Creek.

Note: You can view all code used to generate plots and tables in this markdown here.

Review & Update

FlowWest shared above plot for each watershed and asked stream experts to review. We incorporated feedback and modified rulesets to better separate yearlings and YOY.

Apply Cutoff to Catch Data

FlowWest took the daily cutoff line (shown in plot above) and used it as a threshold to classify yearling vs YOY in historical catch data. We added an is_yearling column to the catch data and set is_yearling = TRUE for any fish with a fork length that exceeded the yearling cutoff on a given date.

The following code is applied in the weekly_data_summary script.

# Note this is not the final dataset as lifestage is added below
standard_catch_unmarked_w_yearling <- rst_catch |> 
  filter(species %in% c("chinook", "chinook salmon")) |>  # filter for only chinook
  mutate(month = month(date), 
         day = day(date)) |> 
  left_join(daily_yearling_ruleset) |> 
  mutate(is_yearling = case_when((fork_length <= cutoff & !run %in% c("fall","late fall", "winter")) ~ F,
                                 (fork_length > cutoff & !run %in% c("fall","late fall", "winter")) ~ T,
                                 (run %in% c("fall","late fall", "winter")) ~ NA,
                                 T ~ NA))