
Unextrapolated Interview Summaries
Source:vignettes/unextrapolated-summaries.Rmd
unextrapolated-summaries.RmdIntroduction
Creel surveys produce two types of summary products: unextrapolated summaries and extrapolated estimates. This vignette covers unextrapolated summaries — raw tabulations of interview records that describe the composition of interviewed parties without applying survey-design weighting.
When to use unextrapolated summaries:
- Describing who was interviewed (angler type, method, species sought)
- Checking for refusals and participation rates
- Examining trip-length distributions
- Computing catch-while-sought and harvest-while-sought rates as quality indicators
All unextrapolated functions are interview-weighted, not
pressure-weighted. A day with many anglers and few interviews
has the same weight as a day with few anglers and many interviews. For
pressure-weighted, design-correct estimates, use
estimate_catch_rate(), estimate_total_catch(),
and related functions described in the “Interview-Based Catch
Estimation” vignette.
Build the Design
Start by assembling a complete design using all v0.5.0 data layers:
library(tidycreel)
# Load example datasets
data(example_calendar)
data(example_counts)
data(example_interviews)
data(example_catch)
data(example_lengths)
# Step 1: Define the survey calendar and stratification
design <- creel_design(example_calendar, date = date, strata = day_type)
# Step 2: Attach instantaneous count observations
design <- add_counts(design, example_counts)
#> Warning in svydesign.default(ids = psu_formula, strata = strata_formula, : No
#> weights or probabilities supplied, assuming equal probability
# Step 3: Attach interview records (all extended v0.5.0 fields)
design <- add_interviews(design, example_interviews,
catch = catch_total,
effort = hours_fished,
harvest = catch_kept,
trip_status = trip_status,
trip_duration = trip_duration,
angler_type = angler_type,
angler_method = angler_method,
species_sought = species_sought,
n_anglers = n_anglers,
refused = refused
)
# Step 4: Attach species-level catch data
design <- add_catch(design, example_catch,
catch_uid = interview_id,
interview_uid = interview_id,
species = species,
count = count,
catch_type = catch_type
)
# Step 5: Attach fish length data (individual harvest + binned release)
design <- add_lengths(design, example_lengths,
length_uid = interview_id,
interview_uid = interview_id,
species = species,
length = length,
length_type = length_type,
count = count,
release_format = "binned"
)
print(design)
#>
#> ── Creel Survey Design ─────────────────────────────────────────────────────────
#> Type: "instantaneous"
#> Date column: date
#> Strata: day_type
#> Calendar: 14 days (2024-06-01 to 2024-06-14)
#> day_type: 2 levels
#> Counts: 14 observations
#> PSU column: date
#> Count column: effort_hours
#> Party-size term: not carried
#> Count type: "instantaneous"
#> Survey: <survey.design2> (constructed)
#> Interviews: 22 observations
#> Type: "access"
#> Catch: catch_total
#> Effort: hours_fished
#> Harvest: catch_kept
#> Trip status: 17 complete, 5 incomplete
#> Angler type: angler_type
#> Angler method: angler_method
#> Species sought: species_sought
#> Party size: n_anglers
#> Refused: refused
#> Survey: <survey.design2> (constructed)
#> Catch Data: 42 rows, 3 species
#> caught: 8, harvested: 17, released: 17
#> Length Data: 20 rows, 3 species, length: 155–512 mm
#> harvest: 14 individual
#> release: 6 binned
#> Sections: "none"The print() output shows all five data layers: calendar,
counts, interviews, catch, and lengths.
Interview Participation
Use summarize_refusals() to understand how many
potential interviewees declined to participate. High refusal rates can
bias estimates if refusers differ systematically from participants.
summarize_refusals(design)
#> month participation N percent
#> 1 June accepted 22 100All 22 interviews in example_interviews were accepted
(no refusals). In field surveys, a refusal rate above 20% warrants
investigation.
Interview Composition
Seven tabulation functions describe the composition of the interview sample.
Day Type
summarize_by_day_type(design)
#> month day_type N percent
#> 1 June weekday 13 59.1
#> 2 June weekend 9 40.9Angler Type
summarize_by_angler_type(design)
#> month angler_type N percent
#> 1 June bank 13 59.1
#> 2 June boat 9 40.9Fishing Method
summarize_by_method(design)
#> month method N percent
#> 1 June artificial 7 31.8
#> 2 June bait 10 45.5
#> 3 June fly 5 22.7Species Sought
summarize_by_species_sought(design)
#> month species N percent
#> 1 June bass 6 27.3
#> 2 June panfish 5 22.7
#> 3 June walleye 11 50.0Successful Parties
summarize_successful_parties() counts parties that
caught at least one fish of their target species (as recorded in catch
data), broken down by angler type and species sought.
summarize_successful_parties(design)
#> angler_type species_sought N_total N_successful percent
#> 1 bank bass 5 1 20.0
#> 2 bank panfish 3 1 33.3
#> 3 bank walleye 5 4 80.0
#> 4 boat bass 1 1 100.0
#> 5 boat panfish 2 0 0.0
#> 6 boat walleye 6 3 50.0Trip Length Distribution
summarize_by_trip_length(design)
#> trip_length_bin N percent
#> 1 [0,1) 2 9.1
#> 2 [1,2) 5 22.7
#> 3 [2,3) 8 36.4
#> 4 [3,4) 4 18.2
#> 5 [4,5) 3 13.6
#> 6 [5,6) 0 0.0
#> 7 [6,7) 0 0.0
#> 8 [7,8) 0 0.0
#> 9 [8,9) 0 0.0
#> 10 [9,10) 0 0.0
#> 11 10+ 0 0.0The trip-length distribution is useful for detecting outliers and understanding effort patterns.
Catch-While-Sought (CWS) and Harvest-While-Sought (HWS) Rates
CWS and HWS rates measure the proportion of interviews where anglers targeting a species actually caught (CWS) or kept (HWS) that species. These are useful quality indicators and input parameters for population models, but should not be treated as pressure-weighted catch rates for management use — they reflect the interview sample composition, not fishing pressure across the survey period.
CWS Rates by Species Sought
summarize_cws_rates(design, by = species_sought)
#> species_sought N n_unknown_target n_unknown_effort n_nonpositive_effort
#> 1 bass 6 0 0 0
#> 2 panfish 5 0 0 0
#> 3 walleye 11 0 0 0
#> mean_rate se ci_lower ci_upper
#> 1 0.05208333 0.05208333 -0.08180114 0.1859678
#> 2 0.23333333 0.23333333 -0.41450386 0.8811705
#> 3 0.46158009 0.23247889 -0.05641517 0.9795753CWS Rates Collapsed Across All Groupings
summarize_cws_rates(design, by = NULL)
#> N n_unknown_target n_unknown_effort n_nonpositive_effort mean_rate se
#> 1 22 0 0 0 0.2980249 0.1298807
#> ci_lower ci_upper
#> 1 0.02792314 0.5681266HWS Rates
summarize_hws_rates(design, by = species_sought)
#> species_sought N n_unknown_target n_unknown_effort n_nonpositive_effort
#> 1 bass 6 0 0 0
#> 2 panfish 5 0 0 0
#> 3 walleye 11 0 0 0
#> mean_rate se ci_lower ci_upper
#> 1 0.0312500 0.0312500 -0.04908068 0.1115807
#> 2 0.1333333 0.1333333 -0.23685935 0.5035260
#> 3 0.3887987 0.1322997 0.09401668 0.6835807Interpretation guidance: CWS and HWS rates > 1.0 are possible when anglers catch multiple fish of the target species in a single interview. A CWS rate of 0.6 means 60% of interviews targeting that species resulted in at least one catch.
Length Frequency Distributions
Length data attached via add_lengths() can be summarized
by catch type and species.
Harvest Lengths
summarize_length_freq(design, type = "harvest", by = species, bin_width = 25)
#> species length_bin N percent cumulative_percent
#> 1 bass [225,250) 1 25.0 25.0
#> 2 bass [250,275) 1 25.0 50.0
#> 3 bass [275,300) 2 50.0 100.0
#> 4 panfish [150,175) 2 100.0 100.0
#> 5 walleye [375,400) 2 25.0 25.0
#> 6 walleye [400,425) 3 37.5 62.5
#> 7 walleye [475,500) 1 12.5 75.0
#> 8 walleye [500,525) 2 25.0 100.0Release Lengths
Release lengths in example_lengths are stored in
pre-binned format. summarize_length_freq() handles this
automatically:
summarize_length_freq(design, type = "release", by = species)
#> species length_bin N percent cumulative_percent
#> 1 bass [275,276) 4 44.4 44.4
#> 2 bass [325,326) 5 55.6 100.0
#> 3 panfish [175,176) 6 66.7 66.7
#> 4 panfish [225,226) 3 33.3 100.0
#> 5 walleye [375,376) 2 40.0 40.0
#> 6 walleye [425,426) 3 60.0 100.0All-Catch Lengths
summarize_length_freq(design, type = "catch", by = species, bin_width = 25)
#> species length_bin N percent cumulative_percent
#> 1 bass [225,250) 1 7.7 7.7
#> 2 bass [250,275) 1 7.7 15.4
#> 3 bass [275,300) 6 46.2 61.6
#> 4 bass [325,350) 5 38.5 100.1
#> 5 panfish [150,175) 2 18.2 18.2
#> 6 panfish [175,200) 6 54.5 72.7
#> 7 panfish [225,250) 3 27.3 100.0
#> 8 walleye [375,400) 4 30.8 30.8
#> 9 walleye [400,425) 3 23.1 53.9
#> 10 walleye [425,450) 3 23.1 77.0
#> 11 walleye [475,500) 1 7.7 84.7
#> 12 walleye [500,525) 2 15.4 100.1Extrapolated Species-Level Estimates
For design-correct, pressure-weighted estimates broken down by species, use the extrapolated estimators. These combine effort estimates (from count data) with species-specific catch rates (from interview + catch data) using the ratio-of-means estimator.
Catch Per Unit Effort by Species
estimate_catch_rate(design, by = species)
#> 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.
#> 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.
#> 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.
#>
#> ── Creel Survey Estimates ──────────────────────────────────────────────────────
#> Method: ratio-of-means-cpue-species
#> Variance: Taylor linearization
#> Confidence level: 95%
#> Grouped by: species
#> Unit: fish/angler-hour
#>
#> # A tibble: 3 × 6
#> species estimate se ci_lower ci_upper n
#> <chr> <dbl> <dbl> <dbl> <dbl> <int>
#> 1 bass 0.205 0.0743 0.0590 0.350 17
#> 2 panfish 0.0558 0.0311 -0.00518 0.117 17
#> 3 walleye 0.465 0.0957 0.278 0.653 17Total Catch by Species
estimate_total_catch(design, by = species)
#> Warning: Instantaneous counts were expanded without a period length.
#> ℹ No `period_length_col` was supplied to `add_counts()`, so the estimate is the
#> count column summed over days.
#> ! If that column holds an instantaneous angler count, the result is in
#> angler-days, not angler-hours.
#> ℹ Supply the period each count was randomised within: `add_counts(design,
#> counts, period_length_col = <col>)`.
#> This warning is displayed once per session.
#>
#> ── Creel Survey Estimates ──────────────────────────────────────────────────────
#> Method: Total Catch (Effort × CPUE)
#> Variance: Taylor linearization
#> Confidence level: 95%
#> Grouped by: species
#> Effort target: sampled_days
#>
#> # A tibble: 3 × 6
#> species estimate se ci_lower ci_upper n
#> <chr> <dbl> <dbl> <dbl> <dbl> <int>
#> 1 bass 63.2 21.9 16.5 110. 17
#> 2 panfish 27.2 10.4 5.10 49.3 17
#> 3 walleye 190. 46.0 92.3 288. 17Total Harvest by Species
estimate_total_harvest(design, by = species)
#>
#> ── Creel Survey Estimates ──────────────────────────────────────────────────────
#> Method: Total Harvest (Effort × HPUE)
#> Variance: Taylor linearization
#> Confidence level: 95%
#> Grouped by: species
#> Effort target: sampled_days
#>
#> # A tibble: 3 × 6
#> species estimate se ci_lower ci_upper n
#> <chr> <dbl> <dbl> <dbl> <dbl> <int>
#> 1 bass 29.8 9.84 8.82 50.8 17
#> 2 panfish 18.1 6.92 3.40 32.9 17
#> 3 walleye 131. 31.4 64.4 198. 17Release Rate and Total Releases by Species
estimate_release_rate(design, by = species)
#> 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.
#> 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.
#> 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.
#>
#> ── Creel Survey Estimates ──────────────────────────────────────────────────────
#> Method: ratio-of-means-rpue
#> Variance: Taylor linearization
#> Confidence level: 95%
#> Grouped by: species
#> Unit: fish/angler-hour
#>
#> # A tibble: 3 × 6
#> species estimate se ci_lower ci_upper n
#> <chr> <dbl> <dbl> <dbl> <dbl> <int>
#> 1 bass 0.102 0.0407 0.0225 0.182 17
#> 2 panfish 0.0186 0.0104 -0.00173 0.0389 17
#> 3 walleye 0.140 0.0385 0.0640 0.215 17
estimate_total_release(design, by = species)
#>
#> ── Creel Survey Estimates ──────────────────────────────────────────────────────
#> Method: product-total-release
#> Variance: Taylor linearization
#> Confidence level: 95%
#> Grouped by: species
#> Effort target: sampled_days
#>
#> # A tibble: 3 × 6
#> species estimate se ci_lower ci_upper n
#> <chr> <dbl> <dbl> <dbl> <dbl> <int>
#> 1 bass 33.4 14.1 3.43 63.5 17
#> 2 panfish 9.07 3.46 1.70 16.4 17
#> 3 walleye 58.9 18.8 18.9 98.9 17For grouped estimates combining calendar strata with species, use
by = c(day_type, species). See
vignette("interview-estimation") for the complete
extrapolated estimation workflow.
Summary
| Function | Data required | Output |
|---|---|---|
summarize_refusals() |
refused field | month × participation × N × % |
summarize_by_day_type() |
strata | month × day_type × N × % |
summarize_by_angler_type() |
angler_type | month × angler_type × N × % |
summarize_by_method() |
angler_method | month × method × N × % |
summarize_by_species_sought() |
species_sought | month × species × N × % |
summarize_successful_parties() |
catch + angler_type + species_sought | angler_type × species × success rate |
summarize_by_trip_length() |
trip_duration | bin × N × % |
summarize_cws_rates() |
catch + species_sought | CWS rate ± SE by grouping |
summarize_hws_rates() |
catch + species_sought | HWS rate ± SE by grouping |
summarize_length_freq() |
lengths | bin × N × % × cumulative % |