## ----setup, include = FALSE---------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## ----data---------------------------------------------------------------------
library(tidycreel)

data(example_camera_counts)
data(example_camera_timestamps)
data(example_camera_interviews)

head(example_camera_counts)
head(example_camera_timestamps)
head(example_camera_interviews)

## ----counter-calendar---------------------------------------------------------
# Collect all unique sampling dates across datasets
all_dates <- sort(unique(c(
  example_camera_counts$date,
  example_camera_interviews$date
)))

# Assign day type for each date (weekday = Mon-Fri, weekend = Sat-Sun)
cam_calendar <- data.frame(
  date = all_dates,
  day_type = ifelse(
    weekdays(all_dates) %in% c("Saturday", "Sunday"),
    "weekend", "weekday"
  ),
  stringsAsFactors = FALSE
)

head(cam_calendar)

## ----counter-error, error = TRUE----------------------------------------------
try({
creel_design(
  cam_calendar,
  date = date, strata = day_type,
  survey_type = "camera"
)
})

## ----counter-design-----------------------------------------------------------
design_counter <- creel_design(
  cam_calendar,
  date        = date,
  strata      = day_type,
  survey_type = "camera",
  camera_mode = "counter"
)
print(design_counter)

## ----gap-row------------------------------------------------------------------
# The gap row
subset(example_camera_counts, camera_status != "operational")

## ----counter-filter-----------------------------------------------------------
# Keep only days when the camera was working
counts_clean <- subset(example_camera_counts, camera_status == "operational")
nrow(counts_clean) # 9 operational rows

## ----counter-refusal, error = TRUE--------------------------------------------
try({
design_counter <- add_counts(design_counter, counts_clean)
estimate_effort(design_counter)
})

## ----counter-effort-----------------------------------------------------------
effort_counter <- suppressWarnings(est_effort_camera(
  design_counter,
  interviews = example_camera_interviews,
  n_anglers  = 1
))
print(effort_counter)

## ----counter-se-components----------------------------------------------------
effort_counter$se_components

## ----ie-preprocess------------------------------------------------------------
daily_effort <- preprocess_camera_timestamps(
  example_camera_timestamps,
  date_col    = date,
  ingress_col = ingress_time,
  egress_col  = egress_time
)
print(daily_effort)

## ----ie-merge-strata----------------------------------------------------------
day_type_key <- unique(example_camera_timestamps[, c("date", "day_type")])
daily_effort <- merge(daily_effort, day_type_key, by = "date")
print(daily_effort)

## ----ie-design----------------------------------------------------------------
ie_calendar <- data.frame(
  date = daily_effort$date,
  day_type = daily_effort$day_type,
  stringsAsFactors = FALSE
)

design_ie <- creel_design(
  ie_calendar,
  date        = date,
  strata      = day_type,
  survey_type = "camera",
  camera_mode = "ingress_egress"
)

design_ie <- add_counts(design_ie, daily_effort)

## ----ie-effort----------------------------------------------------------------
ie_interviews <- example_camera_interviews[
  example_camera_interviews$date %in% daily_effort$date,
]

effort_ie <- suppressWarnings(est_effort_camera(
  design_ie,
  interviews = ie_interviews,
  n_anglers  = 1
))
print(effort_ie)

## ----catch-rate---------------------------------------------------------------
design_catch <- suppressMessages(add_interviews(
  design_counter,
  example_camera_interviews,
  catch       = walleye,
  effort      = hours_fished,
  trip_status = trip_status,
  n_anglers   = 1
))
catch_rate <- suppressWarnings(estimate_catch_rate(design_catch))
print(catch_rate)

## ----total-catch-refusal, error = TRUE----------------------------------------
try({
estimate_total_catch(design_catch)
})

## ----summary-table, echo = FALSE----------------------------------------------
knitr::kable(data.frame(
  Feature = c(
    "Input data",
    "Preprocessing step",
    "Effort unit",
    "Gap handling",
    "camera_mode value"
  ),
  `Counter mode` = c(
    "One count per day",
    "None (counts used directly)",
    "Daily ingress count",
    "Exclude camera_status != 'operational' rows",
    '"counter"'
  ),
  `Ingress-egress mode` = c(
    "POSIXct arrival/departure pairs",
    "preprocess_camera_timestamps()",
    "Daily effort-hours",
    "Negative durations warned and excluded",
    '"ingress_egress"'
  ),
  check.names = FALSE
), caption = "Comparison of camera survey sub-modes in tidycreel")

