Duncan Lardeau Juvenile Rainbow Trout Abundance 2024

The suggested citation for this analytic report is:

Thorley, J.L., Andrusak, G.F. and Amies-Galonski, E. (2024) Duncan Lardeau Juvenile Rainbow Trout Abundance 2024. A Poisson Consulting Analytic Appendix. URL: https://www.poissonconsulting.ca/f/435610556.

Background

Rainbow Trout rear in the Lardeau and Lower Duncan rivers. Since 2006 (with the exception of 2015) annual spring snorkel surveys have been conducted to estimate the abundance and distribution of age-1 Rainbow Trout. From 2006 to 2010 the surveys were conducted at fixed index sites. Since 2011 fish observations have been mapped to the river based on their spatial coordinates as recorded by GPS.

The primary aims of the current analyses were to:

  • Estimate the egg deposition.
  • Estimate the spring abundance of age-1 fish by year.
  • Estimate the stock-recruitment relationship between the egg deposition and the abundance of age-1 recruits the following spring.
  • Estimate the survival from age-1 to age-2.
  • Estimate the inlake survival by year and cohort.
  • Estimate the expected number of spawners without in river and/or in lake variation.

Methods

Data Preparation

The data were provided by the Ministry of Forests, Lands and Natural Resource Operations (MFLNRO). The historical and current snorkel count data were manipulated using R version 4.4.1 (R Core Team 2022) and organised in an SQLite database.

Statistical Analysis

Model parameters were estimated using Bayesian methods. The estimates were produced using JAGS (Plummer 2003) and STAN (Carpenter et al. 2017). For additional information on Bayesian estimation the reader is referred to McElreath (2020).

Unless stated otherwise, the Bayesian analyses used weakly informative normal and half-normal prior distributions (Gelman et al. 2017). The posterior distributions were estimated from 1500 Markov Chain Monte Carlo (MCMC) samples thinned from the second halves of 3 chains (Kery and Schaub 2011, 38–40). Model convergence was confirmed by ensuring that the potential scale reduction factor \(\hat{R} \leq 1.05\) (Kery and Schaub 2011, 40) and the effective sample size (Brooks et al. 2011) \(\textrm{ESS} \geq 150\) for each of the monitored parameters (Kery and Schaub 2011, 61).

The parameters are summarised in terms of the point estimate, lower and upper 95% compatibility limits (Rafi and Greenland 2020) and the surprisal s-value (Greenland 2019). Together a pair of lower and upper compatibility limits (CLs) are referred to as a compatibility interval (CI). The estimate is the median (50th percentile) of the MCMC samples while the 95% CLs are the 2.5th and 97.5th percentiles. The s-value indicates how surprising it would be to discover that the true value of the parameter is in the opposite direction to the estimate (Greenland 2019). An s-value of \(>\) 4.32 bits, which is equivalent to a p-value \(<\) 0.05 (Kery and Schaub 2011; Greenland and Poole 2013), indicates that the surprise would be equivalent to throwing at least 4.3 heads in a row on a fair coin.

Variable selection was based on the heuristic of directional certainty Castilho and Prado (2021). Fixed effects were included if their s-value was \(>\) 4.32 bits (Kery and Schaub 2011). Based on a similar argument, random effects were included if their standard deviation had a lower 95% CL \(>\) 5% of the median estimate.

Model adequacy was assessed via posterior predictive checks (Kery and Schaub 2011). More specifically, the number of zeros and the first four central moments (mean, variance, skewness and kurtosis) for the deviance residuals were compared to the expected values by simulating new residuals. In this context the s-value indicates how surprising each observed metric is given the estimated posterior probability distribution for the residual variation.

Where computationally practical, the sensitivity of the parameters to the choice of prior distributions was evaluated by increasing the standard deviations of all normal, half-normal and log-normal priors by an order of magnitude and then using \(\hat{R}\) to evaluate whether the samples were drawn from the same posterior distribution (Thorley and Andrusak 2017).

The results are displayed graphically by plotting the modeled relationships between individual variables and the response with the remaining variables held constant. In general, continuous and discrete fixed variables are held constant at their mean and first level values, respectively, while random variables are held constant at their average values (expected values of the underlying hyperdistributions) (Kery and Schaub 2011, 77–82).

Unless stated otherwise the typical value is the arithmetic mean. When informative the influence of a particular variables is expressed in terms of the effect size (i.e., relative change in the response variable) with the 95% CI (Bradford et al. 2005).

The analyses were implemented using R version 4.4.1 (R Core Team 2022) and the embr family of packages.

Model Descriptions

Length Correction

The annual bias (inaccuracy) and error (imprecision) in observer’s fish length estimates when spotlighting (standing) and snorkeling were quantified from the divergence of their length distribution from the length distribution for all observers (including measured fish) in that year. More specifically, the length correction that minimised the Jensen-Shannon divergence (Lin 1991) between the two distributions provided a measure of the inaccuracy while the minimum divergence (the Jensen-Shannon divergence was calculated with log to base 2 which means it lies between 0 and 1) provided a measure of the imprecision.

After correcting the fish lengths, age-1 individuals were assumed to be those with a fork length \(\leq\) 100 mm.

Abundance

The abundance was estimated from the count data using an overdispersed Poisson model (Kery and Schaub 2011, 55–56). The annual abundance estimates represent the total number of fish in the study area.

Key assumptions of the abundance model include:

  • The lineal fish density varies with year, useable width and river kilometer as a polynomial, and randomly with site.
  • The observer efficiency at marking sites varies by study design (GPS versus Index).
  • The observer efficiency also varies by visit type (marking versus count) within study design and randomly by snorkeller.
  • The expected count at a site is the expected lineal density multiplied by the site length, the observer efficiency and the proportion of the site surveyed.
  • The residual variation in the actual count is gamma-Poisson distributed.

Condition

The condition of fish with a fork length \(\geq\) 500 mm was estimated via an analysis of mass-length relations (He et al. 2008).

More specifically the model was based on the allometric relationship

\[ W = \alpha_c L^{\beta_c}\]

where \(W\) is the weight (mass), \(\alpha_c\) is the coefficent, \(\beta_c\) is the exponent and \(L\) is the length.

To improve chain mixing the relation was log-transformed, i.e.,

\[ \log(W) = \log(\alpha_c) + \beta_c \log(L).\]

