20  Effort Estimation

Author

Christopher Chizinski

Keywords

creel survey, fisheries, design-based inference, R, tidycreel, Quarto

20.1 Why effort comes first

Every estimate produced by a creel survey is either effort itself or a product that uses effort as a scaling factor. If effort is wrong, every downstream number built on it is wrong too.

Effort estimation therefore sits at the foundation of the creel workflow. The count schedule — which days to sample, how many periods per day, how many instantaneous counts per period — is determined by the precision requirements for effort, not by the requirements for catch rate or harvest. Getting effort right means understanding what the instantaneous count estimator targets, how stratification turns counts into a season total, and where variance comes from.

This chapter works through effort estimation for the Harlan Reservoir 2022 survey: the formula that converts an instantaneous angler count into an angler-hour total, the stratified expansion that converts sampled days into a full-season estimate, the variance decomposition that separates between-day uncertainty from within-day uncertainty, and the estimate_effort() function in tidycreel that assembles all of these pieces in a single call.

20.2 What effort means in a creel survey

Creel surveys measure effort as the amount of fishing activity in a defined domain over a defined time period. That simple statement still requires three explicit choices before any arithmetic can begin.

The unit of effort. Angler-hours — one angler fishing for one hour — is the most common unit in North American inland fisheries (Pollock et al. 1994). It is natural for the instantaneous count estimator because an angler count at a point in time, multiplied by the length of the fishing period, gives angler-hours directly. Some designs count boats rather than individual anglers and report boat-hours, then convert to angler-hours using a mean party size from the interview record. Harlan records both boat_anglers (individual anglers on boats) and bank_anglers (shore anglers), so the natural unit is total angler-hours from all modes combined.

The domain. The domain specifies what population the estimate covers — which water, which species, which access modes, which time of day. The Harlan schedule covers a single reservoir section (section = "0") surveyed over two daily shifts (morning period 1 and afternoon period 2) from April through October 2022. Effort estimated from Harlan counts represents fishing pressure within that section-shift-season domain; extrapolation beyond it requires assumptions that the data cannot support.

The reporting period. Managers typically want a seasonal or annual total, not just effort on sampled days. The stratified estimator expands from sampled days to the full calendar. That expansion rests on an assumption: sampled days within a stratum are representative of all days in that stratum. The sampling design is responsible for making this assumption defensible; stratification by day type (weekday vs. weekend) reduces the risk by keeping groups with different effort levels in separate strata.

Fishing pressure on a given day-period can also be reported as angler-trips rather than angler-hours. An angler-trip counts each party as one unit regardless of how long they fish; it answers “how many trips happened” rather than “how much fishing time was expended.” Angler-hours and angler-trips measure different things and can diverge substantially when trip lengths vary — a fishery dominated by long overnight trips has fewer trips but more hours than one dominated by quick half-day outings. Which unit a manager needs depends on the question being asked.

20.3 The instantaneous count estimator

An instantaneous count records the number of anglers active in the survey area at a single moment in time. Multiplying by the length of the fishing period converts a count to an angler-hour estimate for that period (Pope et al. in press):

\hat{E}_{d,p} = \bar{I}_{d,p} \times T_p

where \hat{E}_{d,p} is the estimated angler-hours on day d during period p, \bar{I}_{d,p} is the mean of the K_{d,p} instantaneous counts taken within that period, and T_p is the total length of the period in hours. The mean rather than the sum of counts is used because each count estimates the instantaneous stock of anglers, not a cumulative total; averaging multiple counts within a period reduces the effect of moment-to-moment fluctuation.

At Harlan, morning shifts (period 1) run 8 hours and afternoon shifts (period 2) run 6 hours, with two instantaneous counts per shift. For the morning of September 2, 2022, the two counts recorded 38 and 45 boat anglers (no bank anglers active):

Code
sep2_am <- harlan_counts |>
  filter(date == as.Date("2022-09-02"), period == 1) |>
  mutate(total_anglers = boat_anglers + bank_anglers)

sep2_am |>
  select(count_time, bank_anglers, boat_anglers, total_anglers)
# A tibble: 2 × 4
  count_time   bank_anglers boat_anglers total_anglers
  <chr>               <int>        <int>         <int>
1 09:00:00:000            0           38            38
2 11:15:00:000            0           45            45
Code
mean_count <- mean(sep2_am$total_anglers)
angler_hours_sep2_am <- mean_count * shift_hours["1"]

