Back to Article
essentially we have a scenario in which the neutralisation tests are not reported with the correct denominator and it implies a higher seroprevalence than it actually is, which in turn could suggest a smaller susceptible population
Download Source

Example use case: the importance of clear reporting of seroprevalence estimates

In [1]:
knitr::opts_chunk$set(echo = TRUE)
library(tidyverse)
── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr     1.1.4     ✔ readr     2.1.5
✔ forcats   1.0.0     ✔ stringr   1.5.1
✔ ggplot2   3.5.1     ✔ tibble    3.2.1
✔ lubridate 1.9.3     ✔ tidyr     1.3.1
✔ purrr     1.0.2     
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag()    masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(matrixStats)

Attaching package: 'matrixStats'

The following object is masked from 'package:dplyr':

    count
library(binom)
options(scipen=999)
In [2]:
# essentially we have a scenario in which the neutralisation tests are not reported with the correct denominator and it implies a higher seroprevalence than it actually is, which in turn could suggest a smaller susceptible population 

# set up some numbers
total_tests <- 5000
positive_elisa <- 250
positive_neutralisation <- 50

## could then also talk about if this was just HCWs but that seems patronising?

Estimates of seroprevalence provide critical insights into the level of susceptibility within a population, in turn informing the implementation of control measures, including vaccinations (e.g. through the critical fraction requiring vaccination to control spread).
A novel coronavirus has been identified and is spreading throughout the population. A rapid seroprevalence study is undertaken to understand levels of immunity of the population. Initially, 5,000 tests are carried out via enzyme-linked immunoabsorbsent assay (ELISA), of which 250 are positive. This corresponds to a seroprevalence estimate of 5% (95% exact binomial confidence intervals 4.4% - 5.6%).
However, it is known that ELISA assays can be prone to cross-reactivity with other coronaviruses, which are also in circulation in this population. Therefore, it is decided to undertake neutralisation tests, which are typically more sensitive, to provide further confidence in the level of population-immunity. Due to a limited budget, only 500 tests can be re-tested with a neutralisation assay, and so all of the 250 positive tests and 250 of the 4,750 negatives are selected randomly for further testing.
Of the 500 samples sent for further testing, only 50 return as positive. For the neutralisation tests, in respect of the ELISA tests, this corresponds to a seroprevalence estimate of 10% (95% exact binomial confidence intervals 7.5% - 13%), which is notably higher than the seroprevalence obtained under ELISA only.
However, discounting the results of the 4,500 tests incorrectly inflates estimated seroprevalence, implying a higher level of immunity in the population than that which is indicated by this study as a whole. Looking at the positive neutralisation tests out of the total tests (ELISA and neutralisation), seroprevalence is estimated as 1% (95% exact binomial confidence intervals 0.7% - 1.3%), again subtantially lower than suggested when using the neutralisation test denominator only.

In [3]:
#look at why this matters

# total population size
pop_size <- 1000000
# R0
r0 <- 4
# herd immunity threshold
hit <- 1-1/r0
# sero diff
sero_diff <- binom.confint(x = positive_neutralisation,n = 2*positive_elisa,method="exact")$mean - binom.confint(x = positive_neutralisation,n = total_tests,method="exact")$mean 
# CFR
cfr <- 0.01
# case hospitalisation ratio
chr <- 0.2

Using the incorrect denominator could have important consequences for future planning and control strategies. Consider a population of 1,000,000 people. The basic reproduction number of this novel coronavirus is estimated at around 4, implying a herd immunity threshold (HIT) of 75%.
If it is (incorrectly) assumed that seroprevalence is 10%, this implies that 660,000 members of the population require immunity before herd immunity is reached. However, it is actually 740,000 members of the population requiring immunity to reach this threshold (an additional 90,000 people) under the correctly specified seroprevalence estimate of 1%.
If immunity were to be required through vaccination, then an additional 90,000 vaccines would be required. In the absence of a vaccine, e.g. if immunity were to be acquired via natural infection, assuming an overall case hospitalisation ratio (CHR) of 20% and case fatality ratio (CFR) of 1%, this suggests an additional 18,000 hospitalisations and 900 deaths than could be expected under the assumption of a seroprevalence of 10% respectfully. In at least the case of hospitalisation, this may require further preparation at hospital-level and the implementation of surge capacity protocols.

In [4]:
### team, do we want a plot of something related to this?