Skip to contents

Runs all three CPUE estimators — Ratio-of-Means (ROM / CPUE\(_2\)), Mean-of-Ratios (MOR / CPUE\(_1\)), and OLS regression slope with jackknife SE (CPUE\(_3\)) — on the same creel design and returns a combined tibble with a cpue_method column for side-by-side comparison.

This implements the Petrere et al. (2010) Table 1 estimator comparison workflow. When the three estimators yield materially different estimates, the choice of estimator matters; compare_cpue_estimators() makes divergence visible.

Usage

compare_cpue_estimators(
  design,
  by = NULL,
  conf_level = 0.95,
  force_origin = TRUE,
  verbose = FALSE
)

Arguments

design

A creel_design object with interviews attached. Must have catch_col and angler_effort_col set.

by

Optional tidy selector for grouping variables. Passed to each underlying estimate_catch_rate call.

conf_level

Numeric. Confidence level. Default 0.95.

force_origin

Logical. Force regression through origin. Default TRUE (standard CPUE\(_3\) formulation).

verbose

Logical. If TRUE, prints a brief message for each estimator run. Default FALSE.

Value

A tibble with columns cpue_method (character: "rom", "mor", "regression"), plus estimate, se, ci_lower, ci_upper, n, and any grouping columns when by is specified. The tibble has class c("cpue_comparison", "tbl_df", "tbl", "data.frame").

Details

Estimator definitions following Petrere et al. (2010):

ROM (CPUE\(_2\))

Ratio of means: total catch / total effort (survey::svyratio). Unbiased for complete trips.

MOR (CPUE\(_1\))

Mean of individual ratios: mean(catch\(_i\) / effort\(_i\)) (survey::svymean). Preferred for incomplete trips.

Regression (CPUE\(_3\))

OLS slope \(\hat{\beta}\) from \(C_i = \beta f_i + \varepsilon_i\) with leave-one-out jackknife SE. Most robust when proportionality is violated (non-zero intercept).

References

Petrere, M. Jr., Giacomini, H.C. & De Marco, P. Jr. (2010). Catch-per-unit-effort: which estimator is best? Braz. J. Biol. 70: 483–491. doi:10.1590/S1519-69842010005000010

Examples

design <- creel_design(example_calendar, date = date, strata = day_type) |>
  add_interviews(example_interviews,
    catch = catch_total, effort = hours_fished,
    trip_status = trip_status, n_anglers = n_anglers
  )
#>  Added 22 interviews: 17 complete (77%), 5 incomplete (23%)

compare_cpue_estimators(design)
#>  Using complete trips for CPUE estimation
#>   (n=17, 77.3% of 22 interviews)
#> Warning: Small sample size for CPUE estimation.
#> ! Sample size is 17. Ratio estimates are more stable with n >= 30.
#>  Variance estimates may be unstable with n < 30.
#>  Using complete trips for CPUE estimation
#>   (n=17, 77.3% of 22 interviews)
#> Warning: Non-standard combination: use_trips='complete' with estimator='mor'
#>  MOR typically used with incomplete trips
#>  You are using MOR on 17 complete trips - consider `estimator =
#>   'ratio-of-means'` for standard complete trip estimation
#> Warning: MOR truncation skipped: no trip duration column in design.
#>  Supply `trip_duration` in `add_interviews()` to enable truncation.
#>  All 17 trips used without truncation.
#> Warning: Small sample size for CPUE estimation.
#> ! Sample size is 17. Ratio estimates are more stable with n >= 30.
#>  Variance estimates may be unstable with n < 30.
#>  Using complete trips for CPUE estimation
#>   (n=17, 77.3% of 22 interviews)
#> # A tibble: 3 × 6
#>   cpue_method estimate     se ci_lower ci_upper     n
#> * <chr>          <dbl>  <dbl>    <dbl>    <dbl> <int>
#> 1 rom            0.967 0.110     0.752    1.18     17
#> 2 mor            1.24  0.163     0.920    1.56     17
#> 3 regression     0.804 0.0597    0.677    0.930    17