Key assumptions of the condition model include:

  • \(\alpha_c\) can vary randomly by year.
  • The residual variation in weight is log-normally distributed.

Fecundity

The fecundity of females with a fork length \(\geq\) 500 mm was estimated via an analysis of fecundity-mass relations.

More specifically the model was based on the allometric relationship

\[ F = \alpha_f W^{\beta_f}\]

where \(F\) is the fecundity, \(\alpha_f\) is the coefficent, \(\beta_f\) is the exponent and \(W\) is the weight.

To improve chain mixing the relation was log-transformed.

Key assumptions of the fecundity model include:

  • The residual variation in fecundity is log-normally distributed.

Spawner Size

The average length of the spawners in each year (for years for which it was unavailable) was estimated from the mean weight of Rainbow Trout in the Kootenay Lake Rainbow Trout Mailout Survey (KLRT) using a linear regression. This approach was suggested by Rob Bison.

Egg Deposition

The egg deposition in each year was estimated by

  1. converting the average length of spawners to the average weight using the condition relationship for a typical year
  2. adjusting the average weight by the annual condition effect (interpolating where unavailable)
  3. converting the average weight to the average fecundity using the fecundity relationship
  4. multiplying the average fecundity by the AUC based estimate of the number of females (assuming a sex ratio of 1:1)

Stock-Recruitment

The relationship between the number of eggs (\(E\)) and the abundance of age-1 individuals the following spring (\(R\)) was estimated using a Beverton-Holt stock-recruitment model (Walters and Martell 2004):

\[ R = \frac{\alpha_s \cdot E}{1 + \beta_s \cdot E} \quad,\]

where \(\alpha_s\) is the maximum number of recruits per egg (egg survival), and \(\beta_s\) is the density dependence.

Key assumptions of the stock-recruitment model include:

  • The residual variation in the number of recruits is log-normally distributed with the standard deviation scaling with the uncertainty in the number of recruits.

The age-1 maximum carrying capacity (\(K\)) is given by:

\[ K = \frac{\alpha_s}{\beta_s}\]

and the \(E_{K/2}\) Limit Reference Point (Mace 1994) (\(E_{0.5 R_{max}}\)), which corresponds to the stock (number of eggs) that produce 50% of the maximum recruitment (\(K\)), by \[E_{K/2} = \frac{1}{\beta_s}\]

The LRP was also converted into a number of spawners in a typical year (assuming 6,000 eggs per spawner and a sex ratio of 1:1).

Age-1 to Age-2 Survival

The relationship between the number of age-1 individuals and the number of age-2 individuals the following year was estimated using a linear regression through the origin where the slope was constrained to lie between 0 and 1 by a logistic transformation.

Key assumptions of the survival rate model include:

  • The residual variation in the number of age-2 individuals is log-normally distributed.

Calculated In-lake Survival

The in-lake survival of each recruit cohort was calculated by dividing the number of spawners in a given year by the number of age-1 recruits 6 years previous, assuming all spawners return at age-7.

Modelled In-lake Survival

The in-lake survival was estimated by modelling the relationship between the number of spawners in each year and the number of age-1 recruits four, five, and six years prior. The number of years indexed back is a key assumption and input to the model implying different ages of return. A proportional value was then assigned to each age class describing the proportion of recruits adopting each return strategy, for the pre and post collapse periods separately.

The survival in each year was fit as the fractional multiplier required to produce the expected number of spawners given the assumed proportions of each return strategy. Each estimate of year survival was effectively informed by the age-1 to spawner survival of all sets of recruits that passed through a given year. The sensitivity of the survival estimates to the proportion of fish adopting each return strategy was evaluated by refitting the model assuming different sets of proportions for each strategy in the pre and post collapse periods separately. The cohort survival was estimated by summing the proportional subsets of spawners returning at the three different ages assumed to originate from a single recruit cohort, and dividing that sum by the number of recruits in the original cohort.

An additional Beverton-Holt stock-recruitment model was used to analyse the relationship between spawners (\(E\)) and subsequent age-1 recruits (\(R\)), facilitating the estimation of recruit numbers prior to the availability of actual recruit data, and enabling the estimation of survival rates throughout the entire time-series of spawner counts.

Key assumptions of the in-lake survival model include:

  • Spawning fish return at age five, six, or seven.
  • Spawning fish fish return in some fixed proportion of age classes across all years in each period.
  • Each spawning fish produces the same number of eggs in each year.
  • The collapse of Kootenay Lake Kokanee occured in 2013.
  • The residual variation in the number of spawners is log-normally distributed.

Expected Spawners

The expected spawners without in river and/or in lake variation was calculated from the stock-recruitment relationship and assuming an age-1 to spawner survival of 0.79%.

Reproductive Rate

The maximum reproductive rate (the number of spawners per spawner at low density) not accounting for fishing mortality was calculated by multiplying \(\alpha_s\) (number of recruits per egg at low density) from the stock-recruitment relationship by the inlake survival by the estimated eggs per spawner in each year (assuming a sex ratio of 1:1). The inlake survival from age-1 to spawning was calculated by dividing the subsequent number of returning spawners by the number of age-1 recruits assuming that equal numbers of fish adopt the strategy of intending to return at age 5, 6 and 7.

Results

Model Templates

