knitr::opts_chunk$set( warning = FALSE, collapse = TRUE, comment = "#>", fig.width = 7.5, fig.height = 5 )
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.
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:
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.
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:
WISCA asks:
"What is the probability that this regimen will cover the pathogen, given the syndrome?"
This means combining two things:
We can write this as:
$$\text{Coverage} = \sum_i (\text{Incidence}_i \times \text{Susceptibility}_i)$$
For example, suppose:
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.
Let:
Then the posterior incidence is:
$$p \sim \text{Dirichlet}(\alpha_1 + n_1, \ldots, \alpha_K + n_K)$$
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}$$
Each pathogen–regimen pair has a prior and data:
The $S$ category could also include values SDD (susceptible, dose-dependent) and I (intermediate [CLSI], or susceptible, increased exposure [EUCAST]).
Then the posterior is:
$$\theta \sim \text{Beta}(\alpha_0 + S,\ \beta_0 + N - S)$$
Putting it together:
$$\text{Coverage} = \sum_{i=1}^{K} p_i \cdot \theta_i$$
Repeat this simulation (e.g. 1000×) and summarise:
AMR
packagelibrary(AMR) data <- example_isolates # Structure of our data data # Add a fake syndrome column data$syndrome <- ifelse(data$mo %like% "coli", "UTI", "No UTI")
wisca(data, antimicrobials = c("AMC", "CIP", "GEN"))
wisca(data, antimicrobials = c("AMC", "AMC + CIP", "AMC + GEN"))
wisca(data, antimicrobials = c("AMC", "AMC + CIP", "AMC + GEN"), syndromic_group = "syndrome")
The AMR
package is available in r length(AMR:::LANGUAGES_SUPPORTED)
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), language = "Spanish")
simulations = 1000
: number of Monte Carlo drawsconf_interval = 0.95
: coverage interval widthcombine_SI = TRUE
: count "I" and "SDD" as susceptiblesyndromic_group
argumenttidymodels
for that, for which we wrote a basic introductionWISCA enables:
It is available in the AMR
package via either:
wisca(...) antibiogram(..., wisca = TRUE)
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
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.