1 Overview

The Pacific Salmon Foundation’s State of Salmon Report aims to provide the public with answers to general questions regarding the state of salmon in British Columbia (BC) and the Yukon, such as:

  • How are salmon populations doing?
  • What are the major factors influencing the state of salmon?
  • What is being done - and what could be done - to mitigate threats and recover salmon populations and the habitats they depend on?

This report, first released in September 2024, takes a data-driven approach to provide historical perspective and context for current news about salmon returns. The State of Salmon Report is being updated annually to reflect new data and changes to the state of Pacific salmon populations.

As part of this work, PSF has developed simple metrics to report on the status and trends in regional abundance for each species. This document outlines the specific data sources and analytical approach that we used to estimate time series of spawner abundance and total abundance (including catch and en-route mortality) for each species and region, as well as draft results. Our analyses are ongoing, and the information here is subject to change on a regular basis, but we will endeavor to keep it up-to-date.

2 Methods

2.1 General Approach

We report spawner abundance for each of ten regions that represent all major Pacific salmon-bearing watersheds in Canada: Yukon, Northern Transboundary, Haida Gwaii, Nass, Skeena, Central Coast, Fraser, East Vancouver Island & Mainland Inlets, West Vancouver Island, and Columbia. These regions are also used to organize data in the Pacific Salmon Explorer. Note that there was a change from the 2024 Report to split the former Vancouver Island & Mainland Inlets region into two to better reflect the unique ecology and environments of salmon between West Vancouver Island and East Vancouver Island & Mainland Inlets. There are a relatively small number of Pacific salmon that spawn in the MacKenzie River basin in Arctic Canada that are currently not included in the State of Salmon report.

We report on six species of Pacific salmon (Oncorhynchus spp.): Chinook, chum, coho, pink, sockeye, and steelhead. For each species, we report on state and trends based on generational averages. For pink salmon, we take the running average of even- and odd-year lineages, but do not separate assessments of even- and odd-year pink populations as is sometimes done in status assessments due to their consistent 2-year life cycle. Our approach of using generation running averages also smooths over dominant years for sockeye salmon, for which many populations display cyclic dominance. Shifts in dominance between even- and odd-year pink populations or declines in sub-dominant years of sockeye salmon are considered in a more nuanced way in our reporting when discussing how changes in abundance have been reflected in the diversity and distribution of each species within the region.

For each of these species, where data are available, we construct an index of spawner abundance at the regional scale. We focus on spawner abundance because these data are more readily accessible and easily summarised at different spatial scales. Spawners represent the abundance of salmon available to reproduce and contribute to future generations, as well as to meet cultural and ecological needs within watersheds, and thus provides a measure of status relevant to communities and ecosystems. We recognize that commercial catch has historically been a substantial portion of salmon that return to the coast, and that ignoring declines in catch will underestimate the declines in overall salmon abundance. There is also increasing rates of pre-spawn mortality (i.e. mortality of salmon after their enter the river but before they successfully spawn) that mean that spawner abundance may be less than the number of fish that survive to maturity. Therefore, where data are available, we include information on total abundance (i.e. the number of salmon that survive to maturity, calculated as spawners plus catch plus pre-spawn mortality (where applicable)).

We have based our assessments on the best available data for each region and species. For example, stocks that are governed by international treaties may be monitored by the Pacific Salmon Commission (PSC), and tend to have reliable time series of abundance available at regional scales. These data sources are outlined in the Region-Specific Data section. For species and regions where aggregate abundance is not reported by the PSC or DFO at the scale needed, we adapted our approach to make the best use of available data. In most cases, this meant expanding spawner abundance from stream-level estimates to get a regional scale index of spawner abundance using two types of expansion factors (English et al. 2018). This expansion process is described in the Expansion Factors section.

R code and data for the analyses described here are available on GitHub at https://github.com/salmonwatersheds/state-of-salmon.

2.2 Region-Specific Data Sources

Here we describe specific data sources for the abundance of salmon and steelhead at the regional scale.

2.2.1 Yukon

The Canadian portion of the Yukon River is home to Chinook, chum, and coho salmon. Border escapement and total abundance (i.e. run size) of Canadian-origin Chinook and fall chum salmon in the mainstem Yukon River are counted at the Eagle Sonar station on the Yukon/Alaska border, and are available from the Yukon River Panel in their Joint Technical Committee (JTC) Reports.

There are also Chinook, chum, and coho salmon in the Canadian portion of the Porcupine River, which joins the mainstem Yukon River in Alaska. Data on escapement to the Porcupine River are more patchy and not currently included here.

Chinook

We used Chinook RR Spawning escapement estimate and RR Canadian origin total run size estimate from Appendix B11 of Yukon River Joint Technical Committee (2025).

# Load data ---
ytck <- read.csv(here('data/yukon_chinook_appendixB11.csv'), na.strings = "-") 
# Note: Use Run Reconstruction (RR) estimates of spawning escapement and total
# run size, not "Historical" or Mark-Recapture estimates

# Check if years are continuous
#unique(diff(ytck$Year)) # Yes, all one year apart # commented out to avoid outputting in Rmd

# Reformat data for SPS ---
ytck_sps <- data.frame(
    region = rep("Yukon", dim(ytck)[1]),
    species = rep("Chinook", dim(ytck)[1]),
    year = ytck$Year,
    spawners = ytck$RR.Spawning.escapement.estimate, 
    smoothedSpawners = NA,
    runsize = ytck$RR.Canadian.origin.total.run.size.estimate,
    smoothedRunsize = NA,
    source_id = rep("JTC_202603", dim(ytck)[1])
) 

# Smoothing
ytck_sps$smoothedSpawners <- genSmooth(
    abund = ytck_sps$spawners,
    years = ytck_sps$year,
    genLength = genLength$gen_length[genLength$region == "Yukon" & genLength$species == "Chinook"]
    )

ytck_sps$smoothedRunsize <- genSmooth(
    abund = ytck_sps$runsize,
    years = ytck_sps$year,
    genLength = genLength$gen_length[genLength$region == "Yukon" & genLength$species == "Chinook"]
)

# Add to SPS data
sps_data <- rbind(sps_data, ytck_sps)

# Generate standard plot
plot_abund(ytck_sps)
**Above:** Spawner abundance (grey) and total abundance (black) of Yukon River Chinook salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Above: Spawner abundance (grey) and total abundance (black) of Yukon River Chinook salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Chum

Canadian-origin fall chum spawner abundance was taken as the Spawning escapement estimate in Appendix B16 and total abundance as the Total estimated Canadian-origin run size from Appendix B20 of Yukon River Joint Technical Committee (2025).

# Load data ---
ytcm_B16 <- read.csv(here('data/yukon_chum_appendixB16.csv')) # Historical data
names(ytcm_B16)[1] <- "Year"
ytcm_B20 <- read.csv(here('data/yukon_chum_appendixB20.csv')) # Most recent estimates

# Check if years are continuous
#unique(diff(ytcm_B16$Year)) # Yes, all one year apart
#unique(diff(ytcm_B20$Year)) # Yes, all one year apart

# Reformat data for SPS
ytcm_sps <- data.frame(
    region = rep("Yukon", dim(ytcm_B16)[1]),
    species = rep("Chum", dim(ytcm_B16)[1]),
    year = ytcm_B16$Year,
    spawners = ytcm_B16$Spawning.escapement.estimate, 
    smoothedSpawners = NA,
    runsize = ytcm_B20$Total.estimated.Canadian.origin.run.size[match(ytcm_B16$Year, ytcm_B20$Year)],
    smoothedRunsize = NA,
    source_id = rep("JTC_202603", dim(ytcm_B16)[1])
) 

# Smoothing
ytcm_sps$smoothedSpawners <- genSmooth(
    abund = ytcm_sps$spawners,
    years = ytcm_sps$year,
    genLength = genLength$gen_length[genLength$region == "Yukon" & genLength$species == "Chum"]
)

ytcm_sps$smoothedRunsize <- genSmooth(
    abund = ytcm_sps$runsize,
    years = ytcm_sps$year,
    genLength = genLength$gen_length[genLength$region == "Yukon" & genLength$species == "Chum"]
)

# Add to SPS data
sps_data <- rbind(sps_data, ytcm_sps)

# Generate standard plot
plot_abund(ytcm_sps, cols = c("#000000", grey(0.6), 2), red_points = "Spawner (Appendix B20)")
points(ytcm_B20$Year, ytcm_B20$Spawning.escapement*10^-3, col = 2, pch = 19, cex = 0.6)
**Above:** Spawner abundance (grey) and total abundance (black) of Yukon River chum salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each. We use the spawning escapement from Appendix B16 for spawner abundance, while the escapement data from Appendix B20 makes up part of the total abundance. There are small differences between the two datasets in the early 2000s.

Above: Spawner abundance (grey) and total abundance (black) of Yukon River chum salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each. We use the spawning escapement from Appendix B16 for spawner abundance, while the escapement data from Appendix B20 makes up part of the total abundance. There are small differences between the two datasets in the early 2000s.

2.2.2 Northern Transboundary

The best-available information on salmon abundance in the Northern Transboundary region is from the PSC’s Joint Transboundary Technical Committee Reports. The most recent TTC report (Transboundary Technical Committee 2026) includes data through 2024. Updated report appendices were provided by Aaron Foos (DFO) on July 8, 2026 in advance of report publication, and numbers for 2025 should be considered preliminary.

We recognize that our approach in the Transboundary lacks information from many un-monitored watersheds, in particular the smaller watersheds of the Chilkat, Unuk, and Whiting Rivers. In the absence of better monitoring, we choose to report available data as a proxy for regional abundance, and note that the contribution of these smaller watersheds to total regional abundance for each species is likely small.

Chinook

The regional spawner abundance and total return of Chinook was calculated as the sum of escapement and total return, respectively, to the Stikine, Alsek, and Taku indicator stocks. For each of these stocks, we used escapement and exploitation rates provided by the PSC’s Chinook Technical Committee as part of their Synoptic Evaluations of Stock Status. These data were downloaded from their Data Application. Total abundance was calculated from the escapement, \(E\), and exploitation rate, \(r\), as \(E/(1-r)\).

For 2025, the Synoptic Evaluations of Stock Status are not yet available. We used the escapement estimates for Stikine, Alsek, and Taku Chinook from Table B2 of Appendix B - Detailed Escapement, available as a downloadable dataset from the Chinook Technical Committee. Canadian and US harvest of Chinook provided by Aaron Foos (DFO) as updated tables from the Transboundary Technical Committee report. Specifically, harvest for Stikine Chinook from Table B12 and harvest of Taku Chinook from Table D8. Total harvest of Alsek Chinook was provided by Teresa Wallace (DFO, pers. comm.): US Commercial: 194, US Subsistence: 8, CAN (Aboriginal): 94, CAN Recreational: 0 (No CAN recreational harvest permitted in 2025) (Total harvest = 296).

# Load data ---

# Get Synoptic evaluation data (up to 2024)
tbrck_raw <- read.csv(here("data/CTC_Synoptic_evaluation_data_all_2026-08-19.csv")) %>%
    filter(Year > 1975) %>% # Remove 1975 -> missing Alsek data
    filter(Stock %in% c("Alsek", "Taku", "Stikine")) %>%
    dplyr::select(Stock, Year, Escapement, RateType, Rate) %>%
    mutate(TotalRun = Escapement/(1 - Rate))

# Get CTC detailed escapement (Appendix B) data - for 2025
tbrck_esc <- readxl::read_xlsx(here("data/TCCHINOOK-26-03-Appendix-B-Escapement-Detailed.xlsx"), sheet = "B2", range = "A5:G54", col_names = c("year", "Alsek_esc", "Alsek_cv", "Taku_esc", "Taku_cv", "Stikine_esc", "Stikine_cv")) %>%
    mutate(Total_esc = Alsek_esc + Taku_esc + Stikine_esc)

# 2025 Harvest data - from data provided by Aaron Foos on 2026-07-08 and Teresa Wallace on 2026-08-21
tbrck_harvest <- data.frame(Year = rep(c(2025), 3), 
                                                     Stock = rep(c("Alsek", "Taku", "Stikine")),
                                                     CAD_harv = c(94, 44, 263),
                                                     USA_harv = c((194+8), 857, 12)) %>%
                                mutate(Total_harv = CAD_harv + USA_harv)

# For 2025, take harvest from TTC B12, D8, Provided by Aaron Foos; Alsek harvest provided by email (Teresa Wallace, DFO)
tbrck <- tbrck_raw %>%
    group_by(Year) %>%
    summarise(Escapement_all = sum(Escapement),
                        TotalRun_all = sum(TotalRun), 
                        source_id = "PSC_20260819") %>%
    bind_rows(data.frame(Year = 2025,
                        Escapement_all = (tbrck_esc$Alsek_esc + tbrck_esc$Taku_esc + tbrck_esc$Stikine_esc)[tbrck_esc$year == 2025],
                        TotalRun_all = sum(tbrck_harvest$Total_harv) + tbrck_esc$Total_esc[tbrck_esc$year == 2025], # Total run = sum of escapements and harvests
                        source_id = "Foos_20260708"))


# Reformat data for SPS
tbrck_sps <- data.frame(
    region = rep("Northern Transboundary", length(tbrck$Year)),
    species = rep("Chinook", length(tbrck$Year)),
    year = tbrck$Year,
    spawners = tbrck$Escapement_all, 
    smoothedSpawners = NA,
    runsize = tbrck$TotalRun_all,
    smoothedRunsize = NA,
    source_id = tbrck$source_id
) 

# Smoothing
tbrck_sps$smoothedSpawners <- genSmooth(
    abund = tbrck_sps$spawners,
    years = tbrck_sps$year,
    genLength = genLength$gen_length[genLength$region == "Northern Transboundary" & genLength$species == "Chinook"]
)

tbrck_sps$smoothedRunsize <- genSmooth(
    abund = tbrck_sps$runsize,
    years = tbrck_sps$year,
    genLength = genLength$gen_length[genLength$region == "Northern Transboundary" & genLength$species == "Chinook"]
)

# Plot abund using ggplot instead of base?

# plot_abund(tbrck_sps)

ggplot(tbrck_sps, aes(x = year)) +
  geom_line(aes(y = spawners/1000, colour = "Spawner"), lwd = 0.5) +
  geom_point(aes(y = spawners/1000, colour = "Spawner"), 
             pch = 21, fill = "white") +
  geom_line(aes(y = runsize/1000, colour = "Total"), lwd = 0.5) +
  geom_point(aes(y = runsize/1000, colour = "Total"), 
             pch = 21, fill = "white") +
  geom_line(aes(y = smoothedRunsize/1000), lwd = 1.2) +
  geom_line(aes(y = smoothedSpawners/1000), 
            lwd = 1.2, colour = grey(0.6)) +
  scale_colour_manual(
    name = NULL,
    values = c(
      "Spawner" = grey(0.7),
      "Total" = "black"
    )
  ) +
  labs(
    title = "Northern Transboundary Chinook",
    y = "Abundance (thousands)"
  ) +
  lims(
    y = c(0, max(c(tbrck_sps$spawners, tbrck_sps$runsize), 
                 na.rm = TRUE)/1000)
  ) +
  theme_minimal() +
  theme(
    legend.position = c(0.98, 0.98),
    legend.justification = c("right", "top")
  )
**Above:** Spawner abundance (grey) and total abundance (black) of Transboundary chinook salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Above: Spawner abundance (grey) and total abundance (black) of Transboundary chinook salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

# Add to master sps dataframe
sps_data <- rbind(sps_data, tbrck_sps)
**Above:**  Northern Transboundary Chinook salmon (a) spawner abundance and (b) total abundance showing the contributions of the Alsek, Taku, and Stikine river basins.

Above: Northern Transboundary Chinook salmon (a) spawner abundance and (b) total abundance showing the contributions of the Alsek, Taku, and Stikine river basins.

Sockeye

Sockeye spawner abundance and total return were taken from the updated TTC report appendices. Specifically, Stikine sockeye spawner and total abundance were the Escapement/broodstock and Terminal Run, respectively, summed across the Stikine River (Appendix B26) and the Taku River (Appendix D17).

# TBR Sockeye data are the sum of the Stikine (Appendix B26) and Taku (Appendix D17) 
# In 2024, the Appendix numbers given were B21 and D15 respectively, but that's changed.
tbrse_stik <- read.csv(here('data/tbr_sockeye_appendixB26.csv'))
tbrse_taku <- read.csv(here('data/tbr_sockeye_appendixD17.csv'))

# Remove Stikine data prior to 1984
tbrse_stik <- subset(tbrse_stik, tbrse_stik$Year >= 1984)

# Reformat data for SPS
tbrse_sps <- data.frame(
    region = rep("Northern Transboundary", dim(tbrse_stik)[1]),
    species = rep("Sockeye", dim(tbrse_stik)[1]),
    year = tbrse_stik$Year,
    spawners = tbrse_stik$StikineRiver_EscapementBroodstock + tbrse_taku$Escapement, 
    smoothedSpawners = NA,
    runsize = tbrse_stik$StikineRiver_TerminalRun + tbrse_taku$Run,
    smoothedRunsize = NA, 
    source_id = rep("Foos_20250415", dim(tbrse_stik)[1])
) 

# Smoothing
tbrse_sps$smoothedSpawners <- genSmooth(
    abund = tbrse_sps$spawners,
    years = tbrse_sps$year,
    genLength = genLength$gen_length[genLength$region == "Northern Transboundary" & genLength$species == "Sockeye"]
)

tbrse_sps$smoothedRunsize <- genSmooth(
    abund = tbrse_sps$runsize,
    years = tbrse_sps$year,
    genLength = genLength$gen_length[genLength$region == "Northern Transboundary" & genLength$species == "Sockeye"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, tbrse_sps)

# Generate standard plot
plot_abund(tbrse_sps)
**Above:** Spawner abundance (grey) and total abundance (black) of Transboundary sockeye salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Above: Spawner abundance (grey) and total abundance (black) of Transboundary sockeye salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

**Above:** Sockeye salmon spawner abundance (top) and total abundance (bottom) in the Taku and Stikine river basins. We report regional abundance only from 1984 onwards when data for both rivers are available; prior to 1984, only dat for the Stikine are available.

Above: Sockeye salmon spawner abundance (top) and total abundance (bottom) in the Taku and Stikine river basins. We report regional abundance only from 1984 onwards when data for both rivers are available; prior to 1984, only dat for the Stikine are available.

Coho

Coho spawner abundance and total abundance are available for the Taku River only, taken from Appendix D22 (Escapement and Terminal Run respectively) of the TTC updated report appendices.

# Load data ---

tbrco <- read.csv(here('data/tbr_coho_appendixD22.csv'))

# Check if years are continuous
#unique(diff(tbrco$Year)) # Yes, all one year apart

# Reformat data for SPS
tbrco_sps <- data.frame(
    region = rep("Northern Transboundary", dim(tbrco)[1]),
    species = rep("Coho", dim(tbrco)[1]),
    year = tbrco$Year,
    spawners = tbrco$Escapement, 
    smoothedSpawners = NA,
    runsize = tbrco$TerminalRun,
    smoothedRunsize = NA,
    source_id = rep("Foos_20250415", dim(tbrco)[1])
) 

# Smoothing
tbrco_sps$smoothedSpawners <- genSmooth(
    abund = tbrco_sps$spawners,
    years = tbrco_sps$year,
    genLength = genLength$gen_length[genLength$region == "Northern Transboundary" & genLength$species == "Coho"]
)

tbrco_sps$smoothedRunsize <- genSmooth(
    abund = tbrco_sps$runsize,
    years = tbrco_sps$year,
    genLength = genLength$gen_length[genLength$region == "Northern Transboundary" & genLength$species == "Coho"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, tbrco_sps)

# Generate standard plot
plot_abund(tbrco_sps, red_points = "App D22 Total run")
points(x=tbrco$Year, y=tbrco$TotalRun/1000, col=2, pch = 19, cex = 0.6, xpd = NA)
**Above:** Spawner abundance (grey) and total abundance (black) of Transboundary coho salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each. We used terminal run as the total abundance, but total run (including US fisheries outside of District 111) is shown as red points (not available for 2025).

Above: Spawner abundance (grey) and total abundance (black) of Transboundary coho salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each. We used terminal run as the total abundance, but total run (including US fisheries outside of District 111) is shown as red points (not available for 2025).

Chum, pink, and steelhead

Monitoring of chum salmon, pink salmon, and steelhead in the Transboundary region is limited, and the best available information is the Canyon Island fish wheel on the Taku River. Data from the fish wheel are reported in the annual Transboundary Technical Committee reports. The window of operation, number of operating days, and hours of operation have varied from year to year, and thus the raw counts are not a reliable index of abundance through time. For example, fish wheel operation decreased from 24 hours to 16 hours per day in 2018 and further to 8 hours a day in 2023 (Transboundary Technical Committee 2025).

appD24 <- read_xlsx(here("data/2025 PSF Pacific Salmon Explorer Data.xlsx"), sheet = "TAK Appen D.24", range = "A8:P50")

# Calculate annual operating days
z <- strsplit(appD24$Operation, split = "-")
operationDates <- data.frame(
    Year = appD24$Year,
    startDate = NA,
    endDate = NA
)
ny <- length(appD24$Year)

for(i in 1:ny){
    operationDates$startDate[i] <- as.Date(paste0(z[[i]][1], "/", operationDates$Year[i]), format = "%m/%d/%Y")
    operationDates$endDate[i] <- as.Date(paste0(z[[i]][2], "/", operationDates$Year[i]), format = "%m/%d/%Y")
}

operationDates$nDays <- operationDates$endDate - operationDates$startDate + 1
operationDates$startDate <- as.Date(operationDates$startDate, origin = "1970-01-01")
operationDates$endDate <- as.Date(operationDates$endDate, origin = "1970-01-01")

operationDates$startMonth <- as.numeric(strftime(operationDates$startDate, format = "%m"))
operationDates$startDay <- as.numeric(strftime(operationDates$startDate, format = "%d"))
operationDates$endMonth <- as.numeric(strftime(operationDates$endDate, format = "%m"))
operationDates$endDay <- as.numeric(strftime(operationDates$endDate, format = "%d"))

par(mfrow = c(2,1), mar = c(3,4,1,4), oma = c(0,0,2,0))
plot(range(operationDates$Year), as.Date(c("2000-04-01", "2000-10-31")), "n", xlab= "", ylab = "Operating window", las = 1, bty = "l")
abline(h = as.Date(paste(rep(2000, 8), c(4:11), rep(1, 8), sep = "-")), lty = 2)
for(i in 1:ny){
    segments(x0 = operationDates$Year[i],
                     x1 = operationDates$Year[i],
                     y0 = as.Date(paste(2000, operationDates$startMonth[i], operationDates$startDay[i], sep = "-")),
                     y1 = as.Date(paste(2000, operationDates$endMonth[i], operationDates$endDay[i], sep = "-")),
                     lwd = 5, lend = 1)
}
mtext(side = 3, line = 0.5, adj = 0, "a)")

plot(operationDates$Year, operationDates$nDays, "o", pch = 21, bg = 'white', ylab = "Number of operating days", xlab = "", las = 1, bty = "l")      
par(new = TRUE)
plot(appD24$Year, appD24$hours, "l", col = 2, xaxt = "n", yaxt = "n", xlab = "", ylab = "", lwd = 2)
axis(side = 4, col = 2, las = 1)
mtext(side = 3, line = 0.5, adj = 0, "b)")

mtext(side = 3, outer= TRUE, "Canyon Island Fish Wheel Operation")
mtext(side = 4, "Operating hours per day", col = 2, line = 2.5)
**Above:**  Operation of the Canyon Island fish wheel on th Taku River from 1982 to 2025: a) Operating window each year occurred between April and October. (b) Total number of operating days varied between 73 and 172 with an average of 138.8, while the hours of operation each day decreased from 24 (1982-2017) to 16 (2018-2022) to 8 (2023-2025).

Above: Operation of the Canyon Island fish wheel on th Taku River from 1982 to 2025: a) Operating window each year occurred between April and October. (b) Total number of operating days varied between 73 and 172 with an average of 138.8, while the hours of operation each day decreased from 24 (1982-2017) to 16 (2018-2022) to 8 (2023-2025).

