
Estimate exploitation rate using the Pollock et al. moment estimator
Source:R/creel-estimates-exploitation-rate.R
estimate_exploitation_rate.RdComputes 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
stratais supplied.- C
Total creel harvest, given either as the
estimate_total_harvestresult 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
Cmust be a period total whileTis the full cohort – butestimate_total_harvestdefaults totarget = "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_catchinflates \(\hat{u}\). Both totals are counts of fish, so no unit check separates them – passing the object is what makes the substitution detectable.When
Cis acreel_estimatesobject its standard error is read from it, and supplyingse_Cas well is an error. Ignored whenstratais supplied.- se_C
numeric. Standard error of the harvest estimate. Required when
Cis a bare number; read from the object instead whenCis acreel_estimates, in which case supplying it here is an error. Ignored whenstratais supplied.- n
integer. Total number of fish inspected in the creel survey (sampled from harvest). Ignored when
stratais supplied.- m
integer. Number of tagged fish found among the
ninspected fish. Ignored whenstratais 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 = 1states that every tag was reported.- reporting_rate_se
numeric scalar or
NULL. The standard error ofreporting_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 defaultreporting_rate = 1there 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 inbyfor the stratum labels).C_his per-stratum harvest and carries the same requirement asC.- by
character(1). Name of the stratum label column in
strata. Default"stratum". Ignored whenstrata = NULL.- aggregate
logical. If
TRUE(the default) an.overallrow containing the T-weighted aggregate exploitation rate is appended to the per-stratum estimates. Set toFALSEto suppress it. Ignored whenstrata = 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.
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
Other Estimation:
estimate_angler_n(),
estimate_mr_harvest()
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