Skip to contents

Computes the seasonal exploitation rate from a combination of a tagging study and creel-survey harvest data using the moment estimator described in Pollock et al. (1994) and Jones & Pollock (2012, Ch. 19).

When strata is supplied the function takes the stratified path and returns per-stratum estimates plus a T-weighted aggregate (.overall row).

Usage

estimate_exploitation_rate(
  T = NULL,
  C = NULL,
  se_C = NULL,
  n = NULL,
  m = NULL,
  conf_level = 0.95,
  reporting_rate = 1,
  reporting_rate_se = NULL,
  strata = NULL,
  by = NULL,
  aggregate = TRUE,
  ci_type = c("symmetric", "logit")
)

Arguments

T

integer or numeric. Number of tagged fish released at season start. Ignored when strata is supplied.

C

Total creel harvest, given either as the estimate_total_harvest result itself or as a bare numeric.

Prefer passing the object. \(\hat{u}\) measures the fraction of the tagged cohort removed over the whole season, so C must be a period total while T is the full cohort – but estimate_total_harvest defaults to target = "sampled_days". Passing the object lets that be checked; passing a bare number strips the estimand off, and a sampled-day total understates \(\hat{u}\) by the sampling fraction while staying inside \([0, 1]\) with a proportionally scaled SE (GH #206).

It must also be harvest, not catch: fish caught and released were not removed from the tagged cohort, so a catch total from estimate_total_catch inflates \(\hat{u}\). Both totals are counts of fish, so no unit check separates them – passing the object is what makes the substitution detectable.

When C is a creel_estimates object its standard error is read from it, and supplying se_C as well is an error. Ignored when strata is supplied.

se_C

numeric. Standard error of the harvest estimate. Required when C is a bare number; read from the object instead when C is a creel_estimates, in which case supplying it here is an error. Ignored when strata is supplied.

n

integer. Total number of fish inspected in the creel survey (sampled from harvest). Ignored when strata is supplied.

m

integer. Number of tagged fish found among the n inspected fish. Ignored when strata is supplied.

conf_level

numeric confidence level for the CI. Default 0.95.

reporting_rate

numeric in (0, 1]. Tag reporting rate; when less than 1 the function adjusts \(\hat{u}\) upward: \(\hat{u}_{adj} = \hat{u} / \lambda\). Default 1.0 (full reporting). See Details.

Upward, because under-reporting means the recoveries actually observed understate how many tagged fish were removed. Dividing by \(\lambda < 1\) restores the removals the survey never heard about, so \(\hat{u}\) rises: at \(\lambda = 0.5\) it doubles. (This paragraph read "downward" until GH #207, contradicting the formula printed beside it.)

Unlike the aerial corrections, this default is left in place: it is a visible, documented default on an exported argument that the caller opts into adjusting, not a value substituted inside an estimator where the caller could not see it. reporting_rate = 1 states that every tag was reported.

reporting_rate_se

numeric scalar or NULL. The standard error of reporting_rate, on the same \((0, 1]\) scale. In practice \(\lambda\) is estimated rather than known, and supplying its SE adds the third delta term derived in Details.

When NULL (default), the component is absent rather than zero — a zero would be indistinguishable from having propagated the reporting rate's error and found none. Note that with the default reporting_rate = 1 there is nothing to propagate, which is why an unadjusted analysis is unaffected by this argument.

strata

data.frame or NULL. When non-NULL, the function takes the stratified path. Required columns: stratum, T_h, C_h, se_C_h, n_h, m_h (or whatever column name is given in by for the stratum labels). C_h is per-stratum harvest and carries the same requirement as C.

by

character(1). Name of the stratum label column in strata. Default "stratum". Ignored when strata = NULL.

aggregate

logical. If TRUE (the default) an .overall row containing the T-weighted aggregate exploitation rate is appended to the per-stratum estimates. Set to FALSE to suppress it. Ignored when strata = NULL.

ci_type

character. Shape of the confidence interval. "symmetric" (default) gives the standard \(\hat u \pm z \cdot SE\) interval clamped to \([0,1]\). "logit" applies a logit-transform so the CI respects the \([0,1]\) constraint without clamping: \(\mathrm{expit}(\mathrm{logit}(\hat u) \pm z \cdot SE / (\hat u (1-\hat u)))\).

Value

A creel_estimates S3 object with method = "exploitation-rate" and an estimates tibble. For the unstratified path columns are: estimate, se, ci_lower, ci_upper, n, T, C, m. For the stratified path the stratum label column comes first, followed by the same columns.

Details

Unstratified Formula

Let:

  • \(p = m / n\) — proportion of tagged fish among inspected fish,

  • \(r = C / T\) — ratio of estimated harvest to tagged fish released.

The point estimate is: $$\hat{u} = r \cdot p = \frac{C \cdot m}{T \cdot n}$$

Delta-method variance: $$\widehat{\mathrm{Var}}(\hat{u}) \approx r^2 \cdot \frac{p(1-p)}{n} + p^2 \cdot \frac{s_C^2}{T^2}$$

where \(s_C\) is se_C, the standard error of the creel harvest estimate.

Stratified Formula

For stratum \(h\), the per-stratum exploitation rate is: $$\hat{u}_h = \frac{C_h \cdot m_h}{T_h \cdot n_h}$$

with delta-method variance: $$\widehat{\mathrm{Var}}(\hat{u}_h) \approx r_h^2 \cdot \frac{p_h(1-p_h)}{n_h} + p_h^2 \cdot \frac{s_{C_h}^2}{T_h^2}$$

The T-weighted aggregate over \(H\) strata is: $$\hat{u} = \frac{\sum_h T_h \hat{u}_h}{\sum_h T_h}$$

with variance: $$\widehat{\mathrm{Var}}(\hat{u}) = \frac{\sum_h T_h^2 \, \widehat{\mathrm{Var}}(\hat{u}_h)}{(\sum_h T_h)^2}$$

This is the estimator from Jones CM & Pollock KH (2012, Ch. 19) and Pollock KH, Jones CM & Brown TL (1994).

Reporting Rate Adjustment

When reporting_rate \(= \lambda < 1\), the adjusted estimate is \(\hat{u}_{adj} = \hat{u} / \lambda\) and the variance is divided by \(\lambda^2\).

\(\lambda\) is treated as known without error unless reporting_rate_se is supplied. When it is, a third delta term is added, since \(\partial \hat{u} / \partial \lambda = -\hat{u}/\lambda\): $$\widehat{\mathrm{Var}}(\hat{u}) = \frac{r^2 \widehat{\mathrm{Var}}(p) + p^2 \widehat{\mathrm{Var}}(r)}{\lambda^2} + \frac{\hat{u}^2}{\lambda^2} \widehat{\mathrm{Var}}(\lambda)$$

That term is added once, at the total. \(\lambda\) is a single estimate dividing every stratum, so it is perfectly correlated across them; adding it per stratum and summing in quadrature would treat a shared divisor as independent and understate it. On the stratified path it therefore enters on the aggregate, not inside the per-stratum variances.

Natural mortality between tagging and the creel survey is not corrected for.

Bounds

Exploitation rate must lie in \([0, 1]\). If the point estimate or CI endpoints fall outside this range, a warning is issued and CI bounds are clamped to \([0, 1]\).

References

Pollock KH, Jones CM & Brown TL (1994). Angler Survey Methods and Their Applications in Fisheries Management. AFS Special Publication 25. American Fisheries Society.

Jones CM & Pollock KH (2012). Recreational survey methods: estimating effort, harvest, and abundance. In Zale AV et al. (eds), Fisheries Techniques (3rd ed., Ch. 19). American Fisheries Society.

See also

Examples

# Unstratified exploitation rate
result <- estimate_exploitation_rate(
  T    = 200L,
  C    = 450.0,
  se_C = 42.0,
  n    = 180L,
  m    = 15L
)
#>  `C` was supplied as a bare number, so its target cannot be verified.
#>   It must be a season (period) total -- a sampled-day total understates `u` by
#>   the sampling fraction.
#>   Pass the `estimate_total_harvest()` result itself to have this checked.
print(result)
#> 
#> ── Creel Survey Estimates ──────────────────────────────────────────────────────
#> Method: Exploitation Rate (Mark-Recapture)
#> Variance: delta
#> Confidence level: 95%
#> Unit: proportion
#> 
#> # A tibble: 1 × 8
#>   estimate     se ci_lower ci_upper     n     T     C     m
#>      <dbl>  <dbl>    <dbl>    <dbl> <int> <int> <dbl> <int>
#> 1    0.188 0.0495   0.0897    0.285   180   200   450    15

# Stratified exploitation rate
strata_df <- data.frame(
  stratum = c("weekday", "weekend"),
  T_h     = c(120L, 80L),
  C_h     = c(280.0, 170.0),
  se_C_h  = c(28.0, 22.0),
  n_h     = c(110L, 70L),
  m_h     = c(9L, 6L)
)
result_strat <- estimate_exploitation_rate(
  strata = strata_df,
  by     = "stratum"
)
print(result_strat)
#> 
#> ── Creel Survey Estimates ──────────────────────────────────────────────────────
#> Method: Exploitation Rate (Mark-Recapture)
#> Variance: delta
#> Confidence level: 95%
#> Grouped by: stratum
#> Unit: proportion
#> 
#> # A tibble: 3 × 9
#>   stratum  estimate     se ci_lower ci_upper     n     T     C     m
#>   <chr>       <dbl>  <dbl>    <dbl>    <dbl> <int> <int> <dbl> <int>
#> 1 weekday     0.191 0.0639   0.0643    0.318   110   120   280     9
#> 2 weekend     0.182 0.0749   0.0327    0.332    70    80   170     6
#> 3 .overall    0.187 0.0487   0.0914    0.283   180   200   450    15