cat(
  "Mean count:", mean_count, "anglers\n",
  "Shift length:", shift_hours["1"], "hours\n",
  "Estimated effort:", angler_hours_sep2_am, "angler-hours\n"
)
Mean count: 41.5 anglers
 Shift length: 8 hours
 Estimated effort: 332 angler-hours

The 332 angler-hours estimated for that single morning shift illustrates the scale of the effort signal. A sampled period with 41.5 mean anglers and an 8-hour shift contributes more than three person-days of fishing activity to the seasonal total.

Why two counts, not one?

With only one count per period, the daily effort estimate has no within-period variance and the analyst cannot assess how much moment-to-moment fluctuation exists in angler activity (McCormick et al. 2013). Two counts allow estimation of within-day variance, which is a component of total effort variance. The recommendation from McCormick et al. (2013) is to take at least two counts per period, spread across the shift, so that the within-day variance can be estimated and included in the uncertainty budget.

At Harlan, the two counts per period are separated by approximately two hours, providing coverage of both the early-shift and mid-shift activity levels. The add_counts() call in tidycreel records both counts, averages them to a single period-day mean, and retains the within-day variance for inclusion in estimate_effort() output.

20.4 Stratified expansion to the season total

Effort on sampled days must be expanded to the full survey period to produce the seasonal total managers need. The stratified expansion works by scaling the stratum sample mean up to the stratum population size (Rasmussen et al. 1998):

\hat{E}_h = N_h \cdot \frac{1}{n_h} \sum_{d \in s_h} \hat{E}_{d,p}

where N_h is the number of days available in stratum h (from the sampling calendar), n_h is the number of days actually sampled, and the sum runs over sampled days s_h. The ratio N_h / n_h is the expansion weight: it says “each sampled day in this stratum represents N_h / n_h days in the population.”

The overall season estimate sums across strata:

\hat{E} = \sum_h \hat{E}_h

For Harlan, the sampling calendar covers 211 days (April 2 to October 29, 2022), divided into weekday (N_{\text{weekday}} = 150) and weekend (N_{\text{weekend}} = 61) strata. Of these, 82 weekday days and 34 weekend days were sampled. Each sampled day is assigned to one shift — either morning (period 1, 8 hours) or afternoon (period 2, 6 hours) — giving 118 period-day records in the count data (83 weekday + 35 weekend).

Code
harlan_schedule |>
  group_by(day_type) |>
  summarise(
    N_h      = n(),
    n_h      = sum(sampled),
    f_h      = round(n_h / N_h, 3),
    .groups  = "drop"
  )
# A tibble: 2 × 4
  day_type   N_h   n_h   f_h
  <chr>    <int> <int> <dbl>
1 weekday    150    82 0.547
2 weekend     61    34 0.557

Weekdays are sampled at a slightly lower rate than weekends (55% vs. 56%), but the stratum sizes are very different: 150 weekday days vs. 61 weekend days. The weekend stratum is smaller in both total days and sampled days, which matters for precision — smaller strata with fewer sampled days produce wider confidence intervals even when their sampling fraction is similar.

The daily estimator versus the stratum estimator

Two estimators for seasonal effort appear in the creel literature, and they behave differently in practice. Rasmussen et al. (1998) compared them directly using simulation on the Escanaba Lake dataset.

The daily estimator (Malvestuto et al. 1978) first computes a mean daily effort for the full sampling period and then multiplies by the total number of days:

\hat{E}_{\text{daily}} = N \cdot \frac{1}{n} \sum_{d=1}^{n} \hat{E}_d

This estimator ignores stratum membership and treats all sampled days as interchangeable. When effort differs systematically between weekdays and weekends — as it almost always does — the daily estimator will be biased if sampled days are not proportionally distributed across day types. Random variation in day-type representation across the sample can produce large positive or negative swings in the estimate.

The stratum estimator (Rasmussen et al. 1998) estimates effort separately within each stratum and then sums. It is unbiased regardless of how day-type composition varies across the sample, because weekday and weekend days contribute to their respective stratum means independently. Rasmussen et al. demonstrated that the stratum estimator produced bias ratios near zero across 1,000 simulations, while the daily estimator showed substantially larger deviations from census values in years with low overall effort. All effort estimates in this chapter use the stratum estimator.

20.5 Variance of the effort estimate

