@@ -147,21 +147,21 @@ make the structure of your data generally look like this:
-
2026-05-02
+
2026-06-23
abcd
Escherichia coli
S
S
-
2026-05-02
+
2026-06-23
abcd
Escherichia coli
S
R
-
2026-05-02
+
2026-06-23
efgh
Escherichia coli
R
@@ -218,7 +218,7 @@ cleaned as SIR values as well.
With as.mo(), users can transform arbitrary
microorganism names or codes to current taxonomy. The AMR
package contains up-to-date taxonomic data. To be specific, currently
-included data were retrieved on 24 Jun 2024.
+included data were retrieved on 07 May 2026.
The codes of the AMR packages that come from as.mo() are
short, but still human readable. More importantly, as.mo()
supports all kinds of input:
Since AMR v2.0 (March 2023), it is very easy to create different
-types of antibiograms, with support for 20 different languages.
-
There are four antibiogram types, as proposed by Klinker et
+
The AMR package supports 28 different languages for
+antibiograms and provides four types, as proposed by Klinker et
al. (2021, DOI
-10.1177/20499361211011373), and they are all supported by the new
-antibiogram() function:
+10.1177/20499361211011373):
-Traditional Antibiogram (TA) e.g, for the
-susceptibility of Pseudomonas aeruginosa to
-piperacillin/tazobactam (TZP)
+Traditional Antibiogram (TA) – susceptibility of a
+species to individual antibiotics
-Combination Antibiogram (CA) e.g, for the
-sdditional susceptibility of Pseudomonas aeruginosa to TZP +
-tobramycin versus TZP alone
+Combination Antibiogram (CA) – susceptibility of a
+species to combination regimens
-Syndromic Antibiogram (SA) e.g, for the
-susceptibility of Pseudomonas aeruginosa to TZP among
-respiratory specimens (obtained among ICU patients only)
+Syndromic Antibiogram (SA) – susceptibility of a
+species, stratified by clinical syndrome or setting
Weighted-Incidence Syndromic Combination Antibiogram
-(WISCA) e.g, for the susceptibility of Pseudomonas
-aeruginosa to TZP among respiratory specimens (obtained among ICU
-patients only) for male patients age >=65 years with heart
-failure
+(WISCA) – estimated empirical coverage of a regimen
+for a syndrome, weighted by pathogen incidence and with
+quantified uncertainty
-
In this section, we show how to use the antibiogram()
-function to create any of the above antibiogram types. For starters,
-this is what the included example_isolates data set looks
-like:
+
If your goal is to guide empirical therapy, WISCA should be
+your default. The reason is simple: when you start empirical
+treatment, you do not know which pathogen is causing the infection. Your
+next patient will not present with a species label attached to them.
+What matters is the probability that the regimen you choose
+will cover whatever pathogen turns out to be the cause, given
+the local epidemiology of the syndrome. Traditional antibiograms do not
+answer that question. They fragment information by species, ignore how
+frequently each species causes the syndrome, do not evaluate combination
+regimens, and provide no measure of uncertainty. WISCA addresses all of
+these limitations using a Bayesian framework (Hebert et al.,
+2012; Bielicki et al., 2016). See the WISCA vignette for
+the full explanation.
+
Traditional, combination, and syndromic antibiograms remain useful
+for surveillance purposes, i.e., tracking resistance
+trends per species over time. But if you care about clinical impact,
+about choosing the right empirical regimen for your patient, use
+WISCA.
+
For starters, this is what the included example_isolates
+data set looks like:
WISCA (recommended for empirical therapy guidance)
+
+
Use the wisca() function, or equivalently
+antibiogram(..., wisca = TRUE). WISCA produces a single
+coverage estimate per regimen for the entire syndrome, weighted by
+pathogen incidence, with a 95% credible interval from Bayesian Monte
+Carlo simulation:
The output tells you: “given the species distribution in your
+data, there is an estimated X% probability that this regimen covers the
+infection, with 95% credible interval [lower, upper]”. That is the
+clinically relevant question.
+
For syndrome-specific or patient-specific
+WISCA, use the syndromic_group argument or group
+your data first. You can stratify by anything: ward, age group, risk
+profile, acquisition type. The syndromic_group argument
+accepts any column or expression:
Keep in mind that more granular stratification produces more relevant
+estimates for each subgroup, but with wider credible intervals due to
+smaller sample sizes. There is always a trade-off between granularity
+and precision. If local numbers are small, consider pooling data from
+multiple sites (Bielicki et al., 2016).
+
For reliable WISCA results, ensure your data includes only
+first isolates (use first_isolate()) and consider
+filtering for the top n species (use
+top_n_microorganisms()), since rare contaminants can
+distort coverage estimates.
+
After creating the WISCA model, assessments can be done on the
+distributions of the Monte Carlo simulations that WISCA carried out:
+
+# a ggplot2 extension for WISCAs and other antibiograms:
+ggplot2::autoplot(wisca_out)
+
+
+
Traditional Antibiogram
-
To create a traditional antibiogram, simply state which antibiotics
-should be used. The antibiotics argument in the
-antibiogram() function supports any (combination) of the
-previously mentioned antibiotic class selectors:
-
+
If you need per-species susceptibility rates, e.g., for AMR
+surveillance reports, the traditional antibiogram remains the right
+tool. It reports the proportion of susceptible isolates per species per
+antibiotic:
+
antibiogram(example_isolates, antibiotics =c(aminoglycosides(), carbapenems()))
@@ -821,7 +979,7 @@ Greek, Hindi, Indonesian, Italian, Japanese, Korean, Norwegian, Polish,
Portuguese, Romanian, Russian, Spanish, Swahili, Swedish, Turkish,
Ukrainian, Urdu, or Vietnamese. In this next example, we force the
language to be Spanish using the language argument:
-
+
antibiogram(example_isolates, mo_transform ="gramstain", antibiotics =aminoglycosides(),
@@ -864,11 +1022,13 @@ language to be Spanish using the language argument:
-
Combined Antibiogram
+
Combination Antibiogram
-
To create a combined antibiogram, use antibiotic codes or names with
-a plus + character like this:
-
+
A combination antibiogram shows how much additional susceptibility a
+second agent adds for a given species. This is useful for surveillance
+of combination regimens, but note that it is still species-stratified
+and does not account for pathogen incidence in the syndrome:
+
combined_ab<-antibiogram(example_isolates, antibiotics =c("TZP", "TZP+TOB", "TZP+GEN"), ab_transform =NULL
@@ -948,10 +1108,13 @@ a plus + character like this:
Syndromic Antibiogram
-
To create a syndromic antibiogram, the syndromic_group
-argument must be used. This can be any column in the data, or e.g. an
-ifelse() with calculations based on certain columns:
-
+
A syndromic antibiogram stratifies per-species susceptibility by
+clinical context (ward, specimen type, etc.). It adds clinical context
+to the traditional antibiogram but is still species-level, without
+incidence weighting or uncertainty quantification. For surveillance by
+setting this is fine; for empirical therapy guidance, WISCA is
+preferred:
+
antibiogram(example_isolates, antibiotics =c(aminoglycosides(), carbapenems()), syndromic_group ="ward"
@@ -1125,511 +1288,14 @@ argument must be used. This can be any column in the data, or e.g. an
To create a Weighted-Incidence Syndromic Combination
-Antibiogram (WISCA), simply set wisca = TRUE in
-the antibiogram() function, or use the dedicated
-wisca() function. Unlike traditional antibiograms, WISCA
-provides syndrome-based susceptibility estimates, weighted by pathogen
-incidence and antimicrobial susceptibility patterns.
WISCA uses a Bayesian decision model to integrate
-data from multiple pathogens, improving empirical therapy guidance,
-especially for low-incidence infections. It is
-pathogen-agnostic, meaning results are syndrome-based
-rather than stratified by microorganism.
-
For reliable results, ensure your data includes only first
-isolates (use first_isolate()) and consider
-filtering for the top n species (use
-top_n_microorganisms()), as WISCA outcomes are most
-meaningful when based on robust incidence estimates.
-
For patient- or syndrome-specific WISCA, run the
-function on a grouped tibble, i.e., using
-group_by() first:
All antibiogram types, including WISCA, can be plotted using
+autoplot() from the ggplot2 package, since
+this AMR package provides an extension to that
+function:
To calculate antimicrobial resistance in a more sensible way, also by
correcting for too few results, we use the resistance() and
@@ -1657,7 +1323,7 @@ proportion of R (proportion_R()
I (proportion_SI(), equal to
susceptibility()). These functions can be used on their
own:
-
+
our_data_1st%>%resistance(AMX)#> ℹ `resistance()` assumes the EUCAST guideline and thus considers the 'I'#> category susceptible. Set the `guideline` argument or the `AMR_guideline`
@@ -1666,7 +1332,7 @@ own:
#> [1] 0.4203377
Or can be used in conjunction with group_by() and
summarise(), both from the dplyr package:
-
+
our_data_1st%>%group_by(hospital)%>%summarise(amoxicillin =resistance(AMX))
@@ -1684,7 +1350,7 @@ own:
diameters can be interpreted into clinical breakpoints (SIR) using
as.sir(). Here’s an example with randomly generated MIC
values for Klebsiella pneumoniae and ciprofloxacin:
-
+
set.seed(123)mic_values<-random_mic(100)sir_values<-as.sir(mic_values, mo ="K. pneumoniae", ab ="cipro", guideline ="EUCAST 2024")
@@ -1715,7 +1381,7 @@ breakpoints, facilitating automated AMR data processing.
using ggplot2, using the new scale_y_mic() for
the y-axis and scale_colour_sir() to colour-code SIR
categories.
-
+
# add a groupmy_data$group<-rep(c("A", "B", "C", "D"), each =25)
@@ -1739,16 +1405,16 @@ across different groups while incorporating clinical breakpoints.
ggplot2’s function autoplot() has been
extended by this package to directly plot MIC and disk diffusion
values:
-
# by providing `mo` and `ab`, colours will indicate the SIR interpretation:autoplot(mic_values, mo ="K. pneumoniae", ab ="cipro", guideline ="EUCAST 2024")
This explainer was largely written by our AMR for R Assistant, a ChatGPT
-manually-trained model able to answer any question about the
-AMR package.
-
-
Introduction
+
Why WISCA?
-
Clinical guidelines for empirical antimicrobial therapy require
-probabilistic reasoning: what is the chance that a regimen will
-cover the likely infecting organisms, before culture results are
-available?
-
This is the purpose of WISCA, or
-Weighted-Incidence Syndromic Combination
-Antibiogram.
-
WISCA is a Bayesian approach that integrates:
+
When a clinician starts empirical antimicrobial therapy, the
+causative pathogen is unknown. The question they need answered is not
+“what proportion of E. coli is susceptible to
+ciprofloxacin?“ but rather “what is the probability that this
+regimen will adequately cover whatever pathogen turns out to be causing
+my patient’s infection?”
+
The traditional cumulative antibiogram, as standardised by CLSI M39,
+cannot answer that question. It presents susceptibility percentages per
+species per antibiotic, but:
-Pathogen prevalence (how often each species causes
-the syndrome),
+It fragments information by organism. The clinician
+must mentally combine susceptibility rates across multiple species,
+weighting by how often each species causes the syndrome, a calculation
+nobody does at the bedside.
-Regimen susceptibility (how often a regimen works
-if the pathogen is known),
+It ignores pathogen incidence. A species that
+causes 2% of infections is given the same visual weight as one that
+causes 60%.
+
+It does not evaluate combination regimens. Much
+empirical therapy consists of two or more agents, but the traditional
+antibiogram only shows monotherapy per organism.
+
+It provides no measure of uncertainty. A reported
+“90% susceptible” based on 50 isolates has a 95% confidence interval of
+roughly 78-97% (Clopper-Pearson), yet the antibiogram presents it as a
+point estimate without context.
-
to estimate the overall empirical coverage of
-antimicrobial regimens, with quantified uncertainty.
-
This vignette explains how WISCA works, why it is useful, and how to
-apply it using the AMR package.
+
WISCA (Weighted-Incidence Syndromic Combination
+Antibiogram) resolves all four limitations. It estimates the probability
+that a regimen will provide adequate empirical coverage for a given
+infection syndrome, weighted by local pathogen incidence, with full
+uncertainty quantification via Bayesian inference.
+
The concept was introduced by Hebert et al. (2012), who
+demonstrated that traditional antibiogram susceptibility rates could be
+misleading: ciprofloxacin appeared 84% effective against E.
+coli in the traditional antibiogram, but WISCA revealed only 62%
+coverage for UTI and 37% for abdominal infections, because enterococci
+(intrinsically resistant) and other species contribute substantially to
+these syndromes. Randhawa et al. (2014) showed that
+WISCA-guided regimen selection could improve time-to-adequate-coverage
+on the ICU by over 40%. Bielicki et al. (2016) introduced the
+Bayesian framework now used in this package, enabling credible intervals
+and multi-centre pooling. Cook et al. (2022) applied it
+globally across 52 hospitals in 23 countries.
-
Why traditional antibiograms fall short
-
-
A standard antibiogram gives you:
-
Species → Antibiotic → Susceptibility %
-
But clinicians don’t know the species a priori. They need to
-choose a regimen that covers the likely pathogens,
-without knowing which one is present.
-
Traditional antibiograms calculate the susceptibility % as just the
-number of resistant isolates divided by the total number of tested
-isolates. Therefore, traditional antibiograms:
-
-
Fragment information by organism,
-
Do not weight by real-world prevalence,
-
Do not account for combination therapy or sample size,
-
Do not provide uncertainty.
-
-
-
-
The idea of WISCA
+
The idea
WISCA asks:
“What is the probability that this regimen
will cover the pathogen, given the syndrome?”
-
This means combining two things:
+
This means combining two quantities:
-Incidence of each pathogen in the syndrome,
+Pathogen incidence in the syndrome (how often each
+species causes it),
Susceptibility of each pathogen to the
regimen.
We can write this as:
-
For example, suppose:
+
For example, suppose in your hospital:
-E. coli causes 60% of cases, and 90% of E. coli
-are susceptible to a drug.
+E. coli causes 60% of UTIs, and 90% of E. coli are
+susceptible to a drug.
-Klebsiella causes 40% of cases, and 70% of
+Klebsiella causes 40% of UTIs, and 70% of
Klebsiella are susceptible.
Then:
-
But in real data, incidence and susceptibility are estimated
-from samples, so they carry uncertainty. WISCA models this
-probabilistically, using conjugate Bayesian
+
That 82% is a far more clinically meaningful number than the
+species-level “90% of E. coli” and “70% of Klebsiella”
+reported separately in a traditional antibiogram, because it directly
+answers the question the clinician actually faces.
+
But in real data, both incidence and susceptibility are
+estimated from finite samples, so they carry
+uncertainty. A sample of 50 isolates is not a census. WISCA models this
+uncertainty probabilistically, using conjugate Bayesian
distributions.
-
The Bayesian engine behind WISCA
+
The Bayesian engine
Pathogen incidence
@@ -180,27 +189,38 @@ distributions.
be the number of pathogens,
-
-be a Dirichlet prior (uniform),
+
+be a
+
+prior (uniform, non-informative),
-
-be the observed counts per species.
+
+be the observed isolate counts per species.
Then the posterior incidence is:
-
+
To simulate from this, we use:
+
The Dirichlet is the conjugate prior for multinomial data. With the
+non-informative prior
+,
+the posterior is dominated by the data once sample sizes are reasonable.
+With small samples, the posterior is appropriately more diffuse,
+reflecting genuine uncertainty, and the resulting credible intervals
+will be wider.
Susceptibility
-
Each pathogen–regimen pair has a prior and data:
+
Each pathogen-regimen pair has a prior and observed data:
-
Prior:
-,
-with default
-
-
+
Default prior:
+
+(Jeffreys prior)
+
Intrinsically resistant pairs:
+,
+forcing near-zero susceptibility regardless of observed data (based on
+EUCAST Expected Resistant Phenotypes)
Data:
susceptible out of
@@ -224,27 +244,76 @@ I (intermediate [CLSI], or susceptible, increased exposure
Simulate susceptibility:
-
+
Combine:
-
Repeat this simulation (e.g. 1000×) and summarise:
+
Repeat this simulation (e.g., 1000 times) and summarise:
Mean = expected coverage
-Quantiles = credible interval
+Quantiles = credible interval (95% by default)
+
Because each simulation draws from the full posterior, the resulting
+distribution of coverage estimates naturally captures the joint
+uncertainty in both pathogen incidence and susceptibility. The credible
+interval tells you how confident you can be in the coverage estimate,
+something a traditional antibiogram never provides.
+
When to use WISCA vs. traditional antibiograms
+
+
+
+
Goal
+
Recommended approach
+
+
+
+
Guide empirical therapy decisions
+
WISCA
+
+
+
Compare regimens for a syndrome
+
WISCA
+
+
+
Evaluate combination regimens
+
WISCA
+
+
+
Antimicrobial stewardship (A-team)
+
WISCA
+
+
+
Track resistance trends per species
+
Traditional / Combination
+
+
+
AMR surveillance reporting
+
Traditional / Syndromic
+
+
+
Understand species-level epidemiology
+
Traditional
+
+
+
+
In short: if the end goal involves a patient who does not
+yet have a culture result, WISCA is the appropriate tool. If the end
+goal is surveillance of resistance at the species level, the
+traditional antibiogram remains fit for purpose.
+
+
Practical use in the AMR package
-
Prepare data and simulate synthetic syndrome
+
Prepare data
-
+
library(AMR)data<-example_isolates
@@ -271,13 +340,13 @@ I (intermediate [CLSI], or susceptible, increased exposure
#> # TCY <sir>, TGC <sir>, DOX <sir>, ERY <sir>, CLI <sir>, AZM <sir>,#> # IPM <sir>, MEM <sir>, MTR <sir>, CHL <sir>, COL <sir>, MUP <sir>, …
-# Add a fake syndrome column
-data$syndrome<-ifelse(data$mo%like%"coli", "UTI", "No UTI")
+# Add a synthetic syndrome column for demonstration
+data$syndrome<-ifelse(data$mo%like%"coli", "UTI", "Non-UTI")
The AMR package is available in 28 languages, which can
all be used for the wisca() function too:
-
+
wisca(data, antimicrobials =c("AMC", "AMC + CIP", "AMC + GEN"), syndromic_group =gsub("UTI", "UCI", data$syndrome),
@@ -378,20 +452,36 @@ all be used for the wisca()
-
No UCI
-
70% (67.8-72.4%)
-
85.3% (83.3-87.2%)
-
87% (85.3-88.8%)
+
Non-UCI
+
70.4% (68-72.8%)
+
86.7% (84.6-88.7%)
+
88.5% (86.5-90.2%)
UCI
-
80.9% (77.7-83.9%)
-
88.2% (85.5-90.6%)
-
90.9% (88.7-93%)
+
80.3% (77.2-83.5%)
+
88.4% (85.5-90.8%)
+
91% (88.4-93.1%)
+
+
Interpreting the output
+
+
Each row shows the estimated empirical coverage for a regimen, with a
+95% credible interval. When comparing regimens:
+
+
+Overlapping credible intervals mean there is no
+statistically significant difference in coverage. If a narrower-spectrum
+regimen overlaps with a broader one, the narrower-spectrum option can be
+preferred on stewardship grounds.
+
+Non-overlapping credible intervals indicate a
+clinically meaningful difference in coverage.
+
+
Sensible defaults, which can be customised
@@ -407,14 +497,43 @@ susceptible
+
Practical considerations
+
+
+
+First isolates only: always deduplicate using
+first_isolate() before running WISCA. Repeat isolates
+introduce bias.
+
+Pathogen selection: consider filtering with
+top_n_microorganisms(). Including rare contaminants
+(e.g. CoNS without clinical context) can distort estimates and may
+artificially lower coverage (Cook et al., 2022).
+
+Sample size: coverage estimates become reliable
+with approximately 100+ isolates. For smaller datasets, consider pooling
+data from multiple sites, but only after verifying that pathogen
+distributions are sufficiently similar (Bielicki et al.,
+2016).
+
+Culture request bias: WISCA is only as good as the
+data it is based on. If cultures are selectively requested (e.g. only
+after treatment failure), the dataset will be biased towards resistant
+isolates. A robust culture policy is essential for reliable
+estimates.
+
+
+
Limitations
-
It assumes your data are representative
-
No adjustment for patient-level covariates, although these could be
-passed onto the syndromic_group argument
-
WISCA does not model resistance over time, you might want to use
-tidymodels for that, for which we wrote a
+
Bielicki, JA, et al. (2016). Selecting appropriate empirical
-antibiotic regimens for paediatric bloodstream infections: application
-of a Bayesian decision model to local and pooled antimicrobial
-resistance surveillance data.J Antimicrob
-Chemother. 71(3):794-802. https://doi.org/10.1093/jac/dkv397
+
+
Hebert C, Ridgway J, Vekhter B, Brown EC, Weber SG, Robicsek A.
+Demonstration of the weighted-incidence syndromic combination
+antibiogram: an empiric prescribing decision aid. Infect Control
+Hosp Epidemiol. 2012;33(4):381-388. https://doi.org/10.1086/664768
+
+
Randhawa V, Sarwar S, Walker S, Elligsen M, Palmay L, Daneman N.
+Weighted-incidence syndromic combination antibiograms to guide empiric
+treatment of critical care infections: a retrospective cohort study.
+Crit Care. 2014;18(3):R112. https://doi.org/10.1186/cc13901
+
+
Bielicki JA, Sharland M, Johnson AP, Henderson KL, Cromwell DA.
+Selecting appropriate empirical antibiotic regimens for paediatric
+bloodstream infections: application of a Bayesian decision model to
+local and pooled antimicrobial resistance surveillance data. J
+Antimicrob Chemother. 2016;71(3):794-802. https://doi.org/10.1093/jac/dkv397
+
+
Cook A, Sharland M, Yau Y, Bielicki J. Improving empiric antibiotic
+prescribing in pediatric bloodstream infections: a potential application
+of weighted-incidence syndromic combination antibiograms (WISCA).
+Expert Rev Anti Infect Ther. 2022;20(3):445-456. https://doi.org/10.1080/14787210.2021.1967145
+
+
diff --git a/articles/WISCA.md b/articles/WISCA.md
index 20a6aa8ea..a04dc265a 100644
--- a/articles/WISCA.md
+++ b/articles/WISCA.md
@@ -1,59 +1,61 @@
# Estimating Empirical Coverage with WISCA
-> This explainer was largely written by our [AMR for R
-> Assistant](https://chat.amr-for-r.org), a ChatGPT manually-trained
-> model able to answer any question about the `AMR` package.
+## Why WISCA?
-## Introduction
+When a clinician starts empirical antimicrobial therapy, the causative
+pathogen is unknown. The question they need answered is not *“what
+proportion of* E. coli *is susceptible to ciprofloxacin?“* but rather
+*“what is the probability that this regimen will adequately cover
+whatever pathogen turns out to be causing my patient’s infection?”*
-Clinical guidelines for empirical antimicrobial therapy require
-*probabilistic reasoning*: what is the chance that a regimen will cover
-the likely infecting organisms, before culture results are available?
+The traditional cumulative antibiogram, as standardised by CLSI M39,
+cannot answer that question. It presents susceptibility percentages per
+species per antibiotic, but:
-This is the purpose of **WISCA**, or **Weighted-Incidence Syndromic
-Combination Antibiogram**.
+- **It fragments information by organism.** The clinician must mentally
+ combine susceptibility rates across multiple species, weighting by how
+ often each species causes the syndrome, a calculation nobody does at
+ the bedside.
+- **It ignores pathogen incidence.** A species that causes 2% of
+ infections is given the same visual weight as one that causes 60%.
+- **It does not evaluate combination regimens.** Much empirical therapy
+ consists of two or more agents, but the traditional antibiogram only
+ shows monotherapy per organism.
+- **It provides no measure of uncertainty.** A reported “90%
+ susceptible” based on 50 isolates has a 95% confidence interval of
+ roughly 78-97% (Clopper-Pearson), yet the antibiogram presents it as a
+ point estimate without context.
-WISCA is a Bayesian approach that integrates:
+**WISCA** (Weighted-Incidence Syndromic Combination Antibiogram)
+resolves all four limitations. It estimates the probability that a
+regimen will provide adequate empirical coverage for a given infection
+syndrome, weighted by local pathogen incidence, with full uncertainty
+quantification via Bayesian inference.
-- **Pathogen prevalence** (how often each species causes the syndrome),
-- **Regimen susceptibility** (how often a regimen works *if* the
- pathogen is known),
+The concept was introduced by Hebert *et al.* (2012), who demonstrated
+that traditional antibiogram susceptibility rates could be misleading:
+ciprofloxacin appeared 84% effective against *E. coli* in the
+traditional antibiogram, but WISCA revealed only 62% coverage for UTI
+and 37% for abdominal infections, because enterococci (intrinsically
+resistant) and other species contribute substantially to these
+syndromes. Randhawa *et al.* (2014) showed that WISCA-guided regimen
+selection could improve time-to-adequate-coverage on the ICU by over
+40%. Bielicki *et al.* (2016) introduced the Bayesian framework now used
+in this package, enabling credible intervals and multi-centre pooling.
+Cook *et al.* (2022) applied it globally across 52 hospitals in 23
+countries.
-to estimate the **overall empirical coverage** of antimicrobial
-regimens, with quantified uncertainty.
-
-This vignette explains how WISCA works, why it is useful, and how to
-apply it using the `AMR` package.
-
-## Why traditional antibiograms fall short
-
-A standard antibiogram gives you:
-
- Species → Antibiotic → Susceptibility %
-
-But clinicians don’t know the species *a priori*. They need to choose a
-regimen that covers the **likely pathogens**, without knowing which one
-is present.
-
-Traditional antibiograms calculate the susceptibility % as just the
-number of resistant isolates divided by the total number of tested
-isolates. Therefore, traditional antibiograms:
-
-- Fragment information by organism,
-- Do not weight by real-world prevalence,
-- Do not account for combination therapy or sample size,
-- Do not provide uncertainty.
-
-## The idea of WISCA
+## The idea
WISCA asks:
> “What is the **probability** that this regimen **will cover** the
> pathogen, given the syndrome?”
-This means combining two things:
+This means combining two quantities:
-- **Incidence** of each pathogen in the syndrome,
+- **Pathogen incidence** in the syndrome (how often each species causes
+ it),
- **Susceptibility** of each pathogen to the regimen.
We can write this as:
@@ -62,11 +64,11 @@ We can write this as:
\text{Coverage} = \sum_i (\text{Incidence}_i \times \text{Susceptibility}_i)
```
-For example, suppose:
+For example, suppose in your hospital:
-- *E. coli* causes 60% of cases, and 90% of *E. coli* are susceptible to
+- *E. coli* causes 60% of UTIs, and 90% of *E. coli* are susceptible to
a drug.
-- *Klebsiella* causes 40% of cases, and 70% of *Klebsiella* are
+- *Klebsiella* causes 40% of UTIs, and 70% of *Klebsiella* are
susceptible.
Then:
@@ -75,24 +77,32 @@ Then:
\text{Coverage} = (0.6 \times 0.9) + (0.4 \times 0.7) = 0.82
```
-But in real data, incidence and susceptibility are **estimated from
-samples**, so they carry uncertainty. WISCA models this
-**probabilistically**, using conjugate Bayesian distributions.
+That 82% is a far more clinically meaningful number than the
+species-level “90% of *E. coli*” and “70% of *Klebsiella*” reported
+separately in a traditional antibiogram, because it directly answers the
+question the clinician actually faces.
-## The Bayesian engine behind WISCA
+But in real data, both incidence and susceptibility are **estimated from
+finite samples**, so they carry uncertainty. A sample of 50 isolates is
+not a census. WISCA models this uncertainty **probabilistically**, using
+conjugate Bayesian distributions.
+
+## The Bayesian engine
### Pathogen incidence
Let:
- $`K`$ be the number of pathogens,
-- $`\alpha = (1, 1, \ldots, 1)`$ be a **Dirichlet** prior (uniform),
-- $`n = (n_1, \ldots, n_K)`$ be the observed counts per species.
+- $`\boldsymbol{\alpha} = (1, 1, \ldots, 1)`$ be a $`\text{Dirichlet}`$
+ prior (uniform, non-informative),
+- $`\boldsymbol{n} = (n_1, \ldots, n_K)`$ be the observed isolate counts
+ per species.
Then the posterior incidence is:
``` math
-p \sim \text{Dirichlet}(\alpha_1 + n_1, \ldots, \alpha_K + n_K)
+\boldsymbol{p} \sim \text{Dirichlet}(\alpha_1 + n_1, \ldots, \alpha_K + n_K)
```
To simulate from this, we use:
@@ -101,12 +111,21 @@ To simulate from this, we use:
x_i \sim \text{Gamma}(\alpha_i + n_i,\ 1), \quad p_i = \frac{x_i}{\sum_{j=1}^{K} x_j}
```
+The Dirichlet is the conjugate prior for multinomial data. With the
+non-informative prior $`\text{Dirichlet}(1, 1, \ldots, 1)`$, the
+posterior is dominated by the data once sample sizes are reasonable.
+With small samples, the posterior is appropriately more diffuse,
+reflecting genuine uncertainty, and the resulting credible intervals
+will be wider.
+
### Susceptibility
-Each pathogen–regimen pair has a prior and data:
+Each pathogen-regimen pair has a prior and observed data:
-- Prior: $`\text{Beta}(\alpha_0, \beta_0)`$, with default
- $`\alpha_0 = \beta_0 = 1`$
+- Default prior: $`\text{Beta}(0.5, 0.5)`$ (Jeffreys prior)
+- Intrinsically resistant pairs: $`\text{Beta}(1, 9999)`$, forcing
+ near-zero susceptibility regardless of observed data (based on EUCAST
+ Expected Resistant Phenotypes)
- Data: $`S`$ susceptible out of $`N`$ tested
The $`S`$ category could also include values SDD (susceptible,
@@ -126,21 +145,44 @@ Putting it together:
1. Simulate pathogen incidence:
$`\boldsymbol{p} \sim \text{Dirichlet}`$
2. Simulate susceptibility:
- $`\theta_i \sim \text{Beta}(1 + S_i,\ 1 + R_i)`$
+ $`\theta_i \sim \text{Beta}(\alpha_0 + S_i,\ \beta_0 + N_i - S_i)`$
3. Combine:
``` math
\text{Coverage} = \sum_{i=1}^{K} p_i \cdot \theta_i
```
-Repeat this simulation (e.g. 1000×) and summarise:
+Repeat this simulation (e.g., 1000 times) and summarise:
- **Mean** = expected coverage
-- **Quantiles** = credible interval
+- **Quantiles** = credible interval (95% by default)
+
+Because each simulation draws from the full posterior, the resulting
+distribution of coverage estimates naturally captures the joint
+uncertainty in both pathogen incidence and susceptibility. The credible
+interval tells you how confident you can be in the coverage estimate,
+something a traditional antibiogram never provides.
+
+## When to use WISCA vs. traditional antibiograms
+
+| Goal | Recommended approach |
+|---------------------------------------|---------------------------|
+| Guide empirical therapy decisions | **WISCA** |
+| Compare regimens for a syndrome | **WISCA** |
+| Evaluate combination regimens | **WISCA** |
+| Antimicrobial stewardship (A-team) | **WISCA** |
+| Track resistance trends per species | Traditional / Combination |
+| AMR surveillance reporting | Traditional / Syndromic |
+| Understand species-level epidemiology | Traditional |
+
+In short: if the end goal involves a *patient* who does not yet have a
+culture result, WISCA is the appropriate tool. If the end goal is
+*surveillance* of resistance at the species level, the traditional
+antibiogram remains fit for purpose.
## Practical use in the `AMR` package
-### Prepare data and simulate synthetic syndrome
+### Prepare data
``` r
@@ -170,11 +212,11 @@ data
#> # TCY , TGC , DOX , ERY , CLI , AZM ,
#> # IPM , MEM , MTR , CHL , COL , MUP , …
-# Add a fake syndrome column
-data$syndrome <- ifelse(data$mo %like% "coli", "UTI", "No UTI")
+# Add a synthetic syndrome column for demonstration
+data$syndrome <- ifelse(data$mo %like% "coli", "UTI", "Non-UTI")
```
-### Basic WISCA antibiogram
+### Basic WISCA
``` r
@@ -183,12 +225,15 @@ wisca(data,
)
```
-| Amoxicillin/clavulanic acid | Ciprofloxacin | Gentamicin |
-|:----------------------------|:-----------------|:-------------------|
-| 73.7% (71.7-75.8%) | 77% (74.3-79.4%) | 72.8% (70.7-74.8%) |
+| Amoxicillin/clavulanic acid | Ciprofloxacin | Gentamicin |
+|:----------------------------|:-------------------|:-------------------|
+| 74.2% (72.1-76.1%) | 78.4% (75.6-81.1%) | 72.5% (70.4-74.6%) |
### Use combination regimens
+Combination regimens are specified with a `+` separator. WISCA evaluates
+whether *at least one* agent in the combination covers the pathogen:
+
``` r
wisca(data,
@@ -198,10 +243,13 @@ wisca(data,
| Amoxicillin/clavulanic acid | Amoxicillin/clavulanic acid + Ciprofloxacin | Amoxicillin/clavulanic acid + Gentamicin |
|:---|:---|:---|
-| 73.8% (71.8-75.7%) | 87.5% (85.9-89%) | 89.7% (88.2-91.1%) |
+| 74.2% (72.2-76.1%) | 88.8% (87.2-90.4%) | 90.8% (89.4-92.2%) |
### Stratify by syndrome
+Use `syndromic_group` to produce separate WISCA estimates per clinical
+stratum. You can pass a column name or any expression:
+
``` r
wisca(data,
@@ -212,8 +260,8 @@ wisca(data,
| Syndromic Group | Amoxicillin/clavulanic acid | Amoxicillin/clavulanic acid + Ciprofloxacin | Amoxicillin/clavulanic acid + Gentamicin |
|:---|:---|:---|:---|
-| No UTI | 70.1% (67.8-72.3%) | 85.2% (83.1-87.2%) | 87.1% (85.3-88.7%) |
-| UTI | 80.9% (77.7-83.8%) | 88.2% (85.7-90.5%) | 90.9% (88.7-93%) |
+| Non-UTI | 70.3% (67.9-72.7%) | 86.8% (84.9-88.7%) | 88.4% (86.4-90.2%) |
+| UTI | 80.3% (77-83.3%) | 88.4% (85.7-90.8%) | 91% (88.3-93.3%) |
The `AMR` package is available in 28 languages, which can all be used
for the [`wisca()`](https://amr-for-r.org/reference/antibiogram.md)
@@ -230,8 +278,20 @@ wisca(data,
| Grupo sindrómico | Amoxicilina/ácido clavulánico | Amoxicilina/ácido clavulánico + Ciprofloxacina | Amoxicilina/ácido clavulánico + Gentamicina |
|:---|:---|:---|:---|
-| No UCI | 70% (67.8-72.4%) | 85.3% (83.3-87.2%) | 87% (85.3-88.8%) |
-| UCI | 80.9% (77.7-83.9%) | 88.2% (85.5-90.6%) | 90.9% (88.7-93%) |
+| Non-UCI | 70.4% (68-72.8%) | 86.7% (84.6-88.7%) | 88.5% (86.5-90.2%) |
+| UCI | 80.3% (77.2-83.5%) | 88.4% (85.5-90.8%) | 91% (88.4-93.1%) |
+
+### Interpreting the output
+
+Each row shows the estimated empirical coverage for a regimen, with a
+95% credible interval. When comparing regimens:
+
+- **Overlapping credible intervals** mean there is no statistically
+ significant difference in coverage. If a narrower-spectrum regimen
+ overlaps with a broader one, the narrower-spectrum option can be
+ preferred on stewardship grounds.
+- **Non-overlapping credible intervals** indicate a clinically
+ meaningful difference in coverage.
## Sensible defaults, which can be customised
@@ -239,22 +299,45 @@ wisca(data,
- `conf_interval = 0.95`: coverage interval width
- `combine_SI = TRUE`: count “I” and “SDD” as susceptible
+## Practical considerations
+
+- **First isolates only**: always deduplicate using
+ [`first_isolate()`](https://amr-for-r.org/reference/first_isolate.md)
+ before running WISCA. Repeat isolates introduce bias.
+- **Pathogen selection**: consider filtering with
+ [`top_n_microorganisms()`](https://amr-for-r.org/reference/top_n_microorganisms.md).
+ Including rare contaminants (e.g. CoNS without clinical context) can
+ distort estimates and may artificially lower coverage (Cook *et al.*,
+ 2022).
+- **Sample size**: coverage estimates become reliable with approximately
+ 100+ isolates. For smaller datasets, consider pooling data from
+ multiple sites, but only after verifying that pathogen distributions
+ are sufficiently similar (Bielicki *et al.*, 2016).
+- **Culture request bias**: WISCA is only as good as the data it is
+ based on. If cultures are selectively requested (e.g. only after
+ treatment failure), the dataset will be biased towards resistant
+ isolates. A robust culture policy is essential for reliable estimates.
+
## Limitations
-- It assumes your data are representative
-- No adjustment for patient-level covariates, although these could be
- passed onto the `syndromic_group` argument
-- WISCA does not model resistance over time, you might want to use
- `tidymodels` for that, for which we [wrote a basic
+- It assumes your data are representative of the patient population you
+ are treating
+- No direct adjustment for patient-level covariates, although these can
+ be passed onto the `syndromic_group` argument for stratification
+- WISCA does not model resistance trends over time; for that, you might
+ want to use `tidymodels`, for which we [wrote a basic
introduction](https://amr-for-r.org/articles/AMR_with_tidymodels.html)
## Summary
WISCA enables:
-- Empirical regimen comparison,
-- Syndrome-specific coverage estimation,
-- Fully probabilistic interpretation.
+- **Empirical regimen comparison**, answering the clinician’s actual
+ question
+- **Syndrome-specific coverage estimation**, stratifiable by any
+ clinical variable
+- **Fully probabilistic interpretation**, with credible intervals that
+ honestly communicate uncertainty
It is available in the `AMR` package via either:
@@ -265,10 +348,26 @@ wisca(...)
antibiogram(..., wisca = TRUE)
```
-## Reference
+## References
-Bielicki, JA, et al. (2016). *Selecting appropriate empirical antibiotic
-regimens for paediatric bloodstream infections: application of a
-Bayesian decision model to local and pooled antimicrobial resistance
-surveillance data.* **J Antimicrob Chemother**. 71(3):794-802.
-
+1. Hebert C, Ridgway J, Vekhter B, Brown EC, Weber SG, Robicsek A.
+ Demonstration of the weighted-incidence syndromic combination
+ antibiogram: an empiric prescribing decision aid. *Infect Control
+ Hosp Epidemiol.* 2012;33(4):381-388.
+
+2. Randhawa V, Sarwar S, Walker S, Elligsen M, Palmay L, Daneman N.
+ Weighted-incidence syndromic combination antibiograms to guide
+ empiric treatment of critical care infections: a retrospective
+ cohort study. *Crit Care.* 2014;18(3):R112.
+
+3. Bielicki JA, Sharland M, Johnson AP, Henderson KL, Cromwell DA.
+ Selecting appropriate empirical antibiotic regimens for paediatric
+ bloodstream infections: application of a Bayesian decision model to
+ local and pooled antimicrobial resistance surveillance data. *J
+ Antimicrob Chemother.* 2016;71(3):794-802.
+
+4. Cook A, Sharland M, Yau Y, Bielicki J. Improving empiric antibiotic
+ prescribing in pediatric bloodstream infections: a potential
+ application of weighted-incidence syndromic combination antibiograms
+ (WISCA). *Expert Rev Anti Infect Ther.* 2022;20(3):445-456.
+
diff --git a/articles/datasets.html b/articles/datasets.html
index b7bca639e..9763f1c23 100644
--- a/articles/datasets.html
+++ b/articles/datasets.html
@@ -12,8 +12,8 @@
-
-
+
+
@@ -30,7 +30,7 @@
AMR (for R)
- 3.0.1.9057
+ 3.0.1.9061
@@ -80,7 +80,7 @@
A data set with 78 679 rows and 26 columns, containing the following
-column names: mo, fullname, status, kingdom,
-phylum, class, order, family,
-genus, species, subspecies, rank,
-ref, oxygen_tolerance, source, lpsn,
+
A data set with 96 982 rows and 28 columns, containing the following
+column names: mo, fullname, status, domain,
+kingdom, phylum, class, order,
+family, genus, species, subspecies,
+rank, ref, oxygen_tolerance,
+morphology, source, lpsn,
lpsn_parent, lpsn_renamed_to, mycobank,
mycobank_parent, mycobank_renamed_to, gbif,
gbif_parent, gbif_renamed_to, prevalence, and
snomed.
This data set is in R available as microorganisms, after
you load the AMR package.
-
It was last updated on 18 September 2025 12:58:34 UTC. Find more info
+
It was last updated on 22 June 2026 23:38:13 UTC. Find more info
about the contents, (scientific) source, and structure of this data set
here.
NOTE: The exported files for SPSS and Stata contain only the
first 50 SNOMED codes per record, as their file size would otherwise
@@ -157,41 +158,42 @@ all SNOMED codes as comma separated values.
-
(unknown kingdom)
-
1
+
+
20
-
Animalia
-
1 628
+
(unknown kingdom)
+
8
+
Animalia
+
2 015
+
+
Archaea
-
1 419
+
150
+
+
+
Bacillati
+
24 200
Bacteria
-
39 249
-
-
-
Chromista
-
178
-
-
-
Fungi
-
28 137
+
2
First 6 rows when filtering on genus Escherichia:
-
+
-
+
+
-
+
@@ -199,6 +201,7 @@ all SNOMED codes as comma separated values.
+
@@ -210,12 +213,13 @@ all SNOMED codes as comma separated values.
-
+
mo
fullname
status
+
domain
kingdom
phylum
class
@@ -227,6 +231,7 @@ all SNOMED codes as comma separated values.
rank
ref
oxygen_tolerance
+
morphology
source
lpsn
lpsn_parent
@@ -246,6 +251,7 @@ all SNOMED codes as comma separated values.
Escherichia
accepted
Bacteria
+
Pseudomonadati
Pseudomonadota
Gammaproteobacteria
Enterobacterales
@@ -256,6 +262,7 @@ all SNOMED codes as comma separated values.
genus
Castellani et al., 1919
facultative anaerobe
+
rods
LPSN
515602
482
@@ -263,8 +270,8 @@ all SNOMED codes as comma separated values.
-
-
11158430
+
CS33H
+
CRYWR
1
407310004, 407251000, 407281008, …
@@ -274,6 +281,7 @@ all SNOMED codes as comma separated values.
Escherichia adecarboxylata
synonym
Bacteria
+
Pseudomonadati
Pseudomonadota
Gammaproteobacteria
Enterobacterales
@@ -284,6 +292,7 @@ all SNOMED codes as comma separated values.
species
Leclerc, 1962
likely facultative anaerobe
+
rods
LPSN
776052
515602
@@ -291,9 +300,9 @@ all SNOMED codes as comma separated values.
-
-
-
+
CS33J
+
CS33H
+
3SVX6
1
@@ -302,6 +311,7 @@ all SNOMED codes as comma separated values.
Escherichia albertii
accepted
Bacteria
+
Pseudomonadati
Pseudomonadota
Gammaproteobacteria
Enterobacterales
@@ -312,6 +322,7 @@ all SNOMED codes as comma separated values.
species
Huys et al., 2003
facultative anaerobe
+
rods
LPSN
776053
515602
@@ -319,8 +330,8 @@ all SNOMED codes as comma separated values.
-
5427575
-
+
3BGTB
+
CS33H
1
419388003
@@ -330,6 +341,7 @@ all SNOMED codes as comma separated values.
Escherichia blattae
synonym
Bacteria
+
Pseudomonadati
Pseudomonadota
Gammaproteobacteria
Enterobacterales
@@ -340,6 +352,7 @@ all SNOMED codes as comma separated values.
species
Burgess et al., 1973
likely facultative anaerobe
+
rods
LPSN
776056
515602
@@ -347,9 +360,9 @@ all SNOMED codes as comma separated values.
-
-
-
+
CS33K
+
CS33H
+
4X4P7
1
@@ -358,6 +371,7 @@ all SNOMED codes as comma separated values.
Escherichia coli
accepted
Bacteria
+
Pseudomonadati
Pseudomonadota
Gammaproteobacteria
Enterobacterales
@@ -368,6 +382,7 @@ all SNOMED codes as comma separated values.
species
Castellani et al., 1919
facultative anaerobe
+
rods
LPSN
776057
515602
@@ -375,8 +390,8 @@ all SNOMED codes as comma separated values.
-
11286021
-
+
NT3L7
+
CS33H
1
1095001000112106, 715307006, 737528008, …
@@ -386,6 +401,7 @@ all SNOMED codes as comma separated values.
Escherichia coli coli
accepted
Bacteria
+
Pseudomonadati
Pseudomonadota
Gammaproteobacteria
Enterobacterales
@@ -396,6 +412,7 @@ all SNOMED codes as comma separated values.
subspecies
+
GBIF
776057
@@ -404,7 +421,7 @@ all SNOMED codes as comma separated values.
12233256
-
11286021
+
NT3L7
1
@@ -424,8 +441,8 @@ column names: ab, cid, name, group, a
iv_ddd, iv_units, and loinc.
This data set is in R available as antimicrobials, after
you load the AMR package.
-
It was last updated on 2 May 2026 12:56:26 UTC. Find more info about
-the contents, (scientific) source, and structure of this data set
+
@@ -595,14 +612,14 @@ inhibitors
clinical_breakpoints: Interpretation from MIC values
& disk diameters to SIR
-
A data set with 45 730 rows and 14 columns, containing the following
+
A data set with 45 555 rows and 14 columns, containing the following
column names: guideline, type, host, method,
site, mo, rank_index, ab,
ref_tbl, disk_dose, breakpoint_S,
breakpoint_R, uti, and is_SDD.
This data set is in R available as clinical_breakpoints,
after you load the AMR package.
-
It was last updated on 2 April 2026 09:42:19 UTC. Find more info
+
It was last updated on 22 June 2026 23:38:13 UTC. Find more info
about the contents, (scientific) source, and structure of this data
set here.