mirror of
https://github.com/msberends/AMR.git
synced 2025-01-30 17:44:36 +01:00
(v2.1.1.9133) update math formulae
This commit is contained in:
parent
9520977a10
commit
2561494e06
@ -63,10 +63,10 @@ jobs:
|
|||||||
- {os: ubuntu-latest, r: 'release', allowfail: false}
|
- {os: ubuntu-latest, r: 'release', allowfail: false}
|
||||||
|
|
||||||
# older versions (see also check-old-tinytest.yaml for even older versions):
|
# older versions (see also check-old-tinytest.yaml for even older versions):
|
||||||
- {os: ubuntu-latest, r: 'oldrel', allowfail: false}
|
|
||||||
- {os: ubuntu-latest, r: 'oldrel-1', allowfail: false}
|
- {os: ubuntu-latest, r: 'oldrel-1', allowfail: false}
|
||||||
- {os: ubuntu-latest, r: 'oldrel-2', allowfail: false}
|
- {os: ubuntu-latest, r: 'oldrel-2', allowfail: false}
|
||||||
- {os: ubuntu-latest, r: 'oldrel-3', allowfail: false}
|
- {os: ubuntu-latest, r: 'oldrel-3', allowfail: false}
|
||||||
|
- {os: ubuntu-latest, r: 'oldrel-4', allowfail: false}
|
||||||
|
|
||||||
env:
|
env:
|
||||||
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
@ -21,7 +21,6 @@ utils = importr('utils')
|
|||||||
base.options(warn = -1)
|
base.options(warn = -1)
|
||||||
|
|
||||||
# Override R library paths globally for the session
|
# Override R library paths globally for the session
|
||||||
robjects.r(f'.Library <- "{r_lib_path}"') # Replace default library
|
|
||||||
robjects.r(f'.Library.site <- "{r_lib_path}"') # Replace site-specific library
|
robjects.r(f'.Library.site <- "{r_lib_path}"') # Replace site-specific library
|
||||||
base._libPaths(r_lib_path) # Override .libPaths() as well
|
base._libPaths(r_lib_path) # Override .libPaths() as well
|
||||||
|
|
||||||
|
Binary file not shown.
BIN
PythonPackage/AMR/dist/amr-2.1.1.9133.tar.gz
vendored
BIN
PythonPackage/AMR/dist/amr-2.1.1.9133.tar.gz
vendored
Binary file not shown.
@ -195,48 +195,26 @@
|
|||||||
#' 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()`.
|
#' 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 Why Use WISCA?:
|
||||||
#' WISCA, as outlined by Barbieri *et al.* (\doi{10.1186/s13756-021-00939-2}), stands for
|
#'
|
||||||
#' Weighted-Incidence Syndromic Combination Antibiogram, which estimates the probability
|
#' WISCA, as outlined by Barbieri *et al.* (\doi{10.1186/s13756-021-00939-2}), 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.
|
||||||
#' 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.
|
|
||||||
#'
|
#'
|
||||||
#' The Bayesian model assumes conjugate priors for parameter estimation. For example, the
|
#' The Bayesian model assumes conjugate priors for parameter estimation. For example, the coverage probability \eqn{\theta} for a given antimicrobial regimen is modelled using a Beta distribution as a prior:
|
||||||
#' coverage probability \ifelse{latex}{\deqn{$theta$}}{$theta$} for a given antimicrobial regimen
|
|
||||||
#' is modeled using a Beta distribution as a prior:
|
|
||||||
#'
|
#'
|
||||||
#' \ifelse{latex}{\deqn{$theta$ \sim \text{Beta}($alpha$_0, $beta$_0)}}{
|
#' \deqn{\theta \sim \text{Beta}(\alpha_0, \beta_0)}
|
||||||
#' \ifelse{html}{\figure{beta_prior.png}{options: width="300" alt="Beta prior"}}{$theta$ ~ Beta($alpha$_0, $beta$_0)}}
|
|
||||||
#'
|
#'
|
||||||
#' where \eqn{$alpha$_0} and \eqn{$beta$_0} represent prior successes and failures, respectively,
|
#' where \eqn{\alpha_0} and \eqn{\beta_0} represent prior successes and failures, respectively, informed by expert knowledge or weakly informative priors (e.g., \eqn{\alpha_0 = 1, \beta_0 = 1}). The likelihood function is constructed based on observed data, where the number of covered cases for a regimen follows a binomial distribution:
|
||||||
#' informed by expert knowledge or weakly informative priors (e.g., \eqn{$alpha$_0 = 1, $beta$_0 = 1}).
|
|
||||||
#'
|
|
||||||
#' The likelihood function is constructed based on observed data, where the number of covered
|
|
||||||
#' cases for a regimen follows a binomial distribution:
|
|
||||||
#'
|
#'
|
||||||
#' \ifelse{latex}{\deqn{y \sim \text{Binomial}(n, $theta$)}}{
|
#' \deqn{y \sim \text{Binomial}(n, \theta)}
|
||||||
#' \ifelse{html}{\figure{binomial_likelihood.png}{options: width="300" alt="Binomial likelihood"}}{y ~ Binomial(n, $theta$)}}
|
|
||||||
#'
|
#'
|
||||||
#' Posterior parameter estimates are obtained by combining the prior and likelihood using
|
#' Posterior parameter estimates are obtained by combining the prior and likelihood using Bayes' theorem. The posterior distribution of \eqn{\theta} is also a Beta distribution:
|
||||||
#' Bayes' theorem. The posterior distribution of \eqn{$theta$} is also a Beta distribution:
|
|
||||||
#'
|
#'
|
||||||
#' \ifelse{latex}{\deqn{$theta$ | y \sim \text{Beta}($alpha$_0 + y, $beta$_0 + n - y)}}{
|
#' \deqn{\theta | y \sim \text{Beta}(\alpha_0 + y, \beta_0 + n - y)}
|
||||||
#' \ifelse{html}{\figure{posterior_beta.png}{options: width="300" alt="Beta posterior"}}{$theta$ | y ~ Beta($alpha$_0 + y, $beta$_0 + n - y)}}
|
|
||||||
#'
|
#'
|
||||||
#' For hierarchical modeling, pathogen-level effects (e.g., differences in resistance
|
#' For hierarchical modelling, pathogen-level effects (e.g., differences in resistance patterns) and regimen-level effects are modelled using Gaussian priors on log-odds. This hierarchical structure ensures partial pooling of estimates across groups, improving stability in strata with small sample sizes. The model is implemented using Hamiltonian Monte Carlo (HMC) sampling.
|
||||||
#' patterns) and regimen-level effects are modelled using Gaussian priors on log-odds.
|
|
||||||
#' This hierarchical structure ensures partial pooling of estimates across groups,
|
|
||||||
#' improving stability in strata with small sample sizes. The model is implemented using
|
|
||||||
#' Hamiltonian Monte Carlo (HMC) sampling.
|
|
||||||
#'
|
#'
|
||||||
#' Stratified results are provided based on covariates such as age, sex, and clinical
|
#' Stratified results can be provided based on covariates such as age, sex, and clinical complexity (e.g., prior antimicrobial treatments or renal/urological comorbidities) using `dplyr`'s [group_by()] as a pre-processing step before running [wisca()]. In this case, posterior odds ratios (ORs) are derived to quantify the effect of these covariates on coverage probabilities:
|
||||||
#' complexity (e.g., prior antimicrobial treatments or renal/urological comorbidities).
|
|
||||||
#' For example, posterior odds ratios (ORs) are derived to quantify the effect of these
|
|
||||||
#' covariates on coverage probabilities:
|
|
||||||
#'
|
#'
|
||||||
#' \ifelse{latex}{\deqn{\text{OR}_{\text{covariate}} = \frac{\exp($beta$_{\text{covariate}})}{\exp($beta$_0)}}}{
|
#' \deqn{\text{OR}_{\text{covariate}} = \frac{\exp(\beta_{\text{covariate}})}{\exp(\beta_0)}}
|
||||||
#' \ifelse{html}{\figure{odds_ratio.png}{options: width="300" alt="Odds ratio formula"}}{OR_covariate = exp(beta_covariate) / exp(beta_0)}}
|
|
||||||
#'
|
#'
|
||||||
#' By combining empirical data with prior knowledge, WISCA overcomes the limitations
|
#' By combining empirical data with prior knowledge, WISCA overcomes the limitations
|
||||||
#' of traditional combination antibiograms, offering disease-specific, patient-stratified
|
#' of traditional combination antibiograms, offering disease-specific, patient-stratified
|
||||||
@ -249,6 +227,7 @@
|
|||||||
#' * Klinker KP *et al.* (2021). **Antimicrobial stewardship and antibiograms: importance of moving beyond traditional antibiograms**. *Therapeutic Advances in Infectious Disease*, May 5;8:20499361211011373; \doi{10.1177/20499361211011373}
|
#' * Klinker KP *et al.* (2021). **Antimicrobial stewardship and antibiograms: importance of moving beyond traditional antibiograms**. *Therapeutic Advances in Infectious Disease*, May 5;8:20499361211011373; \doi{10.1177/20499361211011373}
|
||||||
#' * Barbieri E *et al.* (2021). **Development of a Weighted-Incidence Syndromic Combination Antibiogram (WISCA) to guide the choice of the empiric antibiotic treatment for urinary tract infection in paediatric patients: a Bayesian approach** *Antimicrobial Resistance & Infection Control* May 1;10(1):74; \doi{10.1186/s13756-021-00939-2}
|
#' * Barbieri E *et al.* (2021). **Development of a Weighted-Incidence Syndromic Combination Antibiogram (WISCA) to guide the choice of the empiric antibiotic treatment for urinary tract infection in paediatric patients: a Bayesian approach** *Antimicrobial Resistance & Infection Control* May 1;10(1):74; \doi{10.1186/s13756-021-00939-2}
|
||||||
#' * **M39 Analysis and Presentation of Cumulative Antimicrobial Susceptibility Test Data, 5th Edition**, 2022, *Clinical and Laboratory Standards Institute (CLSI)*. <https://clsi.org/standards/products/microbiology/documents/m39/>.
|
#' * **M39 Analysis and Presentation of Cumulative Antimicrobial Susceptibility Test Data, 5th Edition**, 2022, *Clinical and Laboratory Standards Institute (CLSI)*. <https://clsi.org/standards/products/microbiology/documents/m39/>.
|
||||||
|
#' @author Implementation: Dr. Larisse Bolton and Dr. Matthijs Berends
|
||||||
#' @rdname antibiogram
|
#' @rdname antibiogram
|
||||||
#' @name antibiogram
|
#' @name antibiogram
|
||||||
#' @export
|
#' @export
|
||||||
@ -331,7 +310,8 @@
|
|||||||
#'
|
#'
|
||||||
#' ureido <- antibiogram(example_isolates,
|
#' ureido <- antibiogram(example_isolates,
|
||||||
#' antibiotics = ureidopenicillins(),
|
#' antibiotics = ureidopenicillins(),
|
||||||
#' ab_transform = "name"
|
#' ab_transform = "name",
|
||||||
|
#' wisca = TRUE
|
||||||
#' )
|
#' )
|
||||||
#'
|
#'
|
||||||
#' # in an Rmd file, you would just need to return `ureido` in a chunk,
|
#' # in an Rmd file, you would just need to return `ureido` in a chunk,
|
||||||
|
@ -38,9 +38,7 @@
|
|||||||
#' @section Matching Score for Microorganisms:
|
#' @section Matching Score for Microorganisms:
|
||||||
#' With ambiguous user input in [as.mo()] and all the [`mo_*`][mo_property()] functions, the returned results are chosen based on their matching score using [mo_matching_score()]. This matching score \eqn{m}, is calculated as:
|
#' With ambiguous user input in [as.mo()] and all the [`mo_*`][mo_property()] functions, the returned results are chosen based on their matching score using [mo_matching_score()]. This matching score \eqn{m}, is calculated as:
|
||||||
#'
|
#'
|
||||||
#' \ifelse{latex}{\deqn{m_{(x, n)} = \frac{l_{n} - 0.5 \cdot \min \begin{cases}l_{n} \\ \textrm{lev}(x, n)\end{cases}}{l_{n} \cdot p_{n} \cdot k_{n}}}}{
|
#' \deqn{m_{(x, n)} = \frac{l_{n} - 0.5 \cdot \min \begin{cases}l_{n} \\ \textrm{lev}(x, n)\end{cases}}{l_{n} \cdot p_{n} \cdot k_{n}}}
|
||||||
#'
|
|
||||||
#' \ifelse{html}{\figure{mo_matching_score.png}{options: width="300" alt="mo matching score"}}{m(x, n) = ( l_n * min(l_n, lev(x, n) ) ) / ( l_n * p_n * k_n )}}
|
|
||||||
#'
|
#'
|
||||||
#' where:
|
#' where:
|
||||||
#'
|
#'
|
||||||
|
@ -32,6 +32,11 @@ url: "https://msberends.github.io/AMR/"
|
|||||||
|
|
||||||
template:
|
template:
|
||||||
bootstrap: 5
|
bootstrap: 5
|
||||||
|
includes: # support for mathematical formulas, from https://github.com/r-lib/pkgdown/issues/2704#issuecomment-2307055568
|
||||||
|
in_header: |
|
||||||
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.css" integrity="sha384-nB0miv6/jRmo5UMMR1wu3Gz6NLsoTkbqJghGIsx//Rlm+ZU03BU6SQNC66uf4l5+" crossorigin="anonymous">
|
||||||
|
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/katex.min.js" integrity="sha384-7zkQWkzuo3B5mTepMUcHkMB5jZaolc2xDwL6VFqjFALcbeS9Ggm/Yr2r3Dy4lfFg" crossorigin="anonymous"></script>
|
||||||
|
<script defer src="https://cdn.jsdelivr.net/npm/katex@0.16.11/dist/contrib/auto-render.min.js" integrity="sha384-43gviWU0YVjaDtb/GhzOouOXtZMP/7XUzwPTstBeZFe/+rCMvRwr4yROQP43s0Xk" crossorigin="anonymous" onload="renderMathInElement(document.body);"></script>
|
||||||
bootswatch: "flatly"
|
bootswatch: "flatly"
|
||||||
assets: "pkgdown/logos" # use logos in this folder
|
assets: "pkgdown/logos" # use logos in this folder
|
||||||
bslib:
|
bslib:
|
||||||
|
@ -65,7 +65,6 @@ utils = importr('utils')
|
|||||||
base.options(warn = -1)
|
base.options(warn = -1)
|
||||||
|
|
||||||
# Override R library paths globally for the session
|
# Override R library paths globally for the session
|
||||||
robjects.r(f'.Library <- "{r_lib_path}"') # Replace default library
|
|
||||||
robjects.r(f'.Library.site <- "{r_lib_path}"') # Replace site-specific library
|
robjects.r(f'.Library.site <- "{r_lib_path}"') # Replace site-specific library
|
||||||
base._libPaths(r_lib_path) # Override .libPaths() as well
|
base._libPaths(r_lib_path) # Override .libPaths() as well
|
||||||
|
|
||||||
|
@ -1,54 +0,0 @@
|
|||||||
---
|
|
||||||
title: "Generating antibiograms with the AMR package"
|
|
||||||
author: "AMR package developers"
|
|
||||||
date: "`r Sys.Date()`"
|
|
||||||
output: pdf_document
|
|
||||||
---
|
|
||||||
|
|
||||||
```{r setup, include=FALSE}
|
|
||||||
knitr::opts_chunk$set(echo = TRUE, message = FALSE)
|
|
||||||
library(AMR)
|
|
||||||
```
|
|
||||||
|
|
||||||
This is an example R Markdown file to show the use of `antibiogram()` of the AMR package.
|
|
||||||
|
|
||||||
For starters, this is what our `example_isolates` data set looks like:
|
|
||||||
|
|
||||||
```{r}
|
|
||||||
example_isolates
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
### Traditional Antibiogram
|
|
||||||
|
|
||||||
```{r trad}
|
|
||||||
antibiogram(example_isolates,
|
|
||||||
antibiotics = c(aminoglycosides(), carbapenems()))
|
|
||||||
```
|
|
||||||
|
|
||||||
### Combined Antibiogram
|
|
||||||
|
|
||||||
```{r comb}
|
|
||||||
antibiogram(example_isolates,
|
|
||||||
antibiotics = c("TZP", "TZP+TOB", "TZP+GEN"))
|
|
||||||
```
|
|
||||||
|
|
||||||
### Syndromic Antibiogram
|
|
||||||
|
|
||||||
```{r synd}
|
|
||||||
antibiogram(example_isolates,
|
|
||||||
antibiotics = c(aminoglycosides(), carbapenems()),
|
|
||||||
syndromic_group = "ward")
|
|
||||||
```
|
|
||||||
|
|
||||||
### Weighted-Incidence Syndromic Combination Antibiogram (WISCA)
|
|
||||||
|
|
||||||
```{r wisca}
|
|
||||||
antibiogram(example_isolates,
|
|
||||||
antibiotics = c("AMC", "AMC+CIP", "TZP", "TZP+TOB"),
|
|
||||||
mo_transform = "gramstain",
|
|
||||||
minimum = 10, # this should be >= 30, but now just as example
|
|
||||||
syndromic_group = ifelse(example_isolates$age >= 65 &
|
|
||||||
example_isolates$gender == "M",
|
|
||||||
"WISCA Group 1", "WISCA Group 2"))
|
|
||||||
```
|
|
File diff suppressed because one or more lines are too long
Binary file not shown.
@ -1854,48 +1854,26 @@ You can also use functions from specific 'table reporting' packages to transform
|
|||||||
}
|
}
|
||||||
\section{Why Use WISCA?}{
|
\section{Why Use WISCA?}{
|
||||||
|
|
||||||
WISCA, as outlined by Barbieri \emph{et al.} (\doi{10.1186/s13756-021-00939-2}), 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.
|
|
||||||
|
|
||||||
The Bayesian model assumes conjugate priors for parameter estimation. For example, the
|
WISCA, as outlined by Barbieri \emph{et al.} (\doi{10.1186/s13756-021-00939-2}), 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.
|
||||||
coverage probability \ifelse{latex}{\deqn{$theta$}}{$theta$} for a given antimicrobial regimen
|
|
||||||
is modeled using a Beta distribution as a prior:
|
|
||||||
|
|
||||||
\ifelse{latex}{\deqn{$theta$ \sim \text{Beta}($alpha$_0, $beta$_0)}}{
|
The Bayesian model assumes conjugate priors for parameter estimation. For example, the coverage probability \eqn{\theta} for a given antimicrobial regimen is modelled using a Beta distribution as a prior:
|
||||||
\ifelse{html}{\figure{beta_prior.png}{options: width="300" alt="Beta prior"}}{$theta$ ~ Beta($alpha$_0, $beta$_0)}}
|
|
||||||
|
|
||||||
where \eqn{$alpha$_0} and \eqn{$beta$_0} represent prior successes and failures, respectively,
|
\deqn{\theta \sim \text{Beta}(\alpha_0, \beta_0)}
|
||||||
informed by expert knowledge or weakly informative priors (e.g., \eqn{$alpha$_0 = 1, $beta$_0 = 1}).
|
|
||||||
|
|
||||||
The likelihood function is constructed based on observed data, where the number of covered
|
where \eqn{\alpha_0} and \eqn{\beta_0} represent prior successes and failures, respectively, informed by expert knowledge or weakly informative priors (e.g., \eqn{\alpha_0 = 1, \beta_0 = 1}). The likelihood function is constructed based on observed data, where the number of covered cases for a regimen follows a binomial distribution:
|
||||||
cases for a regimen follows a binomial distribution:
|
|
||||||
|
|
||||||
\ifelse{latex}{\deqn{y \sim \text{Binomial}(n, $theta$)}}{
|
\deqn{y \sim \text{Binomial}(n, \theta)}
|
||||||
\ifelse{html}{\figure{binomial_likelihood.png}{options: width="300" alt="Binomial likelihood"}}{y ~ Binomial(n, $theta$)}}
|
|
||||||
|
|
||||||
Posterior parameter estimates are obtained by combining the prior and likelihood using
|
Posterior parameter estimates are obtained by combining the prior and likelihood using Bayes' theorem. The posterior distribution of \eqn{\theta} is also a Beta distribution:
|
||||||
Bayes' theorem. The posterior distribution of \eqn{$theta$} is also a Beta distribution:
|
|
||||||
|
|
||||||
\ifelse{latex}{\deqn{$theta$ | y \sim \text{Beta}($alpha$_0 + y, $beta$_0 + n - y)}}{
|
\deqn{\theta | y \sim \text{Beta}(\alpha_0 + y, \beta_0 + n - y)}
|
||||||
\ifelse{html}{\figure{posterior_beta.png}{options: width="300" alt="Beta posterior"}}{$theta$ | y ~ Beta($alpha$_0 + y, $beta$_0 + n - y)}}
|
|
||||||
|
|
||||||
For hierarchical modeling, pathogen-level effects (e.g., differences in resistance
|
For hierarchical modelling, pathogen-level effects (e.g., differences in resistance patterns) and regimen-level effects are modelled using Gaussian priors on log-odds. This hierarchical structure ensures partial pooling of estimates across groups, improving stability in strata with small sample sizes. The model is implemented using Hamiltonian Monte Carlo (HMC) sampling.
|
||||||
patterns) and regimen-level effects are modelled using Gaussian priors on log-odds.
|
|
||||||
This hierarchical structure ensures partial pooling of estimates across groups,
|
|
||||||
improving stability in strata with small sample sizes. The model is implemented using
|
|
||||||
Hamiltonian Monte Carlo (HMC) sampling.
|
|
||||||
|
|
||||||
Stratified results are provided based on covariates such as age, sex, and clinical
|
Stratified results can be provided based on covariates such as age, sex, and clinical complexity (e.g., prior antimicrobial treatments or renal/urological comorbidities) using \code{dplyr}'s \code{\link[=group_by]{group_by()}} as a pre-processing step before running \code{\link[=wisca]{wisca()}}. In this case, posterior odds ratios (ORs) are derived to quantify the effect of these covariates on coverage probabilities:
|
||||||
complexity (e.g., prior antimicrobial treatments or renal/urological comorbidities).
|
|
||||||
For example, posterior odds ratios (ORs) are derived to quantify the effect of these
|
|
||||||
covariates on coverage probabilities:
|
|
||||||
|
|
||||||
\ifelse{latex}{\deqn{\text{OR}_{\text{covariate}} = \frac{\exp($beta$_{\text{covariate}})}{\exp($beta$_0)}}}{
|
\deqn{\text{OR}_{\text{covariate}} = \frac{\exp(\beta_{\text{covariate}})}{\exp(\beta_0)}}
|
||||||
\ifelse{html}{\figure{odds_ratio.png}{options: width="300" alt="Odds ratio formula"}}{OR_covariate = exp(beta_covariate) / exp(beta_0)}}
|
|
||||||
|
|
||||||
By combining empirical data with prior knowledge, WISCA overcomes the limitations
|
By combining empirical data with prior knowledge, WISCA overcomes the limitations
|
||||||
of traditional combination antibiograms, offering disease-specific, patient-stratified
|
of traditional combination antibiograms, offering disease-specific, patient-stratified
|
||||||
@ -1982,7 +1960,8 @@ antibiogram(example_isolates,
|
|||||||
|
|
||||||
ureido <- antibiogram(example_isolates,
|
ureido <- antibiogram(example_isolates,
|
||||||
antibiotics = ureidopenicillins(),
|
antibiotics = ureidopenicillins(),
|
||||||
ab_transform = "name"
|
ab_transform = "name",
|
||||||
|
wisca = TRUE
|
||||||
)
|
)
|
||||||
|
|
||||||
# in an Rmd file, you would just need to return `ureido` in a chunk,
|
# in an Rmd file, you would just need to return `ureido` in a chunk,
|
||||||
@ -2016,6 +1995,9 @@ plot(ab1)
|
|||||||
plot(ab2)
|
plot(ab2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
\author{
|
||||||
|
Implementation: Dr. Larisse Bolton and Dr. Matthijs Berends
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -3099,9 +3081,7 @@ This is based on:
|
|||||||
|
|
||||||
With ambiguous user input in \code{\link[=as.mo]{as.mo()}} and all the \code{\link[=mo_property]{mo_*}} functions, the returned results are chosen based on their matching score using \code{\link[=mo_matching_score]{mo_matching_score()}}. This matching score \eqn{m}, is calculated as:
|
With ambiguous user input in \code{\link[=as.mo]{as.mo()}} and all the \code{\link[=mo_property]{mo_*}} functions, the returned results are chosen based on their matching score using \code{\link[=mo_matching_score]{mo_matching_score()}}. This matching score \eqn{m}, is calculated as:
|
||||||
|
|
||||||
\ifelse{latex}{\deqn{m_{(x, n)} = \frac{l_{n} - 0.5 \cdot \min \begin{cases}l_{n} \\ \textrm{lev}(x, n)\end{cases}}{l_{n} \cdot p_{n} \cdot k_{n}}}}{
|
\deqn{m_{(x, n)} = \frac{l_{n} - 0.5 \cdot \min \begin{cases}l_{n} \\ \textrm{lev}(x, n)\end{cases}}{l_{n} \cdot p_{n} \cdot k_{n}}}
|
||||||
|
|
||||||
\ifelse{html}{\figure{mo_matching_score.png}{options: width="300" alt="mo matching score"}}{m(x, n) = ( l_n * min(l_n, lev(x, n) ) ) / ( l_n * p_n * k_n )}}
|
|
||||||
|
|
||||||
where:
|
where:
|
||||||
\itemize{
|
\itemize{
|
||||||
@ -6627,9 +6607,7 @@ Later, the work of Bartlett A \emph{et al.} about bacterial pathogens infecting
|
|||||||
|
|
||||||
With ambiguous user input in \code{\link[=as.mo]{as.mo()}} and all the \code{\link[=mo_property]{mo_*}} functions, the returned results are chosen based on their matching score using \code{\link[=mo_matching_score]{mo_matching_score()}}. This matching score \eqn{m}, is calculated as:
|
With ambiguous user input in \code{\link[=as.mo]{as.mo()}} and all the \code{\link[=mo_property]{mo_*}} functions, the returned results are chosen based on their matching score using \code{\link[=mo_matching_score]{mo_matching_score()}}. This matching score \eqn{m}, is calculated as:
|
||||||
|
|
||||||
\ifelse{latex}{\deqn{m_{(x, n)} = \frac{l_{n} - 0.5 \cdot \min \begin{cases}l_{n} \\ \textrm{lev}(x, n)\end{cases}}{l_{n} \cdot p_{n} \cdot k_{n}}}}{
|
\deqn{m_{(x, n)} = \frac{l_{n} - 0.5 \cdot \min \begin{cases}l_{n} \\ \textrm{lev}(x, n)\end{cases}}{l_{n} \cdot p_{n} \cdot k_{n}}}
|
||||||
|
|
||||||
\ifelse{html}{\figure{mo_matching_score.png}{options: width="300" alt="mo matching score"}}{m(x, n) = ( l_n * min(l_n, lev(x, n) ) ) / ( l_n * p_n * k_n )}}
|
|
||||||
|
|
||||||
where:
|
where:
|
||||||
\itemize{
|
\itemize{
|
||||||
|
@ -232,48 +232,26 @@ You can also use functions from specific 'table reporting' packages to transform
|
|||||||
}
|
}
|
||||||
\section{Why Use WISCA?}{
|
\section{Why Use WISCA?}{
|
||||||
|
|
||||||
WISCA, as outlined by Barbieri \emph{et al.} (\doi{10.1186/s13756-021-00939-2}), 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.
|
|
||||||
|
|
||||||
The Bayesian model assumes conjugate priors for parameter estimation. For example, the
|
WISCA, as outlined by Barbieri \emph{et al.} (\doi{10.1186/s13756-021-00939-2}), 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.
|
||||||
coverage probability \ifelse{latex}{\deqn{$theta$}}{$theta$} for a given antimicrobial regimen
|
|
||||||
is modeled using a Beta distribution as a prior:
|
|
||||||
|
|
||||||
\ifelse{latex}{\deqn{$theta$ \sim \text{Beta}($alpha$_0, $beta$_0)}}{
|
The Bayesian model assumes conjugate priors for parameter estimation. For example, the coverage probability \eqn{\theta} for a given antimicrobial regimen is modelled using a Beta distribution as a prior:
|
||||||
\ifelse{html}{\figure{beta_prior.png}{options: width="300" alt="Beta prior"}}{$theta$ ~ Beta($alpha$_0, $beta$_0)}}
|
|
||||||
|
|
||||||
where \eqn{$alpha$_0} and \eqn{$beta$_0} represent prior successes and failures, respectively,
|
\deqn{\theta \sim \text{Beta}(\alpha_0, \beta_0)}
|
||||||
informed by expert knowledge or weakly informative priors (e.g., \eqn{$alpha$_0 = 1, $beta$_0 = 1}).
|
|
||||||
|
|
||||||
The likelihood function is constructed based on observed data, where the number of covered
|
where \eqn{\alpha_0} and \eqn{\beta_0} represent prior successes and failures, respectively, informed by expert knowledge or weakly informative priors (e.g., \eqn{\alpha_0 = 1, \beta_0 = 1}). The likelihood function is constructed based on observed data, where the number of covered cases for a regimen follows a binomial distribution:
|
||||||
cases for a regimen follows a binomial distribution:
|
|
||||||
|
|
||||||
\ifelse{latex}{\deqn{y \sim \text{Binomial}(n, $theta$)}}{
|
\deqn{y \sim \text{Binomial}(n, \theta)}
|
||||||
\ifelse{html}{\figure{binomial_likelihood.png}{options: width="300" alt="Binomial likelihood"}}{y ~ Binomial(n, $theta$)}}
|
|
||||||
|
|
||||||
Posterior parameter estimates are obtained by combining the prior and likelihood using
|
Posterior parameter estimates are obtained by combining the prior and likelihood using Bayes' theorem. The posterior distribution of \eqn{\theta} is also a Beta distribution:
|
||||||
Bayes' theorem. The posterior distribution of \eqn{$theta$} is also a Beta distribution:
|
|
||||||
|
|
||||||
\ifelse{latex}{\deqn{$theta$ | y \sim \text{Beta}($alpha$_0 + y, $beta$_0 + n - y)}}{
|
\deqn{\theta | y \sim \text{Beta}(\alpha_0 + y, \beta_0 + n - y)}
|
||||||
\ifelse{html}{\figure{posterior_beta.png}{options: width="300" alt="Beta posterior"}}{$theta$ | y ~ Beta($alpha$_0 + y, $beta$_0 + n - y)}}
|
|
||||||
|
|
||||||
For hierarchical modeling, pathogen-level effects (e.g., differences in resistance
|
For hierarchical modelling, pathogen-level effects (e.g., differences in resistance patterns) and regimen-level effects are modelled using Gaussian priors on log-odds. This hierarchical structure ensures partial pooling of estimates across groups, improving stability in strata with small sample sizes. The model is implemented using Hamiltonian Monte Carlo (HMC) sampling.
|
||||||
patterns) and regimen-level effects are modelled using Gaussian priors on log-odds.
|
|
||||||
This hierarchical structure ensures partial pooling of estimates across groups,
|
|
||||||
improving stability in strata with small sample sizes. The model is implemented using
|
|
||||||
Hamiltonian Monte Carlo (HMC) sampling.
|
|
||||||
|
|
||||||
Stratified results are provided based on covariates such as age, sex, and clinical
|
Stratified results can be provided based on covariates such as age, sex, and clinical complexity (e.g., prior antimicrobial treatments or renal/urological comorbidities) using \code{dplyr}'s \code{\link[=group_by]{group_by()}} as a pre-processing step before running \code{\link[=wisca]{wisca()}}. In this case, posterior odds ratios (ORs) are derived to quantify the effect of these covariates on coverage probabilities:
|
||||||
complexity (e.g., prior antimicrobial treatments or renal/urological comorbidities).
|
|
||||||
For example, posterior odds ratios (ORs) are derived to quantify the effect of these
|
|
||||||
covariates on coverage probabilities:
|
|
||||||
|
|
||||||
\ifelse{latex}{\deqn{\text{OR}_{\text{covariate}} = \frac{\exp($beta$_{\text{covariate}})}{\exp($beta$_0)}}}{
|
\deqn{\text{OR}_{\text{covariate}} = \frac{\exp(\beta_{\text{covariate}})}{\exp(\beta_0)}}
|
||||||
\ifelse{html}{\figure{odds_ratio.png}{options: width="300" alt="Odds ratio formula"}}{OR_covariate = exp(beta_covariate) / exp(beta_0)}}
|
|
||||||
|
|
||||||
By combining empirical data with prior knowledge, WISCA overcomes the limitations
|
By combining empirical data with prior knowledge, WISCA overcomes the limitations
|
||||||
of traditional combination antibiograms, offering disease-specific, patient-stratified
|
of traditional combination antibiograms, offering disease-specific, patient-stratified
|
||||||
@ -360,7 +338,8 @@ antibiogram(example_isolates,
|
|||||||
|
|
||||||
ureido <- antibiogram(example_isolates,
|
ureido <- antibiogram(example_isolates,
|
||||||
antibiotics = ureidopenicillins(),
|
antibiotics = ureidopenicillins(),
|
||||||
ab_transform = "name"
|
ab_transform = "name",
|
||||||
|
wisca = TRUE
|
||||||
)
|
)
|
||||||
|
|
||||||
# in an Rmd file, you would just need to return `ureido` in a chunk,
|
# in an Rmd file, you would just need to return `ureido` in a chunk,
|
||||||
@ -394,3 +373,6 @@ plot(ab1)
|
|||||||
plot(ab2)
|
plot(ab2)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
\author{
|
||||||
|
Implementation: Dr. Larisse Bolton and Dr. Matthijs Berends
|
||||||
|
}
|
||||||
|
@ -169,9 +169,7 @@ This is based on:
|
|||||||
|
|
||||||
With ambiguous user input in \code{\link[=as.mo]{as.mo()}} and all the \code{\link[=mo_property]{mo_*}} functions, the returned results are chosen based on their matching score using \code{\link[=mo_matching_score]{mo_matching_score()}}. This matching score \eqn{m}, is calculated as:
|
With ambiguous user input in \code{\link[=as.mo]{as.mo()}} and all the \code{\link[=mo_property]{mo_*}} functions, the returned results are chosen based on their matching score using \code{\link[=mo_matching_score]{mo_matching_score()}}. This matching score \eqn{m}, is calculated as:
|
||||||
|
|
||||||
\ifelse{latex}{\deqn{m_{(x, n)} = \frac{l_{n} - 0.5 \cdot \min \begin{cases}l_{n} \\ \textrm{lev}(x, n)\end{cases}}{l_{n} \cdot p_{n} \cdot k_{n}}}}{
|
\deqn{m_{(x, n)} = \frac{l_{n} - 0.5 \cdot \min \begin{cases}l_{n} \\ \textrm{lev}(x, n)\end{cases}}{l_{n} \cdot p_{n} \cdot k_{n}}}
|
||||||
|
|
||||||
\ifelse{html}{\figure{mo_matching_score.png}{options: width="300" alt="mo matching score"}}{m(x, n) = ( l_n * min(l_n, lev(x, n) ) ) / ( l_n * p_n * k_n )}}
|
|
||||||
|
|
||||||
where:
|
where:
|
||||||
\itemize{
|
\itemize{
|
||||||
|
@ -23,9 +23,7 @@ Later, the work of Bartlett A \emph{et al.} about bacterial pathogens infecting
|
|||||||
|
|
||||||
With ambiguous user input in \code{\link[=as.mo]{as.mo()}} and all the \code{\link[=mo_property]{mo_*}} functions, the returned results are chosen based on their matching score using \code{\link[=mo_matching_score]{mo_matching_score()}}. This matching score \eqn{m}, is calculated as:
|
With ambiguous user input in \code{\link[=as.mo]{as.mo()}} and all the \code{\link[=mo_property]{mo_*}} functions, the returned results are chosen based on their matching score using \code{\link[=mo_matching_score]{mo_matching_score()}}. This matching score \eqn{m}, is calculated as:
|
||||||
|
|
||||||
\ifelse{latex}{\deqn{m_{(x, n)} = \frac{l_{n} - 0.5 \cdot \min \begin{cases}l_{n} \\ \textrm{lev}(x, n)\end{cases}}{l_{n} \cdot p_{n} \cdot k_{n}}}}{
|
\deqn{m_{(x, n)} = \frac{l_{n} - 0.5 \cdot \min \begin{cases}l_{n} \\ \textrm{lev}(x, n)\end{cases}}{l_{n} \cdot p_{n} \cdot k_{n}}}
|
||||||
|
|
||||||
\ifelse{html}{\figure{mo_matching_score.png}{options: width="300" alt="mo matching score"}}{m(x, n) = ( l_n * min(l_n, lev(x, n) ) ) / ( l_n * p_n * k_n )}}
|
|
||||||
|
|
||||||
where:
|
where:
|
||||||
\itemize{
|
\itemize{
|
||||||
|
@ -37,9 +37,6 @@ expect_inherits <- function(x, y, ...) {
|
|||||||
", required is class ", paste0(y, collapse = "/")))
|
", required is class ", paste0(y, collapse = "/")))
|
||||||
}
|
}
|
||||||
expect_stdout <- expect_output
|
expect_stdout <- expect_output
|
||||||
if (getRversion() < "4.0.0") {
|
|
||||||
deparse1 <- AMR:::deparse1
|
|
||||||
}
|
|
||||||
|
|
||||||
# start unit tests
|
# start unit tests
|
||||||
test_check("AMR")
|
test_check("AMR")
|
||||||
|
Loading…
Reference in New Issue
Block a user