Tidy Interface for Creel Survey Design and Analysis
Overview
Provides a tidy, pipe-friendly interface for creel survey design, data management, estimation, visualisation, and reporting. A creel survey interviews anglers on site to estimate fishing effort, catch, and harvest for a water body. Built on the 'survey' package for design-based inference, with support for instantaneous, bus-route, ice, camera, and aerial designs. Catch-rate estimators follow Hoenig, Jones, Pollock, Robson and Wade (1997) doi:10.2307/2533116; bus-route designs follow Kinloch, McGlennon, Nicoll and Pike (1997) doi:10.1016/s0165-7836(97)00068-4.
Breaking changes
estimate_effort_aerial_glmm()now reports a total across the sampled days, the same basisestimate_effort()uses, instead of a single average day (#363). The two functions could be called on one design and returned quantities that differed by a factor of the number of sampled days, with nothing in either signature or either result to say so. On the package's own aerial fixture that was 378.6 against 5092.5 — a gap a reader would naturally attribute to the diurnal correction the GLMM exists to apply. It is now 4728.6 against 5092.5, and the 7% between them is that correction.target = "mean_day"restores the single-day figure for anyone who wants it, and the basis is recorded on the result aseffort_target, so which question was answered can be read off the object rather than inferred. Both targets are expectations, and both now carry a retransformation factor the previous code did not apply. The fitted curve is a fixed-effects prediction — the day whose random intercept is zero — which on a log link is the *median* day, not the mean. Reporting it as a mean understates byexp(sigma^2 / 2): 4% on the package fixture, more where days vary more. Amean_dayestimate is therefore about 4% higher than the old return value, not identical to it. The standard error scales with the expansion, so the CV is unchanged. It does not carry the uncertainty in the variance component itself, which makes it mildly optimistic; that is documented rather than hidden, and closing it needs a variance method neither the delta nor the bootstrap path offers. This does not make the GLMM usable by the total estimators. They take no effort argument, and every design carries strata, so they always multiply per-stratum effort by per-stratum CPUE while this function returns one ungrouped row. Connecting the two needs stratified GLMM estimation, which is a modelling change and is tracked separately.
Show all changes in 8.0.0Hide the rest of the changes in 8.0.0
estimate_effort_aerial_glmm(boot = TRUE)now returnsNAconfidence interval bounds when a multiplier's uncertainty was declared unknown, instead of an interval that quietly left it out. The total carries uncertainty from three places: the GLMM fit, the visibility correction, and the angler-to-people ratio. Declaring one unknown —visibility_correction = "none", or anNAangler_ratio_se— makes the bootstrap skip that component, because there is nothing to draw from. The standard error already wentNAfor precisely that reason. The interval did not: it was built independently from the bootstrap quantiles and kept a value. What that value described was an interval conditional on the unknown multiplier being exact. Measured, with the same data and the same seed: declaring the visibility correction unknown and declaring it known with zero uncertainty produced bit-for-bit identical bounds of[322.920, 449.732], distinguished only bysebeingNAin one and33.98in the other. "Never studied" was reported exactly as "studied, and found no uncertainty" — the one equivalence this package must never assert. The interval now goesNAalongside the standard error. The delta path already behaved this way, because its interval is derived from the SE and inherited theNAfor free; the bootstrap path built quantiles independently and had to say so explicitly. The two paths now agree. The point estimate is untouched — this is a reporting change, not an estimation one. To get an interval back, state the correction's uncertainty (visibility_se,angler_ratio_se). Declaring it known and zero is a claim you can make deliberately; it is just no longer what silence means.
Documentation
- Examples no longer contain commented-out code. The
estimate_total_catch(),estimate_total_harvest()andestimate_harvest_rate()examples now run the lines they previously only showed, andget_site_contributions(), which had no runnable example, now has one. CRAN's review of 7.0.0 asked for this. - The
validate_incomplete_trips()example and the incomplete-trips vignette restore the equivalence-threshold option they change. - Four vignettes described behaviour the package does not have. Each was found by running the vignette and reading its own output, not by reading the source.
incomplete-trips.Rmdtold a reader whose validation had just **failed** to "stick withuse_trips = "complete"(default)". The default isNULL, and on a roving design — which is what that vignette is about — an unspecifieduse_tripsselects the all-trip mean-of-ratios estimator of Hoenig et al. (1997), not complete trips. Following the parenthetical produced the estimator the line above it warned against. Measured on the example data, catch rate differs by 30% between the two (mean-of-ratios-cpueat 1.257 againstratio-of-means-cpueat 0.967). The same claim appeared twice more, once in a code comment. All three are corrected, and a new section demonstrates the routing with a runnable example rather than asserting it.aerial-glmm.Rmdcompared a one-day GLMM total against a twelve-day total in a table headed "side-by-side comparison", and attributed the resulting 13.5x gap to the diurnal correction. The table now states each row's basis, and the like-for-like rows differ by 10.8%, which is the diurnal correction the prose actually describes. Its "Downstream Estimation" section also claimed that GLMM effort "feeds directly into the standard downstream estimators"; it does not —estimate_total_catch()takes no effort argument and derives effort itself, so the section now says what the code does.aerial-surveys.Rmdexplained thatci_lower/ci_upper"give the 95% confidence interval" directly beneath output where both wereNA, because the design declaresvisibility_correction = "none". Both aerial vignettes now explain why an undeclared correction yieldsNArather than a number, and where to supplyvisibility_seto get an interval.camera-surveys.Rmdsaid negative-duration rows are "set toNAand excluded from the daily sum". They are excluded, but the day reports a smaller number rather thanNA— on the package fixture one flipped ingress/egress pair takes a day from 11 hours to 7.75 — so the warning is the only place the exclusion is visible. - The PDF reference manual builds again. Six characters across four help pages had no LaTeX definition under
pdflatex— tau, kappa, pi, a combining macron, U+2212 minus and U+1D62 subscript i — and stoppedR CMD checkfrom producing the manual at all. They are now\eqn{}math. - The README names vignettes rather than linking to the published article pages. Those vignettes ship inside the tarball, so
vignette("bus-route-surveys")works from an installed package where a link to the website only works with a network. It also means the README no longer depends on a checking machine being able to reach the documentation host. - Every exported function now has a runnable example, and nothing is wrapped in
\dontrun{}. Seventeen exported functions had no example at all, and fourteen help pages wrapped theirs in\dontrun{}. Most of those wrappers were not protecting anything: six ran as written once unwrapped, and the rest referenced objects that were never defined —design_a,my_effort,counts_df— so the block was a sketch rather than an example. One demonstrated writing a CSV into the user's working directory. Examples that genuinely need a suggested package are guarded with@examplesIf rlang::is_installed(...)rather than hidden:estimate_effort_aerial_glmm()needs lme4 andsummarize_by_county()needs zipcodeR. All 125 example topics run, each in under five seconds. DESCRIPTIONcites the methods the estimators implement — Hoenig, Jones, Pollock, Robson and Wade (1997) <doi:10.2307/2533116> for roving catch rates and Kinloch, McGlennon, Nicoll and Pike (1997) <doi:10.1016/s0165-7836(97)00068-4> for bus-route designs — and records the maintainer as copyright holder. The README showsinstall.packages().
Bug fixes
- Printing a
validate_incomplete_trips()result no longer leaves the plot margins changed for the rest of the session.print()widenedpar(mar)to draw its scatter plot and never put it back; it now restores the caller's setting on exit. simulate_creel_data()andsimulate_creel_catch()no longer leave the caller's random number stream reset. Both calledset.seed(seed)and never put back what was there.seedis a convenience for reproducing one simulation, not a licence to take over the session — but a script that seeded its own analysis and then called either function part-way through silently continued from *our* seed. Every draw after that point was determined by an argument passed for one function's benefit, with nothing to say so. Measured: afterset.seed(999), the nextrunif(1)was0.389071on its own and0.685170with asimulate_creel_catch(seed = 42)call in between. Both now give0.389071. The stream is captured beforeset.seed()and restored on exit. A session that had never drawn at all is left without a.Random.seedagain, rather than inheriting ours. Reproducibility is unchanged: the same seed still produces the same data, and omittingseedstill consumes randomness normally.
From NEWS.md in the release
Install
Health
- OK12 OKNow
- OK6 OK2026-10-11
Documentation
- Help pages
- 162 (5 internal)includes a package overview page
- Examples that run
- 100%125 run in a plain check (3 of them under a condition)
- Exported functions with examples
- 100%
- Documented parameters
- 99%
- Return-value docs
- 100%
- Help pages citing references
- 19%
- Getting Started with tidycreel
- Aerial Survey Analysis with tidycreel
- Bus-Route Survey: Equation Traceability
- Bus-Route Surveys
- Camera Survey Analysis with tidycreel
- Counts to Effort: Statistical Pipeline
- Flexible Count Estimation
- GLMM Aerial Effort Estimation
- Glossary of Creel Survey Terms
- Ice Fishing Survey Analysis
Show 14 moreHide 14 vignettes
- Incomplete Trip Estimation
- Interview-Based Catch Estimation
- Interviews to Catch: Statistical Pipeline
- Mark-Recapture and Exploitation Rate Estimation
- Progressive Count Surveys
- Spatially Stratified Estimation with Sections
- Survey Design Toolbox: Planning, Comparing, and Combining Designs
- Survey Scheduling
- Temporal Extrapolation
- tidycreel and the survey Package: A Side-by-Side Guide
- tidycreel.connect: Companion Package for Database Integration HTML
- Unextrapolated Interview Summaries
- Variance Methods: Taylor, Bootstrap, and Jackknife
- Visualising Creel Survey Designs and Results
Downloads
Repository
- PRs merged (all time)
- 97%
- Median days to close, 50 most recently updated closed issues
- not measured
- Median days to close, 50 most recently updated closed PRs
- not measured
Issues over time
PRs over time
Repository github.com/chrischizinski/tidycreel is linked, but repository-practices checks have not run for it yet.
Dependencies
Code & Tests
Datasets
People & History
- 8.0.0Latest2026-10-10 · current release ·
7 days in CRAN's queue
Listed in CRAN's incoming queue from 2026-10-03 21:57 to 2026-10-10 10:19 UTC, in 29 readings. - RR 4.6.0 released · 2026-04-24
Package metadata
- First published
- 2026-10-10
- Total releases
- 1 / 1 yrs
- License
- MIT + file LICENSE OSI
- Minimum R
- ≥ 4.1.0
- Bundled data
- 7.8 KB / 19 files
- Download size
- 4.8 MB
Cite
Cite this package
Run in R for the authors' preferred citation:
citation("tidycreel")The package provides a citation file that builds its entry when R runs it. Run citation() to see it.
Cite the R Observatory
For a number measured here: a download total, a coverage figure, an archival date.
From data release v2026-10-17, which the citation names so these numbers can be found later. More on citing and the projects behind them.