To account for changes in fish wheel operation through time we calculate an index of abundance for chum, pink, and steelhead as the annual catch per unit effort (CPUE) multiplied by the average effort across all years. Catch per unit effort (CPUE) is calculated each year as the raw count \(C_t\) divided by the operating days: \[ \text{CPUE }_t = \frac{C_{t}}{d_t \times h_t/24} \] where \(d_t\) is the number of operating days in year \(t\) and \(h_t\) is the operating hours per day. The resulting index of abundance was used as the spawner abundance for the regional population.

Pink
# Check if years are continuous
#unique(diff(tbrpk$Year)) # Yes, all one year apart

# Reformat data for SPS
tbrpk_sps <- data.frame(
    region = rep("Northern Transboundary", nrow(tbr_cmpksh)), 
    species = rep("Pink", nrow(tbr_cmpksh)), 
    year = tbr_cmpksh$Year, 
    spawners = tbr_cmpksh$pink_adj,
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep("Foos_20260708", nrow(tbr_cmpksh))
) 
# Smoothing
tbrpk_sps$smoothedSpawners <- genSmooth(
    abund = tbrpk_sps$spawners,
    years = tbrpk_sps$year,
    genLength = genLength$gen_length[genLength$region == "Northern Transboundary" & genLength$species == "Pink"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, tbrpk_sps)

# Generate standard plot
plot_abund(tbrpk_sps, red_points = "Raw fish wheel count")
points(tbr_cmpksh$Year, tbr_cmpksh$pink_raw*10^-3, col = 2, pch = 19, cex = 0.6)
**Above:** Spawner abundance of Transboundary pink salmon. The annual spawner abundance is shown by points and the smoothed metric by solid lines. The small red points are the raw counts from the Canyon Island fish wheel prior to adjusting by CPUE. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of Transboundary pink salmon. The annual spawner abundance is shown by points and the smoothed metric by solid lines. The small red points are the raw counts from the Canyon Island fish wheel prior to adjusting by CPUE. Dashed horizonal lines represent the long-term average.

Chum
# Reformat data for SPS
tbrcm_sps <- data.frame(
    region = rep("Northern Transboundary", nrow(tbr_cmpksh)), 
    species = rep("Chum", nrow(tbr_cmpksh)), 
    year = tbr_cmpksh$Year, 
    spawners = tbr_cmpksh$chum_adj, 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep("Foos_20260708", nrow(tbr_cmpksh))
) 
# Smoothing
tbrcm_sps$smoothedSpawners <- genSmooth(
    abund = tbrcm_sps$spawners,
    years = tbrcm_sps$year,
    genLength = genLength$gen_length[genLength$region == "Northern Transboundary" & genLength$species == "Chum"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, tbrcm_sps)

# Generate standard plot
plot_abund(tbrcm_sps, red_points = "Raw fish wheel count")
points(tbr_cmpksh$Year, tbr_cmpksh$chum_raw*10^-3, col = 2, pch = 19, cex = 0.6)
**Above:** Spawner abundance of Transboundary chum salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of Transboundary chum salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Steelhead

Steelhead trout have also been enumerated at the Canyon Island fish wheel since 1987, though in past versions of datasets estimates have been patchy and the timing of the fish wheel likely misses a substantial portion of the Taku summer run steelhead. Thus, we have not previously used the Canyon Island counts. However, the 2026 dataset included a more complete time series for Steelhead and we were able to adjust for changes in fish wheel operation as described above.

# Reformat data for SPS
tbrsh_sps <- data.frame(
    region = rep("Northern Transboundary", nrow(tbr_cmpksh)), 
    species = rep("Steelhead", nrow(tbr_cmpksh)), 
    year = tbr_cmpksh$Year, 
    spawners = tbr_cmpksh$steelhead_adj, 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep("Foos_20260708", nrow(tbr_cmpksh))
) %>% filter(year > 1986) # Take out early years with no steelhead data

# Smoothing
tbrsh_sps$smoothedSpawners <- genSmooth(
    abund = tbrsh_sps$spawners,
    years = tbrsh_sps$year,
    genLength = genLength$gen_length[genLength$region == "Northern Transboundary" & genLength$species == "Steelhead"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, tbrsh_sps)

# Generate standard plot
plot_abund(tbrsh_sps, red_points = "Raw fish wheel count")
points(tbr_cmpksh$Year, tbr_cmpksh$steelhead_raw*10^-3, col = 2, pch = 19, cex = 0.6)
**Above:** Spawner abundance of Transboundary steelhead. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average. Red points show the raw fish wheel counts, which were used to calculate an index of abundance based on CPUE.

Above: Spawner abundance of Transboundary steelhead. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average. Red points show the raw fish wheel counts, which were used to calculate an index of abundance based on CPUE.

2.2.3 Haida Gwaii

Chinook

The only available data for Chinook salmon in Haida Gwaii are from a single enumeration project on the Yakoun River. Monitoring on the Yakoun was restored in 2021. An automatic sonar device enumerates migrating Chinook, and the counts are verified using manually operated nets. Data were provided by Mark Spoljaric, Haida Nation.

Estimates prior to 2006 were from DFO spawner surveys, and the two time series are believed to be comparable. Old estimates (prior to 2006) also match the estimated escapement to Area 1 in the Northern Boundary Technical Committee (2023) (Appendix 30).

# Get spawner survey data to compare
hgck_ss <- read.csv(here("data/spawner_surveys.csv")) %>%
    subset(species_name == "Chinook" & region == "Haida Gwaii") %>%
    subset(stream_name_pse == "YAKOUN RIVER")

hgck <- read.csv(here("data/Yakoun_Chinook_1952-2025.csv"))

# There are some missing years of data; want to impute in between when smoothing
#diff(hgck$year)
hgck_years <- min(hgck$year):max(hgck$year)

# Reformat data for SPS
hgck_sps <- data.frame(
    region = rep("Haida Gwaii", length(hgck_years)),
    species = rep("Chinook", length(hgck_years)),
    year = hgck_years,
    spawners = hgck$stream_observed_count[match(hgck_years, hgck$year)], 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = c(rep(hgck$source_id[1], length(hgck_years[1]:2020)), 
                                rep(hgck$source_id[nrow(hgck)], length(2021:2025)))
) 



# Smoothing
hgck_sps$smoothedSpawners <- genSmooth(
    abund = hgck_sps$spawners,
    years = hgck_sps$year,
    genLength = genLength$gen_length[genLength$region == "Haida Gwaii" & genLength$species == "Chinook"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, hgck_sps)

# Generate standard plot
plot_abund(hgck_sps)
points(hgck_ss$year, hgck_ss$stream_observed_count/1000, col="purple")
**Above:** Spawner abundance of Haida Gwaii chinook salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average. here, purple points are from NuSEDS spawner surveys and grey are from recent enumeration project.

Above: Spawner abundance of Haida Gwaii chinook salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average. here, purple points are from NuSEDS spawner surveys and grey are from recent enumeration project.

Chum

For chum, coho, pink, and sockeye in Haida Gwaii, we followed the Expansion Factors approach described below. The full list of indicator streams used for this expansion are in the table below. We compared our expansion approach to estimates of Area 1 escapement as reported in the Northern Boundary Technical Committee (2023) (Appendix 30), but found the Area 1 estimates were much lower for chum (see “alternate” series in figure below).

# Load data ---
region_spawners <- sp <- readRDS(here("output/expanded-spawners/Haida Gwaii-spawners.rds"))
yrs <- as.numeric(dimnames(sp)[[3]])
expansion_factors <- readRDS(here("output/expanded-spawners/Haida Gwaii-expansion-factors.rds"))

# PSC Northern Boundary data (Appendix 30) for comparison 
hg_table30 <- read.csv(here("data/TCNB-23-01_Table30_Area1escapement.csv"))
names(hg_table30) <- c("year", "Sockeye", "Coho", "Pink", "Chum", "Chinook") # Change names to be consistent with species
# Data loaded above
hg.s <- sp[2, "Chum", ]

# Reformat data for SPS
hg.s_sps <- data.frame(
    region = rep("Haida Gwaii", length(hg.s)),
    species = rep("Chum", length(hg.s)),
    year = as.numeric(names(hg.s)),
    spawners = as.numeric(hg.s), 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(nuseds_id, length(hg.s))
) 

# Smoothing
hg.s_sps$smoothedSpawners <- genSmooth(
    abund = hg.s_sps$spawners,
    years = hg.s_sps$year,
    genLength = genLength$gen_length[genLength$region == "Haida Gwaii" & genLength$species == "Chum"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, hg.s_sps)

# Generate standard figure
plot_abund(hg.s_sps)
**Above:**  Spawner abundance of Haida Gwaii chum salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of Haida Gwaii chum salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

# Additional series to plot
added_series.s <- hg_table30 %>% 
        select(year, "Chum") %>%
        rename("value" = "Chum")
    
# Expansion plot(s)
plot_expansions(speciesname = "Chum",
                                regionname = "Haida Gwaii",
                                region_spawners = region_spawners,
                                expansion_factors = expansion_factors,
                                added_series = added_series.s)
**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (purple) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. Alternative time series from the PSC's Northern Boundary Technical Committee Report (Appendix 30) is shown in blue. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade. See section on Expansion Factors below for further details.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (purple) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. Alternative time series from the PSC’s Northern Boundary Technical Committee Report (Appendix 30) is shown in blue. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade. See section on Expansion Factors below for further details.

Chum indicator streams (n = 80)
Ain River Dana Creek #1 Inskip Creek Mud Bay Creek Saltspring Bay Creek
Anna Inlet Creek Dana Creek #2 Island Bay Creeks-R/H Mudge Creek Sandy Creek
Awun River Dana Creek #3 Kano Inlet Head Creek Naden River Security Inlet Creek-L/H
Bag Harbour Creek Dawson Harbour Creek Kootenay Inlet North Arm Creek North Arm Creek-Rh Security Inlet Creek-R/H
Big Goose Creek Dawson Inlet Creek Kootenay Inlet South Arm Creek North Arm Head Creek Sedgwick Bay Creek
Botany Inlet Creek-Head Deena Creek Kostan Creek Oxalis Creek Skaat Harbour Creek-L/H
Botany Inlet Creek-Outer East Narrows Creek Lagins Creek Pacofi Creek Slatechuck Creek
Bottle Inlet Creek Fairfax Creek Lagoon Creek Pallant Creek Sleeping Beauty Creek
Browns Cabin Creek Fairfax Inlet Creek-Outer Little Goose Creek Peel Inlet Creek-L/H #1 Stanley Creek
Buck Channel Creek #3 Flat Creek Louscoone Inlet Creek Peel Inlet Creek-L/H #2 Tangle Cove Creek
Canoe Pass Creek George Bay Creek Mace Creek Peel Inlet Head Creek Tasu Creek
Carmichael Creek Gold Harbour Creek Matheson Creek-L/H Powrivco Creek Thorsen Creek
Chadsey Creek Goski Bay Creek Matheson Creek-R/H Rennell Creek Thurston Harbour Creek
Clapp Basin Creek Hutton Creek-Head Mckenzie Cove Creek Richardson Creek Waterfall Creek
Clint Creek Hutton Creek-L/H Mercer Creek Rockrun Creek Wilson Bay Creek
Crescent Inlet Creek Indian Cabin Creek Mountain Creek Salmon River Yakulanas Creek

Coho

For chum, coho, pink, and sockeye in Haida Gwaii, we followed the Expansion Factors approach described below. The full list of indicator streams used for this expansion are in the table below. We compared our expansion approach to estimates of escapement to Area 1 reported in the Northern Boundary Technical Committee (2023) (Appendix 30) but found the Area 1 estimates were much lower for coho.

# Data loaded above
hg.s <- sp[2, "Coho", ]

# Reformat data for SPS
hg.s_sps <- data.frame(
    region = rep("Haida Gwaii", length(hg.s)),
    species = rep("Coho", length(hg.s)),
    year = as.numeric(names(hg.s)),
    spawners = as.numeric(hg.s), 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(nuseds_id, length(hg.s))
) 

# Smoothing
hg.s_sps$smoothedSpawners <- genSmooth(
    abund = hg.s_sps$spawners,
    years = hg.s_sps$year,
    genLength = genLength$gen_length[genLength$region == "Haida Gwaii" & genLength$species == "Coho"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, hg.s_sps)

# Generate standard figure
plot_abund(hg.s_sps)
**Above:**  Spawner abundance of Haida Gwaii coho salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of Haida Gwaii coho salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

# Additional series to plot
added_series.s <- hg_table30 %>% 
        select(year, "Coho") %>%
        rename("value" = "Coho")
    
# Expansion plot(s)
plot_expansions(speciesname = "Coho",
                                regionname = "Haida Gwaii",
                                region_spawners = region_spawners,
                                expansion_factors = expansion_factors,
                                added_series = added_series.s)
**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (purple) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. Alternative time series from the PSC's Northern Boundary Technical Committee Report (Appendix 30) is shown in blue. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade. See section on Expansion Factors below for further details.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (purple) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. Alternative time series from the PSC’s Northern Boundary Technical Committee Report (Appendix 30) is shown in blue. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade. See section on Expansion Factors below for further details.

Coho indicator streams (n = 9)
Botany Inlet Creek-Head Dawson Harbour Creek Lagoon Creek
Botany Inlet Creek-Outer Deena Creek Pallant Creek
Crescent Inlet Creek Lagins Creek Tlell River

Pink

For chum, coho, pink, and sockeye in Haida Gwaii, we followed the Expansion Factors approach described below. The full list of indicator streams used for this expansion are in the table below. We compared our expansion approach to estimates of Area 1 escapement as reported in the Northern Boundary Technical Committee (2023) (Appendix 30), but found the Area 1 estimates were much lower for pink (see “alternate” series in figure below).

# Data loaded above
hg.s <- sp[2, "Pink", ]

# Reformat data for SPS
hg.s_sps <- data.frame(
    region = rep("Haida Gwaii", length(hg.s)),
    species = rep("Pink", length(hg.s)),
    year = as.numeric(names(hg.s)),
    spawners = as.numeric(hg.s), 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(nuseds_id, length(hg.s))
) 

# Smoothing
hg.s_sps$smoothedSpawners <- genSmooth(
    abund = hg.s_sps$spawners,
    years = hg.s_sps$year,
    genLength = genLength$gen_length[genLength$region == "Haida Gwaii" & genLength$species == "Pink"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, hg.s_sps)

# Generate standard figure
plot_abund(hg.s_sps)
**Above:**  Spawner abundance of Haida Gwaii pink salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of Haida Gwaii pink salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

# Additional series to plot
added_series.s <- hg_table30 %>% 
        select(year, "Pink") %>%
        rename("value" = "Pink")
    
# Expansion plot(s)
plot_expansions(speciesname = "Pink",
                                regionname = "Haida Gwaii",
                                region_spawners = region_spawners,
                                expansion_factors = expansion_factors,
                                added_series = added_series.s)
**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (purple) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. Alternative time series from the PSC's Northern Boundary Technical Committee Report (Appendix 30) is shown in blue. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade. See section on Expansion Factors below for further details.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (purple) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. Alternative time series from the PSC’s Northern Boundary Technical Committee Report (Appendix 30) is shown in blue. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade. See section on Expansion Factors below for further details.

Pink indicator streams (n = 42)
Ain River Echo Harbour Creek Matheson Creek-R/H Security Inlet Creek-R/H
Big Goose Creek Gate Creek Mckenzie Cove Creek Skedans Creek
Bonanza Creek Gregory Creek Naden River Slatechuck Creek
Boomchain Bay Creek Honna River Pacofi Creek Tarundl Creek
Browns Cabin Creek Kano Inlet Head Creek Pallant Creek Tasu Creek
Chadsey Creek Lagins Creek Peel Inlet Creek-L/H #2 Thorsen Creek
Copper Creek Lignite Creek Riley Creek Tlell River
Crescent Inlet Creek Little Goose Creek Sachs Creek Windy Bay Creek
Datlamen Creek Mamin River Salmon River Yakoun River
Davidson Creek Mathers Creek Seal Inlet Creek
Deena Creek Matheson Creek-L/H Security Inlet Creek-L/H

Sockeye

For chum, coho, pink, and sockeye in Haida Gwaii, we followed the Expansion Factors approach described below. The full list of indicator streams used for this expansion are in the table below. We compared our expansion approach to estimates of Area 1 escapement as reported in the Northern Boundary Technical Committee (2023) (Appendix 30), but found the Area 1 estimates were much lower for sockeye (see “alternate” series in figure below).

# Data loaded above
hg.s <- sp[2, "Sockeye", ]

# Reformat data for SPS
hg.s_sps <- data.frame(
    region = rep("Haida Gwaii", length(hg.s)),
    species = rep("Sockeye", length(hg.s)),
    year = as.numeric(names(hg.s)),
    spawners = as.numeric(hg.s), 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(nuseds_id, length(hg.s))
) 

# Smoothing
hg.s_sps$smoothedSpawners <- genSmooth(
    abund = hg.s_sps$spawners,
    years = hg.s_sps$year,
    genLength = genLength$gen_length[genLength$region == "Haida Gwaii" & genLength$species == "Sockeye"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, hg.s_sps)

# Generate standard figure
plot_abund(hg.s_sps)
**Above:**  Spawner abundance of Haida Gwaii sockeye salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of Haida Gwaii sockeye salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

# Additional series to plot
added_series.s <- hg_table30 %>% 
        select(year, "Sockeye") %>%
        rename("value" = "Sockeye")
    
# Expansion plot(s)
plot_expansions(speciesname = "Sockeye",
                                regionname = "Haida Gwaii",
                                region_spawners = region_spawners,
                                expansion_factors = expansion_factors,
                                added_series = added_series.s)
**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (purple) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. Alternative time series from the PSC's Northern Boundary Technical Committee Report (Appendix 30) is shown in blue. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade. See section on Expansion Factors below for further details.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (purple) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. Alternative time series from the PSC’s Northern Boundary Technical Committee Report (Appendix 30) is shown in blue. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade. See section on Expansion Factors below for further details.

Sockeye indicator streams (n = 6)
Awun River Mercer Creek
Copper Creek Naden River
Mathers Creek Yakoun River

2.2.4 Nass

Chinook

We use data from the PSC’s Chinook Technical Committee (CTC) data sets for both spawners and total abundance. Specifically, we use Esc and t.run respectively of Nass River (Area 3) escapement and terminal run provided in Table B3 of Appendix B - Detailed Escapement, available as a downloadable dataset from the Chinook Technical Committee.

We compare these data below to estimates of spawners (purple open circles) and total run (blue open circles) to 2025 from the 2025 Nass River Salmon Stock Assessment Post-Season Summary published by the Nisga’a nation, Tables 20 and 22. The escapement estimates correspond closely, though less so in 2018 and 2022. The ‘Total run’ data from the Nisga’a report is typically higher than ‘t.run’ from the CTC dataset, and may include more marine catch than CTC estimates.

# Load data ---
# TCCHINOOK Table B3
nass_ctc <- readxl::read_xlsx(here("data/TCCHINOOK-26-03-Appendix-B-Escapement-Detailed.xlsx"), sheet = "B3", range = "A5:D55", col_types = "numeric", col_names = c("Year", "Above_Gitwinksihlkw2", "Esc", "t.run"))

# Nisgaa data for comparison
nass_nisgaa <- read.csv(here("data/2025NassStockAssessment_Table20+22.csv"))

# Reformat data for SPS
nassck_sps <- data.frame(
    region = rep("Nass", length(nass_ctc$Year)),
    species = rep("Chinook", length(nass_ctc$Year)),
    year = nass_ctc$Year,
    spawners = nass_ctc$Esc, 
    smoothedSpawners = NA,
    runsize = nass_ctc$t.run,
    smoothedRunsize = NA,
    source_id = rep(ctc_id, length(nass_ctc$Year))
) 

# Smoothing
nassck_sps$smoothedSpawners <- genSmooth(
    abund = nassck_sps$spawners,
    years = nassck_sps$year,
    genLength = genLength$gen_length[genLength$region == "Nass" & genLength$species == "Chinook"]
)

nassck_sps$smoothedRunsize <- genSmooth(
    abund = nassck_sps$runsize,
    years = nassck_sps$year,
    genLength = genLength$gen_length[genLength$region == "Nass" & genLength$species == "Chinook"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, nassck_sps)

# Generate standard plot
plot_abund(nassck_sps)
points(x=nass_nisgaa$Year, y=nass_nisgaa$ESC_Chinook/1000, col="purple")
points(x=nass_nisgaa$Year, y=nass_nisgaa$TOTAL_RUN_Chinook/1000, col="blue") # Big difference! 
**Above:** Spawner abundance (grey) and total abundance (black) of Nass chinook salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Above: Spawner abundance (grey) and total abundance (black) of Nass chinook salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Sockeye

Nass sockeye escapement and total return were derived from the Northern Boundary Sockeye Run Reconstruction (NBSRR) Model that estimates total escapement and total return for the Skeena and Nass Rivers (English et al. 2004; English et al. 2017). Specifically, we used fields TE (Total Escapement) and Total run for Area 3 sockeye from the 2022 update to the North and Central Coast (NCC) Salmon Database Version 2, maintained by LGL Ltd. with support from PSF (Challenger et al. 2018; English et al. 2018). For 2023-2025, we obtained the same model output from Nisga’a Fisheries and Wildlife Department (2024). As can be seen in the figure below, historical numbers from these two sources closely matched, giving us confidence that it was justifiable to combine the two sources.

# Load Nisgaa data
nass_nisgaa <- read.csv(here("data/2025NassStockAssessment_Table20+22.csv"))

# use NBSRR data provided by LGL up to 2022 and Nisga'a Post-season for 2023, 2024
nassse <- read.csv(here("data/nassskeena_sockeye_lgl.csv")) %>%
    subset(Region == "Nass") %>%
    mutate(source_id = "English_20230930") %>%
    bind_rows(
        data.frame(Year = c(2023:2025),
                             TE = nass_nisgaa$ESC_Sockeye[nass_nisgaa$Year %in% c(2023:2025)],
                             Total.Run = nass_nisgaa$TOTAL_RUN_Sockeye[nass_nisgaa$Year %in% c(2023:2025)],
                             source_id = rep("Nisgaa_20251202", 3)
        )
    )


# Reformat data for SPS
nassse_sps <- data.frame(
    region = rep("Nass", dim(nassse)[1]),
    species = rep("Sockeye", dim(nassse)[1]),
    year = nassse$Year,
    spawners = nassse$TE, 
    smoothedSpawners = NA,
    runsize = nassse$Total.Run,
    smoothedRunsize = NA, 
    source_id = nassse$source_id
) 

# Smoothing
nassse_sps$smoothedSpawners <- genSmooth(
    abund = nassse_sps$spawners,
    years = nassse_sps$year,
    genLength = genLength$gen_length[genLength$region == "Nass" & genLength$species == "Sockeye"]
)

nassse_sps$smoothedRunsize <- genSmooth(
    abund = nassse_sps$runsize,
    years = nassse_sps$year,
    genLength = genLength$gen_length[genLength$region == "Nass" & genLength$species == "Sockeye"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, nassse_sps)

# Generate standard plot 
plot_abund(nassse_sps)
# Add Nisgaa estimates 
points(x=nass_nisgaa$Year, y=nass_nisgaa$ESC_Sockeye/1000, col="purple")
points(x=nass_nisgaa$Year, y=nass_nisgaa$TOTAL_RUN_Sockeye/1000, col="blue")
**Above:** Spawner abundance (grey) and total abundance (black) of Nass sockeye salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Above: Spawner abundance (grey) and total abundance (black) of Nass sockeye salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Coho

Nass coho escapement and total return were available from the Nisga’a Fisheries and Wildlife Department (Nisga’a Fisheries and Wildlife Department (2024)) for 1992 to 2024. These data closely matched previous estimates from English et al. (2023) used in the 2024 report. Spawner surveys in NuSEDS tended to generally underestimate spawner abundance to the region, and were not used because other data were available.

# Reformat data for SPS
nassco_sps <- data.frame(
    region = rep("Nass", length(nass_nisgaa$Year)),
    species = rep("Coho", length(nass_nisgaa$Year)),
    year = nass_nisgaa$Year,
    spawners = nass_nisgaa$ESC_Coho, 
    smoothedSpawners = NA,
    runsize = nass_nisgaa$TOTAL_RUN_Coho,
    smoothedRunsize = NA,
    source_id = rep("Nisgaa_20251202",length(nass_nisgaa$Year))
) 

# Smoothing
nassco_sps$smoothedSpawners <- genSmooth(
    abund = nassco_sps$spawners,
    years = nassco_sps$year,
    genLength = genLength$gen_length[genLength$region == "Nass" & genLength$species == "Coho"]
)

nassco_sps$smoothedRunsize <- genSmooth(
    abund = nassco_sps$runsize,
    years = nassco_sps$year,
    genLength = genLength$gen_length[genLength$region == "Nass" & genLength$species == "Coho"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, nassco_sps)

# Generate standard plot
plot_abund(nassco_sps)
**Above:** Spawner abundance (grey) and total abundance (black) of Nass coho salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Above: Spawner abundance (grey) and total abundance (black) of Nass coho salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Chum

Chum salmon spawner abundances were expanded from available spawner surveys from 1950 to 1991, as described below in Expansion Factors. The full list of indicator streams used for this expansion are in the table below. Note that the designation of indicator streams for the Nass region was based on English et al. (2018) rather than the indicator designation in NuSEDS. From 1992 to 2025, estimates of spawner and total abundance were provided in the 2025 post-season report from the Nisga’a Fisheries and Wildlife Department (2025b).

# Load data ---
# Use expanded spawner abundance to 1991 then Nisga'a final report data
region_spawners <- sp <- readRDS(here("output/expanded-spawners/Nass-spawners.rds"))
yrs <- as.numeric(dimnames(sp)[[3]])
expansion_factors <- readRDS(here("output/expanded-spawners/Nass-expansion-factors.rds"))
nasscm <- data.frame(
    year = c(yrs),
    esc = c(round(sp["expanded", "Chum", which(yrs %in% c(1950:1991))]), nass_nisgaa$ESC_Chum),
    run = c(rep(NA, length(c(1950:1991))), nass_nisgaa$TOTAL_RUN_Chum),
    source_id = c(rep(nuseds_id, length(c(1950:1991))), rep("Nisgaa_20251202", length(nass_nisgaa$TOTAL_RUN_Chum)))
)

# Reformat data for SPS
nasscm_sps <- data.frame(
    region = rep("Nass", length(nasscm$year)),
    species = rep("Chum", length(nasscm$year)),
    year = nasscm$year,
    spawners = nasscm$esc,
    smoothedSpawners = NA,
    runsize = nasscm$run,
    smoothedRunsize = NA,
    source_id = nasscm$source_id
)

# Smoothing
nasscm_sps$smoothedSpawners <- genSmooth(
    abund = nasscm_sps$spawners,
    years = nasscm_sps$year,
    genLength = genLength$gen_length[genLength$region == "Nass" & genLength$species == "Chum"]
)

nasscm_sps$smoothedRunsize <- genSmooth(
    abund = nasscm_sps$runsize,
    years = nasscm_sps$year,
    genLength = genLength$gen_length[genLength$region == "Nass" & genLength$species == "Chum"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, nasscm_sps)
    
#Generate standard figure
plot_abund(nasscm_sps)
**Above:** Spawner abundance (grey) and total abundance (black) of Nass chum salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Above: Spawner abundance (grey) and total abundance (black) of Nass chum salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

# Expansion plot(s)
plot_expansions(speciesname = "Chum",
                                regionname = "Nass",
                                region_spawners = region_spawners,
                                expansion_factors = expansion_factors)
**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (purple) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. Alternative time series from the PSC's Northern Boundary Technical Committee Report (Appendix 30) is shown in blue. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade. See section on Expansion Factors below for further details.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (purple) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. Alternative time series from the PSC’s Northern Boundary Technical Committee Report (Appendix 30) is shown in blue. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade. See section on Expansion Factors below for further details.

Chum indicator streams (n = 13)
Ensheshese River Kshwan River Stumaun Creek
Illiance River Ksi Gingolx Toon River
Khutzeymateen River Ksi X’anmas Wilauks Creek
Kitsault River Lachmach River
Ksemamaith Creek Stagoo Creek

Pink

Pink salmon spawner abundances were expanded from available spawner surveys from 1950 to 1991, as described below in Expansion Factors. The full list of indicator streams used for this expansion are in the table below. Note that the designation of indicator streams for the Nass region was based on English et al. (2018) rather than the indicator designation in NuSEDS. From 1992 to 2025, estimates of spawner and total abundance were provided in the 2025 post-season report from the Nisga’a Fisheries and Wildlife Department (2025b).

nasspk <- data.frame(
    year = c(yrs),
    esc = c(round(sp["expanded", "Pink", which(yrs %in% c(1950:1991))]), nass_nisgaa$ESC_Pink),
    run = c(rep(NA, length(c(1950:1991))), nass_nisgaa$TOTAL_RUN_Pink),
    source_id = c(rep(nuseds_id, length(c(1950:1991))), rep("Nisgaa_20251202", length(nass_nisgaa$TOTAL_RUN_Pink)))
)

# Reformat data for SPS
nasspk_sps <- data.frame(
    region = rep("Nass", length(nasspk$year)),
    species = rep("Pink", length(nasspk$year)),
    year = nasspk$year,
    spawners = nasspk$esc,
    smoothedSpawners = NA,
    runsize = nasspk$run,
    smoothedRunsize = NA,
    source_id = nasspk$source_id
)

# Smoothing
nasspk_sps$smoothedSpawners <- genSmooth(
    abund = nasspk_sps$spawners,
    years = nasspk_sps$year,
    genLength = genLength$gen_length[genLength$region == "Nass" & genLength$species == "Pink"]
)

nasspk_sps$smoothedRunsize <- genSmooth(
    abund = nasspk_sps$runsize,
    years = nasspk_sps$year,
    genLength = genLength$gen_length[genLength$region == "Nass" & genLength$species == "Pink"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, nasspk_sps)

# Generate standard figure
plot_abund(nasspk_sps)
**Above:** Spawner abundance (grey) and total abundance (black) of Nass pink salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Above: Spawner abundance (grey) and total abundance (black) of Nass pink salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

# Expansion plot(s)
plot_expansions(speciesname = "Pink",
                                regionname = "Nass",
                                region_spawners = region_spawners,
                                expansion_factors = expansion_factors)
**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (purple) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. Alternative time series from the PSC's Northern Boundary Technical Committee Report (Appendix 30) is shown in blue. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade. See section on Expansion Factors below for further details.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (purple) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. Alternative time series from the PSC’s Northern Boundary Technical Committee Report (Appendix 30) is shown in blue. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade. See section on Expansion Factors below for further details.

Pink indicator streams (n = 21)
Chambers Creek Ksi Gingolx Salmon Cove Creek Tracy Bay Creek #2
Crag Creek Ksi X’anmas Sam Bay Creek Wilauks Creek
Dogfish Creek Lachmach River Stagoo Creek Xnukw
Ensheshese River Lizard Creek Stumaun Creek
Illiance River Manzanita Cove Creek Toon River
Khutzeymateen River Mouse Creek Tracy Bay Creek

Steelhead

The index of Nass steelhead spawner abundance and total return are for the Nass Summer CU, developed in collaboration with the Nisga’a Fisheries and Wildlife Department (2025a) and LGL Ltd. (English et al. (2023)). There is another steelhead CU in the Nass region - Nass Winter - which is not well monitored and therefore not included in our index of spawner abundance.

# Reformat data for SPS
nasssh_sps <- data.frame(
    region = rep("Nass", length(nass_nisgaa$Year)),
    species = rep("Steelhead", length(nass_nisgaa$Year)),
    year = nass_nisgaa$Year,
    spawners = nass_nisgaa$ESC_Steelhead, 
    smoothedSpawners = NA,
    runsize = nass_nisgaa$TOTAL_RUN_Steelhead,
    smoothedRunsize = NA,
    source_id = rep("Nisgaa_20251202",length(nass_nisgaa$Year))
) 

# Smoothing
nasssh_sps$smoothedSpawners <- genSmooth(
    abund = nasssh_sps$spawners,
    years = nasssh_sps$year,
    genLength = genLength$gen_length[genLength$region == "Nass" & genLength$species == "Steelhead"]
)

nasssh_sps$smoothedRunsize <- genSmooth(
    abund = nasssh_sps$runsize,
    years = nasssh_sps$year,
    genLength = genLength$gen_length[genLength$region == "Nass" & genLength$species == "Steelhead"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, nasssh_sps)

# Generate standard figure
plot_abund(nasssh_sps)
**Above:** Spawner abundance (grey) and total abundance (black) of Nass steelhead salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Above: Spawner abundance (grey) and total abundance (black) of Nass steelhead salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

2.2.5 Skeena

Chinook

Chinook spawners were taken from the PSC’s Chinook Technical Committee (CTC) data sets and are reported on in Chinook Technical Committee (2025). Specifically, Skeena River (Area 4) escapement is provided in Table B3 (GSI esc). There is no total return for the Skeena River provided in the CTC data sets.

# Load data ---
# TCCHINOOK Table B3
sk_ctc <- readxl::read_xlsx(here("data/TCCHINOOK-26-03-Appendix-B-Escapement-Detailed.xlsx"), sheet = "B3", range = "A5:G55", col_types = "numeric", col_names = c("Year", "Nass_Above_Gitwinksihlkw2", "Nass_Esc", "Nass_t.run", "Skeena_Total esc.", "Skeena_GSI esc", "Skeena_GSI SD"))

# For comparison: NBTC report (all years included) for escapement - Table 32
skck_nbtc <- read.csv(file=here("data/2026_Skeena_escapement_NBTC_Table32.csv"), na.strings = c("UNK", "UKN")) %>% select(YEAR, CHINOOK)

# Reformat data for SPS
skck_sps <- data.frame(
    region = rep("Skeena", length(sk_ctc$Year)),
    species = rep("Chinook", length(sk_ctc$Year)),
    year = sk_ctc$Year,
    spawners = sk_ctc$`Skeena_GSI esc`, 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(ctc_id, length(sk_ctc$Year))
) 

# Smoothing
skck_sps$smoothedSpawners <- genSmooth(
    abund = skck_sps$spawners,
    years = skck_sps$year,
    genLength = genLength$gen_length[genLength$region == "Skeena" & genLength$species == "Chinook"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, skck_sps)

#Generate standard figure
plot_abund(skck_sps)
**Above:** Spawner abundance of Skeena chinook salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of Skeena chinook salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

#points(x=skck_nbtc$YEAR, y=skck_nbtc$CHINOOK/1000, col="purple")

Sockeye

Skeena sockeye escapement and total return were derived from the Northern Boundary Sockeye Run Reconstruction (NBSRR) model that estimates total escapement and total return for the Skeena and Nass Rivers (English et al. 2004; English et al. 2017). Specifically, we used fields TE (Total Escapement) and Total run for Area 4 sockeye from the 2022 update to the North and Central Coast (NCC) Salmon Database Version 2, maintained by LGL Ltd. with support from PSF (Challenger et al. 2018; English et al. 2018).

For 2023, NBSSR model outputs were provided by Charmaine Carr-Harris (DFO) on request. Data for 2024 are preliminary numbers from Joint Northern Boundary Technical Report (Joint Northern Boundary Technical Committee 2026). Purple open circles show Escapement estimates for 1970-2024 from Table 32 of the Joint Northern Boundary Technical Report (Joint Northern Boundary Technical Committee 2026) and match relatively closely, lending confidence to the combination of these sources.

# Compare to NCC run reconstruction: https://github.com/LGLLimited/nccdbv2/tree/master/run/2022-nass-update/data/KarlEnglish-2023-05-29
skse_LGL <- read.csv(here("data/nassskeena_sockeye_lgl.csv")) %>%
    subset(Region == "Skeena") %>%
    mutate(source_id = "English_20230930")

# From PSC Run Size app:
skse_ch2 <- read.csv(here("data/Chapter2_Data_2025_07_22.csv")) %>%
    filter(Region == "Skeena River") %>%
    mutate(source_id = "PSC_20250722")

# Add 2023 data from Charmaine (pers. comm. July 24 2025)
skse_2023 <- data.frame(
    Year = 2023,
    TE = 1437788,
    catch = 656984
) %>%
    mutate(Total.Run = TE + catch,
    source_id = "CarrHarris_20250724")

# Add 2024 data from Joint Northern Boundary Tech Report
skse_2024 <- data.frame(
    Year = 2024,
    TE = 2683467,
    catch = NA
) %>%
    mutate(Total.Run = 2807467,
    source_id = "NBTC_202602")

# combine sources
skse <- skse_ch2[ , c("Year", "Spawners", "Returns", "source_id")] %>% # Use PSC data
    rename(TE = Spawners,
                 Total.Run  = Returns) %>%
    bind_rows(skse_LGL[which(skse_LGL$Year < 1982), c("Year", "TE", "Total.Run", "source_id")]) %>% # Use LGL data for pre-1982
    bind_rows(skse_2023[ c("Year", "TE", "Total.Run", "source_id")]) %>% # Add 2023 data from Charmaine
    bind_rows(skse_2024[ c("Year", "TE", "Total.Run", "source_id")]) %>% # Add 2024 data from NBTC report
    arrange(Year)


# Alternative source: NBTC report (all years included) for escapement
skse_nbtc <- read.csv(file=here("data/2026_Skeena_escapement_NBTC_Table32.csv"), na.strings = c("UNK", "UKN")) %>% select(YEAR, SOCKEYE)
    
#unique(diff(skse$Year)) # Yes, all one year apart

# Reformat data for SPS
skse_sps <- data.frame(
    region = rep("Skeena", dim(skse)[1]),
    species = rep("Sockeye", dim(skse)[1]),
    year = skse$Year,
    spawners = skse$TE, 
    smoothedSpawners = NA,
    runsize = skse$Total.Run,
    smoothedRunsize = NA,
    source_id = skse$source_id
) 

# Smoothing
skse_sps$smoothedSpawners <- genSmooth(
    abund = skse_sps$spawners,
    years = skse_sps$year,
    genLength = genLength$gen_length[genLength$region == "Skeena" & genLength$species == "Sockeye"]
)

skse_sps$smoothedRunsize <- genSmooth(
    abund = skse_sps$runsize,
    years = skse_sps$year,
    genLength = genLength$gen_length[genLength$region == "Skeena" & genLength$species == "Sockeye"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, skse_sps)

# Generate standard figure 
plot_abund(skse_sps)
points(x=skse_nbtc$YEAR, y=skse_nbtc$SOCKEYE/1000, col="purple")
**Above:** Spawner abundance (grey) and total abundance (black) of Skeena sockeye salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Above: Spawner abundance (grey) and total abundance (black) of Skeena sockeye salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Steelhead

The index of Skeena steelhead spawner abundance is derived from estimated escapement of Skeena Summer steelhead at the Tyee Test Fishery (1956 - present), provided by email by Kenji Miyazaki at the B.C. Ministry of Water, Land and Resource Stewardship. As in other regions, these estimates may not capture winter-run steelhead, for which data are not available.

# Load data ---
# Use Skeena steelhead run size from BC Updates
sksh <- read.csv(here("data/SkeenaSteelhead_1956-2025.csv"))


# Reformat data for SPS
sksh_sps <- data.frame(
    region = rep("Skeena", dim(sksh)[1]),
    species = rep("Steelhead", dim(sksh)[1]),
    year = sksh$Year,
    spawners = sksh$TyeeEscapement, 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = "ProvBC_20250903"
) 

# Smoothing
sksh_sps$smoothedSpawners <- genSmooth(
    abund = sksh_sps$spawners,
    years = sksh_sps$year,
    genLength = genLength$gen_length[genLength$region == "Skeena" & genLength$species == "Steelhead"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, sksh_sps)

# Generate standard figure
plot_abund(sksh_sps)
**Above:** Spawner abundance of Skeena steelhead salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of Skeena steelhead salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Chum

Chum salmon spawner abundances in the Skeena were expanded from available spawner surveys, as described below in Expansion Factors. The full list of indicator streams used for this expansion are in the table below. Note that the designation of indicator streams for the Skeena region was based on English et al. (2018) rather than the indicator designation in NuSEDS.

region_spawners <- sp <- readRDS(here("output/expanded-spawners/Skeena-spawners.rds"))
yrs <- as.numeric(dimnames(sp)[[3]])
expansion_factors <- readRDS(here("output/expanded-spawners/Skeena-expansion-factors.rds"))

sk_table32 <- read.csv(here("data/TCNB-23-01_Table32_Area4escapement.csv"))
names(sk_table32) <- c("year", "Sockeye", "Coho", "Pink", "Chum", "Chinook") # Change names to be consistent with species


# Load Joint N. Boundary Tech Committee data (Table 32) for comparison to spawner expansions
nbtc_tbl32 <- read.csv(file=here("data/2026_Skeena_escapement_NBTC_Table32.csv"), na.strings = c("UNK", "UKN"))

# Load indicator streams list
streams <- readRDS(here("output/stream-names/Skeena-stream-names.RDS"))
## Process data 
skeena.s <- sp[2, "Chum", ]
skeena.s <- skeena.s[!is.na(skeena.s)]

# Reformat data for SPS
skeena.s_sps <- data.frame(
    region = rep("Skeena", length(skeena.s)),
    species = rep("Chum", length(skeena.s)),
    year = as.numeric(names(skeena.s)),
    spawners = as.numeric(skeena.s), 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(nuseds_id, length(skeena.s))
) 

# Smoothing
skeena.s_sps$smoothedSpawners <- genSmooth(
    abund = skeena.s_sps$spawners,
    years = skeena.s_sps$year,
    genLength = genLength$gen_length[genLength$region == "Skeena" & genLength$species == "Chum"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, skeena.s_sps)

# Generate standard figure
plot_abund(skeena.s_sps)
**Above:** Spawner abundance of Skeena chum salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of Skeena chum salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

#points(x=nbtc_tbl32$YEAR, y=nbtc_tbl32$CHUM/1000, col="purple")
**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (purple) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. Alternative time series from the PSC's Northern Boundary Technical Committee Report (Appendix 32) is shown in blue. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade. See section on Expansion Factors below for further details.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (purple) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. Alternative time series from the PSC’s Northern Boundary Technical Committee Report (Appendix 32) is shown in blue. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade. See section on Expansion Factors below for further details.

Chum indicator streams (n = 16)
Alpha Creek Ecstall River Kumealon Creek
Andesite Creek Gitnadoix River Pa-Aat River
Captain Cove Creek Kasiks River Silver Creek
Date Creek Kitkatla Creek Stumaun Creek
Denise Creek Kitwanga River
Dog Tag Creek Kleanza Creek

Coho

Coho salmon spawner abundances in the Skeena were expanded from available spawner surveys, as described below in Expansion Factors. The full list of indicator streams used for this expansion are in the table below. Note that the designation of indicator streams for the Skeena region was based on English et al. (2018) rather than the indicator designation in NuSEDS.

## Process data 
skeena.s <- sp[2, "Coho", ]
skeena.s <- skeena.s[!is.na(skeena.s)]

# Reformat data for SPS
skeena.s_sps <- data.frame(
    region = rep("Skeena", length(skeena.s)),
    species = rep("Coho", length(skeena.s)),
    year = as.numeric(names(skeena.s)),
    spawners = as.numeric(skeena.s), 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(nuseds_id, length(skeena.s))
) 

# Smoothing
skeena.s_sps$smoothedSpawners <- genSmooth(
    abund = skeena.s_sps$spawners,
    years = skeena.s_sps$year,
    genLength = genLength$gen_length[genLength$region == "Skeena" & genLength$species == "Coho"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, skeena.s_sps)

# Generate standard figure
plot_abund(skeena.s_sps)
**Above:** Spawner abundance of Skeena coho salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of Skeena coho salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

#points(x=nbtc_tbl32$YEAR, y=nbtc_tbl32$COHO/1000, col="purple")
**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (purple) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. Alternative time series from the PSC's Northern Boundary Technical Committee Report (Appendix 32) is shown in blue. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade. See section on Expansion Factors below for further details.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (purple) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. Alternative time series from the PSC’s Northern Boundary Technical Committee Report (Appendix 32) is shown in blue. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade. See section on Expansion Factors below for further details.

Coho indicator streams (n = 55)
Andalas Creek Deep Creek Kadeen Creek Salmon Run Creek
Asitka River Diana Lake Creek Kasiks River Schulbuckhand Creek
Bear River Dry Creek Kathlyn Creek Shawatlan River
Billy Creek Ecstall River Kitwanga River Singlehurst Creek
Buck Creek Erlandsen Creek Kumealon Creek Skunsnat Creek
Bulkley River - Upper Exchamsiks River Lakelse River Snass Creek
Canyon Creek Exstew River Morice River Station Creek
Captain Cove Creek Foote Creek Motase Lake Steep Canyon Creek
Clear Creek Footsore Lake Creek Murder Creek Stephens Creek
Clearwater Creek Gitnadoix River Nangeese River Telkwa River
Clifford Creek Goat Creek Pa-Aat River Toboggan Creek
Club Creek - Lower (Between Club Lake And Stephens Lake) Gosnell Creek Phoenix Creek Williams Creek
Cullon Creek Herman Creek Porcher Creek Zymagotitz River
Damshilgwit Creek Ironside Creek Prudhomme Creek

Pink

Skeena pink salmon spawner abundances were expanded from available spawner surveys, as described below in Expansion Factors. The full list of indicator streams used for this expansion are in the table below. Note that the designation of indicator streams for the Skeena region was based on English et al. (2018) rather than the indicator designation in NuSEDS.

## Process data 
skeena.s <- sp[2, "Pink", ]
skeena.s <- skeena.s[!is.na(skeena.s)]

# Reformat data for SPS
skeena.s_sps <- data.frame(
    region = rep("Skeena", length(skeena.s)),
    species = rep("Pink", length(skeena.s)),
    year = as.numeric(names(skeena.s)),
    spawners = as.numeric(skeena.s), 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(nuseds_id, length(skeena.s))
) 

# Smoothing
skeena.s_sps$smoothedSpawners <- genSmooth(
    abund = skeena.s_sps$spawners,
    years = skeena.s_sps$year,
    genLength = genLength$gen_length[genLength$region == "Skeena" & genLength$species == "Pink"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, skeena.s_sps)

# Generate standard figure
plot_abund(skeena.s_sps)
**Above:** Spawner abundance of Haida Gwaii chinook salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of Haida Gwaii chinook salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

#points(x=nbtc_tbl32$YEAR, y=nbtc_tbl32$PINK/1000, col="purple")
**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (purple) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. Alternative time series from the PSC's Northern Boundary Technical Committee Report (Appendix 32) is shown in bkue. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade. See section on Expansion Factors below for further details.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (purple) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. Alternative time series from the PSC’s Northern Boundary Technical Committee Report (Appendix 32) is shown in bkue. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade. See section on Expansion Factors below for further details.

Pink indicator streams (n = 27)
Alpha Creek Gitnadoix River Kumealon Creek Sandy Bay Creek
Babine River - Section 4 Head Creek La Hou Creek Silver Creek
Brundige Creek Kasiks River Lakelse River Spiller River
Captain Cove Creek Khyex River Morice River Stumaun Creek
Ecstall River Kitwanga River Oona River Whitly Point Creek
Exchamsiks River Kleanza Creek Pa-Aat River Wolf Creek
False Stewart Creek Kloiya River Porcher Creek

2.2.6 Central Coast

Chinook

For Central Coast Chinook, the PSC’s Chinook Technical Committee (CTC) reported escapement for two indicator stocks on the Central Coast: the Atnarko River and Rivers Inlet (Chinook Technical Committee 2026). Rivers Inlet is monitored “using an index of escapements to the Wannock, Kilbella, and Chuckwalla rivers” (Chinook Technical Committee 2026). Because monitoring of Central Coast Chinook reported in NuSEDS has recently declined, expansions from spawner surveys are unreliable. As such, in 2025 we moved to using a composite indicator equal to the sum of the Atnarko River (Total esc.) and Rivers Inlet index reported by the CTC in Appendix Table B3.

## Load data ---
# TCCHINOOK Table B3
cc_ctc <- readxl::read_xlsx(here("data/TCCHINOOK-26-03-Appendix-B-Escapement-Detailed.xlsx"), sheet = "B3", range = "H5:K55", col_types = "numeric", col_names = c("Atnarko_Total_esc", "Atnarko_CV", "Atnarko_Wild", "Rivers_Inlet")) %>%
    mutate(Year = c(1975:2025))

# Reformat data for SPS
ccck_sps <- data.frame(
    region = rep("Central Coast", length(cc_ctc$Year)),
    species = rep("Chinook", length(cc_ctc$Year)),
    year = cc_ctc$Year,
    spawners = cc_ctc$Atnarko_Total_esc + cc_ctc$Rivers_Inlet, 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(ctc_id, length(cc_ctc$Year))
) 

# Smoothing
ccck_sps$smoothedSpawners <- genSmooth(
    abund = ccck_sps$spawners,
    years = ccck_sps$year,
    genLength = genLength$gen_length[genLength$region == "Central Coast" & genLength$species == "Chinook"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, ccck_sps)

#Generate standard figure
plot_abund(ccck_sps)
**Above:** Spawner abundance of Central Coast chinook salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of Central Coast chinook salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

## Code to generate index comparison plot:
# Expanded spawner estimate
ccck_ex <- readRDS(here("output/expanded-spawners/Central Coast-spawners.rds"))[2, "Chinook", ]
yrs <- as.numeric(names(ccck_ex))

e <- readRDS(here("output/expanded-spawners/Central Coast-expansion-factors.rds"))[[1]]

# TCCHINOOK Table B3
cc_ctc <- readxl::read_xlsx(here("data/TCCHINOOK-26-03-Appendix-B-Escapement-Detailed.xlsx"), sheet = "B3", 
                                                        range = "H5:K55", col_types = "numeric", 
                                                        col_names = c("Atnarko_Total_esc", "Atnarko_CV", 
                                                                                    "Atnarko_Wild", "Rivers_Inlet")) %>%
    mutate(Year = c(1975:2025))

par(mar = c(3,4,2,4))
plot(yrs, e$exp1, pch = 4, bty = "n", xaxt = "n", yaxt = "n", xlab = "", ylab = "", col = grey(0.6), ylim = c(0, 30), lwd = 2)
axis(side = 4, col = grey(0.6), las = 1)
mtext(side = 4, line = 2.5, "Expansion factor x", col = grey(0.6))
par(new = TRUE)

plot(yrs, ccck_ex*10^-3, "o", pch = 21, bg = "white", bty = "l", xlab = "", ylab = "Spawner abundance (thousands)", ylim = c(0, 150), las = 1, yaxs = "i", col="purple")
abline(v = seq(1950, 2025, 5), lty = 3, col = grey(0.8))
abline(h = seq(0, 150, 50), lty = 3, col = grey(0.8))
points(cc_ctc$Year, cc_ctc$Atnarko_Total_esc*10^-3, "o", pch = 21, bg = "white", col = 2)
points(cc_ctc$Year, cc_ctc$Rivers_Inlet*10^-3, "o", pch = 21, bg = "white", col = 4)
points(cc_ctc$Year, cc_ctc$Atnarko_Total_esc*10^-3 + cc_ctc$Rivers_Inlet*10^-3, pch = 19, col = "black", cex = 0.6)

legend("topleft", col = c("purple", 2,4, "black"), c("NuSEDS expansion", "CTC Atnarko Total esc.", "CTC Rivers Inlet index esc.", "CTC sum"), pch = c(rep(21, 3), 19), pt.bg = "white", lwd = c(rep(1, 3),NA), bty = "n")
**Above:**  Comparison of Chinook escapements on the Central Coast. The sum of Atnarko escapement (red) and Rivers Inlet escapement index (blue) from the CTC (purple points) was used in 2025. The expanded data from NuSEDS, not used, are in black with expansion factors used shown by grey 'x'

Above: Comparison of Chinook escapements on the Central Coast. The sum of Atnarko escapement (red) and Rivers Inlet escapement index (blue) from the CTC (purple points) was used in 2025. The expanded data from NuSEDS, not used, are in black with expansion factors used shown by grey ‘x’

Steelhead

There are two spawner surveys for Steelhead trout on the Central Coast that we report in the Pacific Salmon Explorer. However, these surveys have been patchy through time with the most recent estimates from 2016. Therefore, spawner abundance and total return for Central Coast steelhead is considered unknown.

Chum

Estimates of spawner abundance for chum salmon on the Central Coast were expanded from available spawner surveys, as described below in Expansion Factors. The full list of indicator streams used for this expansion are in the table below. Monitoring and reporting of observed spawners on the Central Coast has declined in recent decades, thus requiring larger expansion factors to arrive at an area-wide estimate that can be compared through time. As such, estimates of spawner abundance for the Central Coast over the past decade are more uncertain and should be interpreted with caution.

region_spawners <- sp <- readRDS(here("output/expanded-spawners/Central Coast-spawners.rds"))
yrs <- as.numeric(dimnames(sp)[[3]])
expansion_factors <- readRDS(here("output/expanded-spawners/Central Coast-expansion-factors.rds"))
## Process data 
cc.s <- sp[2, "Chum", ]

# Reformat data for SPS
cc.s_sps <- data.frame(
    region = rep("Central Coast", length(cc.s)),
    species = rep("Chum", length(cc.s)),
    year = as.numeric(names(cc.s)),
    spawners = as.numeric(cc.s), 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(nuseds_id, length(cc.s)))

# Smoothing
cc.s_sps$smoothedSpawners <- genSmooth(
    abund = cc.s_sps$spawners,
    years = cc.s_sps$year,
    genLength = genLength$gen_length[genLength$region == "Central Coast" & genLength$species == "Chum"])

# Add to master sps dataframe
sps_data <- rbind(sps_data, cc.s_sps)

# Generate standard figure
plot_abund(cc.s_sps)
**Above:**  Spawner abundance of Central Coast chum salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of Central Coast chum salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Chum indicator streams (n = 129)
Aaltanhash River Cooper Inlet-Ada Cove Creek Head Creek Limestone Creek Sagar Creek
Airport Side Channel Cooper Inlet-Fannie Cove Lh Creek Hevenor Inlet Creek Little Creek Salloomt River
Arnoup Creek Crab River Hird Point Creek Little Tillhorn Creek Salmon Bay Creek
Barnard Creek Crane Bay Creek Hook Nose Creek Lockhart Gordon Creek Scow Bay Creek
Belowe Creek Dala River Hotspring Creek Macnair Creek Scribner Creek
Big Bay Creek Dally Creek Hugh Creek Markle Inlet Creek Snootli Creek
Big Creek Dean River James Bay Creek Mcloughlin Creek Soda Creek
Big Tillhorn Creek Draney Creek Jenny Bay Creeks Milton River Tankeeah River
Bish Creek Duthie Creek Kadjusdis River Mussel River Tastsquan Creek
Black Rock Creek Eagle Bay Creek Kainet Creek Neekas Creek Thorsen Creek
Blee Creek Eagle Creek Kemano River Nekite River Tsimtack Lake Creek
Bloomfield Creek East Arm Creek Khutze River Nekite Spawning Channel Turn Creek
Bolin Bay Creek Elcho Creek Kilbella River Nias Creek Turtle Creek
Borrowman Creek Evelyn Creek Kiltuish River Noohalk Creek Tyler Creek
Brim River Fancy Cove Head Creek Kimsquit River Nooklikonnik Creek Verney Passage Creek
Bullock Channel #2 Creek Fish Creek Kiskosh Creek Pa-Aat River Wahoo Creek
Bullock Channel #3 North Creek Flux Creek Kitasoo Creek Paril River Walkum Creek
Bullock Channel #3 South Creek Foch River Kitkiata Creek Poison Cove Creek Wathl Creek
Canyon Creek Four Lakes Creek Klekane River Price Creek Webster Lake Creek
Captain Cove Creek Frenchman Creek Korich Creek Pyne Creek Weewanie Creek
Carter River Gabion River Kumealon Creek Quaal River West Arm Creek
Cascade River Garbage Dump Creek Kunsoot River Quartcha Creek Whalen Creek
Cheenis Lake Creek George Hall Creek Kwakusdis River Quatlena River Wilson Creek
Chuckwalla River Gil Creek Kwatna River Rainbow Creek Windy Bay Creek
Clatse Creek Gorilla Creek Lard Creek Riordan Creek Woran Creek
Clyak River Grantham Creek Lee Creek Roscoe Creek

Coho

Estimates of spawner abundance for coho salmon on the Central Coast were expanded from available spawner surveys, as described below in Expansion Factors. The full list of indicator streams used for this expansion are in the table below. Monitoring and reporting of observed spawners on the Central Coast has declined in recent decades, thus requiring larger expansion factors to arrive at an area-wide estimate that can be compared through time. As such, estimates of spawner abundance for the Central Coast over the past decade are more uncertain and should be interpreted with caution.

## Process data 
cc.s <- sp[2, "Coho", ]

# Reformat data for SPS
cc.s_sps <- data.frame(
    region = rep("Central Coast", length(cc.s)),
    species = rep("Coho", length(cc.s)),
    year = as.numeric(names(cc.s)),
    spawners = as.numeric(cc.s), 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(nuseds_id, length(cc.s)))

# Smoothing
cc.s_sps$smoothedSpawners <- genSmooth(
    abund = cc.s_sps$spawners,
    years = cc.s_sps$year,
    genLength = genLength$gen_length[genLength$region == "Central Coast" & genLength$species == "Coho"])

# Add to master sps dataframe
sps_data <- rbind(sps_data, cc.s_sps)

# Generate standard figure
plot_abund(cc.s_sps)
**Above:**  Spawner abundance of Central Coast coho salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of Central Coast coho salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Coho indicator streams (n = 70)
Aaltanhash River Curtis Inlet Creek Green River Kitasoo Creek Quaal River
Airport Side Channel Dala River Hankin Creek Kooryet Creek Quartcha Creek
Anderson Creek Deer Lake Creek Hevenor Inlet Creek Kumealon Creek Riordan Creek
Banks Lakes Creek Devon Lake Creek Hugh Creek Kumowdah River Roscoe Creek
Bella Coola River Docee River Indian Harbour Creek Lewis Creek Ryan Creek
Belowe Creek East Arm Creek Kainet Creek Martin River Salloomt River
Blee Creek Elcho Creek Keecha Creek Mcloughlin Creek Shaw Creek
Brim River End Hill Creek Keswar Creek Mikado Lake Creek Snooka Creek
Canoe Creek Evelyn Creek Khutze River Molly Creek Sylvia Creek
Canoona River Fish Creek Kilbella River Necleetsconnay River Thorsen Creek
Captain Cove Creek Foch River Kildala River Nooklikonnik Creek Tsimtack Lake Creek
Cascade River Gabion River Kiltuish River Pa-Aat River Tyler Creek
Chuckwalla River Garbage Dump Creek Kingkown Inlet Creeks Paril River Wahoo Creek
Cooper Inlet-Fannie Cove Lh Creek George Hall Creek Kiskosh Creek Port Stephens Creek Whalen Creek

Pink

Estimates of spawner abundance for pink salmon on the Central Coast were expanded from available spawner surveys, as described below in Expansion Factors. The full list of indicator streams used for this expansion are in the table below. Monitoring and reporting of observed spawners on the Central Coast has declined in recent decades, thus requiring larger expansion factors to arrive at an area-wide estimate that can be compared through time. As such, estimates of spawner abundance for the Central Coast over the past decade are more uncertain and should be interpreted with caution.

## Process data 
cc.s <- sp[2, "Pink", ]

# Reformat data for SPS
cc.s_sps <- data.frame(
    region = rep("Central Coast", length(cc.s)),
    species = rep("Pink", length(cc.s)),
    year = as.numeric(names(cc.s)),
    spawners = as.numeric(cc.s), 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(nuseds_id, length(cc.s)))

# Smoothing
cc.s_sps$smoothedSpawners <- genSmooth(
    abund = cc.s_sps$spawners,
    years = cc.s_sps$year,
    genLength = genLength$gen_length[genLength$region == "Central Coast" & genLength$species == "Pink"])

# Add to master sps dataframe
sps_data <- rbind(sps_data, cc.s_sps)

# Generate standard figure
plot_abund(cc.s_sps)
**Above:**  Spawner abundance of Central Coast pink salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of Central Coast pink salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Pink indicator streams (n = 109)
Aaltanhash River Chuckwalla River Gil Creek Korich Creek Quaal River
Arnoup Creek Clatse Creek Hankin Creek Kumealon Creek Quartcha Creek
Ashlulm Creek Clyak River Head Creek Kunsoot River Quatlena River
Barnard Creek Crab River Hird Point Creek Kwakusdis River Quigley Creek
Bella Coola River Crane Bay Creek Hook Nose Creek Kwatna River Riordan Creek
Belowe Creek Dala River Hotspring Creek Lard Creek Roscoe Creek
Big Bay Creek Dallery Creek Hugh Creek Limestone Creek Salmon Bay Creek
Big Tillhorn Creek Dally Creek Hunter Creek Little Tillhorn Creek Scow Bay Creek
Bish Creek Dean River James Bay Creek Lockhart Gordon Creek Shaw Creek
Black Rock Creek Draney Creek Jenny Bay Creeks Macnair Creek Skowquiltz River
Blee Creek Duthie Creek Johnston Creek Marmot Cove Creek Soda Creek
Bloomfield Creek Eagle Bay Creek Kainet Creek Milton River Tankeeah River
Bolin Bay Creek East Arm Creek Kemano River Mussel River Tsimtack Lake Creek
Bolton Creek Elcho Creek Khutze River Necleetsconnay River Turn Creek
Borrowman Creek Evelyn Creek Kilbella River Neekas Creek Turtle Creek
Brim River Fancy Cove Head Creek Kiltuish River Nekite River Tyler Creek
Canoona River Fifer Cove Creek Kiskosh Creek Nias Creek Verney Passage Creek
Canyon Creek Fishtrap Bay Creek Kitasoo Creek Nicknaqueet River Wahoo Creek
Captain Cove Creek Foch River Kitkiata Creek Nooseseck River Weewanie Creek
Carter River Frenchman Creek Klekane River Pa-Aat River West Arm Creek
Cascade River Gabion River Koeye River Paril River Woran Creek
Cheenis Lake Creek Genesee Creek Kooryet Creek Pyne Creek

Sockeye

Estimates of spawner abundance for sockeye salmon on the Central Coast were expanded from available spawner surveys, as described below in Expansion Factors. The full list of indicator streams used for this expansion are in the table below. Monitoring and reporting of observed spawners on the Central Coast has declined in recent decades, thus requiring larger expansion factors to arrive at an area-wide estimate that can be compared through time. As such, estimates of spawner abundance for the Central Coast over the past decade are more uncertain and should be interpreted with caution.

## Process data 
cc.s <- sp[2, "Sockeye", ]

# Reformat data for SPS
cc.s_sps <- data.frame(
    region = rep("Central Coast", length(cc.s)),
    species = rep("Sockeye", length(cc.s)),
    year = as.numeric(names(cc.s)),
    spawners = as.numeric(cc.s), 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(nuseds_id, length(cc.s)))

# Smoothing
cc.s_sps$smoothedSpawners <- genSmooth(
    abund = cc.s_sps$spawners,
    years = cc.s_sps$year,
    genLength = genLength$gen_length[genLength$region == "Central Coast" & genLength$species == "Sockeye"])

# Add to master sps dataframe
sps_data <- rbind(sps_data, cc.s_sps)

# Generate standard figure
plot_abund(cc.s_sps)
**Above:**  Spawner abundance of Central Coast sockeye salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of Central Coast sockeye salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Sockeye indicator streams (n = 37)
Ashlulm Creek Green River Koeye River Quaal River
Bella Coola River Hook Nose Creek Kooryet Creek Quartcha Creek
Bloomfield Creek Hunter Creek Kumowdah River Smokehouse Creek
Canoe Creek Inziana River Kwakusdis River Tankeeah River
Canoona River Kadjusdis River Kwakwa Creek Tsimtack Lake Creek
Curtis Inlet Creek Kainet Creek Lagoon Creek Tzeo River
Dallery Creek Keecha Creek Mary Cove Creek Washwash River
Devon Lake Creek Khutze River Mikado Lake Creek
Evelyn Creek Kitlope River Namu River
Gabion River Klewnuggit Inlet Creek Neechanz River

2.2.7 East Vancouver Island & Mainland Inlets

Chinook

PSC’s Chinook Technical Committee (CTC) reports escapement (spawner abundance) and run size (total abundance) for three indicator stocks in the Strait of Georgia: Nanaimo, Cowichan, and Phillips (Chinook Technical Committee 2026). We report spawner abundance and total abundance as the sum of Esc and t.run, respectively, across these three indicator stocks as reported in Appendix Table B4 available from the PSC’s Chinook Technical Committee (CTC) data sets.

## Load data --
# (1) CTC data
evimi_ctc <- readxl::read_xlsx(here("data/TCCHINOOK-26-03-Appendix-B-Escapement-Detailed.xlsx"), sheet = "B4", range = "A5:G55", col_types = "numeric", col_names = c("Year", "Nanaimo_esc", "Nanaimo_trun", "Cowichan_esc", "Cowichan_trun", "Phillips_esc", "Phillips_trun")) # Southern BC

evimi_ctc_summed <- evimi_ctc %>%
    group_by(Year) %>%
    summarise(esc_sum = sum(Nanaimo_esc, Cowichan_esc, Phillips_esc),
                        trun_sum = sum(Nanaimo_trun, Cowichan_trun, Phillips_trun))

# Put in SPS format
evimick_sps <- data.frame(
    region = rep("East Vancouver Island & Mainland Inlets", dim(evimi_ctc_summed)[1]),
    species = rep("Chinook", dim(evimi_ctc_summed)[1]),
    year = evimi_ctc_summed$Year,
    spawners = evimi_ctc_summed$esc_sum, 
    smoothedSpawners = NA,
    runsize = evimi_ctc_summed$trun_sum,
    smoothedRunsize = NA,
    source_id = rep(ctc_id, dim(evimi_ctc_summed)[1])
) 

# Smoothing
evimick_sps$smoothedSpawners <- genSmooth(
    abund = evimick_sps$spawners,
    years = evimick_sps$year,
    genLength = genLength$gen_length[genLength$region == "East Vancouver Island & Mainland Inlets" & genLength$species == "Chinook"]
)

evimick_sps$smoothedRunsize <- genSmooth(
    abund = evimick_sps$runsize,
    years = evimick_sps$year,
    genLength = genLength$gen_length[genLength$region == "East Vancouver Island & Mainland Inlets" & genLength$species == "Chinook"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, evimick_sps)

#Generate standard figures
plot_abund(evimick_sps)
**Above:** Spawner abundance (grey) and total abundance (black) of East Vancouver Island & Mainland Inlets chinook salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Above: Spawner abundance (grey) and total abundance (black) of East Vancouver Island & Mainland Inlets chinook salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

**Above:**  (a) Chinook salmon spawner abundance and (b) total abundance showing the contributions of the Cowichan, Nanaimo, and Philips indicator stocks.

Above: (a) Chinook salmon spawner abundance and (b) total abundance showing the contributions of the Cowichan, Nanaimo, and Philips indicator stocks.

Chum

Initial time series of spawner abundances for chum salmon in East Vancouver Island & Mainland Inlets were expanded from available spawner surveys, as described below in Expansion Factors. The full list of indicator streams used for this expansion are in the table below. We truncated the time series of spawner abundance to years 1953+ because earlier years had high expansion factor values indicating lack of monitoring on key indicator streams (see figures below).

region_spawners <- sp <- readRDS(here("output/expanded-spawners/East Vancouver Island & Mainland Inlets-spawners.rds"))
yrs <- as.numeric(dimnames(sp)[[3]])
expansion_factors <- readRDS(here("output/expanded-spawners/East Vancouver Island & Mainland Inlets-expansion-factors.rds"))
## Process data
evimi.s <- sp[2, "Chum", ]

# Get rid of NAs (esp in 2024)
evimi.s <- evimi.s[1:max(which(!is.na(evimi.s)))]

# For all VIMI species, start in 1953 - earlier expansion factors are large
evimi.s <- evimi.s[which(as.numeric(names(evimi.s)) >= 1953)]

# Reformat data for SPS
evimi.s_sps <- data.frame(
    region = rep("East Vancouver Island & Mainland Inlets", length(evimi.s)),
    species = rep("Chum", length(evimi.s)),
    year = as.numeric(names(evimi.s)),
    spawners = as.numeric(evimi.s), 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(nuseds_id, length(evimi.s))
) 

# Smoothing
evimi.s_sps$smoothedSpawners <- genSmooth(
    abund = evimi.s_sps$spawners,
    years = evimi.s_sps$year,
    genLength = genLength$gen_length[genLength$region == "East Vancouver Island & Mainland Inlets" & genLength$species == "Chum"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, evimi.s_sps)

# Generate standard figure
plot_abund(evimi.s_sps)
**Above:**  Spawner abundance of East Vancouver Island & Mainland Inlets chum salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of East Vancouver Island & Mainland Inlets chum salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

added_series.s <- sps_data %>% 
    filter(region == "East Vancouver Island & Mainland Inlets", species == "Chum") %>%
    select(year, spawners) %>%
    rename("value" = "spawners")

plot_expansions(speciesname = "Chum",
                                regionname = "East Vancouver Island & Mainland Inlets",
                                region_spawners = region_spawners,
                                expansion_factors = expansion_factors,
                                added_series = added_series.s,
                                exp_ylim = c(1, 2))
    abline(v = 1952.5)
    text(1953, 1.5, "Data prior to 1953 were discarded", adj = 0)
**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Chum indicator streams (n = 31)
Alison River Drew Creek Mckercher Creek Rainbow Creek
Apple River Englishman River Myrtle Creek Salmon River
Bird Cove Creek Goldstream River Nanaimo River Skwawka River
Campbell River Heydon Creek Nimpkish River Tzoonie River
Chemainus River Homathko River Open Bay Creek Viner Sound Creek
Clear Creek Jap Creek Puntledge River Waump Creek
Cowichan River Lang Creek Qualicum River Wortley Creek
Deserted River Little Qualicum River Quinsam River

Coho

Initial time series of spawner abundances for coho salmon in East Vancouver Island & Mainland Inlets were expanded from available spawner surveys, as described below in Expansion Factors. The full list of indicator streams used for this expansion are in the table below. For the assessments, we truncated the time series of spawner abundance to years 1953+ because earlier years had high expansion factor values indicating lack of monitoring on key indicator streams (see figures below).

## Process data
evimi.s <- sp[2, "Coho", ]

# Get rid of NAs (esp in 2024)
evimi.s <- evimi.s[1:max(which(!is.na(evimi.s)))]

# For all VIMI species, start in 1953 - earlier expansion factors are large
evimi.s <- evimi.s[which(as.numeric(names(evimi.s)) >= 1953)]

# Reformat data for SPS
evimi.s_sps <- data.frame(
    region = rep("East Vancouver Island & Mainland Inlets", length(evimi.s)),
    species = rep("Coho", length(evimi.s)),
    year = as.numeric(names(evimi.s)),
    spawners = as.numeric(evimi.s), 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(nuseds_id, length(evimi.s))
) 

# Smoothing
evimi.s_sps$smoothedSpawners <- genSmooth(
    abund = evimi.s_sps$spawners,
    years = evimi.s_sps$year,
    genLength = genLength$gen_length[genLength$region == "East Vancouver Island & Mainland Inlets" & genLength$species == "Coho"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, evimi.s_sps)

# Generate standard figure
plot_abund(evimi.s_sps)
**Above:**  Spawner abundance of East Vancouver Island & Mainland Inlets coho salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of East Vancouver Island & Mainland Inlets coho salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

added_series.s <- sps_data %>% 
    filter(region == "East Vancouver Island & Mainland Inlets", species == "Coho") %>%
    select(year, spawners) %>%
    rename("value" = "spawners")

plot_expansions(speciesname = "Coho",
                                regionname = "East Vancouver Island & Mainland Inlets",
                                region_spawners = region_spawners,
                                expansion_factors = expansion_factors,
                                added_series = added_series.s,
                                exp_ylim = c(1,2))
    abline(v = 1952.5)
    text(1953, 1.5, "Data prior to 1953 were discarded", adj = 0)
**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Coho indicator streams (n = 48)
Adam River Colquitz River Keogh River Salmon River
Ahta River Cook Creek Lang Creek Sechelt Creek
Alison River Cowichan River Mckercher Creek Simms Creek
Amor De Cosmos Creek Cowie Creek Millard Creek Trent River
Black Creek Craigflower Creek Mixal Lake Creek Tsable River
Bonell Creek Docee River Myrtle Creek Tsitika River
Bonsall Creek Driftwood Creek Nanaimo River Viner Sound Creek
Bush Creek Englishman River Nanoose Creek Waterloo Creek
Canoe Creek Goldstream River Nile Creek Waump Creek
Charles Creek Granite Bay Creek Open Bay Creek Wilfred Creek
Chase River Haslam Creek Qualicum River Willow Creek
Clear Creek Heydon Creek Quinsam River Woods Creek

Pink

Initial time series of spawner abundances for pink salmon in East Vancouver Island & Mainland Inlets were expanded from available spawner surveys, as described below in Expansion Factors. The full list of indicator streams used for this expansion are in the table below. For the assessments, we truncated the time series of spawner abundance to years 1953+ because earlier years had high expansion factor values indicating lack of monitoring on key indicator streams (see figures below).

For chum, coho, sockeye, and steelhead, we relied on NuSEDS’ designations of indicator or non-indicator streams, but for pink salmon in this region we designated indicator streams as those with at least 10 years of data in the most recent 20 years.

## Process data
evimi.s <- sp[2, "Pink", ]

# Get rid of NAs (esp in 2024)
evimi.s <- evimi.s[1:max(which(!is.na(evimi.s)))]

# For all VIMI species, start in 1953 - earlier expansion factors are large
evimi.s <- evimi.s[which(as.numeric(names(evimi.s)) >= 1953)]

# Reformat data for SPS
evimi.s_sps <- data.frame(
    region = rep("East Vancouver Island & Mainland Inlets", length(evimi.s)),
    species = rep("Pink", length(evimi.s)),
    year = as.numeric(names(evimi.s)),
    spawners = as.numeric(evimi.s), 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(nuseds_id, length(evimi.s))
) 

# Smoothing
evimi.s_sps$smoothedSpawners <- genSmooth(
    abund = evimi.s_sps$spawners,
    years = evimi.s_sps$year,
    genLength = genLength$gen_length[genLength$region == "East Vancouver Island & Mainland Inlets" & genLength$species == "Pink"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, evimi.s_sps)

# Generate standard figure
plot_abund(evimi.s_sps)
**Above:**  Spawner abundance of East Vancouver Island & Mainland Inlets pink salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of East Vancouver Island & Mainland Inlets pink salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

added_series.s <- sps_data %>% 
    filter(region == "East Vancouver Island & Mainland Inlets", species == "Pink") %>%
    select(year, spawners) %>%
    rename("value" = "spawners")

plot_expansions(speciesname = "Pink",
                                regionname = "East Vancouver Island & Mainland Inlets",
                                region_spawners = region_spawners,
                                expansion_factors = expansion_factors,
                                added_series = added_series.s,
                                exp_ylim = c(1, 2))
    abline(v = 1952.5)
    text(1953, 1.5, "Data prior to 1953 were discarded", adj = 0)
**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Pink indicator streams (n = 32)
Adam River Frazer Creek Menzies Creek Read Creek
Ahnuhati River Glendale Creek Nanaimo River Salmon River
Ahta River Gray Creek Orford River Shoal Harbour Creek
Amor De Cosmos Creek Heydon Creek Phillips River Sliammon Creek
Campbell River Kakweiken River Puntledge River Tsolum River
Clearwater Creek Keogh River Qualicum River Viner Sound Creek
Embley Creek Lang Creek Quatam River Wakeman River
Englishman River Little Qualicum River Quinsam River Willow Creek

Sockeye

Initial time series of spawner abundances for sockeye salmon in East Vancouver Island & Mainland Inlets were expanded from available spawner surveys, as described below in Expansion Factors. The full list of indicator streams used for this expansion are in the table below. For the assessments, we truncated the time series of spawner abundance to years 1953+ because earlier years had high expansion factor values indicating lack of monitoring on key indicator streams (see figures below).

## Process data
evimi.s <- sp[2, "Sockeye", ]

# Get rid of NAs (esp in 2024)
evimi.s <- evimi.s[1:max(which(!is.na(evimi.s)))]

# For all VIMI species, start in 1953 - earlier expansion factors are large
evimi.s <- evimi.s[which(as.numeric(names(evimi.s)) >= 1953)]

# Reformat data for SPS
evimi.s_sps <- data.frame(
    region = rep("East Vancouver Island & Mainland Inlets", length(evimi.s)),
    species = rep("Sockeye", length(evimi.s)),
    year = as.numeric(names(evimi.s)),
    spawners = as.numeric(evimi.s), 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(nuseds_id, length(evimi.s))
) 

# Smoothing
evimi.s_sps$smoothedSpawners <- genSmooth(
    abund = evimi.s_sps$spawners,
    years = evimi.s_sps$year,
    genLength = genLength$gen_length[genLength$region == "East Vancouver Island & Mainland Inlets" & genLength$species == "Sockeye"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, evimi.s_sps)

# Generate standard figure
plot_abund(evimi.s_sps)
**Above:**  Spawner abundance of East Vancouver Island & Mainland Inlets sockeye salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of East Vancouver Island & Mainland Inlets sockeye salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

added_series.s <- sps_data %>% 
    filter(region == "East Vancouver Island & Mainland Inlets", species == "Sockeye") %>%
    select(year, spawners) %>%
    rename("value" = "spawners")

plot_expansions(speciesname = "Sockeye",
                                regionname = "East Vancouver Island & Mainland Inlets",
                                region_spawners = region_spawners,
                                expansion_factors = expansion_factors,
                                added_series = added_series.s,
                                exp_ylim = c(1, 2))
    abline(v = 1952.5)
    text(1953, 1.5, "Data prior to 1953 were discarded", adj = 0)
**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Sockeye indicator streams (n = 8)
Canoe Creek Nimpkish River
Clearwater Creek Phillips River
Heydon Creek Quatse River
Mackenzie River Ruby Creek

Steelhead

Initial time series of spawner abundances for steelhead salmon in East Vancouver Island & Mainland Inlets were expanded from available spawner surveys, as described below in Expansion Factors The full list of indicator streams used for this expansion are in the table below. For the assessments, we truncated the time series of spawner abundance to years 1953+ because earlier years had high expansion factor values indicating lack of monitoring on key indicator streams (see figures below).

## Process data
evimi.s <- sp[2, "Steelhead", ]

# Get rid of NAs (esp in 2024)
evimi.s <- evimi.s[1:max(which(!is.na(evimi.s)))]

# For all VIMI species, start in 1953 - earlier expansion factors are large
evimi.s <- evimi.s[which(as.numeric(names(evimi.s)) >= 1953)]

# Reformat data for SPS
evimi.s_sps <- data.frame(
    region = rep("East Vancouver Island & Mainland Inlets", length(evimi.s)),
    species = rep("Steelhead", length(evimi.s)),
    year = as.numeric(names(evimi.s)),
    spawners = as.numeric(evimi.s), 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(nuseds_id, length(evimi.s))
) 

# Smoothing
evimi.s_sps$smoothedSpawners <- genSmooth(
    abund = evimi.s_sps$spawners,
    years = evimi.s_sps$year,
    genLength = genLength$gen_length[genLength$region == "East Vancouver Island & Mainland Inlets" & genLength$species == "Steelhead"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, evimi.s_sps)

# Generate standard figure
plot_abund(evimi.s_sps)
**Above:**  Spawner abundance of East Vancouver Island & Mainland Inlets steelhead salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of East Vancouver Island & Mainland Inlets steelhead salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

added_series.s <- sps_data %>% 
    filter(region == "East Vancouver Island & Mainland Inlets", species == "Steelhead") %>%
    select(year, spawners) %>%
    rename("value" = "spawners")

plot_expansions(speciesname = "Steelhead",
                                regionname = "East Vancouver Island & Mainland Inlets",
                                region_spawners = region_spawners,
                                expansion_factors = expansion_factors,
                                added_series = added_series.s,
                                exp_ylim = c(1, 2))
    abline(v = 1952.5)
    text(1953, 1.5, "Data prior to 1953 were discarded", adj = 0)
**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Steelhead indicator streams (n = 5)
Cheakamus River Salmon River
Englishman River Tsitika River
Keogh River

2.2.8 West VI

Chinook

For Chinook spawner abundance, we used the Chinook Technical Committee 14-stream index (Chinook Technical Committee 2025). We compare this below to a 17-stream index of escapements from DFO (Nicholas Brown, pers. comm.). We find the two sources similar.

Chinook total abundance was reported by DFO in 2025 (DFO 2025). The data shown in Figure 3 of DFO (2025) are available for download at https://zenodo.org/records/14847020 [accessed 25-Aug-2025]. We assumed that total abundance is the sum of the (non-terminal) ocean catch, hatchery-origin terminal return, and natural-origin terminal return. We note that this estimate of total abundance represents a total count of all Chinook from the region, and thus cannot be compared to the index of spawner abundance, which is only an index of selected streams.

region_spawners <- sp <- readRDS(here("output/expanded-spawners/West Vancouver Island-spawners.rds"))
yrs <- as.numeric(dimnames(sp)[[3]])
expansion_factors <- readRDS(here("output/expanded-spawners/West Vancouver Island-expansion-factors.rds"))
## Process spawner survey data ---
wvi.s <- sp[2, "Chinook", ]
# Get rid of NAs (esp in 2024)
wvi.s <- wvi.s[1:max(which(!is.na(wvi.s)))]

# For all VIMI species, start in 1953 - earlier expansion factors are large
wvi.s   <- wvi.s[which(as.numeric(names(wvi.s)) >= 1953)]


## Load other data ---
# 17 stream index from Nicholas Brown @ DFO (pers comm.)
wvi_ck_dfo <- read.csv(here("data/R-OUT_infilled_indicators_escapement_timeseries.csv")) %>% 
    group_by(year) %>% summarize(tot_esc = sum(escapement))

# Compare the 17 stream index and Nuseds reconstruction (same streams)
wvi.s_recon <- data.frame(year=as.numeric(names(wvi.s)), spwn = wvi.s)
#wvi_ck_dfo %>% ggplot(aes(x=year, y=tot_esc/1000)) + geom_line(aes(col="DFO 17-Stream Index")) +
#   geom_line(data=wvi.s_recon, aes(x=year, y=spwn/1000, col="Reconstructed 17-stream")) +
#   scale_colour_manual(values = c("DFO 17-Stream Index" = "blue", "CTC 14-Stream Index" = "red", 
#                                                            "Reconstructed 17-stream" = "purple")) +
#   labs(col="Source", y="Spawner escapement (000s)", x="Year") + lims(x=c(1979, 2025))

## ---------------------------
## Data sources actually used:
## ---------------------------
# Alternate source: 14 Stream index from CTC
wvi_ck_ctc <- readxl::read_xlsx(here("data/TCCHINOOK-26-03-Appendix-B-Escapement-Detailed.xlsx"), sheet = "B5", range = "K24:K54", col_names = "WCVI_14Stream_Index") %>%
    mutate(Year = c(1995:2025)) # Escapement methods changed in 1995; only use earlier data for assessments

# Total abundance from Brown et al. 2025
wvi_ck_tot <- read_xlsx(here("data/WCVI_Chinook_total_abundance.xlsx"))
wvi_ck_tot$total_abundance <-  wvi_ck_tot$`Hatchery origin Terminal Return` + wvi_ck_tot$`Natural origin Terminal Return` +  wvi_ck_tot$`non-terminal Ocean catch`


yrs <- sort(wvi_ck_ctc$Year) # years in Nick Brown's spawner index
# Put in SPS format
wvick_sps <- data.frame(
    region = rep("West Vancouver Island", length(yrs)),
    species = rep("Chinook", length(yrs)),
    year = yrs,
    spawners = wvi_ck_ctc$WCVI_14Stream_Index[match(yrs, wvi_ck_ctc$Year)], 
    smoothedSpawners = NA,
    runsize = wvi_ck_tot$total_abundance[match(yrs, wvi_ck_tot$`Return year`)],
    smoothedRunsize = NA,
    source_id = rep(ctc_id, length(yrs))  
) 


# Smoothing
wvick_sps$smoothedSpawners <- genSmooth(
    abund = wvick_sps$spawners,
    years = wvick_sps$year,
    genLength = genLength$gen_length[genLength$region == "West Vancouver Island" & genLength$species == "Chinook"]
)

wvick_sps$smoothedRunsize <- genSmooth(
    abund = wvick_sps$runsize,
    years = wvick_sps$year,
    genLength = genLength$gen_length[genLength$region == "West Vancouver Island" & genLength$species == "Chinook"]
)


if(1 == 2){ # Visualize the time peries put on the same scale
    avg <- c(spawners = exp(mean(log(wvick_sps$spawners), na.rm = TRUE)),
    total = exp(mean(log(wvick_sps$runsize), na.rm = TRUE)))

    plot(wvick_sps$year, (wvick_sps$smoothedRunsize - avg[2])/avg[2], "o", pch = 19)
    abline(h= avg[2])
    points(wvick_sps$year, (wvick_sps$smoothedSpawners - avg[1])/avg[1], "o", col = grey(0.6))

}
# Add to master sps dataframe
sps_data <- rbind(sps_data, wvick_sps)

# Generate standard plot
plot_abund(wvick_sps)
**Above:** Spawner abundance (grey) and total abundance (black) of West Vancouver Island chinook salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Above: Spawner abundance (grey) and total abundance (black) of West Vancouver Island chinook salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

# Generate plot of spawners ONLY so CTC comparison is more visible
sp_compare <- wvi.s_recon %>% ggplot(aes(x=year, y=spwn/1000)) + 
    geom_line(aes(col="DFO 17-Stream Index")) +
    geom_point(aes(col="DFO 17-Stream Index"), shape=21) +
    geom_point(data=wvi_ck_ctc, aes(x=Year, y=WCVI_14Stream_Index/1000, col="CTC 14-Stream Index"), shape=21) +
    geom_line(data=wvi_ck_ctc, aes(x=Year, y=WCVI_14Stream_Index/1000, col="CTC 14-Stream Index"), alpha=0.5) +
    scale_colour_manual(values = c("DFO 17-Stream Index" = "grey50", "CTC 14-Stream Index" = "red")) +
    labs(col="Source", y="Spawner escapement (000s)", x="Year") +
    theme_minimal() +
    theme(legend.position=c(0.6, 0.9)) +
    lims(x=c(1979,2025))

suppressWarnings(print(sp_compare))
**Above:** Spawner abundance (grey) and total abundance (black) of West Vancouver Island chinook salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Above: Spawner abundance (grey) and total abundance (black) of West Vancouver Island chinook salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Sockeye

Reconstructions of sockeye spawners and recruitment are completed by DFO (Nicholas Brown, pers. comm.) for three Conservation Units on West Vancouver Island: Sproat, Great Central, and Huckutlis (formerly Henderson). We used the sum of spawners and total return for these three Conservation Units as the index of sockeye spawner and total abundance for WVI. We acknowledge that this index does not account for lake-type sockeye in other watersheds (e.g., Muchalat, Kennedy, Clayoquot) or river-type sockeye in West Vancouver Island and Northwest Vancouver Island CUs, which tend to be in much lower abundance.

# Sum of CU abundance from Sproat, Great Central, and Henderson
## Load data ---
wvi_se_raw <- readxl::read_xlsx(here("data/Barkley_Sockeye_stock-recruit_infilled.xlsx"), sheet = "S-R data")

wvi_se_summed <- wvi_se_raw %>%
    dplyr::select(year, stock, S, N) %>% # S = escapement, N = annual terminal run size
    filter(year >= 1977) %>% # Remove 1972 to 2076 for HUC because not available for other stocks
    group_by(year) %>%
    summarise(totalS = sum(S),
                        totalN = sum(N))

# plot(wvi_se_summed$year, wvi_se_summed$totalN, "o", ylim = c(0, 2e6), main = "WVI Sockeye", xlab = "", ylab = "")
# points(wvi_se_summed$year, wvi_se_summed$totalS, "o",  col = 2)
# points(yrs, sp[2, "Sockeye", ], "o", col = 4)
# legend("topleft", col = c(1,2,4), c("3 CU - Total run", "3 CU - Escape.", "NuSEDS expanded"), pch = 1, lty = 1)

# Reformat data for SPS
wvise_sps <- data.frame(
    region = rep("West Vancouver Island", dim(wvi_se_summed)[1]),
    species = rep("Sockeye", dim(wvi_se_summed)[1]),
    year = wvi_se_summed$year,
    spawners = wvi_se_summed$totalS, 
    smoothedSpawners = NA,
    runsize = wvi_se_summed$totalN,
    smoothedRunsize = NA,
    source_id = rep("Brown_20260420", dim(wvi_se_summed)[1])
) 

# Smoothing
wvise_sps$smoothedSpawners <- genSmooth(
    abund = wvise_sps$spawners,
    years = wvise_sps$year,
    genLength = genLength$gen_length[genLength$region == "West Vancouver Island" & genLength$species == "Sockeye"]
)

wvise_sps$smoothedRunsize <- genSmooth(
    abund = wvise_sps$runsize,
    years = wvise_sps$year,
    genLength = genLength$gen_length[genLength$region == "West Vancouver Island" & genLength$species == "Sockeye"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, wvise_sps)

# Generate standard figure
plot_abund(wvise_sps)
**Above:** Spawner abundance (grey) and total abundance (black) of West Vancouver Island sockeye salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Above: Spawner abundance (grey) and total abundance (black) of West Vancouver Island sockeye salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Chum

For West Vancouver Island chum salmon, spawner abundance was expanded from available spawner surveys, as described below in Expansion Factors. The full list of indicator streams used for this expansion are in the table below. The latest year of data (2025) were extracted from West Coast of Vancouver Island Stock Assessment bulletin dated October 24, 2025, and should be considered preliminary. We truncated the time series of spawner abundance to years 1953+ because earlier years had high expansion factor values indicating lack of monitoring on key indicator streams (see figures below).

## Process data ---
wvi.s <- sp[2, "Chum", ]
# Get rid of NAs (esp in 2024)
wvi.s <- wvi.s[1:max(which(!is.na(wvi.s)))]

# For all VIMI species, start in 1953 - earlier expansion factors are large
wvi.s   <- wvi.s[which(as.numeric(names(wvi.s)) >= 1953)]

# Reformat data for SPS
wvi.s_sps <- data.frame(
    region = rep("West Vancouver Island", length(wvi.s)),
    species = rep("Chum", length(wvi.s)),
    year = as.numeric(names(wvi.s)),
    spawners = as.numeric(wvi.s), 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(nuseds_id, length(wvi.s))
) 

# Smoothing
wvi.s_sps$smoothedSpawners <- genSmooth(
    abund = wvi.s_sps$spawners,
    years = wvi.s_sps$year,
    genLength = genLength$gen_length[genLength$region == "West Vancouver Island" & genLength$species == "Chum"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, wvi.s_sps)

# Generate standard figure
plot_abund(wvi.s_sps) 
**Above:** Spawner abundance of West Vancouver Island chum salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of West Vancouver Island chum salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

# added_series.s <- sps_data %>%
#   filter(region == "West Vancouver Island", species == "Chum") %>%
#   select(year, spawners) %>%
#   rename("value" = "spawners")
    
plot_expansions(speciesname = "Chum",
                                regionname = "West Vancouver Island",
                                region_spawners = region_spawners,
                                expansion_factors = expansion_factors,
                                exp_ylim = c(1,2))
                                # added_series = added_series.s)
    abline(v = 1952.5)
    text(1953, 1.8, "Data prior to 1953 were discarded", adj = 0)
**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

#rm(added_series.s)
Chum indicator streams (n = 28)
Artlish River Conuma River Marble River Sucwoa River
Bedwell River Cypre River Megin River Tahsis River
Burman River Deserted Creek Moyeha River Tahsish River
Canton Creek Goodspeed River Nahmint River Tlupana River
Carnation Creek Kaouk River Nitinat River Toquart River
Cayeghle Creek Kirby Creek Sarita River Tranquil Creek
Colonial Creek Leiner River Sooke River Tsowwin River

Coho

For West Vancouver Island coho salmon, spawner abundance was expanded from available spawner surveys, as described below in Expansion Factors. The full list of indicator streams used for this expansion are in the table below. The latest year of data (2025) were extracted from West Coast of Vancouver Island Stock Assessment bulletin dated October 24, 2025, and should be considered preliminary. We truncated the time series of spawner abundance to years 1953+ because earlier years had high expansion factor values indicating lack of monitoring on key indicator streams (see figures below).

## Process data ---
wvi.s <- sp[2, "Coho", ]
# Get rid of NAs (esp in 2024)
wvi.s <- wvi.s[1:max(which(!is.na(wvi.s)))]

# For all VIMI species, start in 1953 - earlier expansion factors are large
wvi.s   <- wvi.s[which(as.numeric(names(wvi.s)) >= 1953)]

# Reformat data for SPS
wvi.s_sps <- data.frame(
    region = rep("West Vancouver Island", length(wvi.s)),
    species = rep("Coho", length(wvi.s)),
    year = as.numeric(names(wvi.s)),
    spawners = as.numeric(wvi.s), 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(nuseds_id, length(wvi.s))
) 

# Smoothing
wvi.s_sps$smoothedSpawners <- genSmooth(
    abund = wvi.s_sps$spawners,
    years = wvi.s_sps$year,
    genLength = genLength$gen_length[genLength$region == "West Vancouver Island" & genLength$species == "Coho"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, wvi.s_sps)

# Generate standard figure
plot_abund(wvi.s_sps) 
**Above:** Spawner abundance of West Vancouver Island coho salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of West Vancouver Island coho salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

# added_series.s <- sps_data %>%
#   filter(region == "West Vancouver Island", species == "Coho") %>%
#   select(year, spawners) %>%
#   rename("value" = "spawners")
    
plot_expansions(speciesname = "Coho",
                                regionname = "West Vancouver Island",
                                region_spawners = region_spawners,
                                expansion_factors = expansion_factors)#,
                                # added_series = added_series.s)
    abline(v = 1952.5)
    text(1953, 2, "Data prior to 1953 were discarded", adj = 0)
**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

#rm(added_series.s)
Coho indicator streams (n = 31)
Artlish River Kennedy River - Upper Nitinat River Tlupana River
Bedwell River Kirby Creek Renfrew Creek Toquart River
Burman River Leiner River Sarita River Tranquil Creek
Canton Creek Malksope River Somass River Tsowwin River
Carnation Creek Marble River Sucwoa River Tugwell Creek
Conuma River Moyeha River Tahsis River Watershed Above Stamp Falls
Cypre River Muir Creek Tahsish River Zeballos River
Kaouk River Nahmint River Thornton Creek

Pink

For West Vancouver Island pink salmon, spawner abundance was expanded from available spawner surveys, as described below in Expansion Factors. The full list of indicator streams used for this expansion are in the table below. The latest year of data (2025) were extracted from West Coast of Vancouver Island Stock Assessment bulletin dated October 24, 2025, and should be considered preliminary. We truncated the time series of spawner abundance to years 1953+ because earlier years had high expansion factor values indicating lack of monitoring on key indicator streams (see figures below).

For chum, coho, and steelhead, we relied on NuSEDS’ designations of indicator or non-indicator streams, but for pink salmon in this region we designated indicator streams as those with at least 10 years of data in the most recent 20 years. As a result, expansion factors were higher in historical years, but data from both indicator and non-indicator streams show markedly higher counts in the period 1960-1980 than in subsequent decades and it is unlikely that the observed decline is a result of uncertain expansions.

## Process data ---
wvi.s <- sp[2, "Pink", ]
# Get rid of NAs 
wvi.s <- wvi.s[1:max(which(!is.na(wvi.s)))]

# For all VIMI species, start in 1953 - earlier expansion factors are large
wvi.s   <- wvi.s[which(as.numeric(names(wvi.s)) >= 1953)]

# Reformat data for SPS
wvi.s_sps <- data.frame(
    region = rep("West Vancouver Island", length(wvi.s)),
    species = rep("Pink", length(wvi.s)),
    year = as.numeric(names(wvi.s)),
    spawners = as.numeric(wvi.s), 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(nuseds_id, length(wvi.s))
) 

# Smoothing
wvi.s_sps$smoothedSpawners <- genSmooth(
    abund = wvi.s_sps$spawners,
    years = wvi.s_sps$year,
    genLength = genLength$gen_length[genLength$region == "West Vancouver Island" & genLength$species == "Pink"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, wvi.s_sps)

# Generate standard figure
plot_abund(wvi.s_sps) 
**Above:** Spawner abundance of West Vancouver Island pink salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of West Vancouver Island pink salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

# added_series.s <- sps_data %>%
#   filter(region == "West Vancouver Island", species == "Pink") %>%
#   select(year, spawners) %>%
#   rename("value" = "spawners")
    
plot_expansions(speciesname = "Pink",
                                regionname = "West Vancouver Island",
                                region_spawners = region_spawners,
                                expansion_factors = expansion_factors)#,
                                # added_series = added_series.s)
    abline(v = 1952.5)
    text(1953, par('usr')[4]/3, "Data prior to 1953 were discarded", adj = 0)
**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

#rm(added_series.s)
Pink indicator streams (n = 17)
Bedwell River Kaouk River Sarita River
Cayeghle Creek Leiner River Tahsis River
Colonial Creek Marble River Tahsish River
Conuma River Megin River Toquart River
Cypre River Moyeha River Ursus Creek
Espinosa Creek San Juan River

Steelhead

For West Vancouver Island steelhead, spawner abundance was expanded from available spawner surveys, as described below in Expansion Factors. The full list of indicator streams used for this expansion are in the table below. Data from the Englishman, Gold, Herber, Gordon, and Tsitika Rivers were provided by Michael McCulloch from BC’s Ministry of Water, Land and Resource Stewardship.

## Process data ---
wvi.s <- sp[2, "Steelhead", ]
# Get rid of NAs (esp in 2024)
wvi.s <- wvi.s[1:max(which(!is.na(wvi.s)))]

# For all VIMI species, start in 1953 - earlier expansion factors are large
wvi.s   <- wvi.s[which(as.numeric(names(wvi.s)) >= 1953)]

# Reformat data for SPS
wvi.s_sps <- data.frame(
    region = rep("West Vancouver Island", length(wvi.s)),
    species = rep("Steelhead", length(wvi.s)),
    year = as.numeric(names(wvi.s)),
    spawners = as.numeric(wvi.s), 
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep(nuseds_id, length(wvi.s))
) 

# Smoothing
wvi.s_sps$smoothedSpawners <- genSmooth(
    abund = wvi.s_sps$spawners,
    years = wvi.s_sps$year,
    genLength = genLength$gen_length[genLength$region == "West Vancouver Island" & genLength$species == "Steelhead"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, wvi.s_sps)

# Generate standard figure
plot_abund(wvi.s_sps) 
**Above:** Spawner abundance of West Vancouver Island steelhead salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of West Vancouver Island steelhead salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

# added_series.s <- sps_data %>%
#   filter(region == "West Vancouver Island", species == "Steelhead") %>%
#   select(year, spawners) %>%
#   rename("value" = "spawners")
    
plot_expansions(speciesname = "Steelhead",
                                regionname = "West Vancouver Island",
                                region_spawners = region_spawners,
                                expansion_factors = expansion_factors)#,
                                # added_series = added_series.s)
    abline(v = 1952.5)
    text(1953, 3, "Data prior to 1953 were discarded", adj = 0)
**Above:**  (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

Above: (a) Time series of spawner abundances showing raw sum of counts for indicator streams (red) and expanded estimates of spawner abudnance to indicator and non-indicator streams (black). This expanded time series is what is used to assess the current state and trends in spawner abundance for the region and species. (b) The values of Expansion Factor 1 that accounts for unmonitored indicator streams in a given year, and is calculated based on the proportional contribution of the unmonitored indicator stream(s) to the sum of all indicator streams in a (reference) decade.

#rm(added_series.s)
Steelhead indicator streams (n = 3)
Gold River Heber River
Gordon River

2.2.9 Fraser

Chinook

Escapement and run size for Fraser Chinook were provided to PSF by Lauren Weir, DFO (pers. comm.). We took the sum of escapement and terminal run for five major stocks (Fraser Spring 4-2 (age 1.2), Fraser Spring 5-2 (age 1.3), Fraser Summer 5-2 (age 1.3), Fraser Summer 4-1 (age 0.3), and Harrison (Fraser Fall 4-1, age 0.3)). Escapement numbers match those in Table B6 of the PSC’s Chinook Technical Committee (CTC) data sets as shown by purple open circles below. The ‘t.run’ in the CTC dataset excludes the Harrison stock.

# Data from Lauren Weir (shared 2026-04-24 by email)
frck <- readxl::read_xlsx(here("data/1975-2025 Fraser Chinook escapement and terminal run by SMU - for PSF.xlsx"), skip=1, .name_repair = "unique_quiet")
frck_smu <- readxl::read_xlsx(here("data/1975-2025 Fraser Chinook escapement and terminal run by SMU - for PSF.xlsx"), range="A1:K1", col_names=F, .name_repair = "unique_quiet") # get smu names
frck_smu <- rep(stringr::str_remove_all(frck_smu, "Fraser|age|-run|[[:punct:]]|[[:space:]]")[!is.na(frck_smu)], each=2)
names(frck)[2:ncol(frck)] <- paste(frck_smu, stringr::str_extract_all(names(frck)[2:ncol(frck)], "Esc|Run"), sep="_") # stitch together smu and col names
names(frck) <- stringr::str_to_lower(names(frck))


# Cut data to only 1984 onward when Harrison data were available.
frck <- frck %>% dplyr::filter(year >= 1984)

# Sum across SMUs
frck_esc <- round(apply(frck[, grep("esc", names(frck))], 1, sum))
frck_run <- round(apply(frck[, grep("run", names(frck))], 1, sum))

yrs <- frck$year

# Put in SPS format
frck_sps <- data.frame(
    region = rep("Fraser", length(yrs)),
    species = rep("Chinook", length(yrs)),
    year = yrs,
    spawners = frck_esc,
    smoothedSpawners = NA,
    runsize = frck_run,
    smoothedRunsize = NA,
    source_id = rep("Weir_20260424", length(yrs))
) 
    
    # Smoothing
frck_sps$smoothedSpawners <- genSmooth(
        abund = frck_sps$spawners,
        years = frck_sps$year,
        genLength = genLength$gen_length[genLength$region == "Fraser" & genLength$species == "Chinook"]
    )

frck_sps$smoothedRunsize <- genSmooth(
    abund = frck_sps$runsize,
    years = frck_sps$year,
    genLength = genLength$gen_length[genLength$region == "Fraser" & genLength$species == "Chinook"]
)


# Add to master sps dataframe
sps_data <- rbind(sps_data, frck_sps)

# Generate standard figure
plot_abund(frck_sps)

# Load CTC data for comparison
frck_ctc <- readxl::read_xlsx(here("data/TCCHINOOK-26-03-Appendix-B-Escapement-Detailed.xlsx"), sheet = "B6", range = "A5:G54", col_types = "numeric", col_names = c("Year", "Spr12_esc", "Spr13_esc", "Sum03_esc", "Sum13_esc", "SprSum_trun", "Harr_esc"))
frck_ctc <- frck_ctc %>% mutate(total_esc = Spr12_esc + Spr13_esc + Sum03_esc + Sum13_esc + Harr_esc)

# Plot comparison
points(x=frck_ctc$Year, y=frck_ctc$total_esc/1000, col="purple")
**Above:** Spawner abundance (grey) and total abundance (black) of Fraser chinook salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Above: Spawner abundance (grey) and total abundance (black) of Fraser chinook salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

## New names:
## New names:
## • `Total Escapement` -> `Total Escapement...2`
## • `Terminal Run` -> `Terminal Run...3`
## • `Total Escapement` -> `Total Escapement...4`
## • `Terminal Run` -> `Terminal Run...5`
## • `Total Escapement` -> `Total Escapement...6`
## • `Terminal Run` -> `Terminal Run...7`
## • `Total Escapement` -> `Total Escapement...8`
## • `Terminal Run` -> `Terminal Run...9`
## • `Total Escapement` -> `Total Escapement...10`
## • `Terminal Run` -> `Terminal Run...11`
**Above:**  (a) Aggregate escapement of Fraser Chinook with the contribution of escapement to each of five stocks shown as coloured regions. Note that the Harrison River (Fall 4-1) time series begins later (1984) than the other four stocks (1975), and thus we only report spawner abundance from 1984 onward. (b) The proportional contribution of each of five stocks to aggregate Fraser Chinook escapement.

Above: (a) Aggregate escapement of Fraser Chinook with the contribution of escapement to each of five stocks shown as coloured regions. Note that the Harrison River (Fall 4-1) time series begins later (1984) than the other four stocks (1975), and thus we only report spawner abundance from 1984 onward. (b) The proportional contribution of each of five stocks to aggregate Fraser Chinook escapement.

Chum

Fraser chum escapement and total run estimates were provided to us upon request by Brittany Jenewin (DFO, pers. comm.).

**Above:** Spawner abundance (grey) and total abundance (black) of Fraser Chum salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Above: Spawner abundance (grey) and total abundance (black) of Fraser Chum salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Coho

New Interior Fraser Coho estimates were provided by Tanya Vivian (DFO) in 2026. “Total Prefishery Abundance” is total return plus harvest, and can be considered equivalent to run size, while “Total Return” is spawners plus fish removed later for brood collection or AFC sacrifices (applicable only to the three indicator stocks).

## Load data ---
frco <- readxl::read_excel(here("data/IFC-Data-TanyaVivian-2026.xlsx"), sheet=2) %>% 
    summarize(Run.size = sum(Total.Prefishery.Abundance),
                        Spawners = sum(Total.Return),
                        Natural.Spawners = sum(Natural.Returns),
                        Hatchery.Spawners = sum(`Hatchery Returns`), .by=ReturnYear)
frco_old <- read.csv(here("data/IFC_data_compiled.csv"))


# Put in SPS format
frco_sps <- data.frame(
    region = rep("Fraser", length(frco$ReturnYear)),
    species = rep("Coho", length(frco$ReturnYear)),
    year = frco$ReturnYear,
    spawners = frco$Spawners, # Note this is the fish that returned to spawn, NOT a mistake!
    smoothedSpawners = NA,
    runsize = frco$Run.size,
    smoothedRunsize = NA,
    source_id = "Vivian_20260527" # c(rep("Glavas_20231006", length(frco$year) - 2), rep("DFO_20250225", 2))
) 

# Smoothing
frco_sps$smoothedSpawners <- genSmooth(
    abund = frco_sps$spawners,
    years = frco_sps$year,
    genLength = genLength$gen_length[genLength$region == "Fraser" & genLength$species == "Coho"]
)

frco_sps$smoothedRunsize <- genSmooth(
    abund = frco_sps$runsize,
    years = frco_sps$year,
    genLength = genLength$gen_length[genLength$region == "Fraser" & genLength$species == "Coho"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, frco_sps)

# Generate standard figure
plot_abund(frco_sps)
**Above:** Spawner abundance (grey) and total abundance (black) of Fraser coho salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Above: Spawner abundance (grey) and total abundance (black) of Fraser coho salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

#points(frco_old$year, frco_old$spawners/1000, col="purple")
#points(frco_old$year, frco_old$runsize/1000, col="blue")

Pink

Data on total return and spawner abundance of pink salmon in the Fraser region are provided by the PSC and accessed through the Fraser Panel Annual Report: Data Application (Pacific Salmon Commission 2026). We note that Fraser River pink salmon are only counted in the dominant, odd-year run.

## Load data ---
# Note: Only odd year data, so no change in some years
# From PSC 
frpk <- read.csv(here("data/pink_run_size_2026-04-20.csv"))

# Put in SPS format
frpk_sps <- data.frame(
    region = rep("Fraser", length(frpk$Year)),
    species = rep("Pink", length(frpk$Year)),
    year = frpk$Year,
    spawners = frpk$Escapement, # Note this is the fish that returned to spawn, NOT a mistake!
    smoothedSpawners = NA,
    runsize = frpk$Run.Size,
    smoothedRunsize = NA, 
    source_id = rep("PSC_20260417", length(frpk$Year))
) 

# Smoothing - don't do this for pink salmon in the Fraser - no even year data!
frpk_sps$smoothedSpawners <- frpk_sps$spawners
frpk_sps$smoothedRunsize <- frpk_sps$runsize

# Add to master sps dataframe
sps_data <- rbind(sps_data, frpk_sps)

#Generate standard figure
plot_abund(frpk_sps)
**Above:** Spawner abundance (grey) and total abundance (black) of Fraser pink salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Above: Spawner abundance (grey) and total abundance (black) of Fraser pink salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Sockeye

Data on total return and spawner abundance of sockeye salmon in the Fraser region are provided by the PSC and accessed through the Fraser Panel Annual Report: Data Application (Pacific Salmon Commission 2026). The 2025 total return is considered preliminary (in-season estimate) and the 2025 escapement is “near-final” (Provided by email by Sean Everitt).

## Load data ---
# From PSC
frse <- read.csv(here("data/Fraser Sockeye Run Size_2026-04-20.csv")) %>%
    filter(Management.Group == "Total Fraser")

# Load 2025 Near-final escapement estimates
frse_esc_2025 <- readxl::read_xlsx(here("data/2025 Fraser Sockeye Escapement Summary.xlsx"), sheet=2)

# Put in SPS format
frse_sps <- data.frame(
    region = rep("Fraser", length(frse$Year)),
    species = rep("Sockeye", length(frse$Year)),
    year = frse$Year,
    spawners = c(frse$Spawning.Escapement[which(frse$Year<2025)], 
                             frse_esc_2025$escapement[frse_esc_2025$area_cu=="Total"]), # Add 2025 near-final estimate # Note this is the fish that returned to spawn, NOT a mistake!
    smoothedSpawners = NA,
    runsize = frse$Run.Size,
    smoothedRunsize = NA,
    source_id = c(rep("PSC_20260417", length(frse$Year)-1), "Everitt_20260708")
) 

# Fill in run size with in-season estimates if available
if(sum(is.na(frse_sps$runsize)) > 0){
    if(sum(!is.na(frse$In.season.Run.Size[which(frse$Year %in% frse_sps$year[is.na(frse_sps$runsize)])])) > 0){
        frse_sps$runsize[which(frse$Year %in% frse_sps$year[is.na(frse_sps$runsize)])] <- frse$In.season.Run.Size[which(frse$Year %in% frse_sps$year[is.na(frse_sps$runsize)])]
    }
}

# Smoothing
frse_sps$smoothedSpawners <- genSmooth(
    abund = frse_sps$spawners,
    years = frse_sps$year,
    genLength = genLength$gen_length[genLength$region == "Fraser" & genLength$species == "Sockeye"]
)

frse_sps$smoothedRunsize <- genSmooth(
    abund = frse_sps$runsize,
    years = frse_sps$year,
    genLength = genLength$gen_length[genLength$region == "Fraser" & genLength$species == "Sockeye"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, frse_sps)

# Generate standard figure
# plot_abund(frse_sps[frse$Year >= 1980,]); abline(v = 2024)
plot_abund(frse_sps)
**Above:** Spawner abundance (grey) and total abundance (black) of Fraser sockeye salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Above: Spawner abundance (grey) and total abundance (black) of Fraser sockeye salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Steelhead

Steelhead trout in the Fraser are monitored by the Province in at least 10 different streams, but these data are not readily available. Relatively reliable estimates of steelhead spawner abundance are available at the CU-level for interior Fraser steelhead from the Thompson Summer CU (monitored at the Thompson River) and Mid Fraser Summer CU (primarily monitored at the Chilcotin River; data in the Pacific Salmon Explorer). We used the sum of CU-level spawner abundance for these two CUs as an index of Fraser steelhead abundance. We note that this approach does not include more coastal populations, such as the Lower Fraser Summer steelhead monitored in the Coquihalla River or Boundary Bay Winter steelhead, which may not have declined to the same extent over the past decade. However, a lack of publicly accessible data on coastal Fraser steelhead has limited our ability to include these CUs in our index of abundance.

## Load data ---
# Use sum of two main Fraser steelhead CUs

frsh <- read.csv("https://raw.githubusercontent.com/salmonwatersheds/steelhead-data/refs/heads/main/output/dataset1_spawner-abundance_Steelhead.csv") %>% 
    filter(region == "Fraser", species_name == "Steelhead") %>%
    filter(cu_name_pse %in% c("Thompson Summer", "Mid Fraser Summer")) %>%
    filter(!is.na(estimated_count) & estimated_count != -989898)

frsh_sum <- tapply(as.numeric(frsh$estimated_count), frsh$year, sum)
frsh_sum <- frsh_sum[min(which(!is.na(frsh_sum))): max(which(!is.na(frsh_sum)))]

# Put in SPS format
frsh_sps <- data.frame(
    region = rep("Fraser", length(frsh_sum)),
    species = rep("Steelhead", length(frsh_sum)),
    year = as.numeric(names(frsh_sum)),
    spawners = frsh_sum, # Note this is the fish that returned to spawn, NOT a mistake!
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep("Bison_20241129", length(frsh_sum))
) 

# Smoothing
frsh_sps$smoothedSpawners <- genSmooth(
    abund = frsh_sps$spawners,
    years = frsh_sps$year,
    genLength = genLength$gen_length[genLength$region == "Fraser" & genLength$species == "Steelhead"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, frsh_sps)

# Generate standard figure
plot_abund(frsh_sps)
**Above:** Spawner abundance of Fraser steelhead salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of Fraser steelhead salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

2.2.10 Columbia

Chinook

We used CU-level estimates of spawner abundance (run reconstructions) sourced from DFO (Athena Ogden, pers. comm.) for 2006-2023 and Okanagan Nation Alliance (Katherine Fegan, pers. comm.) for 2024-2025.

colck <- read.csv(here("data/Chinook_Okanagan_NEW.csv")) %>% filter(Year >= 2006)
# Downloaded from https://github.com/SOLV-Code/Scanner-Data-Processing/blame/main/DATA_IN/Chinook_Okanagan_NEW.csv
# on March 18, 2025

# Put in SPS format
colck_sps <- data.frame(
    region = rep("Columbia", length(colck$Year)),
    species = rep("Chinook", length(colck$Year)),
    year = colck$Year,
    spawners = as.numeric(colck$NatOrigSpn + colck$HatchOrigSpn), # Note this is the fish that returned to spawn, NOT a mistake!
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep("DFO_20250318", length(colck$Year))
) %>%
    bind_rows(data.frame(
        region = rep("Columbia", 2),
    species = rep("Chinook", 2),
    year = 2024:2025,
    spawners = c(36, 12),
    source_id = rep("Fegan_20260827", 2)
    ))

# Smoothing
colck_sps$smoothedSpawners <- genSmooth(
    abund = colck_sps$spawners,
    years = colck_sps$year,
    genLength = genLength$gen_length[genLength$region == "Columbia" & genLength$species == "Chinook"]
)

# Add to master sps dataframe
sps_data <- rbind(sps_data, colck_sps)

# Generate standard figure
plot_abund(colck_sps)
**Above:** Spawner abundance of Columbia chinook salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of Columbia chinook salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Sockeye

We used CU-level estimates of spawner abundance (run reconstructions) sourced from Athena Ogden (DFO) for Chinook and sockeye. Spawner abundance for Columbia sockeye was the sum of estimates for Osoyoos and, more recently, Skaha Lakes and were the most up-to-date estimates as of June 2025 (Athena Ogden, pers. comm.). Total abundance for sockeye was provided by Howard Stiff at DFO.

# Load data ---
colse_old <- read.csv(here("data/spawner_abundance.csv")) %>% 
    subset(region == "Columbia" &  species_name == "Lake sockeye") %>%
    subset(!is.na(estimated_count))

# Total abundance data received by email from Howard Stiff on 9/11/2026
colse <- read.csv(here("data/OSO_SKA_Recruitment_251115.csv"))

colse2 <- readxl::read_xlsx(here("data/Okanagan Sockeye Esc for KR_revJn2025.xlsx"), sheet = "CAN Escapement", range = "A1:E65")

# Put in SPS format
yrs <- c(sort(colse2$Year), 2025) # don't use pre-2004 (not comparable; DFO 2024)
colse_sps <- data.frame(
    region = rep("Columbia", length(yrs)),
    species = rep("Sockeye", length(yrs)),
    year = yrs,
    spawners = c(round(colse2$`Total spawners`[match(yrs[1:64], colse2$Year)]), 9440+1756), # 2025 numbers from Patrick Thompson email dated August 26 2026 
    smoothedSpawners = NA,
    runsize = c(colse$Okanagan.Bound.Sockeye[match(yrs[1:64], colse$Year)], 81887+14907), # 2025 numbers from Patrick Thompson email dated August 26 2026 
    smoothedRunsize = NA, 
    source_id = c(rep("Ogden_20250627, Stiff_20260911", length(yrs) - 1), "Thompson_20260826")
) 

# Smoothing
colse_sps$smoothedSpawners <- genSmooth(
    abund = colse_sps$spawners,
    years = colse_sps$year,
    genLength = genLength$gen_length[genLength$region == "Columbia" & genLength$species == "Sockeye"]
)
colse_sps$smoothedRunsize <- genSmooth(
    abund = colse_sps$runsize,
    years = colse_sps$year,
    genLength = genLength$gen_length[genLength$region == "Columbia" & genLength$species == "Sockeye"]
)


# Add to master sps dataframe
sps_data <- rbind(sps_data, colse_sps)

# Generate standard figure
plot_abund(colse_sps)
**Above:** Spawner abundance (grey) and total abundance (black) of Columbia sockeye salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Above: Spawner abundance (grey) and total abundance (black) of Columbia sockeye salmon. For both, the raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average for each.

Steelhead

There is no monitoring of steelhead trout in the Canadian portion of the Columbia region, but the Okanagan Nation Alliance does enumerate steelhead in akskwəkwant (Inkaneep Creek) and estimate a Canadian portion of steelhead spawning abundance. These data can be found in Table 8 of the associated report (e.g. OBMEP (2026)) and are available for the Mid Columbia Summer Conservation Unit in the Pacific Salmon Explorer. We use the sum of natural and hatchery-origin spawners.

colsh <- read.csv(here("data/Columbia_Steelhead_OBMEP.csv"))

# Put in SPS format
colsh_sps <- data.frame(
    region = rep("Columbia", length(colsh$year)),
    species = rep("Steelhead", length(colsh$year)),
    year = colsh$year,
    spawners = colsh$total_spawners, # Note this is the fish that returned to spawn, NOT a mistake!
    smoothedSpawners = NA,
    runsize = NA,
    smoothedRunsize = NA,
    source_id = rep("OBMEP_20260228", length(colsh$year))
) 

# Smoothing
colsh_sps$smoothedSpawners <- genSmooth(
    abund = colsh_sps$spawners,
    years = colsh_sps$year,
    genLength = genLength$gen_length[genLength$region == "Columbia" & genLength$species == "Steelhead"]
)


# Add to master sps dataframe
sps_data <- rbind(sps_data, colsh_sps)

# Generate standard figure
plot_abund(colsh_sps)
**Above:** Spawner abundance of Columbia steelhead salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

Above: Spawner abundance of Columbia steelhead salmon. The raw data is shown by points and the smoothed metric by solid lines. Dashed horizonal lines represent the long-term average.

# Round abundances
sps_data$spawners <- round(sps_data$spawners)
sps_data$runsize <- round(sps_data$runsize)

sps_data$smoothedSpawners <- round(sps_data$smoothedSpawners, 1)
sps_data$smoothedRunsize <- round(sps_data$smoothedRunsize, 1)


if(write.output == TRUE){
    write.csv(sps_data, here("output/sps-data.csv"), row.names = FALSE) # Always have most recent 
    write.csv(sps_data, paste0(Dropbox_dir, "/output/archive/", "sps-data_", Sys.Date(), ".csv"), row.names = FALSE) # Archive with date
}

2.3 Expansion Factors

For species and regions that lacked reliable data on spawner abundance and total return at the appropriate scale, we estimated regional-scale abundance from stream-level surveys. We started with spawner survey data shown in the Pacific Salmon Explorer. Spawner surveys were each assigned to one of the ten regions based on their geographic location. We note that this is slightly different from how spawner survey data are organized in the Pacific Salmon Explorer, where data are organized by Conservation Units (CUs) that may span regional boundaries (e.g. for pink salmon that have relatively geographically large CUs). In cases of trans-regional CUs, the spawner surveys appear in both regions in the Pacific Salmon Explorer, whereas here we assign spawner surveys to the region in which they fall geographically, regardless of the CU boundary.

Spawner survey data are largely derived from river-level estimates in DFO’s New Salmon Escapement Database System (NuSEDS), but are cleaned up to address issues of, for example, inconsistent naming of streams through time or duplicate data. The spawner survey abundance is equal to the MAX_ESTIMATE in NUSEDS for each year and river population, calculated as the maximum of all fields containing spawner abundance data (e.g. natural adult spawners, natural jack spawners, total broodstock removals). Each of these river populations has been designated as an indicator stream or non-indicator. Indicator streams are observed more consistently in recent decades, tend to have higher spawner abundance, and tend to be monitored using more intensive methods that provide greater accuracy (English et al. 2018). We designate indicator streams based on the NuSEDS field with two exceptions: for regions in the north and central coast we relied on a review of indicator streams by English et al. (2018) and for WVI pink salmon we assigned indicator streams based on monitoring frequency (see Region Specific Data Sources: West Vancouver Island). The choice of indicator streams seemed to have minimal impact on results: outcomes did not change substantially when comparing between indicators designated by English et al. (2018) and in NuSEDS. Nonetheless, revisiting indicator designations is a priority in future years given ongoing declines in monitoring effort (Atkinson et al. 2025). For further information on the compilation of spawner survey data, see the Pacific Salmon Explorer Technical Report.

Expansion Factor 1, \(F_{1,y/d}\), expands the observed spawner abundances in indicator streams to account for indicator streams that are not monitored in a given year. It is calculated for each year \(y\) of the spawner time series, and relies on a decadal contribution of each indicator stream to the total escapement to all indicator streams, \(P_{d,i}\) in decade \(d\) (English et al. 2018). The calculation of this decadal contribution requires at least one estimate from each indicator stream for the decade. If a decade does not contain sufficient information (i.e. one or more indicator streams are not monitored at all in a decade), then a reference decade is used to calculate \(P_{d,i}\). This reference decade is chosen to be: (1) the closest decade (historical or future) with sufficient information, or failing (1), (2) the 20-year period from 1980-1999 (Challenger et al. 2018).

For each decade (or reference decade if insufficient information) \(d\), the average number of spawners returning to indicator stream \(i\) is calculated as:

\[\bar{S}_{d,i} = \sum_{y = 1}^{Y_{d,i}} \frac{\hat{S}_{y/d, i}}{Y_{d,i}} \] where \(Y_{d,i}\) is the number of years for which spawner estimates are available within decade \(d\) for stream \(i\). From the average number of spawners for all indicator streams, the decadal proportional contribution of each indicator stream is calculated as:

\[P_{d,i} = \frac{\bar{S}_{d,i}}{\sum_{i=1}^{I} \bar{S}_{d,i}}\] where \(I\) is the total number of indicator streams.

Expansion Factor 1 is then calculated for each year within the decade \(y/d\) based on the decadal contributions and which streams were monitored or not in a given year:

\[F_{1,y/d}=\left( \sum_{i=1}^I P_{d,i} w_{y/d,i} \right)\] where \(w_{y/d,i}\) is 1 if stream \(i\) was monitored in year \(y\) and 0 if stream \(i\) was not monitored in year \(y\). Expansion Factor 1 is then multiplied by the sum of the observed spawners in all indicator stream to yield the expanded estimate of spawner abundances in all indicator streams in the region:

\[S'_{y} = F_{1,y/d} \sum_{i=1}^I \hat{S}_{y,i}\]

Expansion Factor 2 \(F_{2,d}\) expands the spawner abundance to all indicator streams, \(S'_{y}\), to account for non-indcator streams. Unlike Expansion Factor 1, this is calculated for each decade (rather than each year) and then applied to all years within a decade. Like Expansion Factor 1, there needs to be sufficient information within the given decade in order to calculate \(F_{2,d}\), or else a reference decade is chosen. See English et al. (2018) for detailed on how reference decades are chosen in that case.

Expansion Factor 2 is calculated as:

\[F_{2,d} = \frac{\sum_{i = 1}^I \bar{S}_{d,i} + \sum_{j = 1}^{J} \bar{S}_{d,j}}{\sum_{i = 1}^I \bar{S}_{d,i}}\] where \(\bar{S}_{d,i}\) and \(\bar{S}_{d,j}\) are the deacdal average number of spawners in indicator and non-indicator streams, respectively, calculated above. \(J\) is the total number of non-indicator streams. The adjusted total number of spawners in both indicator and non-indicator streams is then calculated as: \[ S''_{y} = F_{2,d} S'_{y} \]

Note that when expanding spawner abundance for spawner-recruit analysis, a third expansion factor is applied to account for streams that are never monitored and for observer (in)efficiency (Peacock et al. 2020). We did not apply this third expansion factor because it is highly undertain and we are interested in relative changes in abundance through time, so we do not require to expand to absolute abundance.

2.4 Smoothing

We smoothed time series of spawner abundance and total return using a right-aligned running geometric mean over the length of a generation. This reduces the influence of dominant years and produces an index that is less sensitive to stochastic interannual variability that is common in salmon population dynamics. The generation length was based on the dominant life-history type for each species in a particular region. The smoothed spawner abundance in year \(y\) given a generation length \(g\) was calculated as: \[ \bar{S_{y}} = \left( \prod_{t = y-g+1}^y {S''_t} \right)^{1/g} \]

We smoothed abundance from the first year to the most recent year of raw abundance data. If there were intermediate years with missing data, the smoothed abundance was still calculated using the available years (i.e. ignoring the missing data, with the exponent \(1/g\) adjusted so that \(g\) reflected the number of years with data in the generation). If all years in a generation were missing data, than the smoothed abundance was NA.

When plotting, we show the smoothed abundance relative to the long-term historical average, so that species that have vastly different abundances within a region can be plotted on the same y-axis for comparison.

2.5 Quantifying change

We summarize the time series of smoothed spawner abundance or total return at the regional scale using three different metrics:

  1. Current status relative to historical average;
  2. Long-term trend over the entire time series; and
  3. Short-term trend over the most recent three generations.

The currents status provides information on how the most recent spawner abundance compares to past values, while the two trend metrics provide information on the average direction of change and are less sensitive to the magnitude of current abundance.

The current status relative to historical average is calculated as: \[ (\bar{S_{y}} - \bf{S}) / \bf{S} \] where \(y\) is the most recent year for which the index of spawner abundance could be calculated and \(\bf{S}\) is the average smoothed spawner abundance over the entire time series.

The long-term trend is calculated following the recommendations of D’Eon-Eggertson et al. (2015), who found that the correct identification of declines in salmon population abundance may be most reliable when considering the entire time series, and applying regression-based estimates of change calculated from log-transformed and smoothed spawner abundances. As such, we fit a simple linear model to the time series of \(\log ( \bar{S}_{y} )\) over \(y\). The resulting slope, \(m\), gives an average estimate of annual change:

\[ m = \log \left( \frac{\bar{S}_{y}}{\bar{S}_{y-1}} \right)\].

With some rearranging, we can calculate the average annual percent change as: \[ \frac{\bar{S}_{y} - \bar{S}_{y-1}}{\bar{S}_{y-1}} = \frac{ e^m \bar{S}_{y-1} - \bar{S}_{y-1}}{\bar{S}_{y-1}} = e^m - 1\]. If the slope \(m\) is not significantly different from zero (\(p \geq 0.05\)), then the trend is classified as “stable” regardless of the magnitude of the estimated slope. If the slope is significantly different from zero (\(p < 0.05\)), then the trend is classified as increasing if \(m > 0\) or decreasing if \(m < 0\).

The short-term trend is calculated as described above, but only using the time series over the most recent three generations.

**Above:**  Simulated time series of spawner abundance (grey line), smoothed with a running geometric mean over the generation length (4 years; black line). The three metrics are illustrated: **Current status** relative to historical average (black);  **Long-term trend** over the entire time series (green); and **Short-term trend** over the most recent three generations (clay). The shaded regions of the regression lines indicate the 95% prediction intervals. In this example, the short-term trend is not statistically significant (p > 0.05), and so the trend is characterized as 'stable' despite the negative slope.

Above: Simulated time series of spawner abundance (grey line), smoothed with a running geometric mean over the generation length (4 years; black line). The three metrics are illustrated: Current status relative to historical average (black); Long-term trend over the entire time series (green); and Short-term trend over the most recent three generations (clay). The shaded regions of the regression lines indicate the 95% prediction intervals. In this example, the short-term trend is not statistically significant (p > 0.05), and so the trend is characterized as ‘stable’ despite the negative slope.

2.5.1 Additional Considerations

The standardized approach to quantifying change described above was applied across regions and species. We then considered two additional attributes prior to reporting on the State of Salmon:

  1. If the species and region had no data in the most recent generation, the current status was “Unknown” even if historical abundance information was available.

  2. If there was reliable information that the absolute population size was < 1,500 spawners, then the species and region was considered at risk of extirpation regardless of the outcome of the metrics above. This was the case for Columbia Chinook which have been assessed as Endangered by COSEWIC due to low population size (COSEWIC 2017) and Columbia steelhead. There were other regions and species that had spawner abundance < 1,500, but none of these had reliable estimates of absolute spawner abundance.

3 Results

These trends in aggregated spawner abundance provide a broad overview of how salmon are doing, but must be interpreted with caution due to the diversity of populations with potentially different outlooks within each region and species.

The status of spawner abundance is, in most cases, more positive than the status in total return, highlighting that declines in fisheries have been pervasive. In all cases, the most complete picture is obtained by looking at all of the metrics we calculate.

Highlights from the 2026 State of Salmon report:

  • The state of salmon remains precarious, with approximately half of all salmon populations across British Columbia and the Yukon below their long-term average.

  • Sockeye had above-average spawner abundance in all but one region – East Vancouver Island & Mainland Inlets.

  • Coho populations are up in some southern regions, while most northern populations remain near or below average.

  • Steelhead are in serious decline with below-average spawners in nearly every region.

3.1 All regions

Overview results table

Below: Summary of current state for spawner or total abundance (tabs) across regions and species, comparing between previous years’ outcomes and revised outcomes. Regions and species below historical average are in red and above historical average are in green. Black cells indicate species that are not thought to be present in the given region, and grey cells indicate status was Unknown.

Spawners

Runsize

3.2 Yukon

All species table

Below: Summary of the three metrics for spawners and total return. For long-term trends and short-term trends, the percentage is the average annual change calculated over the respective time period. Grey values indicate the % change was not significantly different from zero (i.e., stable), red values indicate declining trends, and green values indicate increasing trends.

Chinook

Spawners

**Above:** Detailed status and trend metrics for Yukon Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Yukon Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Total Return

**Above:** Detailed status and trend metrics for Yukon Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Yukon Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Chum

Spawners

**Above:** Detailed status and trend metrics for Yukon Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Yukon Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Total Return

**Above:** Detailed status and trend metrics for Yukon Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Yukon Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

3.3 Northern Transboundary

All species table

Below: Summary of the three metrics for spawners and total return. For long-term trends and short-term trends, the percentage is the average annual change calculated over the respective time period. Grey values indicate the % change was not significantly different from zero (i.e., stable), red values indicate declining trends, and green values indicate increasing trends.

Chinook

Spawners

**Above:** Detailed status and trend metrics for Transboundary Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Transboundary Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Total Return

**Above:** Detailed status and trend metrics for Transboundary Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Transboundary Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Sockeye

Spawners

**Above:** Detailed status and trend metrics for Transboundary Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Transboundary Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Total Return

**Above:** Detailed status and trend metrics for Transboundary Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Transboundary Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Coho

Spawners

**Above:** Detailed status and trend metrics for Transboundary Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Transboundary Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Total Return

**Above:** Detailed status and trend metrics for Transboundary Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Transboundary Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Chum

Spawners

**Above:** Detailed status and trend metrics for Transboundary Chum: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Transboundary Chum: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Pink

Spawners

**Above:** Detailed status and trend metrics for Transboundary Pink: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Transboundary Pink: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Steelhead

Spawners

**Above:** Detailed status and trend metrics for Transboundary Steelhead: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Transboundary Steelhead: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

3.4 Haida Gwaii

All species table

Below: Summary of the three metrics for spawners and total return. For long-term trends and short-term trends, the percentage is the average annual change calculated over the respective time period. Grey values indicate the % change was not significantly different from zero (i.e., stable), red values indicate declining trends, and green values indicate increasing trends.

Chinook

Spawners

**Above:** Detailed status and trend metrics for Haida Gwaii Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Haida Gwaii Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Chum

Spawners

**Above:** Detailed status and trend metrics for Haida Gwaii Chum: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Haida Gwaii Chum: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Coho

Spawners

**Above:** Detailed status and trend metrics for Haida Gwaii Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Haida Gwaii Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Pink

Spawners

**Above:** Detailed status and trend metrics for Haida Gwaii Pink: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Haida Gwaii Pink: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Sockeye

Spawners

**Above:** Detailed status and trend metrics for Haida Gwaii Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Haida Gwaii Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

3.5 Nass

All species table

Below: Summary of the three metrics for spawners and total return. For long-term trends and short-term trends, the percentage is the average annual change calculated over the respective time period. Grey values indicate the % change was not significantly different from zero (i.e., stable), red values indicate declining trends, and green values indicate increasing trends.

Chinook

Spawners

**Above:** Detailed status and trend metrics for Nass Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Nass Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Total Return

**Above:** Detailed status and trend metrics for Nass Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Nass Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Sockeye

Spawners

**Above:** Detailed status and trend metrics for Nass Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Nass Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Total Return

**Above:** Detailed status and trend metrics for Nass Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Nass Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Coho

Spawners

**Above:** Detailed status and trend metrics for Nass Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Nass Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Total Return

**Above:** Detailed status and trend metrics for Nass Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Nass Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Pink

Spawners

**Above:** Detailed status and trend metrics for Nass Pink: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Nass Pink: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Total Return

**Above:** Detailed status and trend metrics for Nass Pink: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Nass Pink: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Chum

Spawners

**Above:** Detailed status and trend metrics for Nass Chum: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Nass Chum: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Total Return

**Above:** Detailed status and trend metrics for Nass Chum: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Nass Chum: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Steelhead

Spawners

**Above:** Detailed status and trend metrics for Nass Steelhead: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Nass Steelhead: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Total Return

**Above:** Detailed status and trend metrics for Nass Steelhead: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Nass Steelhead: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

3.6 Skeena

All species table

Below: Summary of the three metrics for spawners and total return. For long-term trends and short-term trends, the percentage is the average annual change calculated over the respective time period. Grey values indicate the % change was not significantly different from zero (i.e., stable), red values indicate declining trends, and green values indicate increasing trends.

Chinook

Spawners

**Above:** Detailed status and trend metrics for Skeena Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Skeena Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Sockeye

Spawners

**Above:** Detailed status and trend metrics for Skeena Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Skeena Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Total Return

**Above:** Detailed status and trend metrics for Skeena Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Skeena Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Steelhead

Spawners

**Above:** Detailed status and trend metrics for Skeena Steelhead: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Skeena Steelhead: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Chum

Spawners

**Above:** Detailed status and trend metrics for Skeena Chum: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Skeena Chum: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Coho

Spawners

**Above:** Detailed status and trend metrics for Skeena Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Skeena Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Pink

Spawners

**Above:** Detailed status and trend metrics for Skeena Pink: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Skeena Pink: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

3.7 Central Coast

All species table

Below: Summary of the three metrics for spawners and total return. For long-term trends and short-term trends, the percentage is the average annual change calculated over the respective time period. Grey values indicate the % change was not significantly different from zero (i.e., stable), red values indicate declining trends, and green values indicate increasing trends.

Chinook

Spawners

**Above:** Detailed status and trend metrics for Central Coast Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Central Coast Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Steelhead

Spawners

## No data for Central Coast Steelhead

Chum

Spawners

**Above:** Detailed status and trend metrics for Central Coast Chum: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Central Coast Chum: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Coho

Spawners

**Above:** Detailed status and trend metrics for Central Coast Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Central Coast Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Pink

Spawners

**Above:** Detailed status and trend metrics for Central Coast Pink: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Central Coast Pink: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Sockeye

Spawners

**Above:** Detailed status and trend metrics for Central Coast Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Central Coast Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

3.8 East Vancouver Island & Mainland Inlets

All species table

Below: Summary of the three metrics for spawners and total return. For long-term trends and short-term trends, the percentage is the average annual change calculated over the respective time period. Grey values indicate the % change was not significantly different from zero (i.e., stable), red values indicate declining trends, and green values indicate increasing trends.

Chinook

Spawners

**Above:** Detailed status and trend metrics for East Vancouver Island & Mainland Inlets Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for East Vancouver Island & Mainland Inlets Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Total Return

**Above:** Detailed status and trend metrics for East Vancouver Island & Mainland Inlets Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for East Vancouver Island & Mainland Inlets Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Chum

Spawners

**Above:** Detailed status and trend metrics for East Vancouver Island & Mainland Inlets Chum: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for East Vancouver Island & Mainland Inlets Chum: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Coho

Spawners

**Above:** Detailed status and trend metrics for East Vancouver Island & Mainland Inlets Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for East Vancouver Island & Mainland Inlets Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Pink

Spawners

**Above:** Detailed status and trend metrics for East Vancouver Island & Mainland Inlets Pink: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for East Vancouver Island & Mainland Inlets Pink: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Sockeye

Spawners

**Above:** Detailed status and trend metrics for East Vancouver Island & Mainland Inlets Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for East Vancouver Island & Mainland Inlets Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Steelhead

Spawners

**Above:** Detailed status and trend metrics for East Vancouver Island & Mainland Inlets Steelhead: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for East Vancouver Island & Mainland Inlets Steelhead: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

3.9 West Vancouver Island

All species table

Below: Summary of the three metrics for spawners and total return. For long-term trends and short-term trends, the percentage is the average annual change calculated over the respective time period. Grey values indicate the % change was not significantly different from zero (i.e., stable), red values indicate declining trends, and green values indicate increasing trends.

Chinook

Spawners

**Above:** Detailed status and trend metrics for West Vancouver Island Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for West Vancouver Island Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Total Return

**Above:** Detailed status and trend metrics for West Vancouver Island Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for West Vancouver Island Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Sockeye

Spawners

**Above:** Detailed status and trend metrics for West Vancouver Island Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for West Vancouver Island Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Total Return

**Above:** Detailed status and trend metrics for West Vancouver Island Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for West Vancouver Island Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Chum

Spawners

**Above:** Detailed status and trend metrics for West Vancouver Island Chum: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for West Vancouver Island Chum: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Coho

Spawners

**Above:** Detailed status and trend metrics for West Vancouver Island Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for West Vancouver Island Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Pink

Spawners

**Above:** Detailed status and trend metrics for West Vancouver Island Pink: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for West Vancouver Island Pink: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Steelhead

Spawners

**Above:** Detailed status and trend metrics for West Vancouver Island Steelhead: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for West Vancouver Island Steelhead: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

3.10 Fraser

All species table

Below: Summary of the three metrics for spawners and total return. For long-term trends and short-term trends, the percentage is the average annual change calculated over the respective time period. Grey values indicate the % change was not significantly different from zero (i.e., stable), red values indicate declining trends, and green values indicate increasing trends.

Chinook

Spawners

**Above:** Detailed status and trend metrics for Fraser Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Fraser Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Total Return

**Above:** Detailed status and trend metrics for Fraser Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Fraser Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Chum

Spawners

**Above:** Detailed status and trend metrics for Fraser Chum: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Fraser Chum: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Total Return

**Above:** Detailed status and trend metrics for Fraser Chum: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Fraser Chum: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Coho

Spawners

**Above:** Detailed status and trend metrics for Fraser Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Fraser Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Total Return

**Above:** Detailed status and trend metrics for Fraser Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Fraser Coho: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Pink

Spawners

**Above:** Detailed status and trend metrics for Fraser Pink: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Fraser Pink: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Total Return

**Above:** Detailed status and trend metrics for Fraser Pink: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Fraser Pink: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Sockeye

Spawners

**Above:** Detailed status and trend metrics for Fraser Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Fraser Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Total Return

**Above:** Detailed status and trend metrics for Fraser Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Fraser Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Steelhead

Spawners

**Above:** Detailed status and trend metrics for Fraser Steelhead: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Fraser Steelhead: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

3.11 Columbia

All species table

Below: Summary of the three metrics for spawners and total return. For long-term trends and short-term trends, the percentage is the average annual change calculated over the respective time period. Grey values indicate the % change was not significantly different from zero (i.e., stable), red values indicate declining trends, and green values indicate increasing trends.

Chinook

Spawners

**Above:** Detailed status and trend metrics for Columbia Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Columbia Chinook: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Sockeye

Spawners

**Above:** Detailed status and trend metrics for Columbia Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Columbia Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Total Return

**Above:** Detailed status and trend metrics for Columbia Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Columbia Sockeye: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Steelhead

Spawners

**Above:** Detailed status and trend metrics for Columbia Steelhead: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

Above: Detailed status and trend metrics for Columbia Steelhead: short-term (3-generation) and long-term trend lines with 95% confidence intervals, the long-term average (dashed line), and current status relative to that average.

References

Challenger, W., Mochizuki, T., English, K., and Bychkov, Y. 2018. North and Central Coast Salmon Database and Analysis System User Manual. LGL Limited for Pacific Salmon Foundation, Sidney, BC.
Chinook Technical Committee. 2025. Annual Report of Catch and Escapement for 2024. Pacific Salmon Commission Joint Chinook Technical Committee Report TCCHINOOK (25)-02: xviii + 180 p. Available from https://www.psc.org/reports/tcchinook-25-02.
Chinook Technical Committee. 2026. Annual Report of Catch and Escapement for 2025. Pacific Salmon Commission Joint Chinook Technical Committee Report TCCHINOOK (26)-03: xviii + 180 p.
COSEWIC. 2017. COSEWIC Assessment and status report on the Chinook Salmon (Oncorhynchus tshawytscha), Okanagan population in Canada. Committee on the Status of Endangered Wildlife in Canada, Ottawa, Canada. Available from https://salmonwatersheds.ca/document/lib_503/.
D’Eon-Eggertson, F., Dulvy, N.K., and Peterman, R.M. 2015. Reliable Identification of Declining Populations in an Uncertain World. Conservation Letters 8(2): 86–96. doi:10.1111/conl.12123.
DFO. 2025. West Coast of Vancouver Island Natural-Origin Chinook Salmon (Oncorhynchus tshawytscha) Stock Assessment in 2024. DFO Canadian Science Response 2025/021. Available from https://www.dfo-mpo.gc.ca/csas-sccs/Publications/ScR-RS/2025/2025_021-eng.html.
English, K.K., Alexander, R.F., Ian A. Beveridge, Challenger, W., Percival, N., Hertz, E., and Atkinson, C. 2023. Preliminary Area 3 Salmon (2018–2022) and Nass River Summer-Run Steelhead (1994–2022) Escapement, Catch, Run Size, and Exploitation Rate Estimates. Prepared by LGL Ltd. and Nisga’a Lisims Government - Fisheries & Wildlife Department for the Pacific Salmon Foundation and Nisga’a-Canada-BC Treaty’s Joint Fisheries Management Committee. Available from https://salmonwatersheds.ca/document/lib_526/.
English, K.K., Gazey, W.J., Peacock, D., and Oliver, G. 2004. Assessment of the Canadian and Alaskan Sockeye Stocks Harvested in the Northern Boundary Fisheries using Run Reconstruction Techniques, 1982-2001. Available from https://salmonwatersheds.ca/document/lib_a_787_06/.
English, K.K., Noble, C., and Carr-Harris, C. 2017. Skeena Sockeye In-river Run Reconstruction Analysis Model and Analysis Results for 1982-2017. Report prepared for Pacific Salmon Foundation by LGL Ltd. and Fisheries and Oceans Canada. Available from https://salmonwatersheds.ca/document/lib_452/ [accessed 23 November 2023].
English, K.K., Peacock, D., Challenger, W., Noble, C., Beveridge, I., Robichaud, D., Beach, K., Hertz, E., and Connors, K. 2018. North and Central Coast Salmon Escapement, Catch, Run Size and Exploitation Rate Estimates for each Salmon Conservation Unit for 1954-2017. Report prepared by LGL Limited for the Pacific Salmon Foundation. Available from https://salmonwatersheds.ca/document/lib_451/.
Joint Northern Boundary Technical Committee. 2026. U.S./Canada Northern Boundary Area 2024 Salmon Fisheries Management Report and 2025 Preliminary Expectations. Technical Committee Report, Pacific Salmon Commission, Vancouver, B.C. Available from https://www.psc.org/report/tcnb-26-02.
Nisga’a Fisheries and Wildlife Department. 2024. 2024 Nass River Salmon Stock Assessment - Post-Season Summary.
Nisga’a Fisheries and Wildlife Department. 2025a. 2025 Nass River Salmon Stock Assessment - Post-Season Summary.
Nisga’a Fisheries and Wildlife Department. 2025b. 2025 Nass River Salmon Stock Assessment - Post-Season Summary.
Northern Boundary Technical Committee. 2023. U.S./Canada Northern Boundary Area 2022 Salmon Fisheries Management Report and 2023 Preliminary Expectations. Pacific Salmon Commission Joint Northern Boundary Technical Committee Report TCNB (23)-01: ii + 73 p. Available from https://www.psc.org/publications/technical-reports/technical-committee-reports/northern-boundary/.
OBMEP. 2026. 2025 Okanogan Subbasin Steelhead Spawning Abundance and Distribution. Report submitted to the Bonneville Power Administration, Project No. 2003-022-00., Colville Confederated Tribes Fish and Wildlife Department, Nespelem, WA. Available from https://www.okanoganmonitoring.org/.
Pacific Salmon Commission. 2026. PSC Annual Report Application. Release 2026.06.v1 [Updated 2026 Jun 23; accessed 2026 Aug 19].
Peacock, S.J., Hertz, E., Holt, C.A., Connors, B., Freshwater, C., and Connors, K. 2020. Evaluating the consequences of common assumptions in run reconstructions on Pacific salmon biological status assessments. Canadian Journal of Fisheries and Aquatic Sciences 77(12): 1904–1920. Canadian Science Publishing. doi:10.1139/CJFAS-2019-0432.
Transboundary Technical Committee. 2025. Final Estimates of Transboundary River Salmon Production, Harvest and Escapement and a Review of Joint Enhancement Activities in 2023. Pacific Salmon Commission Transboundary Technical Committee Report TCTR (25)-04: xiv + 151 p.
Transboundary Technical Committee. 2026. Final Estimates of Transboundary River Salmon Production, Harvest and Escapement and a Review of Joint Enhancement Activities in 2024. Pacific Salmon Commission Transboundary Technical Committee Report TCTR (26)-02: xiv + 151 p.
Yukon River Joint Technical Committee. 2025. Yukon River Salmon 2024 Season Summary and 2025 Season Outlook. Available from https://www.yukonriverpanel.com/publications/yukon-river-joint-technical-committee-reports/.