The variance of a stratified effort estimate has two distinct sources, and understanding their magnitudes guides decisions about survey design (McCormick et al. 2013).

Between-day variance is the variance in daily effort across sampled days within a stratum. It reflects genuine day-to-day variation in how many anglers fish — driven by weather, season, weekday patterns, and stochastic factors. The between-day variance estimator for stratum h is the standard stratified sampling result with a finite population correction:

\hat{V}_{\text{between}}(\hat{E}_h) = N_h^2 \cdot \frac{s_{E,h}^2}{n_h} \left(1 - \frac{n_h}{N_h}\right)

where s_{E,h}^2 is the sample variance of daily effort estimates across sampled days in stratum h. This term dominates when days differ widely in angler activity — common for weekend strata where a rainy October weekend and a sunny June weekend can have an order-of-magnitude difference in effort.

Within-day variance is the variance across multiple instantaneous counts taken within a single period. It reflects moment-to-moment fluctuation in angler presence during the shift: anglers departing for lunch, boats moving between sites, brief periods of low activity following a weather event. The within-day variance contribution is:

\hat{V}_{\text{within}} = \sum_h \sum_{d \in s_h} \left(\frac{T_p^2}{K_d}\right) s_{d}^2

where K_d is the number of counts on day d and s_d^2 is their sample variance. With only two counts per period-day, this is just T_p^2 \cdot (c_1 - c_2)^2 / 2.

The total variance combines both:

\hat{V}(\hat{E}) = \hat{V}_{\text{between}} + \hat{V}_{\text{within}}

estimate_effort() reports both components as se_between and se_within, making it straightforward to determine which source of uncertainty is more important. When se_between dominates, increasing the number of sampled days reduces uncertainty more efficiently than adding more count rounds per day. When se_within dominates — rare in practice but possible in highly variable systems — adding within-day count rounds is the more efficient path (McCormick et al. 2013).

20.6 Preparing count data for effort estimation

The estimate_effort() function operates on whatever numeric column comes first in the design’s count data that is not a date, strata, or sampling unit identifier. For Harlan, the raw count table records bank_anglers, angler_boats, and boat_anglers separately. Passing these columns directly would cause estimate_effort() to estimate effort in units of bank anglers alone — the first numeric column — rather than in total angler-hours.

The correct workflow is to pre-compute angler_hours before building the design:

Code
# Shift lengths for each period
shift_hours <- c("1" = 8L, "2" = 6L)

harlan_counts_effort <- harlan_counts |>
  mutate(
    period        = as.character(period),        # prevent period from being treated as a count
    total_anglers = boat_anglers + bank_anglers,
    angler_hours  = total_anglers * shift_hours[period]
  ) |>
  select(reservoir, date, day_type, period, section, count_time, angler_hours)

harlan_counts_effort |>
  filter(date == as.Date("2022-09-02")) |>
  select(date, day_type, period, count_time, angler_hours)
# A tibble: 2 × 5
  date       day_type period count_time   angler_hours
  <date>     <chr>    <chr>  <chr>               <int>
1 2022-09-02 weekday  1      09:00:00:000          304
2 2022-09-02 weekday  1      11:15:00:000          360

Two things happen here. First, period is converted from numeric to character so that estimate_effort() does not interpret it as a count variable (period values of 1 and 2 are identifiers, not observations). Second, angler_hours is computed as total_anglers × shift_hours[period], encoding the shift-length multiplication directly in the data. add_counts() then averages the two within-period records to a single period-day mean — matching the formula \bar{I}_{d,p} \times T_p at the data preparation stage rather than in the estimator.

The full design pipeline with effort-preprocessed counts:

Code
harlan_design_effort <- creel_design(
  calendar = harlan_schedule,
  date     = "date",
  strata   = "day_type"
) |>
  add_counts(harlan_counts_effort, count_time_col = "count_time") |>
  add_interviews(
    interviews     = harlan_interviews_with_catch,
    catch          = "total_harvest",
    effort         = "hours_fished",
    trip_duration  = "hours_fished",
    trip_status    = "trip_status",
    n_anglers      = "n_anglers",
    angler_type    = "angler_type",
    angler_method  = "angler_method",
    interview_type = "access"
  ) |>
  add_catch(
    data          = harlan_catch,
    catch_uid     = "interview_id",
    interview_uid = "interview_id",
    species       = "species",
    count         = "n_fish",
    catch_type    = "catch_type"
  )