Abundance

  data {

    int<lower=0> nMarked;
    int<lower=0> Marked[nMarked];
    int<lower=0> Resighted[nMarked];
    int<lower=0> IndexMarked[nMarked];

    int<lower=0> nObs;
    int Marking[nObs];
    int Index[nObs];
    int<lower=0> nSwimmer;
    int<lower=0> Swimmer[nObs];
    int<lower=0> nYear;
    int<lower=0> Year[nObs];
    real Rkm[nObs];
    int<lower=0> nSite;
    int<lower=0> Site[nObs];

    real SiteLength[nObs];
    real SurveyProportion[nObs];

    int Count[nObs];
  }
  parameters {
    real bEfficiency;
    real bEfficiencyIndex;

    real bDensity;
    real<lower=0> sDensityYear;
    vector[nYear] bDensityYear;

    vector[4] bDensityRkm;
    real<lower=0> sDensitySite;
    vector[nSite] bDensitySite;

    real bEfficiencyMarking;
    real bEfficiencyMarkingIndex;

    real<lower=0,upper=5> sEfficiencySwimmer;
    vector[nSwimmer] bEfficiencySwimmer;

    real<lower=0> sDispersion;
  }
  model {

    vector[nObs] eDensity;
    vector[nObs] eEfficiency;
    vector[nObs] eAbundance;
    vector[nObs] eCount;

    sDispersion ~ gamma(0.01, 0.01);

    bDensity ~ normal(0, 2);
    bDensityRkm ~ normal(0, 2);
    sDensitySite ~ uniform(0, 5);
    bDensitySite ~ normal(0, sDensitySite);
    sDensityYear ~ uniform(0, 5);
    bDensityYear ~ normal(0, sDensityYear);

    bEfficiency ~ normal(0, 5);
    bEfficiencyIndex ~ normal(0, 5);
    bEfficiencyMarking ~ normal(0, 5);
    bEfficiencyMarkingIndex ~ normal(0, 5);
    sEfficiencySwimmer ~ uniform(0, 5);
    bEfficiencySwimmer ~ normal(0, sEfficiencySwimmer);

    for (i in 1:nMarked) {
      target += binomial_lpmf(Resighted[i] | Marked[i],
        inv_logit(
          bEfficiency +
          bEfficiencyIndex * IndexMarked[i] +
          bEfficiencyMarking +
          bEfficiencyMarkingIndex * IndexMarked[i]
        ));
    }

    for (i in 1:nObs) {
      eDensity[i] = exp(bDensity +
                        bDensityRkm[1] * Rkm[i] +
                        bDensityRkm[2] * pow(Rkm[i], 2.0) +
                        bDensityRkm[3] * pow(Rkm[i], 3.0) +
                        bDensityRkm[4] * pow(Rkm[i], 4.0) +
                        bDensitySite[Site[i]] +
                        bDensityYear[Year[i]]);

      eEfficiency[i] = inv_logit(
        bEfficiency +
        bEfficiencyIndex * Index[i] +
        bEfficiencyMarking * Marking[i] +
        bEfficiencyMarkingIndex * Index[i] * Marking[i] +
        bEfficiencySwimmer[Swimmer[i]]);

      eAbundance[i] = eDensity[i] * SiteLength[i];

      eCount[i] = eAbundance[i] * eEfficiency[i] * SurveyProportion[i];
    }

    target += neg_binomial_2_lpmf(Count | eCount, sDispersion);
  }

Block 1. Abundance model description.

