4 Chapter 4 — How Much Disease Is There?
Applied Epidemiology in Aquaculture — Part II: Measuring Disease
Where this sits — Detect (secondary prevention). Counting how much disease is present, and how fast new cases appear, is the measurement backbone of surveillance and early detection. Every “Detect” activity later in the book — diagnostics (Ch 6), sampling and surveillance design (Ch 8), early warning (Ch 12) — rests on the two numbers in this chapter.
4.1 Overview
“We’re losing fish” is a worry, not a measurement. Before anyone can decide whether a farm has a problem, whether it is getting worse, or whether last month’s intervention helped, the disease has to be counted — and counted in a way that is comparable across cages, farms, and seasons. Epidemiology gives us two complementary ways to do this:
- Prevalence — how much disease exists right now (a snapshot).
- Incidence — how much new disease appears over a period (a flow).
They answer different questions, they are computed differently, and confusing them is one of the costliest mistakes in disease reporting. This chapter builds both from the ground up on a real monitoring dataset, attaches honest confidence intervals, and shows how prevalence and incidence are linked. Because this is a Detect chapter, we also meet the idea that a measured (“apparent”) prevalence depends on the test used — the hinge that connects this chapter to diagnostics in Chapter 6.
We use a new file, weekly_monitoring.csv: a 12-week record for one focal unit on each farm (salmon cage AYS-03, tilapia pond LVT-02, shrimp pond CDG-05), each carrying a disease episode.
4.2 4.1 Preparation
pacman::p_load(rio, here, tidyverse, janitor, binom, epiR)
monitoring <- import(here("data", "weekly_monitoring.csv"))
glimpse(monitoring)Each row is one unit in one week, with the population alive at the start of the week (n_alive_start), the deaths that week, and a health sample (n_sampled, n_positive).
4.3 4.2 Prevalence — disease at a snapshot
Prevalence is the proportion of a population that has the condition at a given time:
prevalence = (number of existing cases) ÷ (number in the population)
From our weekly health samples, point prevalence is simply positives over sampled, one value per week:
monitoring <- monitoring |>
mutate(prevalence = n_positive / n_sampled * 100)
monitoring |>
filter(unit_id == "AYS-03") |>
select(week, n_sampled, n_positive, prevalence)For the salmon cage, infection prevalence climbs from 4% in week 1 to a peak of 48% in week 7, then falls — the signature of an epidemic passing through the population.
A proportion always needs a confidence interval, because it came from a sample. Never report a bare prevalence:
binom.confint(24, 50, methods = "wilson")
# method x n mean lower upper
# wilson 24 50 0.48 0.348 0.615So week 7 prevalence is 48% (95% CI 34.8–61.5%) — a wide interval, because only 50 fish were sampled. Sample size drives precision, a theme we formalise in Chapter 8.
🧮 Epivet Tools — Confidence interval for a proportion Run this without R: tools.epivet.cl/ci-prop. Enter positives and sample size; get the Wilson interval. Reference model: Ausvet EpiTools.
Point vs period prevalence. Point prevalence is a single moment; period prevalence pools cases over a stretch of time. Over the whole 12 weeks the salmon cage returned 130 positives from 600 fish sampled — a period prevalence of 21.7% (95% CI 18.6–25.1%). Period prevalence is always ≥ any single point prevalence within it.
4.3.1 Apparent vs true prevalence — the Detect caveat
What we just computed is apparent prevalence: the proportion the test called positive. The true prevalence differs whenever the test is imperfect, and it is recovered with the test’s sensitivity (Se) and specificity (Sp):
true prevalence = (apparent prevalence + Sp − 1) ÷ (Se + Sp − 1)
🧮 Epivet Tools — Apparent → true prevalence Correct a measured prevalence for an imperfect test: tools.epivet.cl/true-prev. Reference model: Ausvet EpiTools.
This matters acutely for SRS. In a latent-class study across three farms, qPCR sensitivity for P. salmonis was far higher than culture and rose with clinical severity — roughly 85% before clinical disease and ~98% during an outbreak (Laurin et al., 2020). And a blinded ring trial of the authorised Chilean laboratories found positivity cut-offs and low-load detection varied substantially between labs (Peña et al., 2025) — so the same fish can yield a different apparent prevalence depending on who tests it. We only flag this correction here; Chapter 6 (a core Detect chapter) does it properly.
4.4 4.3 Incidence — new disease over time
Prevalence counts existing cases; incidence counts new events in a population at risk over a period. There are two flavours, and the difference is the denominator.
4.4.1 Cumulative incidence (risk)
Cumulative incidence, or risk, is the proportion of an at-risk population that develops the event during a defined period:
cumulative incidence = (new cases during the period) ÷ (population at risk at the start)
For the salmon cage, taking death as the event over the 12 weeks:
salmon <- monitoring |> filter(unit_id == "AYS-03")
N0 <- salmon$n_alive_start[salmon$week == 1] # 34000
new_events <- sum(salmon$deaths) # 2908
cum_inc <- new_events / N0 * 100 # 8.55
binom.confint(new_events, N0, methods = "wilson")
# mean 0.0855 ; lower 0.0830 ; upper 0.0890The cohort’s 12-week mortality risk is 8.55% (95% CI 8.3–8.9%) — reassuringly close to the ~12% average seawater SRS mortality reported nationally for Chilean salmon (Rozas-Serri, 2026; Sernapesca). Risk is intuitive — “about 1 in 12 fish died this cycle” — but it has a hidden assumption: that everyone was followed for the whole period. When fish die or are removed partway through, they were not at risk for the later weeks, and risk alone overlooks that.
4.4.2 Incidence rate
The incidence rate fixes this by using animal-time in the denominator — each animal contributes only the time it was actually at risk:
incidence rate = (new cases) ÷ (total animal-time at risk)
With weekly data, a unit contributes roughly its start-of-week population as one week of animal-time:
fish_weeks <- sum(salmon$n_alive_start) # 395,165 fish-weeks
inc_rate <- new_events / fish_weeks * 1000 # per 1000 fish-weeks
epi.conf(as.matrix(cbind(new_events, fish_weeks)),
ctype = "inc.rate", design = 1) * 1000That gives 7.36 new deaths per 1,000 fish-weeks (95% CI 7.09–7.63). The rate is the right measure for comparing units followed for different lengths of time, or whose populations shrink — exactly the situation in a mortality event.
4.4.3 The three farms side by side
monitoring |>
group_by(unit_id, species) |>
summarise(N0 = first(n_alive_start),
deaths = sum(deaths),
cum_inc = round(sum(deaths) / first(n_alive_start) * 100, 1),
rate_1000 = round(sum(deaths) / sum(n_alive_start) * 1000, 1),
.groups = "drop")| Unit | Species | Start | Deaths | Cum. incidence | Rate /1000 fish-wk |
|---|---|---|---|---|---|
| AYS-03 | salmon | 34,000 | 2,908 | 8.6% | 7.4 |
| LVT-02 | tilapia | 12,000 | 1,354 | 11.3% | 9.8 |
| CDG-05 | shrimp | 300,000 | 69,473 | 23.2% | 23.1 |
The shrimp pond lost nearly a quarter of its animals — and a quick plot shows why it is different: its deaths peak in week 3 (the acute AHPND crash soon after stocking), whereas salmon and tilapia peak around week 8. That timing is itself an epidemiological clue, and we build full epidemic curves in Chapter 13.
ggplot(monitoring, aes(week, deaths, colour = species)) +
geom_line() + geom_point() +
labs(x = "Week", y = "Deaths", colour = NULL)4.5 4.4 Prevalence, incidence, and the bridge between them
A classic image: picture a tank. Incidence is the tap adding new cases; recovery and death form the drain; prevalence is the water level. A high level can come from a fast tap (high incidence) or a slow drain (long duration). Formally, in a reasonably steady situation:
prevalence ≈ incidence rate × average duration of disease
This explains apparent paradoxes. A fast, lethal disease like AHPND can show modest prevalence on any given sampling day despite devastating incidence, because cases leave the “diseased” pool almost immediately (they die). A chronic, non-fatal infection can show high prevalence on low incidence. Reading one without the other misleads — which is the whole reason epidemiology keeps both.
4.6 4.5 Mortality is just incidence of death
Everything above used death as the event, so we have in fact been computing mortality measures. Two more terms close the loop and connect back to Chapter 1:
- Mortality rate — incidence rate of death in the whole population (what we computed: 7.4–23.1 per 1,000 fish-weeks).
- Case fatality rate — deaths among diseased animals only (deaths ÷ cases). This is the virulence measure from Chapter 1. A disease can have a low mortality rate (few get sick) yet a high case fatality (those that do, die) — distinctions that matter when you decide how aggressively to intervene.
4.7 4.6 Interpretation on the farm
For a Detect programme, these two numbers are the trigger system. Prevalence from routine sampling tells you whether infection is present and how widespread it is now; a rising incidence rate tells you an outbreak is building before the cumulative toll becomes obvious. The practical payoff is large: farms that detect earlier through active surveillance tend to have later and smaller outbreaks (Price et al., 2020), and in Chile the first seawater detection of SRS has crept from around week 25 to week 12 of the cycle (Rozas-Serri, 2026) — earlier detection is itself a measurable outcome. The catch, from §4.2, is that every one of these numbers is an apparent figure filtered through an imperfect, lab-dependent test. Good measurement (this chapter) plus good diagnostics (Chapter 6) are the two halves of Detect.
4.8 4.7 Exercises
Try it yourself (4.1). Compute the point prevalence for the tilapia cage (LVT-02) in each week, and find the week of peak prevalence. Does it come before or after the week of peak deaths? What does the lag tell you?
4.2 Calculate the cumulative incidence of death for the tilapia cohort by hand from the table in §4.3, then reproduce it in R and attach a Wilson confidence interval.
4.3 The shrimp pond has a cumulative incidence of 23.2% but its deaths are concentrated in weeks 2–4. Explain why the incidence rate is the more honest comparison with the salmon cage, which lost fish steadily across all 12 weeks.
4.4 A sample of 50 fish returns 6 positives (apparent prevalence 12%). Using the Rogan–Gladen formula, calculate the true prevalence first with Se = 0.85, Sp = 0.98, then again keeping Se = 0.85 but dropping Sp to 0.90. Why does a small change in specificity move the true prevalence so much when the apparent prevalence is low?
4.5 Using the tank analogy, explain in two sentences how a disease with very high incidence can nonetheless show low prevalence on a random sampling day.
4.9 Summary & what’s next
- Prevalence is a snapshot of existing cases; incidence is the flow of new cases over a period.
- Cumulative incidence (risk) divides new cases by the starting population; the incidence rate divides by animal-time at risk, and is the right choice when populations shrink or follow-up varies.
- Always attach a confidence interval — a proportion or rate from a sample is an estimate.
- Measured prevalence is apparent, not true; it depends on the test’s Se/Sp and even the laboratory — the bridge to Chapter 6.
- prevalence ≈ incidence rate × duration ties the two together and resolves the fast-disease / low-prevalence paradox.
- Mortality is incidence of death; case fatality is the Chapter 1 virulence measure.
In Chapter 5 — What’s Driving It? we stop counting disease and start comparing groups: relative risk, odds ratios, and attributable fractions — the tools that turn “river-water cages have more BKD” into a number with a confidence interval. That is the first step from Detect toward Anticipate.
4.10 References & further reading
- Dohoo I, Martin W, Stryhn H. Veterinary Epidemiologic Research. 2nd ed. VER Inc.; 2009. — definitions of prevalence, risk, and rate, with worked examples. (Free PDFs and datasets: projects.upei.ca/ver)
- Thrusfield M, Christley R. Veterinary Epidemiology. 4th ed. Wiley-Blackwell; 2018.
- Mardones FO. Preventive medicine of aquatic animals. In: Aquaculture Health Management. Elsevier; 2020. ch. 6. — the prevention-level framework this book is built on.
- Diethelm-Varela B, Atero N, Córdova-Bührle F, et al., Mardones FO. Epidemiology of salmonid rickettsial septicemia (SRS) in farmed salmon: the role of sea lice infestations in mortality risk. J Fish Dis. 2025;e70097. — weekly SRS mortality risk as a longitudinal incidence problem.
- Laurin E, Gardner IA, et al. Bayesian estimation of diagnostic sensitivity and specificity for P. salmonis. J Fish Dis. 2020;43:1167–1175. — apparent vs true prevalence without a gold standard.
- Peña A, Rozas-Serri M, Gardner IA, Diethelm-Varela B, et al., Mardones FO. Inter-laboratory comparison of qPCR for P. salmonis. J Fish Dis. 2025;48:e14044. — why apparent prevalence is lab-dependent.
- Price D, et al. Effect of active surveillance on SRS outbreak timing and size. Aquaculture. 2020. — earlier detection, smaller outbreaks.
- Rozas-Serri M. Salmonid rickettsial septicaemia: a review. Reviews in Aquaculture. 2026. — national SRS mortality and detection-timing figures.
Files for this chapter: data/weekly_monitoring.csv (new) and scripts/make_weekly_monitoring.R (seeded generator). Reuses the setup from Chapter 2.