mirror of
https://github.com/msberends/AMR.git
synced 2025-02-22 10:30:08 +01:00
(v2.1.1.9140) WISCA fix
This commit is contained in:
parent
d84033bbcb
commit
baea4323c7
@ -1,6 +1,6 @@
|
||||
Package: AMR
|
||||
Version: 2.1.1.9139
|
||||
Date: 2025-02-01
|
||||
Version: 2.1.1.9140
|
||||
Date: 2025-02-05
|
||||
Title: Antimicrobial Resistance Data Analysis
|
||||
Description: Functions to simplify and standardise antimicrobial resistance (AMR)
|
||||
data analysis and to work with microbial and antimicrobial properties by
|
||||
|
@ -316,6 +316,7 @@ export(rescale_mic)
|
||||
export(reset_AMR_locale)
|
||||
export(resistance)
|
||||
export(resistance_predict)
|
||||
export(retrieve_wisca_parameters)
|
||||
export(rifamycins)
|
||||
export(right_join_microorganisms)
|
||||
export(scale_colour_mic)
|
||||
|
2
NEWS.md
2
NEWS.md
@ -1,4 +1,4 @@
|
||||
# AMR 2.1.1.9139
|
||||
# AMR 2.1.1.9140
|
||||
|
||||
*(this beta version will eventually become v3.0. We're happy to reach a new major milestone soon, which will be all about the new One Health support! Install this beta using [the instructions here](https://msberends.github.io/AMR/#latest-development-version).)*
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
Metadata-Version: 2.2
|
||||
Name: AMR
|
||||
Version: 2.1.1.9139
|
||||
Version: 2.1.1.9140
|
||||
Summary: A Python wrapper for the AMR R package
|
||||
Home-page: https://github.com/msberends/AMR
|
||||
Author: Matthijs Berends
|
||||
|
@ -27,6 +27,7 @@ from .functions import age
|
||||
from .functions import age_groups
|
||||
from .functions import antibiogram
|
||||
from .functions import wisca
|
||||
from .functions import retrieve_wisca_parameters
|
||||
from .functions import amr_class
|
||||
from .functions import amr_selector
|
||||
from .functions import aminoglycosides
|
||||
|
@ -111,6 +111,9 @@ def antibiogram(x, *args, **kwargs):
|
||||
def wisca(x, *args, **kwargs):
|
||||
"""See our website of the R package for the manual: https://msberends.github.io/AMR/index.html"""
|
||||
return convert_to_python(amr_r.wisca(x, *args, **kwargs))
|
||||
def retrieve_wisca_parameters(wisca_model, *args, **kwargs):
|
||||
"""See our website of the R package for the manual: https://msberends.github.io/AMR/index.html"""
|
||||
return convert_to_python(amr_r.retrieve_wisca_parameters(wisca_model, *args, **kwargs))
|
||||
def amr_class(amr_class, *args, **kwargs):
|
||||
"""See our website of the R package for the manual: https://msberends.github.io/AMR/index.html"""
|
||||
return convert_to_python(amr_r.amr_class(amr_class, *args, **kwargs))
|
||||
|
Binary file not shown.
BIN
PythonPackage/AMR/dist/AMR-2.1.1.9140-py3-none-any.whl
vendored
Normal file
BIN
PythonPackage/AMR/dist/AMR-2.1.1.9140-py3-none-any.whl
vendored
Normal file
Binary file not shown.
BIN
PythonPackage/AMR/dist/amr-2.1.1.9139.tar.gz
vendored
BIN
PythonPackage/AMR/dist/amr-2.1.1.9139.tar.gz
vendored
Binary file not shown.
BIN
PythonPackage/AMR/dist/amr-2.1.1.9140.tar.gz
vendored
Normal file
BIN
PythonPackage/AMR/dist/amr-2.1.1.9140.tar.gz
vendored
Normal file
Binary file not shown.
@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
||||
|
||||
setup(
|
||||
name='AMR',
|
||||
version='2.1.1.9139',
|
||||
version='2.1.1.9140',
|
||||
packages=find_packages(),
|
||||
install_requires=[
|
||||
'rpy2',
|
||||
|
@ -113,7 +113,7 @@ TAXONOMY_VERSION <- list(
|
||||
name = "Systematized Nomenclature of Medicine - Clinical Terms (SNOMED-CT)",
|
||||
accessed_date = as.Date("2024-07-16"),
|
||||
citation = "Public Health Information Network Vocabulary Access and Distribution System (PHIN VADS). US Edition of SNOMED CT from 1 September 2020. Value Set Name 'Microorganism', OID 2.16.840.1.114222.4.11.1009 (v12).",
|
||||
url = "https://phinvads.cdc.gov"
|
||||
url = "https://www.cdc.gov/phin/php/phinvads"
|
||||
),
|
||||
LOINC = list(
|
||||
name = "Logical Observation Identifiers Names and Codes (LOINC)",
|
||||
|
202
R/antibiogram.R
202
R/antibiogram.R
@ -34,21 +34,21 @@
|
||||
#'
|
||||
#' Adhering to previously described approaches (see *Source*) and especially the Bayesian WISCA model (Weighted-Incidence Syndromic Combination Antibiogram) by Bielicki *et al.*, these functions provide flexible output formats including plots and tables, ideal for integration with R Markdown and Quarto reports.
|
||||
#' @param x a [data.frame] containing at least a column with microorganisms and columns with antimicrobial results (class 'sir', see [as.sir()])
|
||||
#' @param antibiotics vector of any antimicrobial name or code (will be evaluated with [as.ab()], column name of `x`, or (any combinations of) [antimicrobial selectors][antimicrobial_class_selectors] such as [aminoglycosides()] or [carbapenems()]. For combination antibiograms, this can also be set to values separated with `"+"`, such as "TZP+TOB" or "cipro + genta", given that columns resembling such antimicrobials exist in `x`. See *Examples*.
|
||||
#' @param mo_transform a character to transform microorganism input - must be `"name"`, `"shortname"` (default), `"gramstain"`, or one of the column names of the [microorganisms] data set: `r vector_or(colnames(microorganisms), sort = FALSE, quotes = TRUE)`. Can also be `NULL` to not transform the input.
|
||||
#' @param antibiotics vector of any antimicrobial name or code (will be evaluated with [as.ab()], column name of `x`, or (any combinations of) [antimicrobial selectors][antimicrobial_class_selectors] such as [aminoglycosides()] or [carbapenems()]. For combination antibiograms, this can also be set to values separated with `"+"`, such as `"TZP+TOB"` or `"cipro + genta"`, given that columns resembling such antimicrobials exist in `x`. See *Examples*.
|
||||
#' @param mo_transform a character to transform microorganism input - must be `"name"`, `"shortname"` (default), `"gramstain"`, or one of the column names of the [microorganisms] data set: `r vector_or(colnames(microorganisms), sort = FALSE, quotes = TRUE)`. Can also be `NULL` to not transform the input or `NA` to consider all microorganisms 'unknown'.
|
||||
#' @param ab_transform a character to transform antimicrobial input - must be one of the column names of the [antibiotics] data set (defaults to `"name"`): `r vector_or(colnames(antibiotics), sort = FALSE, quotes = TRUE)`. Can also be `NULL` to not transform the input.
|
||||
#' @param syndromic_group a column name of `x`, or values calculated to split rows of `x`, e.g. by using [ifelse()] or [`case_when()`][dplyr::case_when()]. See *Examples*.
|
||||
#' @param add_total_n a [logical] to indicate whether total available numbers per pathogen should be added to the table (default is `TRUE`). This will add the lowest and highest number of available isolates per antimicrobial (e.g, if for *E. coli* 200 isolates are available for ciprofloxacin and 150 for amoxicillin, the returned number will be "150-200").
|
||||
#' @param only_all_tested (for combination antibiograms): a [logical] to indicate that isolates must be tested for all antimicrobials, see *Details*
|
||||
#' @param digits number of digits to use for rounding the susceptibility percentage
|
||||
#' @param digits number of digits to use for rounding the antimicrobial coverage, defaults to 1 for WISCA and 0 otherwise
|
||||
#' @param formatting_type numeric value (1–22 for WISCA, 1-12 for non-WISCA) indicating how the 'cells' of the antibiogram table should be formatted. See *Details* > *Formatting Type* for a list of options.
|
||||
#' @param col_mo column name of the names or codes of the microorganisms (see [as.mo()]) - the default is the first column of class [`mo`]. Values will be coerced using [as.mo()].
|
||||
#' @param language language to translate text, which defaults to the system language (see [get_AMR_locale()])
|
||||
#' @param minimum the minimum allowed number of available (tested) isolates. Any isolate count lower than `minimum` will return `NA` with a warning. The default number of `30` isolates is advised by the Clinical and Laboratory Standards Institute (CLSI) as best practice, see *Source*.
|
||||
#' @param combine_SI a [logical] to indicate whether all susceptibility should be determined by results of either S, SDD, or I, instead of only S (default is `TRUE`)
|
||||
#' @param sep a separating character for antimicrobial columns in combination antibiograms
|
||||
#' @param wisca a [logical] to indicate whether a Weighted-Incidence Syndromic Combination Antibiogram (WISCA) must be generated (default is `FALSE`). This will use a Bayesian hierarchical model to estimate regimen coverage probabilities using Montecarlo simulations. Set `simulations` to adjust.
|
||||
#' @param simulations (for WISCA) a numerical value to set the number of Montecarlo simulations
|
||||
#' @param wisca a [logical] to indicate whether a Weighted-Incidence Syndromic Combination Antibiogram (WISCA) must be generated (default is `FALSE`). This will use a Bayesian decision model to estimate regimen coverage probabilities using [Monte Carlo simulations](https://en.wikipedia.org/wiki/Monte_Carlo_method). Set `simulations` to adjust.
|
||||
#' @param simulations (for WISCA) a numerical value to set the number of Monte Carlo simulations
|
||||
#' @param conf_interval (for WISCA) a numerical value to set confidence interval (default is `0.95`)
|
||||
#' @param interval_side (for WISCA) the side of the confidence interval, either `"two-tailed"` (default), `"left"` or `"right"`
|
||||
#' @param info a [logical] to indicate info should be printed - the default is `TRUE` only in interactive mode
|
||||
@ -64,7 +64,7 @@
|
||||
#'
|
||||
#' ### Formatting Type
|
||||
#'
|
||||
#' The formatting of the 'cells' of the table can be set with the argument `formatting_type`. In these examples, `5` is the susceptibility percentage (for WISCA: `4-6` indicates the confidence level), `15` the numerator, and `300` the denominator:
|
||||
#' The formatting of the 'cells' of the table can be set with the argument `formatting_type`. In these examples, `5` is the antimicrobial coverage (for WISCA: `4-6` indicates the confidence level), `15` the numerator, and `300` the denominator:
|
||||
#'
|
||||
#' 1. 5
|
||||
#' 2. 15
|
||||
@ -81,17 +81,17 @@
|
||||
#'
|
||||
#' Additional options for WISCA (using `antibiogram(..., wisca = TRUE)` or `wisca()`):
|
||||
#' 13. 5 (4-6)
|
||||
#' 14. 5% (4-6%)
|
||||
#' 14. 5% (4-6%) - **default for WISCA**
|
||||
#' 15. 5 (4-6,300)
|
||||
#' 16. 5% (4-6%,300)
|
||||
#' 17. 5 (4-6,N=300)
|
||||
#' 18. 5% (4-6%,N=300) - **default for WISCA**
|
||||
#' 18. 5% (4-6%,N=300)
|
||||
#' 19. 5 (4-6,15/300)
|
||||
#' 20. 5% (4-6%,15/300)
|
||||
#' 21. 5 (4-6,N=15/300)
|
||||
#' 22. 5% (4-6%,N=15/300)
|
||||
#'
|
||||
#' The default is `18` for WISCA and `10` for non-WISCA, which can be set globally with the package option [`AMR_antibiogram_formatting_type`][AMR-options], e.g. `options(AMR_antibiogram_formatting_type = 5)`.
|
||||
#' The default is `14` for WISCA and `10` for non-WISCA, which can be set globally with the package option [`AMR_antibiogram_formatting_type`][AMR-options], e.g. `options(AMR_antibiogram_formatting_type = 5)`. Do note that for WISCA, the numerator and denominator are less useful to report, since these are included in the Bayesian model and apparent from the susceptibility and its confidence level.
|
||||
#'
|
||||
#' Set `digits` (defaults to `0`) to alter the rounding of the susceptibility percentages.
|
||||
#'
|
||||
@ -99,7 +99,7 @@
|
||||
#'
|
||||
#' There are various antibiogram types, as summarised by Klinker *et al.* (2021, \doi{10.1177/20499361211011373}), and they are all supported by [antibiogram()].
|
||||
#'
|
||||
#' **Use WISCA whenever possible**, since it provides more precise coverage estimates by accounting for pathogen incidence and antimicrobial susceptibility, as has been shown by Bielicki *et al.* (2020, \doi{10.1001.jamanetworkopen.2019.21124}). See the section *Why Use WISCA?* on this page.
|
||||
#' **Use WISCA whenever possible**, since it provides more precise coverage estimates by accounting for pathogen incidence and antimicrobial susceptibility, as has been shown by Bielicki *et al.* (2020, \doi{10.1001.jamanetworkopen.2019.21124}). See the section *Explaining WISCA* on this page.
|
||||
#'
|
||||
#' 1. **Traditional Antibiogram**
|
||||
#'
|
||||
@ -137,7 +137,7 @@
|
||||
#'
|
||||
#' 4. **Weighted-Incidence Syndromic Combination Antibiogram (WISCA)**
|
||||
#'
|
||||
#' WISCA can be applied to any antibiogram, see the section *Why Use WISCA?* on this page for more information.
|
||||
#' WISCA can be applied to any antibiogram, see the section *Explaining WISCA* on this page for more information.
|
||||
#'
|
||||
#' Code example:
|
||||
#'
|
||||
@ -152,37 +152,88 @@
|
||||
#' ```
|
||||
#'
|
||||
#' WISCA uses a sophisticated Bayesian decision model to combine both local and pooled antimicrobial resistance data. This approach not only evaluates local patterns but can also draw on multi-centre datasets to improve regimen accuracy, even in low-incidence infections like paediatric bloodstream infections (BSIs).
|
||||
#'
|
||||
#' ### Grouped tibbles
|
||||
#'
|
||||
#' Grouped [tibbles][tibble::tibble] can also be used to calculate susceptibilities over various groups.
|
||||
#' For any type of antibiogram, grouped [tibbles][tibble::tibble] can also be used to calculate susceptibilities over various groups.
|
||||
#'
|
||||
#' Code example:
|
||||
#'
|
||||
#' ```r
|
||||
#' library(dplyr)
|
||||
#' your_data %>%
|
||||
#' group_by(has_sepsis, is_neonate, sex) %>%
|
||||
#' wisca(antibiotics = c("TZP", "TZP+TOB", "TZP+GEN"))
|
||||
#' ```
|
||||
#'
|
||||
#' ### Stepped Approach for Clinical Insight
|
||||
#'
|
||||
#' In clinical practice, antimicrobial coverage decisions evolve as more microbiological data becomes available. This theoretical stepped approach ensures empirical coverage can continuously assessed to improve patient outcomes:
|
||||
#'
|
||||
#' 1. **Initial Empirical Therapy (Admission / Pre-Culture Data)**
|
||||
#'
|
||||
#' At admission, no pathogen information is available.
|
||||
#'
|
||||
#' - Action: broad-spectrum coverage is based on local resistance patterns and syndromic antibiograms.
|
||||
#' - Code example:
|
||||
#'
|
||||
#' ```r
|
||||
#' antibiogram(your_data,
|
||||
#' antibiotics = selected_regimens,
|
||||
#' wisca = TRUE,
|
||||
#' mo_transform = NA) # all pathogens set to `NA`
|
||||
#' ```
|
||||
#'
|
||||
#' 2. **Refinement with Gram Stain Results**
|
||||
#'
|
||||
#' When a blood culture becomes positive, the Gram stain provides an initial and crucial first stratification (Gram-positive vs. Gram-negative).
|
||||
#'
|
||||
#' - Action: narrow coverage based on Gram stain-specific resistance patterns.
|
||||
#' - Code example:
|
||||
#'
|
||||
#' ```r
|
||||
#' antibiogram(your_data,
|
||||
#' antibiotics = selected_regimens,
|
||||
#' wisca = TRUE,
|
||||
#' mo_transform = "gramstain") # all pathogens set to Gram-pos/Gram-neg
|
||||
#' ```
|
||||
#'
|
||||
#' 3. **Definitive Therapy Based on Species Identification**
|
||||
#'
|
||||
#' After cultivation of the pathogen, full pathogen identification allows precise targeting of therapy.
|
||||
#'
|
||||
#' - Action: adjust treatment to pathogen-specific antibiograms, minimizing resistance risks.
|
||||
#' - Code example:
|
||||
#'
|
||||
#' ```r
|
||||
#' antibiogram(your_data,
|
||||
#' antibiotics = selected_regimens,
|
||||
#' wisca = TRUE,
|
||||
#' mo_transform = "shortname") # all pathogens set to 'G. species', e.g., E. coli
|
||||
#' ```
|
||||
#'
|
||||
#' By structuring antibiograms around this stepped approach, clinicians can make data-driven adjustments at each stage, ensuring optimal empirical and targeted therapy while reducing unnecessary broad-spectrum antimicrobial use.
|
||||
#'
|
||||
#' ### Inclusion in Combination Antibiogram and Syndromic Antibiogram
|
||||
#'
|
||||
#' Note that for types 2 and 3 (Combination Antibiogram and Syndromic Antibiogram), it is important to realise that susceptibility can be calculated in two ways, which can be set with the `only_all_tested` argument (default is `FALSE`). See this example for two antimicrobials, Drug A and Drug B, about how [antibiogram()] works to calculate the %SI:
|
||||
#' ### Inclusion in Combination Antibiograms
|
||||
#'
|
||||
#' Note that for combination antibiograms, it is important to realise that susceptibility can be calculated in two ways, which can be set with the `only_all_tested` argument (default is `FALSE`). See this example for two antimicrobials, Drug A and Drug B, about how [antibiogram()] works to calculate the %SI:
|
||||
#'
|
||||
#' ```
|
||||
#' --------------------------------------------------------------------
|
||||
#' only_all_tested = FALSE only_all_tested = TRUE
|
||||
#' ----------------------- -----------------------
|
||||
#' Drug A Drug B include as include as include as include as
|
||||
#' numerator denominator numerator denominator
|
||||
#' -------- -------- ---------- ----------- ---------- -----------
|
||||
#' S or I S or I X X X X
|
||||
#' R S or I X X X X
|
||||
#' <NA> S or I X X - -
|
||||
#' S or I R X X X X
|
||||
#' R R - X - X
|
||||
#' <NA> R - - - -
|
||||
#' S or I <NA> X X - -
|
||||
#' R <NA> - - - -
|
||||
#' <NA> <NA> - - - -
|
||||
#' Drug A Drug B considered considered considered considered
|
||||
#' susceptible tested susceptible tested
|
||||
#' -------- -------- ----------- ---------- ----------- ----------
|
||||
#' S or I S or I X X X X
|
||||
#' R S or I X X X X
|
||||
#' <NA> S or I X X - -
|
||||
#' S or I R X X X X
|
||||
#' R R - X - X
|
||||
#' <NA> R - - - -
|
||||
#' S or I <NA> X X - -
|
||||
#' R <NA> - - - -
|
||||
#' <NA> <NA> - - - -
|
||||
#' --------------------------------------------------------------------
|
||||
#' ```
|
||||
#'
|
||||
@ -194,7 +245,7 @@
|
||||
#'
|
||||
#' You can also use functions from specific 'table reporting' packages to transform the output of [antibiogram()] to your needs, e.g. with `flextable::as_flextable()` or `gt::gt()`.
|
||||
#'
|
||||
#' @section Why Use WISCA?:
|
||||
#' @section Explaining WISCA:
|
||||
#'
|
||||
#' WISCA, as outlined by Bielicki *et al.* (\doi{10.1093/jac/dkv397}), stands for Weighted-Incidence Syndromic Combination Antibiogram, which estimates the probability of adequate empirical antimicrobial regimen coverage for specific infection syndromes. This method leverages a Bayesian hierarchical logistic regression framework with random effects for pathogens and regimens, enabling robust estimates in the presence of sparse data.
|
||||
#'
|
||||
@ -361,8 +412,8 @@ antibiogram <- function(x,
|
||||
syndromic_group = NULL,
|
||||
add_total_n = FALSE,
|
||||
only_all_tested = FALSE,
|
||||
digits = 0,
|
||||
formatting_type = getOption("AMR_antibiogram_formatting_type", ifelse(wisca, 18, 10)),
|
||||
digits = ifelse(wisca, 1, 0),
|
||||
formatting_type = getOption("AMR_antibiogram_formatting_type", ifelse(wisca, 14, 10)),
|
||||
col_mo = NULL,
|
||||
language = get_AMR_locale(),
|
||||
minimum = 30,
|
||||
@ -385,8 +436,8 @@ antibiogram.default <- function(x,
|
||||
syndromic_group = NULL,
|
||||
add_total_n = FALSE,
|
||||
only_all_tested = FALSE,
|
||||
digits = 0,
|
||||
formatting_type = getOption("AMR_antibiogram_formatting_type", ifelse(wisca, 18, 10)),
|
||||
digits = ifelse(wisca, 1, 0),
|
||||
formatting_type = getOption("AMR_antibiogram_formatting_type", ifelse(wisca, 14, 10)),
|
||||
col_mo = NULL,
|
||||
language = get_AMR_locale(),
|
||||
minimum = 30,
|
||||
@ -400,7 +451,7 @@ antibiogram.default <- function(x,
|
||||
meet_criteria(x, allow_class = "data.frame")
|
||||
x <- ascertain_sir_classes(x, "x")
|
||||
if (!is.function(mo_transform)) {
|
||||
meet_criteria(mo_transform, allow_class = "character", has_length = 1, is_in = c("name", "shortname", "gramstain", colnames(AMR::microorganisms)), allow_NULL = TRUE)
|
||||
meet_criteria(mo_transform, allow_class = "character", has_length = 1, is_in = c("name", "shortname", "gramstain", colnames(AMR::microorganisms)), allow_NULL = TRUE, allow_NA = TRUE)
|
||||
}
|
||||
if (!is.function(ab_transform)) {
|
||||
meet_criteria(ab_transform, allow_class = "character", has_length = 1, is_in = colnames(AMR::antibiotics), allow_NULL = TRUE)
|
||||
@ -429,7 +480,9 @@ antibiogram.default <- function(x,
|
||||
# transform MOs
|
||||
x$`.mo` <- x[, col_mo, drop = TRUE]
|
||||
if (is.null(mo_transform)) {
|
||||
# leave as is
|
||||
# leave as is, no transformation
|
||||
} else if (is.na(mo_transform)) {
|
||||
x$`.mo` <- NA_character_
|
||||
} else if (is.function(mo_transform)) {
|
||||
x$`.mo` <- mo_transform(x$`.mo`)
|
||||
} else if (mo_transform == "gramstain") {
|
||||
@ -536,6 +589,7 @@ antibiogram.default <- function(x,
|
||||
)
|
||||
counts <- out
|
||||
|
||||
wisca_params <- NULL
|
||||
|
||||
if (wisca == TRUE) {
|
||||
# WISCA ----
|
||||
@ -547,9 +601,12 @@ antibiogram.default <- function(x,
|
||||
title = "Calculating beta/gamma parameters for WISCA")
|
||||
on.exit(close(progress))
|
||||
|
||||
out$percentage = NA_real_
|
||||
out$lower = NA_real_
|
||||
out$upper = NA_real_
|
||||
out$coverage <- NA_real_
|
||||
out$lower <- NA_real_
|
||||
out$upper <- NA_real_
|
||||
out$gamma_posterior <- NA_real_
|
||||
out$beta_posterior_1 <- NA_real_
|
||||
out$beta_posterior_2 <- NA_real_
|
||||
|
||||
for (i in seq_len(NROW(out))) {
|
||||
if (out$total[i] == 0) {
|
||||
@ -559,22 +616,29 @@ antibiogram.default <- function(x,
|
||||
out_current <- out[i, , drop = FALSE]
|
||||
priors <- calculate_priors(out_current, combine_SI = combine_SI)
|
||||
|
||||
out$gamma_posterior[i] = priors$gamma_posterior
|
||||
out$beta_posterior_1[i] = priors$beta_posterior_1
|
||||
out$beta_posterior_2[i] = priors$beta_posterior_2
|
||||
|
||||
# Monte Carlo simulation
|
||||
coverage_simulations <- replicate(simulations, {
|
||||
|
||||
# simulate pathogen incidence
|
||||
# = Dirichlet (Gamma) parameters
|
||||
simulated_incidence <- stats::rgamma(
|
||||
n = length(priors$gamma_posterior),
|
||||
random_incidence <- runif(1, min = 0, max = 1)
|
||||
simulated_incidence <- stats::qgamma(
|
||||
p = random_incidence,
|
||||
shape = priors$gamma_posterior,
|
||||
rate = 1 # Scale = 1 for gamma
|
||||
scale = 1
|
||||
)
|
||||
# normalise
|
||||
simulated_incidence <- simulated_incidence / sum(simulated_incidence)
|
||||
|
||||
# simulate susceptibility
|
||||
# = Beta parameters
|
||||
simulated_susceptibility <- stats::rbeta(
|
||||
n = length(priors$beta_posterior_1),
|
||||
random_susceptibity <- runif(1, min = 0, max = 1)
|
||||
simulated_susceptibility <- stats::qbeta(
|
||||
p = random_susceptibity,
|
||||
shape1 = priors$beta_posterior_1,
|
||||
shape2 = priors$beta_posterior_2
|
||||
)
|
||||
@ -592,7 +656,7 @@ antibiogram.default <- function(x,
|
||||
}
|
||||
coverage_ci <- unname(stats::quantile(coverage_simulations, probs = probs))
|
||||
|
||||
out$percentage[i] <- coverage_mean
|
||||
out$coverage[i] <- coverage_mean
|
||||
out$lower[i] <- coverage_ci[1]
|
||||
out$upper[i] <- coverage_ci[2]
|
||||
}
|
||||
@ -640,19 +704,25 @@ antibiogram.default <- function(x,
|
||||
|
||||
if (wisca == TRUE) {
|
||||
long_numeric <- out %pm>%
|
||||
pm_summarise(percentage = percentage,
|
||||
lower = lower,
|
||||
upper = upper,
|
||||
numerator = numerator,
|
||||
total = total)
|
||||
pm_summarise(coverage = coverage,
|
||||
lower_ci = lower,
|
||||
upper_ci = upper,
|
||||
n_tested = total,
|
||||
n_total = total_rows,
|
||||
n_susceptible = numerator,
|
||||
p_susceptible = numerator / total,
|
||||
gamma_posterior = gamma_posterior,
|
||||
beta_posterior1 = beta_posterior_1,
|
||||
beta_posterior2 = beta_posterior_2)
|
||||
} else {
|
||||
long_numeric <- out %pm>%
|
||||
pm_summarise(percentage = numerator / total,
|
||||
pm_summarise(coverage = numerator / total,
|
||||
numerator = numerator,
|
||||
total = total)
|
||||
}
|
||||
|
||||
out$digits <- digits # since pm_sumarise() cannot work with an object outside the current frame
|
||||
|
||||
# formatting type:
|
||||
# 1. 5
|
||||
# 2. 15
|
||||
@ -688,12 +758,12 @@ antibiogram.default <- function(x,
|
||||
if (formatting_type == 10) out <- out %pm>% pm_summarise(out_value = paste0(round((numerator / total) * 100, digits = digits), "% (", numerator, "/", total, ")"))
|
||||
if (formatting_type == 11) out <- out %pm>% pm_summarise(out_value = paste0(round((numerator / total) * 100, digits = digits), " (N=", numerator, "/", total, ")"))
|
||||
if (formatting_type == 12) out <- out %pm>% pm_summarise(out_value = paste0(round((numerator / total) * 100, digits = digits), "% (N=", numerator, "/", total, ")"))
|
||||
if (formatting_type == 13) out <- out %pm>% pm_summarise(out_value = paste0(round(percentage * 100, digits = digits), " (", round(lower * 100, digits = digits), "-", round(upper * 100, digits = digits), ")"))
|
||||
if (formatting_type == 14) out <- out %pm>% pm_summarise(out_value = paste0(round(percentage * 100, digits = digits), "% (", round(lower * 100, digits = digits), "-", round(upper * 100, digits = digits), "%)"))
|
||||
if (formatting_type == 15) out <- out %pm>% pm_summarise(out_value = paste0(round(percentage * 100, digits = digits), " (", round(lower * 100, digits = digits), "-", round(upper * 100, digits = digits), ",", total, ")"))
|
||||
if (formatting_type == 16) out <- out %pm>% pm_summarise(out_value = paste0(round(percentage * 100, digits = digits), "% (", round(lower * 100, digits = digits), "-", round(upper * 100, digits = digits), "%,", total, ")"))
|
||||
if (formatting_type == 17) out <- out %pm>% pm_summarise(out_value = paste0(round(percentage * 100, digits = digits), " (", round(lower * 100, digits = digits), "-", round(upper * 100, digits = digits), ",N=", total, ")"))
|
||||
if (formatting_type == 18) out <- out %pm>% pm_summarise(out_value = paste0(round(percentage * 100, digits = digits), "% (", round(lower * 100, digits = digits), "-", round(upper * 100, digits = digits), "%,N=", total, ")"))
|
||||
if (formatting_type == 13) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), " (", round(lower * 100, digits = digits), "-", round(upper * 100, digits = digits), ")"))
|
||||
if (formatting_type == 14) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), "% (", round(lower * 100, digits = digits), "-", round(upper * 100, digits = digits), "%)"))
|
||||
if (formatting_type == 15) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), " (", round(lower * 100, digits = digits), "-", round(upper * 100, digits = digits), ",", total, ")"))
|
||||
if (formatting_type == 16) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), "% (", round(lower * 100, digits = digits), "-", round(upper * 100, digits = digits), "%,", total, ")"))
|
||||
if (formatting_type == 17) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), " (", round(lower * 100, digits = digits), "-", round(upper * 100, digits = digits), ",N=", total, ")"))
|
||||
if (formatting_type == 18) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), "% (", round(lower * 100, digits = digits), "-", round(upper * 100, digits = digits), "%,N=", total, ")"))
|
||||
|
||||
# transform names of antibiotics
|
||||
ab_naming_function <- function(x, t, l, s) {
|
||||
@ -812,8 +882,8 @@ antibiogram.grouped_df <- function(x,
|
||||
syndromic_group = NULL,
|
||||
add_total_n = FALSE,
|
||||
only_all_tested = FALSE,
|
||||
digits = 0,
|
||||
formatting_type = getOption("AMR_antibiogram_formatting_type", ifelse(wisca, 18, 10)),
|
||||
digits = ifelse(wisca, 1, 0),
|
||||
formatting_type = getOption("AMR_antibiogram_formatting_type", ifelse(wisca, 14, 10)),
|
||||
col_mo = NULL,
|
||||
language = get_AMR_locale(),
|
||||
minimum = 30,
|
||||
@ -910,8 +980,8 @@ wisca <- function(x,
|
||||
syndromic_group = NULL,
|
||||
add_total_n = FALSE,
|
||||
only_all_tested = FALSE,
|
||||
digits = 0,
|
||||
formatting_type = getOption("AMR_antibiogram_formatting_type", 18),
|
||||
digits = 1,
|
||||
formatting_type = getOption("AMR_antibiogram_formatting_type", 14),
|
||||
col_mo = NULL,
|
||||
language = get_AMR_locale(),
|
||||
minimum = 30,
|
||||
@ -938,9 +1008,15 @@ wisca <- function(x,
|
||||
info = info)
|
||||
}
|
||||
|
||||
#' @export
|
||||
#' @param wisca_model the outcome of [wisca()] or [antibiogram(..., wisca = TRUE)]
|
||||
#' @rdname antibiogram
|
||||
retrieve_wisca_parameters <- function(wisca_model, ...) {
|
||||
stop_ifnot(isTRUE(attributes(wisca_model)$wisca), "This function only applies to WISCA models. Use `wisca()` or `antibiogram(..., wisca = TRUE)` to create a WISCA model.")
|
||||
attributes(wisca_model)$long_numeric
|
||||
}
|
||||
|
||||
calculate_priors <- function(data, combine_SI = TRUE) {
|
||||
# Ensure data has required columns
|
||||
stopifnot(all(c("mo", "total_rows", "total", "S") %in% colnames(data)))
|
||||
if (combine_SI == TRUE && "I" %in% colnames(data)) {
|
||||
data$S <- data$S + data$I
|
||||
}
|
||||
@ -1013,7 +1089,7 @@ plot.antibiogram <- function(x, ...) {
|
||||
df_sub <- df[df$mo == mo, , drop = FALSE]
|
||||
|
||||
bp <- barplot(
|
||||
height = df_sub$percentage * 100,
|
||||
height = df_sub$coverage * 100,
|
||||
xlab = NULL,
|
||||
ylab = ifelse(isTRUE(attributes(x)$combine_SI), "%SI", "%S"),
|
||||
names.arg = df_sub$ab,
|
||||
@ -1055,7 +1131,7 @@ autoplot.antibiogram <- function(object, ...) {
|
||||
out <- ggplot2::ggplot(df,
|
||||
mapping = ggplot2::aes(
|
||||
x = ab,
|
||||
y = percentage * 100,
|
||||
y = coverage * 100,
|
||||
fill = if ("syndromic_group" %in% colnames(df)) {
|
||||
syndromic_group
|
||||
} else {
|
||||
|
@ -46,6 +46,8 @@
|
||||
#' @param collapse a [logical] to indicate whether the output values should be 'collapsed', i.e. be merged together into one value, or a character value to use for collapsing
|
||||
#' @inheritSection as.sir Interpretation of SIR
|
||||
#' @details
|
||||
#' For a more automated and comprehensive analysis, consider using [antibiogram()] or [wisca()], which streamline many aspects of susceptibility reporting and, importantly, also support WISCA. The functions described here offer a more hands-on, manual approach for greater customisation.
|
||||
#'
|
||||
#' **Remember that you should filter your data to let it contain only first isolates!** This is needed to exclude duplicates and to reduce selection bias. Use [first_isolate()] to determine them in your data set with one of the four available algorithms.
|
||||
#'
|
||||
#' The function [resistance()] is equal to the function [proportion_R()]. The function [susceptibility()] is equal to the function [proportion_SI()]. Since AMR v3.0, [proportion_SI()] and [proportion_I()] include dose-dependent susceptibility ('SDD').
|
||||
@ -63,18 +65,18 @@
|
||||
#' --------------------------------------------------------------------
|
||||
#' only_all_tested = FALSE only_all_tested = TRUE
|
||||
#' ----------------------- -----------------------
|
||||
#' Drug A Drug B include as include as include as include as
|
||||
#' numerator denominator numerator denominator
|
||||
#' -------- -------- ---------- ----------- ---------- -----------
|
||||
#' S or I S or I X X X X
|
||||
#' R S or I X X X X
|
||||
#' <NA> S or I X X - -
|
||||
#' S or I R X X X X
|
||||
#' R R - X - X
|
||||
#' <NA> R - - - -
|
||||
#' S or I <NA> X X - -
|
||||
#' R <NA> - - - -
|
||||
#' <NA> <NA> - - - -
|
||||
#' Drug A Drug B considered considered considered considered
|
||||
#' susceptible tested susceptible tested
|
||||
#' -------- -------- ----------- ---------- ----------- ----------
|
||||
#' S or I S or I X X X X
|
||||
#' R S or I X X X X
|
||||
#' <NA> S or I X X - -
|
||||
#' S or I R X X X X
|
||||
#' R R - X - X
|
||||
#' <NA> R - - - -
|
||||
#' S or I <NA> X X - -
|
||||
#' R <NA> - - - -
|
||||
#' <NA> <NA> - - - -
|
||||
#' --------------------------------------------------------------------
|
||||
#' ```
|
||||
#'
|
||||
|
@ -1,6 +1,6 @@
|
||||
This knowledge base contains all context you must know about the AMR package for R. You are a GPT trained to be an assistant for the AMR package in R. You are an incredible R specialist, especially trained in this package and in the tidyverse.
|
||||
|
||||
First and foremost, you are trained on version 2.1.1.9139. Remember this whenever someone asks which AMR package version you’re at.
|
||||
First and foremost, you are trained on version 2.1.1.9140. Remember this whenever someone asks which AMR package version you’re at.
|
||||
|
||||
Below are the contents of the file, the file, and all the files (documentation) in the package. Every file content is split using 100 hypens.
|
||||
----------------------------------------------------------------------------------------------------
|
||||
@ -327,6 +327,7 @@ export(rescale_mic)
|
||||
export(reset_AMR_locale)
|
||||
export(resistance)
|
||||
export(resistance_predict)
|
||||
export(retrieve_wisca_parameters)
|
||||
export(rifamycins)
|
||||
export(right_join_microorganisms)
|
||||
export(scale_colour_mic)
|
||||
@ -1625,6 +1626,7 @@ THE PART HEREAFTER CONTAINS CONTENTS FROM FILE 'man/antibiogram.Rd':
|
||||
\name{antibiogram}
|
||||
\alias{antibiogram}
|
||||
\alias{wisca}
|
||||
\alias{retrieve_wisca_parameters}
|
||||
\alias{plot.antibiogram}
|
||||
\alias{autoplot.antibiogram}
|
||||
\alias{knit_print.antibiogram}
|
||||
@ -1641,21 +1643,23 @@ THE PART HEREAFTER CONTAINS CONTENTS FROM FILE 'man/antibiogram.Rd':
|
||||
\usage{
|
||||
antibiogram(x, antibiotics = where(is.sir), mo_transform = "shortname",
|
||||
ab_transform = "name", syndromic_group = NULL, add_total_n = FALSE,
|
||||
only_all_tested = FALSE, digits = 0,
|
||||
only_all_tested = FALSE, digits = ifelse(wisca, 1, 0),
|
||||
formatting_type = getOption("AMR_antibiogram_formatting_type",
|
||||
ifelse(wisca, 18, 10)), col_mo = NULL, language = get_AMR_locale(),
|
||||
ifelse(wisca, 14, 10)), col_mo = NULL, language = get_AMR_locale(),
|
||||
minimum = 30, combine_SI = TRUE, sep = " + ", wisca = FALSE,
|
||||
simulations = 1000, conf_interval = 0.95, interval_side = "two-tailed",
|
||||
info = interactive())
|
||||
|
||||
wisca(x, antibiotics = where(is.sir), mo_transform = "shortname",
|
||||
ab_transform = "name", syndromic_group = NULL, add_total_n = FALSE,
|
||||
only_all_tested = FALSE, digits = 0,
|
||||
formatting_type = getOption("AMR_antibiogram_formatting_type", 18),
|
||||
only_all_tested = FALSE, digits = 1,
|
||||
formatting_type = getOption("AMR_antibiogram_formatting_type", 14),
|
||||
col_mo = NULL, language = get_AMR_locale(), minimum = 30,
|
||||
combine_SI = TRUE, sep = " + ", simulations = 1000,
|
||||
info = interactive())
|
||||
|
||||
retrieve_wisca_parameters(wisca_model, ...)
|
||||
|
||||
\method{plot}{antibiogram}(x, ...)
|
||||
|
||||
\method{autoplot}{antibiogram}(object, ...)
|
||||
@ -1666,9 +1670,9 @@ wisca(x, antibiotics = where(is.sir), mo_transform = "shortname",
|
||||
\arguments{
|
||||
\item{x}{a \link{data.frame} containing at least a column with microorganisms and columns with antimicrobial results (class 'sir', see \code{\link[=as.sir]{as.sir()}})}
|
||||
|
||||
\item{antibiotics}{vector of any antimicrobial name or code (will be evaluated with \code{\link[=as.ab]{as.ab()}}, column name of \code{x}, or (any combinations of) \link[=antimicrobial_class_selectors]{antimicrobial selectors} such as \code{\link[=aminoglycosides]{aminoglycosides()}} or \code{\link[=carbapenems]{carbapenems()}}. For combination antibiograms, this can also be set to values separated with \code{"+"}, such as "TZP+TOB" or "cipro + genta", given that columns resembling such antimicrobials exist in \code{x}. See \emph{Examples}.}
|
||||
\item{antibiotics}{vector of any antimicrobial name or code (will be evaluated with \code{\link[=as.ab]{as.ab()}}, column name of \code{x}, or (any combinations of) \link[=antimicrobial_class_selectors]{antimicrobial selectors} such as \code{\link[=aminoglycosides]{aminoglycosides()}} or \code{\link[=carbapenems]{carbapenems()}}. For combination antibiograms, this can also be set to values separated with \code{"+"}, such as \code{"TZP+TOB"} or \code{"cipro + genta"}, given that columns resembling such antimicrobials exist in \code{x}. See \emph{Examples}.}
|
||||
|
||||
\item{mo_transform}{a character to transform microorganism input - must be \code{"name"}, \code{"shortname"} (default), \code{"gramstain"}, or one of the column names of the \link{microorganisms} data set: "mo", "fullname", "status", "kingdom", "phylum", "class", "order", "family", "genus", "species", "subspecies", "rank", "ref", "oxygen_tolerance", "source", "lpsn", "lpsn_parent", "lpsn_renamed_to", "mycobank", "mycobank_parent", "mycobank_renamed_to", "gbif", "gbif_parent", "gbif_renamed_to", "prevalence", or "snomed". Can also be \code{NULL} to not transform the input.}
|
||||
\item{mo_transform}{a character to transform microorganism input - must be \code{"name"}, \code{"shortname"} (default), \code{"gramstain"}, or one of the column names of the \link{microorganisms} data set: "mo", "fullname", "status", "kingdom", "phylum", "class", "order", "family", "genus", "species", "subspecies", "rank", "ref", "oxygen_tolerance", "source", "lpsn", "lpsn_parent", "lpsn_renamed_to", "mycobank", "mycobank_parent", "mycobank_renamed_to", "gbif", "gbif_parent", "gbif_renamed_to", "prevalence", or "snomed". Can also be \code{NULL} to not transform the input or \code{NA} to consider all microorganisms 'unknown'.}
|
||||
|
||||
\item{ab_transform}{a character to transform antimicrobial input - must be one of the column names of the \link{antibiotics} data set (defaults to \code{"name"}): "ab", "cid", "name", "group", "atc", "atc_group1", "atc_group2", "abbreviations", "synonyms", "oral_ddd", "oral_units", "iv_ddd", "iv_units", or "loinc". Can also be \code{NULL} to not transform the input.}
|
||||
|
||||
@ -1678,7 +1682,7 @@ wisca(x, antibiotics = where(is.sir), mo_transform = "shortname",
|
||||
|
||||
\item{only_all_tested}{(for combination antibiograms): a \link{logical} to indicate that isolates must be tested for all antimicrobials, see \emph{Details}}
|
||||
|
||||
\item{digits}{number of digits to use for rounding the susceptibility percentage}
|
||||
\item{digits}{number of digits to use for rounding the antimicrobial coverage, defaults to 1 for WISCA and 0 otherwise}
|
||||
|
||||
\item{formatting_type}{numeric value (1–22 for WISCA, 1-12 for non-WISCA) indicating how the 'cells' of the antibiogram table should be formatted. See \emph{Details} > \emph{Formatting Type} for a list of options.}
|
||||
|
||||
@ -1692,9 +1696,9 @@ wisca(x, antibiotics = where(is.sir), mo_transform = "shortname",
|
||||
|
||||
\item{sep}{a separating character for antimicrobial columns in combination antibiograms}
|
||||
|
||||
\item{wisca}{a \link{logical} to indicate whether a Weighted-Incidence Syndromic Combination Antibiogram (WISCA) must be generated (default is \code{FALSE}). This will use a Bayesian hierarchical model to estimate regimen coverage probabilities using Montecarlo simulations. Set \code{simulations} to adjust.}
|
||||
\item{wisca}{a \link{logical} to indicate whether a Weighted-Incidence Syndromic Combination Antibiogram (WISCA) must be generated (default is \code{FALSE}). This will use a Bayesian decision model to estimate regimen coverage probabilities using \href{https://en.wikipedia.org/wiki/Monte_Carlo_method}{Monte Carlo simulations}. Set \code{simulations} to adjust.}
|
||||
|
||||
\item{simulations}{(for WISCA) a numerical value to set the number of Montecarlo simulations}
|
||||
\item{simulations}{(for WISCA) a numerical value to set the number of Monte Carlo simulations}
|
||||
|
||||
\item{conf_interval}{(for WISCA) a numerical value to set confidence interval (default is \code{0.95})}
|
||||
|
||||
@ -1702,6 +1706,8 @@ wisca(x, antibiotics = where(is.sir), mo_transform = "shortname",
|
||||
|
||||
\item{info}{a \link{logical} to indicate info should be printed - the default is \code{TRUE} only in interactive mode}
|
||||
|
||||
\item{wisca_model}{the outcome of \code{\link[=wisca]{wisca()}} or \link{antibiogram(..., wisca = TRUE)}}
|
||||
|
||||
\item{...}{when used in \link[knitr:kable]{R Markdown or Quarto}: arguments passed on to \code{\link[knitr:kable]{knitr::kable()}} (otherwise, has no use)}
|
||||
|
||||
\item{object}{an \code{\link[=antibiogram]{antibiogram()}} object}
|
||||
@ -1725,7 +1731,7 @@ For estimating antimicrobial coverage, especially when creating a WISCA, the out
|
||||
The numeric values of an antibiogram are stored in a long format as the \link[=attributes]{attribute} \code{long_numeric}. You can retrieve them using \code{attributes(x)$long_numeric}, where \code{x} is the outcome of \code{\link[=antibiogram]{antibiogram()}} or \code{\link[=wisca]{wisca()}}. This is ideal for e.g. advanced plotting.
|
||||
\subsection{Formatting Type}{
|
||||
|
||||
The formatting of the 'cells' of the table can be set with the argument \code{formatting_type}. In these examples, \code{5} is the susceptibility percentage (for WISCA: \code{4-6} indicates the confidence level), \code{15} the numerator, and \code{300} the denominator:
|
||||
The formatting of the 'cells' of the table can be set with the argument \code{formatting_type}. In these examples, \code{5} is the antimicrobial coverage (for WISCA: \code{4-6} indicates the confidence level), \code{15} the numerator, and \code{300} the denominator:
|
||||
\enumerate{
|
||||
\item 5
|
||||
\item 15
|
||||
@ -1742,18 +1748,18 @@ The formatting of the 'cells' of the table can be set with the argument \code{fo
|
||||
|
||||
Additional options for WISCA (using \code{antibiogram(..., wisca = TRUE)} or \code{wisca()}):
|
||||
\item 5 (4-6)
|
||||
\item 5\% (4-6\%)
|
||||
\item 5\% (4-6\%) - \strong{default for WISCA}
|
||||
\item 5 (4-6,300)
|
||||
\item 5\% (4-6\%,300)
|
||||
\item 5 (4-6,N=300)
|
||||
\item 5\% (4-6\%,N=300) - \strong{default for WISCA}
|
||||
\item 5\% (4-6\%,N=300)
|
||||
\item 5 (4-6,15/300)
|
||||
\item 5\% (4-6\%,15/300)
|
||||
\item 5 (4-6,N=15/300)
|
||||
\item 5\% (4-6\%,N=15/300)
|
||||
}
|
||||
|
||||
The default is \code{18} for WISCA and \code{10} for non-WISCA, which can be set globally with the package option \code{\link[=AMR-options]{AMR_antibiogram_formatting_type}}, e.g. \code{options(AMR_antibiogram_formatting_type = 5)}.
|
||||
The default is \code{14} for WISCA and \code{10} for non-WISCA, which can be set globally with the package option \code{\link[=AMR-options]{AMR_antibiogram_formatting_type}}, e.g. \code{options(AMR_antibiogram_formatting_type = 5)}. Do note that for WISCA, the numerator and denominator are less useful to report, since these are included in the Bayesian model and apparent from the susceptibility and its confidence level.
|
||||
|
||||
Set \code{digits} (defaults to \code{0}) to alter the rounding of the susceptibility percentages.
|
||||
}
|
||||
@ -1762,7 +1768,7 @@ Set \code{digits} (defaults to \code{0}) to alter the rounding of the susceptibi
|
||||
|
||||
There are various antibiogram types, as summarised by Klinker \emph{et al.} (2021, \doi{10.1177/20499361211011373}), and they are all supported by \code{\link[=antibiogram]{antibiogram()}}.
|
||||
|
||||
\strong{Use WISCA whenever possible}, since it provides more precise coverage estimates by accounting for pathogen incidence and antimicrobial susceptibility, as has been shown by Bielicki \emph{et al.} (2020, \doi{10.1001.jamanetworkopen.2019.21124}). See the section \emph{Why Use WISCA?} on this page.
|
||||
\strong{Use WISCA whenever possible}, since it provides more precise coverage estimates by accounting for pathogen incidence and antimicrobial susceptibility, as has been shown by Bielicki \emph{et al.} (2020, \doi{10.1001.jamanetworkopen.2019.21124}). See the section \emph{Explaining WISCA} on this page.
|
||||
\enumerate{
|
||||
\item \strong{Traditional Antibiogram}
|
||||
|
||||
@ -1794,7 +1800,7 @@ Code example:
|
||||
}\if{html}{\out{</div>}}
|
||||
\item \strong{Weighted-Incidence Syndromic Combination Antibiogram (WISCA)}
|
||||
|
||||
WISCA can be applied to any antibiogram, see the section \emph{Why Use WISCA?} on this page for more information.
|
||||
WISCA can be applied to any antibiogram, see the section \emph{Explaining WISCA} on this page for more information.
|
||||
|
||||
Code example:
|
||||
|
||||
@ -1809,36 +1815,88 @@ wisca(your_data,
|
||||
|
||||
WISCA uses a sophisticated Bayesian decision model to combine both local and pooled antimicrobial resistance data. This approach not only evaluates local patterns but can also draw on multi-centre datasets to improve regimen accuracy, even in low-incidence infections like paediatric bloodstream infections (BSIs).
|
||||
}
|
||||
}
|
||||
|
||||
Grouped \link[tibble:tibble]{tibbles} can also be used to calculate susceptibilities over various groups.
|
||||
\subsection{Grouped tibbles}{
|
||||
|
||||
For any type of antibiogram, grouped \link[tibble:tibble]{tibbles} can also be used to calculate susceptibilities over various groups.
|
||||
|
||||
Code example:
|
||||
|
||||
\if{html}{\out{<div class="sourceCode r">}}\preformatted{your_data \%>\%
|
||||
\if{html}{\out{<div class="sourceCode r">}}\preformatted{library(dplyr)
|
||||
your_data \%>\%
|
||||
group_by(has_sepsis, is_neonate, sex) \%>\%
|
||||
wisca(antibiotics = c("TZP", "TZP+TOB", "TZP+GEN"))
|
||||
}\if{html}{\out{</div>}}
|
||||
}
|
||||
|
||||
\subsection{Inclusion in Combination Antibiogram and Syndromic Antibiogram}{
|
||||
\subsection{Stepped Approach for Clinical Insight}{
|
||||
|
||||
Note that for types 2 and 3 (Combination Antibiogram and Syndromic Antibiogram), it is important to realise that susceptibility can be calculated in two ways, which can be set with the \code{only_all_tested} argument (default is \code{FALSE}). See this example for two antimicrobials, Drug A and Drug B, about how \code{\link[=antibiogram]{antibiogram()}} works to calculate the \%SI:
|
||||
In clinical practice, antimicrobial coverage decisions evolve as more microbiological data becomes available. This theoretical stepped approach ensures empirical coverage can continuously assessed to improve patient outcomes:
|
||||
\enumerate{
|
||||
\item \strong{Initial Empirical Therapy (Admission / Pre-Culture Data)}
|
||||
|
||||
At admission, no pathogen information is available.
|
||||
\itemize{
|
||||
\item Action: broad-spectrum coverage is based on local resistance patterns and syndromic antibiograms.
|
||||
\item Code example:
|
||||
|
||||
\if{html}{\out{<div class="sourceCode r">}}\preformatted{antibiogram(your_data,
|
||||
antibiotics = selected_regimens,
|
||||
wisca = TRUE,
|
||||
mo_transform = NA) # all pathogens set to `NA`
|
||||
}\if{html}{\out{</div>}}
|
||||
}
|
||||
\item \strong{Refinement with Gram Stain Results}
|
||||
|
||||
When a blood culture becomes positive, the Gram stain provides an initial and crucial first stratification (Gram-positive vs. Gram-negative).
|
||||
\itemize{
|
||||
\item Action: narrow coverage based on Gram stain-specific resistance patterns.
|
||||
\item Code example:
|
||||
|
||||
\if{html}{\out{<div class="sourceCode r">}}\preformatted{antibiogram(your_data,
|
||||
antibiotics = selected_regimens,
|
||||
wisca = TRUE,
|
||||
mo_transform = "gramstain") # all pathogens set to Gram-pos/Gram-neg
|
||||
}\if{html}{\out{</div>}}
|
||||
}
|
||||
\item \strong{Definitive Therapy Based on Species Identification}
|
||||
|
||||
After cultivation of the pathogen, full pathogen identification allows precise targeting of therapy.
|
||||
\itemize{
|
||||
\item Action: adjust treatment to pathogen-specific antibiograms, minimizing resistance risks.
|
||||
\item Code example:
|
||||
|
||||
\if{html}{\out{<div class="sourceCode r">}}\preformatted{antibiogram(your_data,
|
||||
antibiotics = selected_regimens,
|
||||
wisca = TRUE,
|
||||
mo_transform = "shortname") # all pathogens set to 'G. species', e.g., E. coli
|
||||
}\if{html}{\out{</div>}}
|
||||
}
|
||||
}
|
||||
|
||||
By structuring antibiograms around this stepped approach, clinicians can make data-driven adjustments at each stage, ensuring optimal empirical and targeted therapy while reducing unnecessary broad-spectrum antimicrobial use.
|
||||
}
|
||||
|
||||
\subsection{Inclusion in Combination Antibiograms}{
|
||||
|
||||
Note that for combination antibiograms, it is important to realise that susceptibility can be calculated in two ways, which can be set with the \code{only_all_tested} argument (default is \code{FALSE}). See this example for two antimicrobials, Drug A and Drug B, about how \code{\link[=antibiogram]{antibiogram()}} works to calculate the \%SI:
|
||||
|
||||
\if{html}{\out{<div class="sourceCode">}}\preformatted{--------------------------------------------------------------------
|
||||
only_all_tested = FALSE only_all_tested = TRUE
|
||||
----------------------- -----------------------
|
||||
Drug A Drug B include as include as include as include as
|
||||
numerator denominator numerator denominator
|
||||
-------- -------- ---------- ----------- ---------- -----------
|
||||
S or I S or I X X X X
|
||||
R S or I X X X X
|
||||
<NA> S or I X X - -
|
||||
S or I R X X X X
|
||||
R R - X - X
|
||||
<NA> R - - - -
|
||||
S or I <NA> X X - -
|
||||
R <NA> - - - -
|
||||
<NA> <NA> - - - -
|
||||
Drug A Drug B considered considered considered considered
|
||||
susceptible tested susceptible tested
|
||||
-------- -------- ----------- ---------- ----------- ----------
|
||||
S or I S or I X X X X
|
||||
R S or I X X X X
|
||||
<NA> S or I X X - -
|
||||
S or I R X X X X
|
||||
R R - X - X
|
||||
<NA> R - - - -
|
||||
S or I <NA> X X - -
|
||||
R <NA> - - - -
|
||||
<NA> <NA> - - - -
|
||||
--------------------------------------------------------------------
|
||||
}\if{html}{\out{</div>}}
|
||||
}
|
||||
@ -1852,7 +1910,7 @@ The outcome of \code{\link[=antibiogram]{antibiogram()}} can also be used direct
|
||||
You can also use functions from specific 'table reporting' packages to transform the output of \code{\link[=antibiogram]{antibiogram()}} to your needs, e.g. with \code{flextable::as_flextable()} or \code{gt::gt()}.
|
||||
}
|
||||
}
|
||||
\section{Why Use WISCA?}{
|
||||
\section{Explaining WISCA}{
|
||||
|
||||
|
||||
WISCA, as outlined by Bielicki \emph{et al.} (\doi{10.1093/jac/dkv397}), stands for Weighted-Incidence Syndromic Combination Antibiogram, which estimates the probability of adequate empirical antimicrobial regimen coverage for specific infection syndromes. This method leverages a Bayesian hierarchical logistic regression framework with random effects for pathogens and regimens, enabling robust estimates in the presence of sparse data.
|
||||
@ -3082,7 +3140,7 @@ This is based on:
|
||||
\item Vincent, R \emph{et al} (2013). \strong{MycoBank gearing up for new horizons.} IMA Fungus, 4(2), 371-9; \doi{10.5598/imafungus.2013.04.02.16}. Accessed from \url{https://www.mycobank.org} on June 24th, 2024.
|
||||
\item GBIF Secretariat (2023). GBIF Backbone Taxonomy. Checklist dataset \doi{10.15468/39omei}. Accessed from \url{https://www.gbif.org} on June 24th, 2024.
|
||||
\item Reimer, LC \emph{et al.} (2022). \strong{\emph{BacDive} in 2022: the knowledge base for standardized bacterial and archaeal data.} Nucleic Acids Res., 50(D1):D741-D74; \doi{10.1093/nar/gkab961}. Accessed from \url{https://bacdive.dsmz.de} on July 16th, 2024.
|
||||
\item Public Health Information Network Vocabulary Access and Distribution System (PHIN VADS). US Edition of SNOMED CT from 1 September 2020. Value Set Name 'Microorganism', OID 2.16.840.1.114222.4.11.1009 (v12). URL: \url{https://phinvads.cdc.gov}
|
||||
\item Public Health Information Network Vocabulary Access and Distribution System (PHIN VADS). US Edition of SNOMED CT from 1 September 2020. Value Set Name 'Microorganism', OID 2.16.840.1.114222.4.11.1009 (v12). URL: \url{https://www.cdc.gov/phin/php/phinvads}
|
||||
\item Bartlett A \emph{et al.} (2022). \strong{A comprehensive list of bacterial pathogens infecting humans} \emph{Microbiology} 168:001269; \doi{10.1099/mic.0.001269}
|
||||
}
|
||||
}
|
||||
@ -4155,18 +4213,18 @@ When using more than one variable for \code{...} (= combination therapy), use \c
|
||||
\if{html}{\out{<div class="sourceCode">}}\preformatted{--------------------------------------------------------------------
|
||||
only_all_tested = FALSE only_all_tested = TRUE
|
||||
----------------------- -----------------------
|
||||
Drug A Drug B include as include as include as include as
|
||||
numerator denominator numerator denominator
|
||||
-------- -------- ---------- ----------- ---------- -----------
|
||||
S or I S or I X X X X
|
||||
R S or I X X X X
|
||||
<NA> S or I X X - -
|
||||
S or I R X X X X
|
||||
R R - X - X
|
||||
<NA> R - - - -
|
||||
S or I <NA> X X - -
|
||||
R <NA> - - - -
|
||||
<NA> <NA> - - - -
|
||||
Drug A Drug B considered considered considered considered
|
||||
susceptible tested susceptible tested
|
||||
-------- -------- ----------- ---------- ----------- ----------
|
||||
S or I S or I X X X X
|
||||
R S or I X X X X
|
||||
<NA> S or I X X - -
|
||||
S or I R X X X X
|
||||
R R - X - X
|
||||
<NA> R - - - -
|
||||
S or I <NA> X X - -
|
||||
R <NA> - - - -
|
||||
<NA> <NA> - - - -
|
||||
--------------------------------------------------------------------
|
||||
}\if{html}{\out{</div>}}
|
||||
|
||||
@ -6441,7 +6499,7 @@ Furthermore, these sources were used for additional details:
|
||||
\item BacDive:\cr\cr
|
||||
Reimer, LC \emph{et al.} (2022). \strong{\emph{BacDive} in 2022: the knowledge base for standardized bacterial and archaeal data.} Nucleic Acids Res., 50(D1):D741-D74; \doi{10.1093/nar/gkab961}. Accessed from \url{https://bacdive.dsmz.de} on July 16th, 2024.
|
||||
\item Systematized Nomenclature of Medicine - Clinical Terms (SNOMED-CT):\cr\cr
|
||||
Public Health Information Network Vocabulary Access and Distribution System (PHIN VADS). US Edition of SNOMED CT from 1 September 2020. Value Set Name 'Microorganism', OID 2.16.840.1.114222.4.11.1009 (v12). Accessed from \url{https://phinvads.cdc.gov} on July 16th, 2024.
|
||||
Public Health Information Network Vocabulary Access and Distribution System (PHIN VADS). US Edition of SNOMED CT from 1 September 2020. Value Set Name 'Microorganism', OID 2.16.840.1.114222.4.11.1009 (v12). Accessed from \url{https://www.cdc.gov/phin/php/phinvads} on July 16th, 2024.
|
||||
\item Grimont \emph{et al.} (2007). Antigenic Formulae of the Salmonella Serovars, 9th Edition. WHO Collaborating Centre for Reference and Research on \emph{Salmonella} (WHOCC-SALM).
|
||||
\item Bartlett \emph{et al.} (2022). \strong{A comprehensive list of bacterial pathogens infecting humans} \emph{Microbiology} 168:001269; \doi{10.1099/mic.0.001269}
|
||||
}
|
||||
@ -6897,7 +6955,7 @@ This function uses \code{\link[=as.mo]{as.mo()}} internally, which uses an advan
|
||||
\item Vincent, R \emph{et al} (2013). \strong{MycoBank gearing up for new horizons.} IMA Fungus, 4(2), 371-9; \doi{10.5598/imafungus.2013.04.02.16}. Accessed from \url{https://www.mycobank.org} on June 24th, 2024.
|
||||
\item GBIF Secretariat (2023). GBIF Backbone Taxonomy. Checklist dataset \doi{10.15468/39omei}. Accessed from \url{https://www.gbif.org} on June 24th, 2024.
|
||||
\item Reimer, LC \emph{et al.} (2022). \strong{\emph{BacDive} in 2022: the knowledge base for standardized bacterial and archaeal data.} Nucleic Acids Res., 50(D1):D741-D74; \doi{10.1093/nar/gkab961}. Accessed from \url{https://bacdive.dsmz.de} on July 16th, 2024.
|
||||
\item Public Health Information Network Vocabulary Access and Distribution System (PHIN VADS). US Edition of SNOMED CT from 1 September 2020. Value Set Name 'Microorganism', OID 2.16.840.1.114222.4.11.1009 (v12). URL: \url{https://phinvads.cdc.gov}
|
||||
\item Public Health Information Network Vocabulary Access and Distribution System (PHIN VADS). US Edition of SNOMED CT from 1 September 2020. Value Set Name 'Microorganism', OID 2.16.840.1.114222.4.11.1009 (v12). URL: \url{https://www.cdc.gov/phin/php/phinvads}
|
||||
\item Bartlett A \emph{et al.} (2022). \strong{A comprehensive list of bacterial pathogens infecting humans} \emph{Microbiology} 168:001269; \doi{10.1099/mic.0.001269}
|
||||
}
|
||||
}
|
||||
@ -7603,6 +7661,8 @@ These functions can be used to calculate the (co-)resistance or susceptibility o
|
||||
\code{\link[=resistance]{resistance()}} should be used to calculate resistance, \code{\link[=susceptibility]{susceptibility()}} should be used to calculate susceptibility.\cr
|
||||
}
|
||||
\details{
|
||||
For a more automated and comprehensive analysis, consider using \code{\link[=antibiogram]{antibiogram()}} or \code{\link[=wisca]{wisca()}}, which streamline many aspects of susceptibility reporting and, importantly, also support WISCA. The functions described here offer a more hands-on, manual approach for greater customisation.
|
||||
|
||||
\strong{Remember that you should filter your data to let it contain only first isolates!} This is needed to exclude duplicates and to reduce selection bias. Use \code{\link[=first_isolate]{first_isolate()}} to determine them in your data set with one of the four available algorithms.
|
||||
|
||||
The function \code{\link[=resistance]{resistance()}} is equal to the function \code{\link[=proportion_R]{proportion_R()}}. The function \code{\link[=susceptibility]{susceptibility()}} is equal to the function \code{\link[=proportion_SI]{proportion_SI()}}. Since AMR v3.0, \code{\link[=proportion_SI]{proportion_SI()}} and \code{\link[=proportion_I]{proportion_I()}} include dose-dependent susceptibility ('SDD').
|
||||
@ -7620,18 +7680,18 @@ When using more than one variable for \code{...} (= combination therapy), use \c
|
||||
\if{html}{\out{<div class="sourceCode">}}\preformatted{--------------------------------------------------------------------
|
||||
only_all_tested = FALSE only_all_tested = TRUE
|
||||
----------------------- -----------------------
|
||||
Drug A Drug B include as include as include as include as
|
||||
numerator denominator numerator denominator
|
||||
-------- -------- ---------- ----------- ---------- -----------
|
||||
S or I S or I X X X X
|
||||
R S or I X X X X
|
||||
<NA> S or I X X - -
|
||||
S or I R X X X X
|
||||
R R - X - X
|
||||
<NA> R - - - -
|
||||
S or I <NA> X X - -
|
||||
R <NA> - - - -
|
||||
<NA> <NA> - - - -
|
||||
Drug A Drug B considered considered considered considered
|
||||
susceptible tested susceptible tested
|
||||
-------- -------- ----------- ---------- ----------- ----------
|
||||
S or I S or I X X X X
|
||||
R S or I X X X X
|
||||
<NA> S or I X X - -
|
||||
S or I R X X X X
|
||||
R R - X - X
|
||||
<NA> R - - - -
|
||||
S or I <NA> X X - -
|
||||
R <NA> - - - -
|
||||
<NA> <NA> - - - -
|
||||
--------------------------------------------------------------------
|
||||
}\if{html}{\out{</div>}}
|
||||
|
@ -3,6 +3,7 @@
|
||||
\name{antibiogram}
|
||||
\alias{antibiogram}
|
||||
\alias{wisca}
|
||||
\alias{retrieve_wisca_parameters}
|
||||
\alias{plot.antibiogram}
|
||||
\alias{autoplot.antibiogram}
|
||||
\alias{knit_print.antibiogram}
|
||||
@ -19,21 +20,23 @@
|
||||
\usage{
|
||||
antibiogram(x, antibiotics = where(is.sir), mo_transform = "shortname",
|
||||
ab_transform = "name", syndromic_group = NULL, add_total_n = FALSE,
|
||||
only_all_tested = FALSE, digits = 0,
|
||||
only_all_tested = FALSE, digits = ifelse(wisca, 1, 0),
|
||||
formatting_type = getOption("AMR_antibiogram_formatting_type",
|
||||
ifelse(wisca, 18, 10)), col_mo = NULL, language = get_AMR_locale(),
|
||||
ifelse(wisca, 14, 10)), col_mo = NULL, language = get_AMR_locale(),
|
||||
minimum = 30, combine_SI = TRUE, sep = " + ", wisca = FALSE,
|
||||
simulations = 1000, conf_interval = 0.95, interval_side = "two-tailed",
|
||||
info = interactive())
|
||||
|
||||
wisca(x, antibiotics = where(is.sir), mo_transform = "shortname",
|
||||
ab_transform = "name", syndromic_group = NULL, add_total_n = FALSE,
|
||||
only_all_tested = FALSE, digits = 0,
|
||||
formatting_type = getOption("AMR_antibiogram_formatting_type", 18),
|
||||
only_all_tested = FALSE, digits = 1,
|
||||
formatting_type = getOption("AMR_antibiogram_formatting_type", 14),
|
||||
col_mo = NULL, language = get_AMR_locale(), minimum = 30,
|
||||
combine_SI = TRUE, sep = " + ", simulations = 1000,
|
||||
info = interactive())
|
||||
|
||||
retrieve_wisca_parameters(wisca_model, ...)
|
||||
|
||||
\method{plot}{antibiogram}(x, ...)
|
||||
|
||||
\method{autoplot}{antibiogram}(object, ...)
|
||||
@ -44,9 +47,9 @@ wisca(x, antibiotics = where(is.sir), mo_transform = "shortname",
|
||||
\arguments{
|
||||
\item{x}{a \link{data.frame} containing at least a column with microorganisms and columns with antimicrobial results (class 'sir', see \code{\link[=as.sir]{as.sir()}})}
|
||||
|
||||
\item{antibiotics}{vector of any antimicrobial name or code (will be evaluated with \code{\link[=as.ab]{as.ab()}}, column name of \code{x}, or (any combinations of) \link[=antimicrobial_class_selectors]{antimicrobial selectors} such as \code{\link[=aminoglycosides]{aminoglycosides()}} or \code{\link[=carbapenems]{carbapenems()}}. For combination antibiograms, this can also be set to values separated with \code{"+"}, such as "TZP+TOB" or "cipro + genta", given that columns resembling such antimicrobials exist in \code{x}. See \emph{Examples}.}
|
||||
\item{antibiotics}{vector of any antimicrobial name or code (will be evaluated with \code{\link[=as.ab]{as.ab()}}, column name of \code{x}, or (any combinations of) \link[=antimicrobial_class_selectors]{antimicrobial selectors} such as \code{\link[=aminoglycosides]{aminoglycosides()}} or \code{\link[=carbapenems]{carbapenems()}}. For combination antibiograms, this can also be set to values separated with \code{"+"}, such as \code{"TZP+TOB"} or \code{"cipro + genta"}, given that columns resembling such antimicrobials exist in \code{x}. See \emph{Examples}.}
|
||||
|
||||
\item{mo_transform}{a character to transform microorganism input - must be \code{"name"}, \code{"shortname"} (default), \code{"gramstain"}, or one of the column names of the \link{microorganisms} data set: "mo", "fullname", "status", "kingdom", "phylum", "class", "order", "family", "genus", "species", "subspecies", "rank", "ref", "oxygen_tolerance", "source", "lpsn", "lpsn_parent", "lpsn_renamed_to", "mycobank", "mycobank_parent", "mycobank_renamed_to", "gbif", "gbif_parent", "gbif_renamed_to", "prevalence", or "snomed". Can also be \code{NULL} to not transform the input.}
|
||||
\item{mo_transform}{a character to transform microorganism input - must be \code{"name"}, \code{"shortname"} (default), \code{"gramstain"}, or one of the column names of the \link{microorganisms} data set: "mo", "fullname", "status", "kingdom", "phylum", "class", "order", "family", "genus", "species", "subspecies", "rank", "ref", "oxygen_tolerance", "source", "lpsn", "lpsn_parent", "lpsn_renamed_to", "mycobank", "mycobank_parent", "mycobank_renamed_to", "gbif", "gbif_parent", "gbif_renamed_to", "prevalence", or "snomed". Can also be \code{NULL} to not transform the input or \code{NA} to consider all microorganisms 'unknown'.}
|
||||
|
||||
\item{ab_transform}{a character to transform antimicrobial input - must be one of the column names of the \link{antibiotics} data set (defaults to \code{"name"}): "ab", "cid", "name", "group", "atc", "atc_group1", "atc_group2", "abbreviations", "synonyms", "oral_ddd", "oral_units", "iv_ddd", "iv_units", or "loinc". Can also be \code{NULL} to not transform the input.}
|
||||
|
||||
@ -56,7 +59,7 @@ wisca(x, antibiotics = where(is.sir), mo_transform = "shortname",
|
||||
|
||||
\item{only_all_tested}{(for combination antibiograms): a \link{logical} to indicate that isolates must be tested for all antimicrobials, see \emph{Details}}
|
||||
|
||||
\item{digits}{number of digits to use for rounding the susceptibility percentage}
|
||||
\item{digits}{number of digits to use for rounding the antimicrobial coverage, defaults to 1 for WISCA and 0 otherwise}
|
||||
|
||||
\item{formatting_type}{numeric value (1–22 for WISCA, 1-12 for non-WISCA) indicating how the 'cells' of the antibiogram table should be formatted. See \emph{Details} > \emph{Formatting Type} for a list of options.}
|
||||
|
||||
@ -70,9 +73,9 @@ wisca(x, antibiotics = where(is.sir), mo_transform = "shortname",
|
||||
|
||||
\item{sep}{a separating character for antimicrobial columns in combination antibiograms}
|
||||
|
||||
\item{wisca}{a \link{logical} to indicate whether a Weighted-Incidence Syndromic Combination Antibiogram (WISCA) must be generated (default is \code{FALSE}). This will use a Bayesian hierarchical model to estimate regimen coverage probabilities using Montecarlo simulations. Set \code{simulations} to adjust.}
|
||||
\item{wisca}{a \link{logical} to indicate whether a Weighted-Incidence Syndromic Combination Antibiogram (WISCA) must be generated (default is \code{FALSE}). This will use a Bayesian decision model to estimate regimen coverage probabilities using \href{https://en.wikipedia.org/wiki/Monte_Carlo_method}{Monte Carlo simulations}. Set \code{simulations} to adjust.}
|
||||
|
||||
\item{simulations}{(for WISCA) a numerical value to set the number of Montecarlo simulations}
|
||||
\item{simulations}{(for WISCA) a numerical value to set the number of Monte Carlo simulations}
|
||||
|
||||
\item{conf_interval}{(for WISCA) a numerical value to set confidence interval (default is \code{0.95})}
|
||||
|
||||
@ -80,6 +83,8 @@ wisca(x, antibiotics = where(is.sir), mo_transform = "shortname",
|
||||
|
||||
\item{info}{a \link{logical} to indicate info should be printed - the default is \code{TRUE} only in interactive mode}
|
||||
|
||||
\item{wisca_model}{the outcome of \code{\link[=wisca]{wisca()}} or \link{antibiogram(..., wisca = TRUE)}}
|
||||
|
||||
\item{...}{when used in \link[knitr:kable]{R Markdown or Quarto}: arguments passed on to \code{\link[knitr:kable]{knitr::kable()}} (otherwise, has no use)}
|
||||
|
||||
\item{object}{an \code{\link[=antibiogram]{antibiogram()}} object}
|
||||
@ -103,7 +108,7 @@ For estimating antimicrobial coverage, especially when creating a WISCA, the out
|
||||
The numeric values of an antibiogram are stored in a long format as the \link[=attributes]{attribute} \code{long_numeric}. You can retrieve them using \code{attributes(x)$long_numeric}, where \code{x} is the outcome of \code{\link[=antibiogram]{antibiogram()}} or \code{\link[=wisca]{wisca()}}. This is ideal for e.g. advanced plotting.
|
||||
\subsection{Formatting Type}{
|
||||
|
||||
The formatting of the 'cells' of the table can be set with the argument \code{formatting_type}. In these examples, \code{5} is the susceptibility percentage (for WISCA: \code{4-6} indicates the confidence level), \code{15} the numerator, and \code{300} the denominator:
|
||||
The formatting of the 'cells' of the table can be set with the argument \code{formatting_type}. In these examples, \code{5} is the antimicrobial coverage (for WISCA: \code{4-6} indicates the confidence level), \code{15} the numerator, and \code{300} the denominator:
|
||||
\enumerate{
|
||||
\item 5
|
||||
\item 15
|
||||
@ -120,18 +125,18 @@ The formatting of the 'cells' of the table can be set with the argument \code{fo
|
||||
|
||||
Additional options for WISCA (using \code{antibiogram(..., wisca = TRUE)} or \code{wisca()}):
|
||||
\item 5 (4-6)
|
||||
\item 5\% (4-6\%)
|
||||
\item 5\% (4-6\%) - \strong{default for WISCA}
|
||||
\item 5 (4-6,300)
|
||||
\item 5\% (4-6\%,300)
|
||||
\item 5 (4-6,N=300)
|
||||
\item 5\% (4-6\%,N=300) - \strong{default for WISCA}
|
||||
\item 5\% (4-6\%,N=300)
|
||||
\item 5 (4-6,15/300)
|
||||
\item 5\% (4-6\%,15/300)
|
||||
\item 5 (4-6,N=15/300)
|
||||
\item 5\% (4-6\%,N=15/300)
|
||||
}
|
||||
|
||||
The default is \code{18} for WISCA and \code{10} for non-WISCA, which can be set globally with the package option \code{\link[=AMR-options]{AMR_antibiogram_formatting_type}}, e.g. \code{options(AMR_antibiogram_formatting_type = 5)}.
|
||||
The default is \code{14} for WISCA and \code{10} for non-WISCA, which can be set globally with the package option \code{\link[=AMR-options]{AMR_antibiogram_formatting_type}}, e.g. \code{options(AMR_antibiogram_formatting_type = 5)}. Do note that for WISCA, the numerator and denominator are less useful to report, since these are included in the Bayesian model and apparent from the susceptibility and its confidence level.
|
||||
|
||||
Set \code{digits} (defaults to \code{0}) to alter the rounding of the susceptibility percentages.
|
||||
}
|
||||
@ -140,7 +145,7 @@ Set \code{digits} (defaults to \code{0}) to alter the rounding of the susceptibi
|
||||
|
||||
There are various antibiogram types, as summarised by Klinker \emph{et al.} (2021, \doi{10.1177/20499361211011373}), and they are all supported by \code{\link[=antibiogram]{antibiogram()}}.
|
||||
|
||||
\strong{Use WISCA whenever possible}, since it provides more precise coverage estimates by accounting for pathogen incidence and antimicrobial susceptibility, as has been shown by Bielicki \emph{et al.} (2020, \doi{10.1001.jamanetworkopen.2019.21124}). See the section \emph{Why Use WISCA?} on this page.
|
||||
\strong{Use WISCA whenever possible}, since it provides more precise coverage estimates by accounting for pathogen incidence and antimicrobial susceptibility, as has been shown by Bielicki \emph{et al.} (2020, \doi{10.1001.jamanetworkopen.2019.21124}). See the section \emph{Explaining WISCA} on this page.
|
||||
\enumerate{
|
||||
\item \strong{Traditional Antibiogram}
|
||||
|
||||
@ -172,7 +177,7 @@ Code example:
|
||||
}\if{html}{\out{</div>}}
|
||||
\item \strong{Weighted-Incidence Syndromic Combination Antibiogram (WISCA)}
|
||||
|
||||
WISCA can be applied to any antibiogram, see the section \emph{Why Use WISCA?} on this page for more information.
|
||||
WISCA can be applied to any antibiogram, see the section \emph{Explaining WISCA} on this page for more information.
|
||||
|
||||
Code example:
|
||||
|
||||
@ -187,36 +192,88 @@ wisca(your_data,
|
||||
|
||||
WISCA uses a sophisticated Bayesian decision model to combine both local and pooled antimicrobial resistance data. This approach not only evaluates local patterns but can also draw on multi-centre datasets to improve regimen accuracy, even in low-incidence infections like paediatric bloodstream infections (BSIs).
|
||||
}
|
||||
}
|
||||
|
||||
Grouped \link[tibble:tibble]{tibbles} can also be used to calculate susceptibilities over various groups.
|
||||
\subsection{Grouped tibbles}{
|
||||
|
||||
For any type of antibiogram, grouped \link[tibble:tibble]{tibbles} can also be used to calculate susceptibilities over various groups.
|
||||
|
||||
Code example:
|
||||
|
||||
\if{html}{\out{<div class="sourceCode r">}}\preformatted{your_data \%>\%
|
||||
\if{html}{\out{<div class="sourceCode r">}}\preformatted{library(dplyr)
|
||||
your_data \%>\%
|
||||
group_by(has_sepsis, is_neonate, sex) \%>\%
|
||||
wisca(antibiotics = c("TZP", "TZP+TOB", "TZP+GEN"))
|
||||
}\if{html}{\out{</div>}}
|
||||
}
|
||||
|
||||
\subsection{Inclusion in Combination Antibiogram and Syndromic Antibiogram}{
|
||||
\subsection{Stepped Approach for Clinical Insight}{
|
||||
|
||||
Note that for types 2 and 3 (Combination Antibiogram and Syndromic Antibiogram), it is important to realise that susceptibility can be calculated in two ways, which can be set with the \code{only_all_tested} argument (default is \code{FALSE}). See this example for two antimicrobials, Drug A and Drug B, about how \code{\link[=antibiogram]{antibiogram()}} works to calculate the \%SI:
|
||||
In clinical practice, antimicrobial coverage decisions evolve as more microbiological data becomes available. This theoretical stepped approach ensures empirical coverage can continuously assessed to improve patient outcomes:
|
||||
\enumerate{
|
||||
\item \strong{Initial Empirical Therapy (Admission / Pre-Culture Data)}
|
||||
|
||||
At admission, no pathogen information is available.
|
||||
\itemize{
|
||||
\item Action: broad-spectrum coverage is based on local resistance patterns and syndromic antibiograms.
|
||||
\item Code example:
|
||||
|
||||
\if{html}{\out{<div class="sourceCode r">}}\preformatted{antibiogram(your_data,
|
||||
antibiotics = selected_regimens,
|
||||
wisca = TRUE,
|
||||
mo_transform = NA) # all pathogens set to `NA`
|
||||
}\if{html}{\out{</div>}}
|
||||
}
|
||||
\item \strong{Refinement with Gram Stain Results}
|
||||
|
||||
When a blood culture becomes positive, the Gram stain provides an initial and crucial first stratification (Gram-positive vs. Gram-negative).
|
||||
\itemize{
|
||||
\item Action: narrow coverage based on Gram stain-specific resistance patterns.
|
||||
\item Code example:
|
||||
|
||||
\if{html}{\out{<div class="sourceCode r">}}\preformatted{antibiogram(your_data,
|
||||
antibiotics = selected_regimens,
|
||||
wisca = TRUE,
|
||||
mo_transform = "gramstain") # all pathogens set to Gram-pos/Gram-neg
|
||||
}\if{html}{\out{</div>}}
|
||||
}
|
||||
\item \strong{Definitive Therapy Based on Species Identification}
|
||||
|
||||
After cultivation of the pathogen, full pathogen identification allows precise targeting of therapy.
|
||||
\itemize{
|
||||
\item Action: adjust treatment to pathogen-specific antibiograms, minimizing resistance risks.
|
||||
\item Code example:
|
||||
|
||||
\if{html}{\out{<div class="sourceCode r">}}\preformatted{antibiogram(your_data,
|
||||
antibiotics = selected_regimens,
|
||||
wisca = TRUE,
|
||||
mo_transform = "shortname") # all pathogens set to 'G. species', e.g., E. coli
|
||||
}\if{html}{\out{</div>}}
|
||||
}
|
||||
}
|
||||
|
||||
By structuring antibiograms around this stepped approach, clinicians can make data-driven adjustments at each stage, ensuring optimal empirical and targeted therapy while reducing unnecessary broad-spectrum antimicrobial use.
|
||||
}
|
||||
|
||||
\subsection{Inclusion in Combination Antibiograms}{
|
||||
|
||||
Note that for combination antibiograms, it is important to realise that susceptibility can be calculated in two ways, which can be set with the \code{only_all_tested} argument (default is \code{FALSE}). See this example for two antimicrobials, Drug A and Drug B, about how \code{\link[=antibiogram]{antibiogram()}} works to calculate the \%SI:
|
||||
|
||||
\if{html}{\out{<div class="sourceCode">}}\preformatted{--------------------------------------------------------------------
|
||||
only_all_tested = FALSE only_all_tested = TRUE
|
||||
----------------------- -----------------------
|
||||
Drug A Drug B include as include as include as include as
|
||||
numerator denominator numerator denominator
|
||||
-------- -------- ---------- ----------- ---------- -----------
|
||||
S or I S or I X X X X
|
||||
R S or I X X X X
|
||||
<NA> S or I X X - -
|
||||
S or I R X X X X
|
||||
R R - X - X
|
||||
<NA> R - - - -
|
||||
S or I <NA> X X - -
|
||||
R <NA> - - - -
|
||||
<NA> <NA> - - - -
|
||||
Drug A Drug B considered considered considered considered
|
||||
susceptible tested susceptible tested
|
||||
-------- -------- ----------- ---------- ----------- ----------
|
||||
S or I S or I X X X X
|
||||
R S or I X X X X
|
||||
<NA> S or I X X - -
|
||||
S or I R X X X X
|
||||
R R - X - X
|
||||
<NA> R - - - -
|
||||
S or I <NA> X X - -
|
||||
R <NA> - - - -
|
||||
<NA> <NA> - - - -
|
||||
--------------------------------------------------------------------
|
||||
}\if{html}{\out{</div>}}
|
||||
}
|
||||
@ -230,7 +287,7 @@ The outcome of \code{\link[=antibiogram]{antibiogram()}} can also be used direct
|
||||
You can also use functions from specific 'table reporting' packages to transform the output of \code{\link[=antibiogram]{antibiogram()}} to your needs, e.g. with \code{flextable::as_flextable()} or \code{gt::gt()}.
|
||||
}
|
||||
}
|
||||
\section{Why Use WISCA?}{
|
||||
\section{Explaining WISCA}{
|
||||
|
||||
|
||||
WISCA, as outlined by Bielicki \emph{et al.} (\doi{10.1093/jac/dkv397}), stands for Weighted-Incidence Syndromic Combination Antibiogram, which estimates the probability of adequate empirical antimicrobial regimen coverage for specific infection syndromes. This method leverages a Bayesian hierarchical logistic regression framework with random effects for pathogens and regimens, enabling robust estimates in the presence of sparse data.
|
||||
|
@ -160,7 +160,7 @@ This is based on:
|
||||
\item Vincent, R \emph{et al} (2013). \strong{MycoBank gearing up for new horizons.} IMA Fungus, 4(2), 371-9; \doi{10.5598/imafungus.2013.04.02.16}. Accessed from \url{https://www.mycobank.org} on June 24th, 2024.
|
||||
\item GBIF Secretariat (2023). GBIF Backbone Taxonomy. Checklist dataset \doi{10.15468/39omei}. Accessed from \url{https://www.gbif.org} on June 24th, 2024.
|
||||
\item Reimer, LC \emph{et al.} (2022). \strong{\emph{BacDive} in 2022: the knowledge base for standardized bacterial and archaeal data.} Nucleic Acids Res., 50(D1):D741-D74; \doi{10.1093/nar/gkab961}. Accessed from \url{https://bacdive.dsmz.de} on July 16th, 2024.
|
||||
\item Public Health Information Network Vocabulary Access and Distribution System (PHIN VADS). US Edition of SNOMED CT from 1 September 2020. Value Set Name 'Microorganism', OID 2.16.840.1.114222.4.11.1009 (v12). URL: \url{https://phinvads.cdc.gov}
|
||||
\item Public Health Information Network Vocabulary Access and Distribution System (PHIN VADS). US Edition of SNOMED CT from 1 September 2020. Value Set Name 'Microorganism', OID 2.16.840.1.114222.4.11.1009 (v12). URL: \url{https://www.cdc.gov/phin/php/phinvads}
|
||||
\item Bartlett A \emph{et al.} (2022). \strong{A comprehensive list of bacterial pathogens infecting humans} \emph{Microbiology} 168:001269; \doi{10.1099/mic.0.001269}
|
||||
}
|
||||
}
|
||||
|
24
man/count.Rd
24
man/count.Rd
@ -90,18 +90,18 @@ When using more than one variable for \code{...} (= combination therapy), use \c
|
||||
\if{html}{\out{<div class="sourceCode">}}\preformatted{--------------------------------------------------------------------
|
||||
only_all_tested = FALSE only_all_tested = TRUE
|
||||
----------------------- -----------------------
|
||||
Drug A Drug B include as include as include as include as
|
||||
numerator denominator numerator denominator
|
||||
-------- -------- ---------- ----------- ---------- -----------
|
||||
S or I S or I X X X X
|
||||
R S or I X X X X
|
||||
<NA> S or I X X - -
|
||||
S or I R X X X X
|
||||
R R - X - X
|
||||
<NA> R - - - -
|
||||
S or I <NA> X X - -
|
||||
R <NA> - - - -
|
||||
<NA> <NA> - - - -
|
||||
Drug A Drug B considered considered considered considered
|
||||
susceptible tested susceptible tested
|
||||
-------- -------- ----------- ---------- ----------- ----------
|
||||
S or I S or I X X X X
|
||||
R S or I X X X X
|
||||
<NA> S or I X X - -
|
||||
S or I R X X X X
|
||||
R R - X - X
|
||||
<NA> R - - - -
|
||||
S or I <NA> X X - -
|
||||
R <NA> - - - -
|
||||
<NA> <NA> - - - -
|
||||
--------------------------------------------------------------------
|
||||
}\if{html}{\out{</div>}}
|
||||
|
||||
|
@ -44,7 +44,7 @@ Furthermore, these sources were used for additional details:
|
||||
\item BacDive:\cr\cr
|
||||
Reimer, LC \emph{et al.} (2022). \strong{\emph{BacDive} in 2022: the knowledge base for standardized bacterial and archaeal data.} Nucleic Acids Res., 50(D1):D741-D74; \doi{10.1093/nar/gkab961}. Accessed from \url{https://bacdive.dsmz.de} on July 16th, 2024.
|
||||
\item Systematized Nomenclature of Medicine - Clinical Terms (SNOMED-CT):\cr\cr
|
||||
Public Health Information Network Vocabulary Access and Distribution System (PHIN VADS). US Edition of SNOMED CT from 1 September 2020. Value Set Name 'Microorganism', OID 2.16.840.1.114222.4.11.1009 (v12). Accessed from \url{https://phinvads.cdc.gov} on July 16th, 2024.
|
||||
Public Health Information Network Vocabulary Access and Distribution System (PHIN VADS). US Edition of SNOMED CT from 1 September 2020. Value Set Name 'Microorganism', OID 2.16.840.1.114222.4.11.1009 (v12). Accessed from \url{https://www.cdc.gov/phin/php/phinvads} on July 16th, 2024.
|
||||
\item Grimont \emph{et al.} (2007). Antigenic Formulae of the Salmonella Serovars, 9th Edition. WHO Collaborating Centre for Reference and Research on \emph{Salmonella} (WHOCC-SALM).
|
||||
\item Bartlett \emph{et al.} (2022). \strong{A comprehensive list of bacterial pathogens infecting humans} \emph{Microbiology} 168:001269; \doi{10.1099/mic.0.001269}
|
||||
}
|
||||
|
@ -222,7 +222,7 @@ This function uses \code{\link[=as.mo]{as.mo()}} internally, which uses an advan
|
||||
\item Vincent, R \emph{et al} (2013). \strong{MycoBank gearing up for new horizons.} IMA Fungus, 4(2), 371-9; \doi{10.5598/imafungus.2013.04.02.16}. Accessed from \url{https://www.mycobank.org} on June 24th, 2024.
|
||||
\item GBIF Secretariat (2023). GBIF Backbone Taxonomy. Checklist dataset \doi{10.15468/39omei}. Accessed from \url{https://www.gbif.org} on June 24th, 2024.
|
||||
\item Reimer, LC \emph{et al.} (2022). \strong{\emph{BacDive} in 2022: the knowledge base for standardized bacterial and archaeal data.} Nucleic Acids Res., 50(D1):D741-D74; \doi{10.1093/nar/gkab961}. Accessed from \url{https://bacdive.dsmz.de} on July 16th, 2024.
|
||||
\item Public Health Information Network Vocabulary Access and Distribution System (PHIN VADS). US Edition of SNOMED CT from 1 September 2020. Value Set Name 'Microorganism', OID 2.16.840.1.114222.4.11.1009 (v12). URL: \url{https://phinvads.cdc.gov}
|
||||
\item Public Health Information Network Vocabulary Access and Distribution System (PHIN VADS). US Edition of SNOMED CT from 1 September 2020. Value Set Name 'Microorganism', OID 2.16.840.1.114222.4.11.1009 (v12). URL: \url{https://www.cdc.gov/phin/php/phinvads}
|
||||
\item Bartlett A \emph{et al.} (2022). \strong{A comprehensive list of bacterial pathogens infecting humans} \emph{Microbiology} 168:001269; \doi{10.1099/mic.0.001269}
|
||||
}
|
||||
}
|
||||
|
@ -85,6 +85,8 @@ These functions can be used to calculate the (co-)resistance or susceptibility o
|
||||
\code{\link[=resistance]{resistance()}} should be used to calculate resistance, \code{\link[=susceptibility]{susceptibility()}} should be used to calculate susceptibility.\cr
|
||||
}
|
||||
\details{
|
||||
For a more automated and comprehensive analysis, consider using \code{\link[=antibiogram]{antibiogram()}} or \code{\link[=wisca]{wisca()}}, which streamline many aspects of susceptibility reporting and, importantly, also support WISCA. The functions described here offer a more hands-on, manual approach for greater customisation.
|
||||
|
||||
\strong{Remember that you should filter your data to let it contain only first isolates!} This is needed to exclude duplicates and to reduce selection bias. Use \code{\link[=first_isolate]{first_isolate()}} to determine them in your data set with one of the four available algorithms.
|
||||
|
||||
The function \code{\link[=resistance]{resistance()}} is equal to the function \code{\link[=proportion_R]{proportion_R()}}. The function \code{\link[=susceptibility]{susceptibility()}} is equal to the function \code{\link[=proportion_SI]{proportion_SI()}}. Since AMR v3.0, \code{\link[=proportion_SI]{proportion_SI()}} and \code{\link[=proportion_I]{proportion_I()}} include dose-dependent susceptibility ('SDD').
|
||||
@ -102,18 +104,18 @@ When using more than one variable for \code{...} (= combination therapy), use \c
|
||||
\if{html}{\out{<div class="sourceCode">}}\preformatted{--------------------------------------------------------------------
|
||||
only_all_tested = FALSE only_all_tested = TRUE
|
||||
----------------------- -----------------------
|
||||
Drug A Drug B include as include as include as include as
|
||||
numerator denominator numerator denominator
|
||||
-------- -------- ---------- ----------- ---------- -----------
|
||||
S or I S or I X X X X
|
||||
R S or I X X X X
|
||||
<NA> S or I X X - -
|
||||
S or I R X X X X
|
||||
R R - X - X
|
||||
<NA> R - - - -
|
||||
S or I <NA> X X - -
|
||||
R <NA> - - - -
|
||||
<NA> <NA> - - - -
|
||||
Drug A Drug B considered considered considered considered
|
||||
susceptible tested susceptible tested
|
||||
-------- -------- ----------- ---------- ----------- ----------
|
||||
S or I S or I X X X X
|
||||
R S or I X X X X
|
||||
<NA> S or I X X - -
|
||||
S or I R X X X X
|
||||
R R - X - X
|
||||
<NA> R - - - -
|
||||
S or I <NA> X X - -
|
||||
R <NA> - - - -
|
||||
<NA> <NA> - - - -
|
||||
--------------------------------------------------------------------
|
||||
}\if{html}{\out{</div>}}
|
||||
|
||||
|
@ -118,7 +118,7 @@ $(document).ready(function() {
|
||||
x = x.replace("Christian", "Dr. Christian");
|
||||
x = x.replace("Corinna", "Dr. Corinna");
|
||||
x = x.replace("Dennis", "Dr. Dennis");
|
||||
x = x.replace("Gwen", "Dr. Gwen");
|
||||
x = x.replace("Gwen", "Prof. Gwen");
|
||||
x = x.replace("Jason", "Dr. Jason");
|
||||
x = x.replace("Javier", "Prof. Javier");
|
||||
x = x.replace("Jonas", "Dr. Jonas");
|
||||
|
@ -141,7 +141,11 @@ call_functions <- c(
|
||||
|
||||
import_functions <- c(import_functions, call_functions)
|
||||
|
||||
suggests <- strsplit(utils::packageDescription(pkg = ".", lib.loc = ".", fields = "Suggests"), "[,\n ]+")[[1]]
|
||||
suggests <- tryCatch(strsplit(utils::packageDescription(pkg = ".", lib.loc = ".", fields = "Suggests"), "[,\n ]+")[[1]],
|
||||
error = function(e) {
|
||||
print(list.files())
|
||||
return(import_functions)
|
||||
})
|
||||
for (i in seq_len(length(import_functions))) {
|
||||
fn <- names(import_functions)[i]
|
||||
pkg <- unname(import_functions[i])
|
||||
|
Loading…
Reference in New Issue
Block a user