Condition

 data {
  int nYear;
  int nObs;

  vector[nObs] Length;
  vector[nObs] Weight;
  int Year[nObs];

parameters {
  real bWeight;
  real bWeightLength;
  real sWeightYear;

  vector[nYear] bWeightYear;
  real sWeight;

model {

  vector[nObs] eWeight;

  bWeight ~ normal(-10, 5);
  bWeightLength ~ normal(3, 2);

  sWeightYear ~ normal(-2, 5);

  for (i in 1:nYear) {
    bWeightYear[i] ~ normal(0, exp(sWeightYear));
  }

  sWeight ~ normal(-2, 5);
  for(i in 1:nObs) {
    eWeight[i] = bWeight + bWeightLength * log(Length[i]) + bWeightYear[Year[i]];
    Weight[i] ~ lognormal(eWeight[i], exp(sWeight));
  }

Block 2.

Fecundity

 data {
  int nObs;

  vector[nObs] Weight;
  vector[nObs] Fecundity;

parameters {
  real bFecundity;
  real bFecundityWeight;
  real sFecundity;

model {

  vector[nObs] eFecundity;

  bFecundity ~ uniform(0, 5);
  bFecundityWeight ~ uniform(0, 2);
  sFecundity ~ uniform(0, 1);

  for(i in 1:nObs) {
    eFecundity[i] = log(bFecundity) + bFecundityWeight * log(Weight[i]);
    Fecundity[i] ~ lognormal(eFecundity[i], sFecundity);
  }

Block 3.

Stock-Recruitment

model {
  a ~ dunif(0, 1)
  b ~ dunif(0, 0.1)
  sScaling ~ dunif(0, 5)

  eRecruits <- a * Stock / (1 + Stock * b)

  for(i in 1:nObs) {
    esRecruits[i] <- SDLogRecruits[i] * sScaling
    Recruits[i] ~ dlnorm(log(eRecruits[i]), esRecruits[i]^-2)
  }

Block 4. Stock-Recruitment model description.

Age-1 to Age-2 Survival

model {
  bSurvival ~ dnorm(0, 2^-2)
  sRecruits ~ dnorm(0, 2^-2) T(0,)

  for(i in 1:nObs) {
    logit(eSurvival[i]) <- bSurvival
    eRecruits[i] <- Stock[i] * eSurvival[i]
    Recruits[i] ~ dlnorm(log(eRecruits[i]), sRecruits^-2)
  }

Block 5. In-river survival model description.

Modelled In-lake Survival

.model{
  a ~ dnorm(300, 50^-2) T(0,)
  b ~ dexp(1)
  sRecruits ~ dexp(1)
  sSpawnersReturning ~ dexp(1)
  bSurv ~ dnorm(0, 2^-2)
  sYearSurv ~ dexp(1)
  bPostCollapse ~ dnorm(0, 1^-2)

  for (i in 1:nObs) {
    eRecruits[i] <- a * SpawnersActive[i] / (1 + SpawnersActive[i] * b)
    Recruits[i] ~ dlnorm(log(eRecruits[i]), sRecruits^-2)
  }

  for (i in 1:nObs) {
    bYearSurv[i] ~ dnorm(0, sYearSurv^-2)
    logit(eYearSurv[i]) <- bSurv + bYearSurv[i] + bPostCollapse * PostCollapse[i]
  }

  for (i in 1:(nObs - return - 1)) {
    eSpawnersCohort[i, 1] <- Recruits[i] * prod(eYearSurv[i:(i + return - 1)])
    eSpawnersCohort[i, 2] <- Recruits[i] * prod(eYearSurv[i:(i + return - 1 + 1)])
    eSpawnersCohort[i, 3] <- Recruits[i] * prod(eYearSurv[i:(i + return - 1 + 2)])
  }

  for (i in 3:(nObs - return - 1)) {
    eSpawnersReturning[i] <-
      (1 - PostCollapse[i]) * eSpawnersCohort[i, 1] * PropPre1[i] + PostCollapse[i] * eSpawnersCohort[i, 1] * PropPost1[i] +
      (1 - PostCollapse[i]) * eSpawnersCohort[i - 1, 2] * PropPre2[i] + PostCollapse[i] * eSpawnersCohort[i - 1, 2] * PropPost2[i] +
      (1 - PostCollapse[i]) * eSpawnersCohort[i - 2, 3] * PropPre3[i] + PostCollapse[i] * eSpawnersCohort[i - 2, 3] * PropPost3[i]
  }

  for (i in (return + 2 + 1):(nObs - 1)) {
    SpawnersReturning[i] ~ dlnorm(log(eSpawnersReturning[i - return]), sSpawnersReturning^-2)
  }

Block 6. Model description.

Tables

Abundance

Table 1. Parameter descriptions.

Parameter Description
Index Whether the ith visit was to an index site
Marking[i] Whether the ith visit was to a site with marked fish
Rkm[i] River kilometer of ith visit
SiteLength[i] Length of site of ith visit
Site[i] Site of ith visit
SurveyProportion[i] Proportion of site surveyed on ith visit
Swimmer[i] Snorkeler on ith site visit
Year[i] Year of ith site visit
bDensityRkm[i] ith-order polynomial coefficients of effect of river kilometer on bDensity
bDensitySite[i] Effect of ith Site on bDensity
bDensityYear[i] Effect of ith Year on bDensity
bDensity Intercept for log(eDensity)
bEfficiencyIndex Effect of Index on bEfficiency
bEfficiencyMarkingIndex Effect of Marking and Index on bEfficiency
bEfficiencyMarking Effect of Marking on bEfficiency
bEfficiencySwimmer[i] Effect of ith Swimmer on bEfficiency
bEfficiency Intercept of logit(eEfficiency)
eAbundance[i] Expected abundance of fish at site of ith visit
eCount[i] Expected total number of fish at site of ith visit
eDensity[i] Expected lineal density of fish at site of ith visit
eEfficiency[i] Expected observer efficiency on ith visit
sDensitySite SD of bDensitySite
sDispersion Overdispersion of Count[i]
sEfficiencySwimmer SD of bEfficiencySwimmer
Age-1

Table 2. Model coefficients.

term estimate lower upper svalue
bDensity -1.3743281 -1.8258968 -0.9303509 10.551708
bDensityRkm[1] -0.1612247 -0.3034501 -0.0151078 4.823788
bDensityRkm[2] 0.5698486 0.3659929 0.7817977 10.551708
bDensityRkm[3] -0.1297692 -0.2034507 -0.0631312 10.551708
bDensityRkm[4] -0.2589458 -0.3258539 -0.1919248 10.551708
bEfficiency -1.7790018 -2.0489025 -1.5103778 10.551708
bEfficiencyIndex 0.3945270 -0.2418596 1.0143952 2.270938
bEfficiencyMarking 0.5344403 0.3276782 0.7408086 10.551708
bEfficiencyMarkingIndex 0.8102509 0.1937737 1.4419331 6.464245
sDensitySite 0.6983107 0.6340298 0.7680758 10.551708
sDensityYear 0.7144574 0.4966376 1.0965765 10.551708
sDispersion 1.3162959 1.1995853 1.4580268 10.551708
sEfficiencySwimmer 0.3650904 0.2157020 0.6900803 10.551708

Table 3. Model summary.

n K nchains niters nthin ess rhat converged
4111 13 3 500 5 644 1.006 TRUE

Table 4. Model posterior predictive checks.

moment observed median lower upper svalue
zeros 0.3763075 0.4307954 0.4110922 0.4528156 10.551708
mean -0.2985711 -0.3666153 -0.3945797 -0.3370116 10.551708
variance 0.6005416 0.8397831 0.7980553 0.8790226 10.551708
skewness 0.2654207 0.5745270 0.5012478 0.6489050 10.551708
kurtosis -0.4022754 -0.1511623 -0.3188455 0.0498346 7.381783

Table 5. Model sensitivity.

all analysis sensitivity bound
all 1.006 1.007 1.004
Age-2

Table 6. Model coefficients.

term estimate lower upper svalue
bDensity -2.2703833 -2.7037196 -1.8402817 10.5517083
bDensityRkm[1] -0.2507536 -0.4379654 -0.0550451 7.0922766
bDensityRkm[2] 0.0871299 -0.1737306 0.3337300 0.9573837
bDensityRkm[3] 0.0485288 -0.0448802 0.1357759 1.8001642
bDensityRkm[4] -0.1006657 -0.1820998 -0.0170527 5.5975120
bEfficiency -1.9405264 -2.2940156 -1.5696199 10.5517083
bEfficiencyIndex 0.5477041 -0.0646702 1.2117753 3.5630236
bEfficiencyMarking 0.8973363 0.6060298 1.1943134 10.5517083
bEfficiencyMarkingIndex 1.9251162 0.8944422 3.0229240 10.5517083
sDensitySite 0.8599432 0.7779852 0.9455527 10.5517083
sDensityYear 0.5162494 0.3607655 0.7999322 10.5517083
sDispersion 1.2125268 1.0491808 1.3894261 10.5517083
sEfficiencySwimmer 0.2981136 0.1732462 0.5238337 10.5517083

Table 7. Model summary.

n K nchains niters nthin ess rhat converged
4111 13 3 500 5 934 1.007 TRUE

Table 8. Model posterior predictive checks.

moment observed median lower upper svalue
zeros 0.5876916 0.6108003 0.5897531 0.6311177 4.851268
mean -0.3036252 -0.3340637 -0.3621187 -0.3080274 5.796821
variance 0.5537440 0.7006562 0.6585497 0.7430052 10.551708
skewness 0.7617150 0.9273396 0.8443825 1.0259777 10.551708
kurtosis -0.0730003 0.4754988 0.2153444 0.7970010 10.551708

Table 9. Model sensitivity.

all analysis sensitivity bound
all 1.007 1.005 1.004

Condition

Table 10. Parameter descriptions.

Parameter Description
Length[i] Fork length of ith fish
Weight[i] Recorded weight of ith fish
Year[i] Year ith fish was captured
bWeightLength Intercept of effect of log(Length) on bWeight
bWeightYear[i] Effect of ith Year on bWeight
bWeight Intercept of log(eWeight)
eWeight[i] Expected Weight of ith fish
sWeightYear Log standard deviation of bWeightYear
sWeight Log standard deviation of residual variation in log(Weight)

Table 11. Model coefficients.

term estimate lower upper svalue
bWeight -12.745405 -13.133834 -12.338893 10.55171
bWeightLength 3.213730 3.152203 3.272080 10.55171
sWeight -1.926025 -1.966230 -1.885349 10.55171
sWeightYear -1.991494 -2.264444 -1.672420 10.55171

Table 12. Model summary.

n K nchains niters nthin ess rhat converged
1201 4 3 500 10 903 1.006 TRUE

Table 13. Model posterior predictive checks.

moment observed median lower upper svalue
zeros 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
mean 0.0000771 0.0005379 -0.0568825 0.0549890 0.0213019
variance 0.9779704 1.0005631 0.9235082 1.0876789 0.8254901
skewness -0.4265371 -0.0017194 -0.1288944 0.1332694 10.5517083
kurtosis 2.0182810 -0.0107774 -0.2525675 0.3011076 10.5517083

Table 14. Model sensitivity.

all analysis sensitivity bound
all 1.006 1.007 1.005

Fecundity

Table 15. Parameter descriptions.

Parameter Description
Fecundity[i] Fecundity of ith fish (eggs)
Weight[i] Weight of ith fish (mm)
bFecundityWeight Effect of log(Weight) on log(bFecundity)
bFecundity Intercept of eFecundity
eFecundity[i] Expected Fecundity of ith fish
sFecundity SD of residual variation in log(Fecundity)

Table 16. Model coefficients.

term estimate lower upper svalue
bFecundity 3.8437989 1.5652072 4.9608686 10.55171
bFecundityWeight 0.8620380 0.8312411 0.9644906 10.55171
sFecundity 0.1283548 0.0946227 0.1842704 10.55171

Table 17. Model summary.

n K nchains niters nthin ess rhat converged
22 3 3 500 10 981 1.006 TRUE

Table 18. Model posterior predictive checks.

moment observed median lower upper svalue
zeros 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
mean 0.0097217 0.0001140 -0.4089293 0.4168115 0.0508664
variance 0.9147370 0.9500014 0.4922016 1.7079577 0.1647680
skewness -2.1716992 0.0107975 -0.9538329 0.9134493 10.5517083
kurtosis 6.6817124 -0.4269790 -1.2364339 1.9763747 10.5517083

Table 19. Model sensitivity.

all analysis sensitivity bound
all 1.006 1 1.005

Stock-Recruitment

Table 20. Parameter descriptions.

Parameter Description
Recruits[i] Number of recruits from ith spawn year
SDLogRecruits[i] Standard deviation of uncertainty in log(Recruits[i])
Stock[i] Number of eggs in ith spawn year
a Recruits per Stock at low density
b Density-dependence
eRecruits[i] Expected number of recruits from ith spawn year
esRecruits[i] Expected SD of residual variation in Recruits
sScaling Scaling term for SD of residual variation in log(eRecruits)
Age-1

Table 21. Estimated reference points (with 80% CRIs).

Metric estimate lower upper
eggs 297000 115000.00000 593000.0000
spawners 99 38.33333 197.6667

Table 22. Model coefficients.

term estimate lower upper svalue
a 0.3573298 0.1800010 0.9239662 10.55171
b 0.0000034 0.0000012 0.0000121 10.55171
sScaling 2.6643747 1.8981738 4.0219737 10.55171

Table 23. Model summary.

n K nchains niters nthin ess rhat converged
18 3 3 500 100 1383 1.001 TRUE

Table 24. Estimated carry capacity (with 95% CRIs).

estimate lower upper Carrying Capacity
106000 65400 165000 Maximum

Table 25. Model posterior predictive checks.

moment observed median lower upper svalue
zeros 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
mean -0.0537591 -0.0066176 -0.4866942 0.4824889 0.2399599
variance 0.8565058 0.9476934 0.4403791 1.7753230 0.3705560
skewness 0.4543657 0.0037044 -0.9824065 1.0366028 1.4510459
kurtosis -0.7661141 -0.4631965 -1.3116462 1.8005312 0.8254901

Table 26. Model sensitivity.

all analysis sensitivity bound
all 1.001 1 1

Table 27. Summary of the key stock-recruitment values and estimates for ‘observed’ and ‘no cull’ scenarios. The estimated number of recruits in the ‘no cull’ scenario assumes the same residual variation as in the estimate for the observed recruits.

SpawnYear Spawners Observed Spawners No Cull Stock Observed Stock No Cull Recruits Observed Recruits No Cull
2022 464 609 423045 555303 56272 62919
2023 331 772 329957 769891 27325 47845
2024 502 1228 571796 1399395 NA NA

Age-1 to Age-2 Survival

Table 28. Parameter descriptions.

Parameter Description
Recruits[i] Number of age-2 juveniles from ith spawn year
Stock[i] Number of age-1 juveniles from ith spawn year
bSurvival logit(eSurvival)
eSurvival[i] Expected annual survival for ith spawn year
sRecruits SD of residual variation in Recruits
Age-2

Table 29. Model coefficients.

term estimate lower upper svalue
bSurvival -0.8334961 -1.1793013 -0.4337028 10.55171
sRecruits 0.4634771 0.3368493 0.7012649 10.55171

Table 30. Model summary.

n K nchains niters nthin ess rhat converged
16 2 3 500 1 646 1 TRUE

Table 31. Model posterior predictive checks.

moment observed median lower upper svalue
zeros 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
mean -0.0224818 -0.0207777 -0.4987503 0.4750927 0.0096437
variance 0.9048126 0.9385264 0.4092355 1.8833568 0.1518963
skewness -0.2015127 0.0378957 -0.9644045 0.9613019 0.7204010
kurtosis -0.9277552 -0.5264601 -1.3537739 1.5303327 1.1572456

Table 32. Model sensitivity.

all analysis sensitivity bound
all 1 1 1

Modelled In-lake Survival

Table 33. Parameter descriptions.

Parameter Description
bPostCollapse
The effect of the collapse on eYearSurv.
PostCollapse[i] The ith value for the state (pre or post collapse) of Kootenay Lake.
PropPre1[i] The ith value of the assumed proportion of spawners in the 1st age class returning.
PropPre2[i] The ith value of the assumed proportion of spawners in the 2nd age class returning.
PropPre3[i] The ith value of the assumed proportion of spawners in the 3rd age class returning.
Recruits[i] The ith Recruits value
SpawnersActive[i] The ith SpawnersActive value
SpawnersReturning[i] The ith SpawnersReturning value
a Recruits per Spawner at low density.
bSurv The intercept for the effect of year on eYearSurv[i].
bYearSurv[i] The effect of year on eYearSurv[i].
b Density-dependence.
eCohortSurv[i] The expected cohort survival Recruits[i].
eRecruits[i] Expected value of Recruits[i]
eSpawnersReturning[i] Expected value of SpawnersReturning[i]
eYearSurv Expected value of eYearSurv[i].
sRecruits SD of residual variation in eRecruits
sSpawnersReturning SD of residual variation in eSpawnersReturning
sYearSurv SD of residual variation in eYearSurv.
Returning Spawners
All 5

Table 34. Model coefficients.

term estimate lower upper svalue
a 281.00000 208.00000 376.00000 10.600
b 0.00209 0.00101 0.00376 10.600
bPostCollapse -0.11600 -0.42700 0.30100 0.957
bSurv -0.83200 -0.97500 -0.68200 10.600
sRecruits 0.37400 0.30000 0.48600 10.600
sSpawnersReturning 0.34700 0.16600 0.56300 10.600
sYearSurv 0.42100 0.18400 0.67800 10.600

Table 35. Model posterior predictive checks.

moment observed median lower upper svalue
zeros 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
mean 0.0585474 0.0101621 -0.6354573 0.6227919 0.1821109
variance 1.1320100 0.9263430 0.3160870 2.1790993 0.5644442
skewness -0.4466541 0.0192519 -1.1142246 1.1491123 1.1788432
kurtosis -0.1869997 -0.7026992 -1.5239490 1.4774435 1.0028864
All 6

Table 36. Model coefficients.

term estimate lower upper svalue
a 282.00000 2.10e+02 376.00000 10.6
b 0.00197 9.67e-04 0.00348 10.6
bPostCollapse -0.12600 -4.34e-01 0.23500 1.2
bSurv -0.46900 -6.03e-01 -0.33000 10.6
sRecruits 0.37200 3.00e-01 0.47800 10.6
sSpawnersReturning 0.38300 2.49e-01 0.54600 10.6
sYearSurv 0.39500 2.10e-01 0.65200 10.6

Table 37. Model posterior predictive checks.

moment observed median lower upper svalue
zeros 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
mean 0.0666896 -0.0106073 -0.6496175 0.5831963 0.2651505
variance 1.8505189 0.9282416 0.2833162 2.0650615 3.3918369
skewness -0.1194776 0.0210291 -1.1144232 1.1648746 0.3313299
kurtosis -1.1441895 -0.7008306 -1.5504887 1.3433113 1.2825816
All 7

Table 38. Model coefficients.

term estimate lower upper svalue
a 286.00000 207.00000 379.00000 10.60
b 0.00207 0.00101 0.00348 10.60
bPostCollapse -0.18000 -0.52100 0.20700 1.72
bSurv -0.17100 -0.31700 -0.00142 4.32
sRecruits 0.36300 0.29200 0.45800 10.60
sSpawnersReturning 0.32300 0.16600 0.47500 10.60
sYearSurv 0.44800 0.25300 0.77300 10.60

Table 39. Model posterior predictive checks.

moment observed median lower upper svalue
zeros 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
mean -0.0493682 0.0154623 -0.6062108 0.6355902 0.2129719
variance 1.2259044 0.9169064 0.2873991 2.1803832 0.8357463
skewness -0.5246227 -0.0041322 -1.0976921 1.1662647 1.4405726
kurtosis -0.8303292 -0.7116310 -1.5488373 1.2693171 0.2063030
All Equal

Table 40. Model coefficients.

term estimate lower upper svalue
a 281.00000 1.99e+02 376.00000 10.600
b 0.00211 9.03e-04 0.00378 10.600
bPostCollapse -0.11000 -4.45e-01 0.32000 0.924
bSurv -0.56800 -7.12e-01 -0.40800 10.600
sRecruits 0.39900 3.10e-01 0.52100 10.600
sSpawnersReturning 0.28000 1.55e-01 0.42600 10.600
sYearSurv 0.45500 2.51e-01 0.72500 10.600

Table 41. Model posterior predictive checks.

moment observed median lower upper svalue
zeros 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
mean 0.0584431 0.0028843 -0.6527444 0.5904975 0.2559393
variance 1.1820976 0.9309631 0.3109260 2.1219486 0.6921735
skewness -0.9465507 0.0106024 -1.1107880 1.1557899 3.4748927
kurtosis -0.3122755 -0.7150041 -1.5350465 1.2903107 0.8085569
Pre 7 Post 6

Table 42. Model coefficients.

term estimate lower upper svalue
a 285.00000 2.08e+02 374.00000 10.60
b 0.00201 9.02e-04 0.00352 10.60
bPostCollapse -0.39000 -6.75e-01 -0.08310 7.38
bSurv -0.18600 -3.03e-01 -0.05120 6.64
sRecruits 0.36300 2.92e-01 0.46200 10.60
sSpawnersReturning 0.36200 2.51e-01 0.51300 10.60
sYearSurv 0.35500 1.88e-01 0.56800 10.60

Table 43. Model posterior predictive checks.

moment observed median lower upper svalue
zeros 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
mean -0.0873372 -0.0018749 -0.6202202 0.6093356 0.3705560
variance 2.0115994 0.9294763 0.3055676 2.1138667 3.7572924
skewness 0.2553128 0.0021376 -1.1324240 1.1407068 0.6523513
kurtosis -1.0365229 -0.7206386 -1.5176846 1.2930266 0.7851794
Pre 7 Post Half 6

Table 44. Model coefficients.

term estimate lower upper svalue
a 284.0000 2.09e+02 371.00000 10.60
b 0.0019 9.15e-04 0.00331 10.60
bPostCollapse -0.3330 -6.32e-01 0.00389 4.18
bSurv -0.1840 -3.12e-01 -0.03500 5.69
sRecruits 0.3620 2.90e-01 0.46600 10.60
sSpawnersReturning 0.2890 1.52e-01 0.43500 10.60
sYearSurv 0.4040 2.36e-01 0.64800 10.60

Table 45. Model posterior predictive checks.

moment observed median lower upper svalue
zeros 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
mean -0.0756881 -0.0070924 -0.5563411 0.6390384 0.3508097
variance 1.5676145 0.9480466 0.3097392 2.1288103 2.1212557
skewness -0.1323705 -0.0055186 -1.1255508 1.0668854 0.3168908
kurtosis -1.0676600 -0.7293763 -1.5156546 1.2827296 0.9314884
Active Spawners Only
All 6

Table 46. Model coefficients.

term estimate lower upper svalue
a 282.00000 2.07e+02 370.00000 10.60
b 0.00192 8.86e-04 0.00337 10.60
bPostCollapse -0.20000 -4.74e-01 0.10400 2.36
bSurv -0.47000 -5.95e-01 -0.34300 10.60
sRecruits 0.36600 2.95e-01 0.46500 10.60
sSpawnersReturning 0.34000 1.94e-01 0.50200 10.60
sYearSurv 0.38100 2.05e-01 0.63300 10.60

Table 47. Model posterior predictive checks.

moment observed median lower upper svalue
zeros 0.0000000 0.0000000 0.0000000 0.0000000 0.0000000
mean 0.0412512 0.0033332 -0.6560916 0.6067165 0.1712472
variance 1.5558683 0.9145400 0.3002060 2.0641426 2.0558532
skewness -0.4580048 0.0281382 -1.1177285 1.1677583 1.4045033
kurtosis -1.2149941 -0.7320847 -1.5349819 1.4565607 1.5772937

Figures

Length Correction

figures/length/measured.png
Figure 1. Measured length-frequency histogram by year.
figures/length/corrected.png
Figure 2. Corrected length-frequency histogram by year and observation type.

Abundance

Age-1
figures/abundance/Age1/abundance-year.png
Figure 3. Predicted abundance of age-1 Rainbow Trout in the Duncan and Lardeau Rivers by year (with 95% CRIs).
figures/abundance/Age1/cv.png
Figure 4. The Coefficient of Variation by year.
figures/abundance/Age1/density-site.png
Figure 5. Predicted lineal density of age-1 Rainbow Trout in 2010 by river kilometre (with 95% CRIs).
figures/abundance/Age1/efficiency-type.png
Figure 6. Predicted observer efficiency for age-1 Rainbow Trout by visit type and study design (with 95% CRIs).
Age-2
figures/abundance/Age2/abundance-year.png
Figure 7. Predicted abundance of age-2 Rainbow Trout in the Duncan and Lardeau Rivers by year (with 95% CRIs).
figures/abundance/Age2/cv.png
Figure 8. The Coefficient of Variation by year.
figures/abundance/Age2/density-site.png
Figure 9. Predicted lineal density of age-2 Rainbow Trout in 2010 by river kilometre (with 95% CRIs).
figures/abundance/Age2/efficiency-type.png
Figure 10. Predicted observer efficiency for age-2 Rainbow Trout by visit type and study design (with 95% CRIs).

Condition

figures/condition/year.png
Figure 11. The percent change in the body condition for an average length fish relative to a typical year by year (with 95% CRIs).

Fecundity

figures/fecundity/fecundity.png
Figure 12. The fecundity-weight relationship (with 95% CRIs).

Spawner Size

figures/fishery/length.png
Figure 13. The mean length of spawning Rainbow Trout by the mean weight of Rainbow Trout in the KLRT.
figures/fishery/weight.png
Figure 14. The mean weight of Adult Rainbow Trout in the KLRT by year.

Egg Deposition

figures/eggs/eggs-spawners.png
Figure 15. The spawner abundance by year.
figures/eggs/eggs-fecundity.png
Figure 16. The estimated spawner fecundity by year.
figures/eggs/eggs-eggs.png
Figure 17. The egg deposition by year.

Stock-Recruitment

Age-1
figures/sr/Age1/stock-recruitment.png
Figure 18. Predicted stock-recruitment relationship between spawners and age-1 recruits (with 95% CRIs). The estimated number of recruits if no spawners were culled is also shown in red, assuming the same residual variation from the expected value as with the recruits actually observed in each year.
figures/sr/Age1/recruits-per-spawner.png
Figure 19. Predicted egg survival to age-1 by egg deposition (with 95% CRIs). The predicted egg survival if no spawners were culled is also shown in red, assuming the same residual variation from the expected value as with the number of recruits actually observed in each year.
figures/sr/Age1/percent-carry-capacity.png
Figure 20. Predicted percent of age-1 recruits carry capacity by egg deposition (with 80% CRIs).

Age-1 to Age-2 Survival

Age-2
figures/inriver/Age2/age1toage2survival.png
Figure 21. Estimated age-1 and age-2 survival by spawn year.
figures/inriver/Age2/survival.png
Figure 22. Predicted relationship between age-1 and age-2 abundance (with 95% CRIs).

Calculated In-lake Survival

figures/inlake/inlake-spawners.png
Figure 23. The number of spawners by return year.
figures/inlake/inlake-deposition.png
Figure 24. The estimated egg deposition by return year.
figures/inlake/inlake-recruits.png
Figure 25. The number of expected age-1 recruits by spawn year based on the estimated egg deposition.
figures/inlake/inlake-survival.png
Figure 26. Apparent survival from expected age-1 (with a moving average of 3 years) to spawners by return year assuming all individuals return at age-6.

Expected Spawners

figures/espawners/spawnersexpected.png
Figure 27. Expected spawners by return year and in river and in lake variation based on age-1 recruitment.
figures/espawners/spawnersexpected2.png
Figure 28. Expected spawners by return year and in river and in lake variation based on age-2 recruitment.

Modelled In-lake Survival

Stock-Recruitment
figures/survival/sr/spawner_sr.png
Figure 29. Predicted stock-recruitment relationship between spawners and age-1 recruits (with 95% CRIs).
Returning Spawners
All 5
figures/survival/returning/all_5/year_survival.png
Figure 30. Estimated survival in each year given the assumed proportions of age classes returning.
figures/survival/returning/all_5/cohort_survival.png
Figure 31. Estimated cohort survival by the spawn year each cohort originated from given the assumed proportions of spawner age classes.
All 6
figures/survival/returning/all_6/year_survival.png
Figure 32. Estimated survival in each year given the assumed proportions of age classes returning.
figures/survival/returning/all_6/cohort_survival.png
Figure 33. Estimated cohort survival by the spawn year each cohort originated from given the assumed proportions of spawner age classes.
All 7
figures/survival/returning/all_7/year_survival.png
Figure 34. Estimated survival in each year given the assumed proportions of age classes returning.
figures/survival/returning/all_7/cohort_survival.png
Figure 35. Estimated cohort survival by the spawn year each cohort originated from given the assumed proportions of spawner age classes.
All Equal
figures/survival/returning/all_equal/year_survival.png
Figure 36. Estimated survival in each year given the assumed proportions of age classes returning.
figures/survival/returning/all_equal/cohort_survival.png
Figure 37. Estimated cohort survival by the spawn year each cohort originated from given the assumed proportions of spawner age classes.
Pre 7 Post 6
figures/survival/returning/pre_7_post_6/year_survival.png
Figure 38. Estimated survival in each year given the assumed proportions of age classes returning.
figures/survival/returning/pre_7_post_6/cohort_survival.png
Figure 39. Estimated cohort survival by the spawn year each cohort originated from given the assumed proportions of spawner age classes.
Pre 7 Post Half 6
figures/survival/returning/pre_7_post_half_6/year_survival.png
Figure 40. Estimated survival in each year given the assumed proportions of age classes returning.
figures/survival/returning/pre_7_post_half_6/cohort_survival.png
Figure 41. Estimated cohort survival by the spawn year each cohort originated from given the assumed proportions of spawner age classes.
Active Spawners Only
All 6
figures/survival/active/all_6/year_survival.png
Figure 42. Estimated survival in each year given the assumed proportions of age classes returning and considering active spawners only.
figures/survival/active/all_6/cohort_survival.png
Figure 43. Estimated cohort survival by the spawn year each cohort originated from given the assumed proportions of spawner age classes and considering active spawners only.

Reproductive Rate (age-1)

figures/rmax/inlake.png
Figure 44. Survival from age-1 to spawning by return year and by the type of recruits used to calculate survival.

Reproductive Rate (age-2)

figures/rmax2/inlake.png
Figure 45. Survival from age-2 to spawning by return year.

Acknowledgements

The organisations and individuals whose contributions have made this analysis report possible include:

References

Bradford, Michael J, Josh Korman, and Paul S Higgins. 2005. “Using Confidence Intervals to Estimate the Response of Salmon Populations (Oncorhynchus Spp.) to Experimental Habitat Alterations.” Canadian Journal of Fisheries and Aquatic Sciences 62 (12): 2716–26. https://doi.org/10.1139/f05-179.
Brooks, Steve, Andrew Gelman, Galin L. Jones, and Xiao-Li Meng, eds. 2011. Handbook for Markov Chain Monte Carlo. Taylor & Francis.
Carpenter, Bob, Andrew Gelman, Matthew D. Hoffman, et al. 2017. Stan : A Probabilistic Programming Language.” Journal of Statistical Software 76 (1). https://doi.org/10.18637/jss.v076.i01.
Castilho, Leonardo Braga, and Paulo Inácio Prado. 2021. “Towards a Pragmatic Use of Statistics in Ecology.” PeerJ 9 (September): e12090. https://doi.org/10.7717/peerj.12090.
Gelman, Andrew, Daniel Simpson, and Michael Betancourt. 2017. “The Prior Can Often Only Be Understood in the Context of the Likelihood.” Entropy 19 (10): 555. https://doi.org/10.3390/e19100555.
Greenland, Sander. 2019. “Valid p -Values Behave Exactly as They Should: Some Misleading Criticisms of p -Values and Their Resolution With s -Values.” The American Statistician 73 (sup1): 106–14. https://doi.org/10.1080/00031305.2018.1529625.
Greenland, Sander, and Charles Poole. 2013. “Living with p Values: Resurrecting a Bayesian Perspective on Frequentist Statistics.” Epidemiology 24 (1): 62–68. https://doi.org/10.1097/EDE.0b013e3182785741.
He, Ji X., James R. Bence, James E. Johnson, David F. Clapp, and Mark P. Ebener. 2008. “Modeling Variation in Mass-Length Relations and Condition Indices of Lake Trout and Chinook Salmon in Lake Huron: A Hierarchical Bayesian Approach.” Transactions of the American Fisheries Society 137 (3): 801–17. https://doi.org/10.1577/T07-012.1.
Kery, Marc, and Michael Schaub. 2011. Bayesian Population Analysis Using WinBUGS : A Hierarchical Perspective. Academic Press. http://www.vogelwarte.ch/bpa.html.
Lin, J. 1991. “Divergence Measures Based on the Shannon Entropy.” IEEE Transactions on Information Theory 37 (1): 145–51. https://doi.org/10.1109/18.61115.
Mace, Pamela M. 1994. “Relationships Between Common Biological Reference Points Used as Thresholds and Targets of Fisheries Management Strategies.” Canadian Journal of Fisheries and Aquatic Sciences 51 (1): 110–22. https://doi.org/10.1139/f94-013.
McElreath, Richard. 2020. Statistical Rethinking: A Bayesian Course with Examples in R and Stan. 2nd ed. CRC Texts in Statistical Science. Taylor; Francis, CRC Press.
Murtaugh, Paul A. 2014. “In Defense of p Values.” Ecology 95 (3): 611–17. https://doi.org/10.1890/13-0590.1.
Plummer, Martyn. 2003. JAGS: A Program for Analysis of Bayesian Graphical Models Using Gibbs Sampling.” In Proceedings of the 3rd International Workshop on Distributed Statistical Computing (DSC 2003), edited by Kurt Hornik, Friedrich Leisch, and Achim Zeileis. Vienna, Austria.
R Core Team. 2022. R: A Language and Environment for Statistical Computing. R Foundation for Statistical Computing. https://www.R-project.org/.
Rafi, Zad, and Sander Greenland. 2020. “Semantic and Cognitive Tools to Aid Statistical Science: Replace Confidence and Significance by Compatibility and Surprise.” BMC Medical Research Methodology 20 (1): 244. https://doi.org/10.1186/s12874-020-01105-9.
Thorley, Joseph L., and Greg F. Andrusak. 2017. “The Fishing and Natural Mortality of Large, Piscivorous Bull Trout and Rainbow Trout in Kootenay Lake, British Columbia (2008–2013).” PeerJ 5 (January): e2874. https://doi.org/10.7717/peerj.2874.
Walters, Carl J., and Steven J. D. Martell. 2004. Fisheries Ecology and Management. Princeton University Press.