12  Chapter 12 — Surveillance and Early Warning

Applied Epidemiology in Aquaculture — Part V: Detection & Response

Where this sits — Detect (secondary prevention). Chapters 4, 6 and 8 built the pieces — measuring frequency, trusting a test, sizing a sample. This chapter assembles them into a system: how good your surveillance actually is, whether you can claim freedom from disease, and how to get an alarm before an outbreak is obvious.


12.1 Overview

A surveillance system is only worth running if it catches what it is meant to catch, in time to act. Three questions decide that. How sensitive is the whole system (not just the test)? Can we demonstrate freedom from disease to a regulator or buyer? And can we raise an early alarm from routine data before the outbreak declares itself? We answer all three on a two-year regional time series, and connect each to the SRS reality in your keynote, where first seawater detection has moved from about week 25 to week 12 — earlier detection being itself the goal.

We use regional_srs_weekly.csv: 104 weeks of regional SRS case counts with seasonality and an outbreak starting week 70.


12.2 12.1 Preparation

pacman::p_load(rio, here, tidyverse, surveillance)
reg <- import(here("data", "regional_srs_weekly.csv"))

12.3 12.2 Surveillance system sensitivity

Test sensitivity (Chapter 6) is not system sensitivity. A surveillance system usually has several components — active risk-based qPCR, passive mortality reporting — each with its own detection sensitivity. A scenario tree combines them. If detection in each component is independent, the probability the system detects disease (when present at the design prevalence) is one minus the probability every component misses it:

CSe = 1 − (1 − Se₁)(1 − Se₂)…

se_active  <- 0.55      # risk-based active qPCR component
se_passive <- 0.40      # passive mortality-reporting component
CSe <- 1 - (1 - se_active) * (1 - se_passive)     # 0.73

Two mediocre components (55% and 40%) combine to a system sensitivity of 73% — better than either alone, which is the whole argument for layered surveillance.

🧮 Epivet Tools — System sensitivity & probability of freedom tools.epivet.cl/sys-sens — combine component sensitivities and update the probability of freedom after a negative round. Reference model: Ausvet EpiTools.

Component sensitivities themselves build up from sampling (Chapter 8) and test accuracy (Chapter 6).


12.4 12.3 Demonstrating freedom from disease

Trade and area-management decisions often require a defensible claim that a region is free of disease. You can never prove absence, but you can quantify the probability of freedom, updating a prior belief with each round of negative surveillance:

posterior = prior / [ prior + (1 − prior)(1 − CSe) ]

prior_free <- 0.90
post_free  <- prior_free / (prior_free + (1 - prior_free) * (1 - CSe))   # 0.971

One clean round of negative surveillance lifts confidence in freedom from 0.90 to 0.971; repeated negative rounds drive it higher, while any reintroduction risk pulls it back down between rounds. This Bayesian bookkeeping (the RSurveillance/FFD tools) is how official freedom is substantiated — and it is why design prevalence and system sensitivity, set in Chapters 6 and 8, matter so concretely.


12.5 12.4 Early warning: seeing it coming

Freedom and sensitivity are about whether disease is there. Early warning is about catching a change fast. Aberration-detection methods watch a routine data stream and flag when it exceeds what normal variation predicts. Two workhorses, trained on a pre-outbreak baseline (weeks 1–52):

Shewhart limit — flag any week above mean + 3 SD:

train <- reg$cases[reg$week <= 52]
ucl   <- mean(train) + 3 * sd(train)              # 45.3
# first alarm: week 71

EWMA — an exponentially weighted moving average, which accumulates small persistent shifts and so reacts sooner:

# EWMA with smoothing lambda = 0.3; first alarm: week 70

The true outbreak began at week 70. The EWMA caught it at week 70; the blunter Shewhart limit only at week 71. One week sounds trivial, but at a 4-day SRS doubling time it is a meaningful head start. In practice the surveillance package implements these plus the Farrington and CUSUM algorithms used by real animal-health systems, all of which handle seasonality and reporting delay more gracefully than our hand-built limits.

# idiomatic version with the surveillance package
sts <- sts(observed = reg$cases, start = c(2025, 1), frequency = 52)
plot(farrington(sts, control = list(range = 70:104)))

12.6 12.5 Interpretation on the farm

Good Detect is a system, not a test. Its value is measured in timeliness: farms that detect earlier through active surveillance have later and smaller outbreaks (Price et al., 2020), and the national shift of first SRS detection from week 25 to week 12 is exactly this effect at industry scale. The design levers are the ones built in previous chapters — combine components to raise system sensitivity, sample the right fish to raise component sensitivity, choose aberration methods that alarm early without crying wolf, and feed every negative round into a defensible probability of freedom. Early warning is where measurement turns into time to act.


12.7 12.6 Exercises

Try it yourself (12.1). Combine three surveillance components with sensitivities 0.5, 0.4 and 0.3 into a system sensitivity. Why does adding a weak third component still help?

12.2 Starting from a prior probability of freedom of 0.80 and the system sensitivity you computed, calculate the posterior after one negative surveillance round, then after a second.

12.3 Build the Shewhart limit and the EWMA on the regional series and confirm which alarms first. Explain why EWMA detects a gradual rise sooner than a 3-SD limit.

12.4 Your early-warning system flags far too often during the warm season. Which feature of the real surveillance algorithms (vs our hand-built limit) would reduce these false alarms, and why?


12.8 Summary & what’s next

  • System sensitivity combines component sensitivities (CSe = 1 − ∏(1 − Seᵢ)); layered surveillance beats any single stream.
  • Probability of freedom updates a prior with negative surveillance rounds — the basis of official freedom claims.
  • Aberration detection (Shewhart, EWMA, CUSUM, Farrington) raises early alarms; EWMA caught our outbreak a week before a 3-SD limit.
  • The payoff of Detect is timeliness — earlier detection means smaller outbreaks.

In Chapter 13 — Investigating an Outbreak we move to Respond: the epidemic curve, the structured steps of an investigation, and estimating where and when exposure happened.


12.9 References & further reading

  • Höhle M. surveillance: an R package for monitoring infectious diseases (Farrington, CUSUM, EWMA). — the standard toolkit.
  • Delphino MKVC, Mardones FO, et al. Cost-effectiveness of longitudinal SRS surveillance. J Fish Dis. 2021;44:315–326.
  • Price D, et al. Active surveillance and SRS outbreak timing and size. Aquaculture. 2020.
  • Cameron AR, et al. Quantifying surveillance system sensitivity and probability of freedom (scenario trees). — methods behind RSurveillance.
  • Rozas-Serri M. Salmonid rickettsial septicaemia: a review. Reviews in Aquaculture. 2026. — detection-timing trends.

Files for this chapter: data/regional_srs_weekly.csv and scripts/make_regional_srs_weekly.R (new).