Warning in svydesign.default(ids = psu_formula, strata = strata_formula, : No
weights or probabilities supplied, assuming equal probability
Warning: 318 interviews have zero catch.
ℹ Zero catch may be valid (skunked) or indicate missing data.
Warning: ! Catch totals in catch data diverge from interview-level total_harvest for 329
  interviews.
ℹ This is advisory. Real creel data may differ legitimately (partial species
  recording).

The design holds the same survey structure built in Section 18.1 — calendar, strata, interviews, catch — but the counts slot now carries angler_hours as its single numeric count variable. This ensures all downstream effort estimates are in angler-hours rather than raw angler counts.

20.7 Effort on sampled days

estimate_effort() returns effort for the sampled days only when target = "sampled_days" (the default). This is the design-weighted sum of angler-hours actually observed across all sampled period-day combinations, without extrapolating to unsampled days.

Code
eff_sampled <- estimate_effort(harlan_design_effort, target = "sampled_days")
Warning: Count variable angler_hours contains 18 zero values.
ℹ Zero values may indicate days with no fishing activity or data collection
  issues.
ℹ Consider whether zeros are true zeros or missing data.
Code
eff_sampled

── Creel Survey Estimates ──────────────────────────────────────────────────────
Method: Total
Variance: Taylor linearization
Confidence level: 95%
Effort target: sampled_days

# A tibble: 1 × 7
  estimate    se se_between se_within ci_lower ci_upper     n
     <dbl> <dbl>      <dbl>     <dbl>    <dbl>    <dbl> <int>
1    18390 2136.      1957.      856.   14160.   22620.   118

The 118 sampled period-days produced 1.839e+04 observed angler-hours, with a standard error of 2,136 angler-hours (CV = 11.6%). This is not a seasonal estimate — it covers only the periods that were actually surveyed — but it benchmarks the observed effort against which the full-season expansion can be compared.

The SE decomposes into a between-day component of 1,957 angler-hours and a within-day component of 856 angler-hours. Between-day variance accounts for the larger share: day-to-day differences in how many anglers visit Harlan are a more important source of uncertainty than moment-to-moment fluctuation within a shift. This is the typical pattern for reservoir fisheries where weather and seasonality drive large swings in daily attendance.

20.8 Full-season effort estimate

The primary management deliverable is the full-season angler-hour estimate — expanded from sampled days to the complete sampling frame using the stratum weights N_h / n_h. The target = "stratum_total" argument applies this expansion:

Code
eff_season <- estimate_effort(harlan_design_effort, target = "stratum_total")
Warning: Count variable angler_hours contains 18 zero values.
ℹ Zero values may indicate days with no fishing activity or data collection
  issues.
ℹ Consider whether zeros are true zeros or missing data.
Code
eff_season

── Creel Survey Estimates ──────────────────────────────────────────────────────
Method: Total
Variance: Taylor linearization
Confidence level: 95%
Effort target: stratum_total

# A tibble: 1 × 7
  estimate    se se_between se_within ci_lower ci_upper     n
     <dbl> <dbl>      <dbl>     <dbl>    <dbl>    <dbl> <int>
1   33052. 3704.      3521.     1148.   25716.   40388.   118

Expanding to all 211 calendar days yields an estimated 3.305e+04 angler-hours for the Harlan 2022 season (April–October), with a 95% confidence interval of approximately 2.572e+04 to 4.039e+04 angler-hours. The CV of 11.2% satisfies the commonly cited 20% target for management-grade estimates (McCormick et al. 2013), though it falls in the range that some agencies consider acceptable rather than comfortable.

The ratio of stratum_total to sampled_days reflects the proportion of the season that was surveyed. Harlan sampled 55% of available days (116 of 211), so the expansion factor is approximately 1.82. The actual expansion differs slightly between strata because weekday and weekend days were sampled at slightly different rates.

20.9 Effort by stratum

The four-cell breakdown by day type and period reveals how effort is distributed across the sampling frame:

Code
eff_strata <- estimate_effort(
  harlan_design_effort,
  by     = c(day_type, period),
  target = "stratum_total"
)
Warning: Count variable angler_hours contains 18 zero values.
ℹ Zero values may indicate days with no fishing activity or data collection
  issues.
ℹ Consider whether zeros are true zeros or missing data.
Code
eff_strata

── Creel Survey Estimates ──────────────────────────────────────────────────────
Method: Total
Variance: Taylor linearization
Confidence level: 95%
Grouped by: day_type, period
Effort target: stratum_total

# A tibble: 4 × 9
  day_type period estimate    se se_between se_within ci_lower ci_upper     n
  <chr>    <chr>     <dbl> <dbl>      <dbl>     <dbl>    <dbl>    <dbl> <dbl>
1 weekday  1        16012. 3474.      3245.     1239.    9132.   22892.    41
2 weekend  1         2984. 1196.      1128.      398.     614.    5353.    19
3 weekday  2        12090. 2455.      2270.      935.    7229.   16952.    42
4 weekend  2         1966.  763.       715.      267.     455.    3477.    16

Three patterns are immediately visible. First, weekday effort substantially exceeds weekend effort in every period — weekday morning effort alone (1.601e+04 angler-hours) is larger than total weekend effort across both periods. This is the reverse of the pattern typical for urban-access reservoirs and reflects Harlan’s location in rural south-central Nebraska, where mid-week fishing by retirees, nearby residents, and agricultural workers is common.

Second, morning effort (period 1) exceeds afternoon effort (period 2) for both day types. Morning periods are 8 hours long versus 6 hours for afternoons, but the count-per-unit-time is also higher in the morning, so the difference reflects genuine differences in angler behavior rather than just shift-length arithmetic.

Third, the weekend strata carry wider confidence intervals relative to their estimates (higher CV). The weekend stratum has fewer sampled days and more variable day-to-day attendance — sunny summer weekends draw large crowds while cold autumn weekends can be nearly empty — so the between-day variance is larger relative to the mean.

The marginal day-type totals collapse across periods:

Code
eff_daytype <- estimate_effort(
  harlan_design_effort,
  by     = day_type,
  target = "stratum_total"
)
Warning: Count variable angler_hours contains 18 zero values.
ℹ Zero values may indicate days with no fishing activity or data collection
  issues.
ℹ Consider whether zeros are true zeros or missing data.
Code
eff_daytype

── Creel Survey Estimates ──────────────────────────────────────────────────────
Method: Total
Variance: Taylor linearization
Confidence level: 95%
Grouped by: day_type
Effort target: stratum_total

# A tibble: 2 × 8
  day_type estimate    se se_between se_within ci_lower ci_upper     n
  <chr>       <dbl> <dbl>      <dbl>     <dbl>    <dbl>    <dbl> <dbl>
1 weekday    28102. 3487.      3311.     1096.   21195.   35009.    83
2 weekend     4950. 1248.      1199.      344.    2478.    7421.    35

Weekdays account for 85% of total estimated angler-hours (2.81e+04 AH) against 15% for weekends (4,950 AH). This split has direct management implications: a regulation targeting weekend fishing pressure would affect a minority of total season effort, while a midweek closure would affect the majority.

20.10 Seasonal pattern in effort

The survey calendar spans April through October. Within that window, effort is not evenly distributed — spring and early summer typically see higher fishing pressure than late fall. The mean angler-hours per sampled period-day by month describes this seasonal arc directly from the observed counts:

Code
monthly_effort <- harlan_design_effort$counts |>
  mutate(month = month(date, label = TRUE, abbr = TRUE)) |>
  group_by(month, day_type) |>
  summarise(
    n       = n(),
    mean_ah = mean(angler_hours, na.rm = TRUE),
    se_ah   = sd(angler_hours, na.rm = TRUE) / sqrt(n()),
    .groups = "drop"
  )

ggplot(monthly_effort, aes(x = month, y = mean_ah, fill = day_type)) +
  geom_col(position = position_dodge(width = 0.8), width = 0.7) +
  geom_errorbar(
    aes(ymin = mean_ah - se_ah, ymax = mean_ah + se_ah),
    position = position_dodge(width = 0.8),
    width = 0.25
  ) +
  scale_fill_manual(
    values = creel_palette(2),
    labels = c("weekday" = "Weekday", "weekend" = "Weekend")
  ) +
  labs(
    x    = NULL,
    y    = "Mean angler-hours per sampled period-day",
    fill = "Day type"
  ) +
  theme_creel() +
  theme(legend.position = "top")
Warning: No shared levels found between `names(values)` of the manual scale and the
data's fill values.
No shared levels found between `names(values)` of the manual scale and the
data's fill values.
No shared levels found between `names(values)` of the manual scale and the
data's fill values.
Grouped bar chart with months on the x-axis and mean angler-hours on the y-axis, bars colored by day type (weekday vs. weekend), error bars showing one SE.
Figure 20.1: Mean angler-hours per sampled period-day by month and day type, Harlan Reservoir 2022. Each bar represents the average of all sampled period-days within a month-day-type combination; error bars show one standard error. The survey covers April through October. Weekday effort (dark) consistently exceeds weekend effort (light) across the season; both peak in May and decline through autumn.

May records the highest mean effort on sampled period-days for both day types, with weekday mornings averaging over 300 angler-hours. This likely reflects the opening of the main spring fishing season at Harlan — walleye and white bass are highly targeted in May — combined with the long spring days that extend the productive morning period. Effort declines through summer and into autumn, with October weekday averages roughly one-fifth of the May peak.

The April values are near zero because most April sampled days fell in early April before anglers had established regular patterns. This emphasizes a practical point: sampled days near the margins of the season carry a disproportionate share of the between-day variance (a zero-effort day and a 300-angler-hour day in the same stratum drive a large s_{E,h}^2). If the calendar boundary is set too early or too late relative to when fishing actually occurs, the expansion weights amplify this edge-effect noise into the seasonal total.

20.11 Stratum-level effort estimates with confidence intervals

The point estimates and uncertainty intervals for the full-season breakdown visualize which strata carry the most effort and where estimation uncertainty is largest:

Code
eff_4cell <- eff_strata$estimates |>
  mutate(
    label = paste0(day_type, "\nPeriod ", period),
    label = factor(label, levels = c(
      "weekday\nPeriod 1", "weekday\nPeriod 2",
      "weekend\nPeriod 1", "weekend\nPeriod 2"
    ))
  )

ggplot(eff_4cell, aes(x = label, y = estimate, fill = day_type)) +
  geom_col(width = 0.6) +
  geom_errorbar(
    aes(ymin = ci_lower, ymax = ci_upper),
    width = 0.2
  ) +
  geom_text(
    aes(label = formatC(round(estimate), big.mark = ",")),
    vjust = -0.8, size = 3.2
  ) +
  scale_fill_manual(
    values = creel_palette(2),
    labels = c("weekday" = "Weekday", "weekend" = "Weekend"),
    guide  = "none"
  ) +
  labs(
    x = NULL,
    y = "Estimated angler-hours (full season)"
  ) +
  theme_creel()
Warning: No shared levels found between `names(values)` of the manual scale and the
data's fill values.
No shared levels found between `names(values)` of the manual scale and the
data's fill values.
No shared levels found between `names(values)` of the manual scale and the
data's fill values.
Four grouped bars — weekday period 1, weekday period 2, weekend period 1, weekend period 2 — with error bars showing 95% confidence intervals and numeric labels.
Figure 20.2: Estimated full-season angler-hours by day type and period, Harlan Reservoir 2022. Bars show the stratum_total estimate (expanded to all calendar days in each stratum). Error bars show 95% confidence intervals from the Taylor linearization variance estimator. Numbers above bars show the point estimate in angler-hours. Weekday mornings (period 1) dominate; weekend effort in either period is a small fraction of weekday effort.

The confidence intervals reveal why survey design decisions matter. The weekday period 1 CI spans roughly 14,000 angler-hours — a range large enough to affect management conclusions if the estimate were used to compare against a target fishing pressure threshold. The weekend period 2 CI is narrower in absolute terms but represents a similar proportional uncertainty because weekend effort is inherently lower. Reducing these intervals requires increasing the number of sampled days, not adding more count rounds per already-sampled day — because between-day variance dominates across all strata.

20.12 Precision and reporting

The coefficient of variation for the full-season estimate is 11.2%. Whether this is adequate depends on how the estimate will be used. For detecting year-over-year trends of 20–30%, a CV of 10–15% is generally sufficient because the trend signal is larger than the noise. For detecting changes of 10% or less — common when managing regulated fisheries close to exploitation targets — a CV below 10% is preferable (McCormick et al. 2013).

The standard error decomposes into between-day and within-day components:

Code
eff_season$estimates |>
  select(estimate, se, se_between, se_within) |>
  mutate(
    pct_between = round(100 * se_between^2 / se^2, 1),
    pct_within  = round(100 * se_within^2  / se^2, 1)
  )
# A tibble: 1 × 6
  estimate    se se_between se_within pct_between pct_within
     <dbl> <dbl>      <dbl>     <dbl>       <dbl>      <dbl>
1   33052. 3704.      3521.     1148.        90.4        9.6

Between-day variance accounts for 90% of total variance. Adding a third count round to already-sampled days would reduce the within-day component but leave the dominant between-day component unchanged. The most efficient way to reduce overall uncertainty is to sample more days — either by extending the survey season or by increasing the sampling fraction within existing strata.

Survey programs that want explicit precision targets before the season can use the variance decomposition from historical data to plan sample sizes. If prior surveys show s_{E,h}^2 for each stratum and the target CV is 15%, the required n_h follows directly from the standard stratified sampling formula (McCormick et al. 2013).

20.13 tidycreel support

Implemented for instantaneous count designs:

  • estimate_effort() — stratified effort estimator with Taylor variance, between/within decomposition, multiple targets (sampled_days, stratum_total, period_total), and grouping via by
  • estimate_effort_grouped() — called internally by estimate_effort() when by is specified
  • add_counts() with count_time_col — averages multiple within-period counts to a single period-day mean and computes within-day variance contribution

Constraints and workflow notes:

  • The count variable used by estimate_effort() is always the first numeric column in the design’s count data that is not a date, strata, or PSU column. Pre-compute the target unit (here, angler_hours) and drop component columns before calling add_counts() to ensure the correct variable is selected.
  • Convert period (and any similar integer identifiers) to character before calling add_counts() to prevent them from being selected as count variables.
  • The stratum_total target requires that the design have a strata column and that the calendar cover the full survey period. Days not in the calendar cannot be expanded to.

Not in scope for this chapter:

  • Bus-route effort estimation — handled by estimate_effort_br(), covered in Section 9.1 but not demonstrated here
  • Aerial and camera-trap designs — handled by estimate_effort_aerial() and estimate_effort_camera(), introduced in Section 11.1
  • Sample size planning — requires external calculation using variance estimates from this chapter as inputs; tidycreel does not currently provide an optimal_n() function (see TIDYCREEL-WISHLIST.md)

20.14 Takeaway

Effort estimation is the point of the count schedule and the foundation for every harvest and catch total the survey produces. Getting it right means three things.

First, the instantaneous count estimator assumes that each count represents the instantaneous angler stock during the period. That assumption holds when counts are taken at random or representative times within the period. Counts clustered at the same time of day — always at 9:00 a.m., always at midday — can produce biased effort estimates if angler activity peaks and valleys are systematic.

Second, stratification by day type is not optional decoration. Without it, the random day-to-day composition of the sample can produce large swings in the estimated total. With it, weekday and weekend effort are estimated from samples of their respective populations, and the expansion to the full season is unbiased regardless of how any particular week was sampled.

Third, between-day variance almost always dominates. The lesson for survey design is that sampling more days per season is more effective than adding count rounds to days already sampled. A second or third count round per shift reduces within-day noise, but if days vary substantially in effort — as they do at any reservoir influenced by weather and season — only more days can reduce the dominant between-day component.

The Harlan 2022 season estimate of approximately 3.305e+04 angler-hours (95% CI 2.572e+04–4.039e+04) is the number that Section 21.1 will use to scale harvest and catch totals. The downstream confidence intervals are wider because effort uncertainty multiplies through \hat{E} \times \hat{R}.

Malvestuto, S. P., W. D. Davies, and W. L. Shelton. 1978. An evaluation of the roving creel survey with nonuniform probability sampling. Transactions of the American Fisheries Society 107(2):255–262.
McCormick, J. L., M. C. Quist, and D. J. Schill. 2013. Creel survey design considerations for short-duration fisheries with applications to Chinook salmon sport fisheries. North American Journal of Fisheries Management 33(3):628–641.
Pollock, K. H., C. M. Jones, and T. L. Brown. 1994. Angler survey methods and their applications in fisheries management. American Fisheries Society, Bethesda, Maryland.
Pope, K. L., C. J. Chizinski, A. J. Lynch, and J. R. Post. in pressin press. Creel surveys.
Rasmussen, P. W., M. D. Staggs, T. D. Beard, and S. P. Newman. 1998. Bias and confidence interval coverage of creel survey estimators evaluated by simulation. Transactions of the American Fisheries Society 127:469–480.