diff --git a/404.html b/404.html index f7ca474c5..dfd5f4f4b 100644 --- a/404.html +++ b/404.html @@ -31,7 +31,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/LICENSE-text.html b/LICENSE-text.html index a45191cda..57d52d685 100644 --- a/LICENSE-text.html +++ b/LICENSE-text.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/articles/AMR.html b/articles/AMR.html index 28d40ba82..f21c8a7bf 100644 --- a/articles/AMR.html +++ b/articles/AMR.html @@ -5,7 +5,7 @@ -How to conduct AMR data analysis • AMR (for R) +Conduct AMR data analysis • AMR (for R) @@ -18,7 +18,7 @@ - + @@ -30,7 +30,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 @@ -78,7 +78,7 @@ - How to conduct AMR data analysis + Conduct AMR data analysis Source: vignettes/AMR.Rmd @@ -1147,8 +1147,8 @@ incidence and antimicrobial susceptibility patterns. 69.4% (64.3-74.3%) -92.6% (91.2-93.8%) -88.7% (85.9-91.2%) +92.6% (91.1-93.9%) +88.7% (85.8-91.2%) WISCA uses a Bayesian decision model to integrate @@ -1190,57 +1190,57 @@ function on a grouped tibble, i.e., using 0-24 F 56.6% (25.2-83.9%) -74% (50.5-91.9%) -68% (39.7-88.9%) +73.6% (48-91.6%) +68.6% (42.9-89.5%) 0-24 M 60.3% (28.4-87.1%) -79.3% (59.5-94.2%) -60.1% (29.3-87.5%) +79.7% (57.6-94.2%) +60.1% (29.5-87.7%) 25-49 F 66.6% (45.6-85.5%) -91.8% (85.1-96.5%) -82.6% (66.7-93.9%) +91.7% (84.6-96.7%) +83% (67.9-94%) 25-49 M 56.4% (29.1-81.7%) -89.5% (80-95.6%) -72.2% (47.1-90%) +89.2% (80.3-95.7%) +72.4% (49.7-90%) 50-74 F 67.8% (55.8-80.1%) -95.6% (93.2-97.7%) -88% (80.2-94.2%) +95.6% (93.2-97.5%) +88.1% (80.4-94.6%) 50-74 M 66.2% (54.8-75.8%) -95.3% (92.5-97.4%) -84.2% (75.2-92.4%) +95.2% (92.4-97.4%) +84.4% (74.4-92.5%) 75+ F 71.7% (61-81.7%) -96.5% (94.4-98.2%) -90.7% (84.4-95.7%) +96.6% (94.4-98.2%) +90.6% (84.6-95.3%) 75+ M 72.9% (63.8-82%) -96.6% (94.5-98.1%) -92.8% (87.6-96.3%) +96.6% (94.6-98.1%) +92.8% (87.8-96.5%) diff --git a/articles/AMR_for_Python.html b/articles/AMR_for_Python.html index a8f22dc6b..a7dcc947b 100644 --- a/articles/AMR_for_Python.html +++ b/articles/AMR_for_Python.html @@ -30,7 +30,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/articles/AMR_with_tidymodels.html b/articles/AMR_with_tidymodels.html index 645587808..bbdbcd137 100644 --- a/articles/AMR_with_tidymodels.html +++ b/articles/AMR_with_tidymodels.html @@ -30,7 +30,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 @@ -89,8 +89,8 @@ This page was entirely written by our AMR for R Assistant, a ChatGPT -manually-trained model able to answer any question about the AMR -package. +manually-trained model able to answer any question about the +AMR package. Antimicrobial resistance (AMR) is a global health crisis, and understanding resistance patterns is crucial for managing effective diff --git a/articles/EUCAST.html b/articles/EUCAST.html index 7354b8426..1a093e42d 100644 --- a/articles/EUCAST.html +++ b/articles/EUCAST.html @@ -5,7 +5,7 @@ -How to apply EUCAST rules • AMR (for R) +Apply EUCAST rules • AMR (for R) @@ -18,7 +18,7 @@ - + @@ -30,7 +30,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 @@ -78,7 +78,7 @@ - How to apply EUCAST rules + Apply EUCAST rules Source: vignettes/EUCAST.Rmd diff --git a/articles/MDR.html b/articles/MDR.html index fdae9b930..d2670ca4d 100644 --- a/articles/MDR.html +++ b/articles/MDR.html @@ -5,7 +5,7 @@ -How to determine multi-drug resistance (MDR) • AMR (for R) +Determine multi-drug resistance (MDR) • AMR (for R) @@ -18,7 +18,7 @@ - + @@ -30,7 +30,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 @@ -78,7 +78,7 @@ - How to determine multi-drug resistance (MDR) + Determine multi-drug resistance (MDR) Source: vignettes/MDR.Rmd diff --git a/articles/PCA.html b/articles/PCA.html index b130419bc..f97d72b21 100644 --- a/articles/PCA.html +++ b/articles/PCA.html @@ -5,7 +5,7 @@ -How to conduct principal component analysis (PCA) for AMR • AMR (for R) +Conduct principal component analysis (PCA) for AMR • AMR (for R) @@ -18,7 +18,7 @@ - + @@ -30,7 +30,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 @@ -78,7 +78,7 @@ - How to conduct principal component analysis (PCA) for AMR + Conduct principal component analysis (PCA) for AMR Source: vignettes/PCA.Rmd diff --git a/articles/WHONET.html b/articles/WHONET.html index 8e5c77237..834012121 100644 --- a/articles/WHONET.html +++ b/articles/WHONET.html @@ -5,7 +5,7 @@ -How to work with WHONET data • AMR (for R) +Work with WHONET data • AMR (for R) @@ -18,7 +18,7 @@ - + @@ -30,7 +30,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 @@ -78,7 +78,7 @@ - How to work with WHONET data + Work with WHONET data Source: vignettes/WHONET.Rmd diff --git a/articles/WISCA.html b/articles/WISCA.html index 4839b7145..b11acbc38 100644 --- a/articles/WISCA.html +++ b/articles/WISCA.html @@ -30,7 +30,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 @@ -87,6 +87,11 @@ + +This explainer was largely written by our AMR for R Assistant, a ChatGPT +manually-trained model able to answer any question about the +AMR package. + Introduction @@ -94,33 +99,40 @@ probabilistic reasoning: what is the chance that a regimen will cover the likely infecting organisms, before culture results are available? -This is the purpose of WISCA, or: - -Weighted-Incidence Syndromic Combination -Antibiogram - -WISCA is a Bayesian approach that integrates: - Pathogen -prevalence (how often each species causes the syndrome), - +This is the purpose of WISCA, or +Weighted-Incidence Syndromic Combination +Antibiogram. +WISCA is a Bayesian approach that integrates: + + +Pathogen prevalence (how often each species causes +the syndrome), + Regimen susceptibility (how often a regimen works -if the pathogen is known), +if the pathogen is known), + to estimate the overall empirical coverage of -antimicrobial regimens — with quantified uncertainty. +antimicrobial regimens, with quantified uncertainty. This vignette explains how WISCA works, why it is useful, and how to -apply it in AMR. - +apply it using the AMR package. Why traditional antibiograms fall short A standard antibiogram gives you: -``` Species → Antibiotic → Susceptibility % +Species → Antibiotic → Susceptibility % But clinicians don’t know the species a priori. They need to -choose a regimen that covers the likely pathogens — +choose a regimen that covers the likely pathogens, without knowing which one is present. -Traditional antibiograms: - Fragment information by organism, - Do -not weight by real-world prevalence, - Do not account for combination -therapy or sample size, - Do not provide uncertainty. - +Traditional antibiograms calculate the susceptibility % as just the +number of resistant isolates divided by the total number of tested +isolates. Therefore, traditional antibiograms: + +Fragment information by organism, +Do not weight by real-world prevalence, +Do not account for combination therapy or sample size, +Do not provide uncertainty. + The idea of WISCA @@ -130,21 +142,31 @@ therapy or sample size, - Do not provide uncertainty. “What is the probability that this regimen will cover the pathogen, given the syndrome?” -This means combining two things: - Incidence of each -pathogen in the syndrome, - Susceptibility of each -pathogen to the regimen. +This means combining two things: + + +Incidence of each pathogen in the syndrome, + +Susceptibility of each pathogen to the +regimen. + We can write this as: -``` coverage = ∑ (pathogen incidence × susceptibility) -For example, suppose: - E. coli causes 60% of cases, and 90% of -E. coli are susceptible to a drug. - Klebsiella causes 40% of -cases, and 70% of Klebsiella are susceptible. +Coverage=∑i(Incidencei×Susceptibilityi)\text{Coverage} = \sum_i (\text{Incidence}_i \times \text{Susceptibility}_i) +For example, suppose: + + +E. coli causes 60% of cases, and 90% of E. coli +are susceptible to a drug. + +Klebsiella causes 40% of cases, and 70% of +Klebsiella are susceptible. + Then: -``` coverage = (0.6 × 0.9) + (0.4 × 0.7) = 0.82 +Coverage=(0.6×0.9)+(0.4×0.7)=0.82\text{Coverage} = (0.6 \times 0.9) + (0.4 \times 0.7) = 0.82 But in real data, incidence and susceptibility are estimated -from samples — so they carry uncertainty. WISCA models this +from samples, so they carry uncertainty. WISCA models this probabilistically, using conjugate Bayesian distributions. - The Bayesian engine behind WISCA @@ -152,486 +174,270 @@ distributions. Pathogen incidence -Let: - K be the number of pathogens, - -α = (1, 1, ..., 1) be a **Dirichlet** prior (uniform), - n -= (n₁, …, nₖ) be the observed counts per species. -Then the posterior incidence follows: -``` incidence ∼ Dirichlet(α + n) -In simulations, we draw from this posterior using: -``` xᵢ ∼ Gamma(αᵢ + nᵢ, 1) -``` incidenceᵢ = xᵢ / ∑ xⱼ - +Let: + + +KK +be the number of pathogens, + +α=(1,1,…,1)\alpha = (1, 1, \ldots, 1) +be a Dirichlet prior (uniform), + +n=(n1,…,nK)n = (n_1, \ldots, n_K) +be the observed counts per species. + +Then the posterior incidence is: +p∼Dirichlet(α1+n1,…,αK+nK)p \sim \text{Dirichlet}(\alpha_1 + n_1, \ldots, \alpha_K + n_K) +To simulate from this, we use: +xi∼Gamma(αi+ni,1),pi=xi∑j=1Kxjx_i \sim \text{Gamma}(\alpha_i + n_i,\ 1), \quad p_i = \frac{x_i}{\sum_{j=1}^{K} x_j} Susceptibility -Each pathogen–regimen pair has: - prior: Beta(1, 1) - -data: S susceptible out of N tested -Then: -``` susceptibility ∼ Beta(1 + S, 1 + (N - S)) -In each simulation, we draw random susceptibility per species from -this Beta distribution. - +Each pathogen–regimen pair has a prior and data: + +Prior: +Beta(α0,β0)\text{Beta}(\alpha_0, \beta_0), +with default +α0=β0=1\alpha_0 = \beta_0 = 1 + +Data: +SS +susceptible out of +NN +tested + +The +SS +category could also include values SDD (susceptible, dose-dependent) and +I (intermediate [CLSI], or susceptible, increased exposure +[EUCAST]). +Then the posterior is: +θ∼Beta(α0+S,β0+N−S)\theta \sim \text{Beta}(\alpha_0 + S,\ \beta_0 + N - S) Final coverage estimate Putting it together: -``` For each simulation: - Draw incidence ∼ Dirichlet - Draw -susceptibility ∼ Beta - Multiply → coverage estimate -We repeat this (e.g. 1000×) and summarise: - Mean: -expected coverage - Quantiles: credible interval -(default 95%) - + +Simulate pathogen incidence: +𝐩∼Dirichlet\boldsymbol{p} \sim \text{Dirichlet} + +Simulate susceptibility: +θi∼Beta(1+Si,1+Ri)\theta_i \sim \text{Beta}(1 + S_i,\ 1 + R_i) + +Combine: + +Coverage=∑i=1Kpi⋅θi\text{Coverage} = \sum_{i=1}^{K} p_i \cdot \theta_i +Repeat this simulation (e.g. 1000×) and summarise: + + +Mean = expected coverage + +Quantiles = credible interval + -Practical use in AMR +Practical use in the AMR package -Simulate a synthetic syndrome +Prepare data and simulate synthetic syndrome - + library(AMR) data <- example_isolates -# Add a fake syndrome column for stratification -data$syndrome <- ifelse(data$mo %like% "coli", "UTI", "Other") +# Structure of our data +data +#> # A tibble: 2,000 × 46 +#> date patient age gender ward mo PEN OXA FLC AMX +#> <date> <chr> <dbl> <chr> <chr> <mo> <sir> <sir> <sir> <sir> +#> 1 2002-01-02 A77334 65 F Clinical B_ESCHR_COLI R NA NA NA +#> 2 2002-01-03 A77334 65 F Clinical B_ESCHR_COLI R NA NA NA +#> 3 2002-01-07 067927 45 F ICU B_STPHY_EPDR R NA R NA +#> 4 2002-01-07 067927 45 F ICU B_STPHY_EPDR R NA R NA +#> 5 2002-01-13 067927 45 F ICU B_STPHY_EPDR R NA R NA +#> 6 2002-01-13 067927 45 F ICU B_STPHY_EPDR R NA R NA +#> 7 2002-01-14 462729 78 M Clinical B_STPHY_AURS R NA S R +#> 8 2002-01-14 462729 78 M Clinical B_STPHY_AURS R NA S R +#> 9 2002-01-16 067927 45 F ICU B_STPHY_EPDR R NA R NA +#> 10 2002-01-17 858515 79 F ICU B_STPHY_EPDR R NA S NA +#> # ℹ 1,990 more rows +#> # ℹ 36 more variables: AMC <sir>, AMP <sir>, TZP <sir>, CZO <sir>, FEP <sir>, +#> # CXM <sir>, FOX <sir>, CTX <sir>, CAZ <sir>, CRO <sir>, GEN <sir>, +#> # TOB <sir>, AMK <sir>, KAN <sir>, TMP <sir>, SXT <sir>, NIT <sir>, +#> # FOS <sir>, LNZ <sir>, CIP <sir>, MFX <sir>, VAN <sir>, TEC <sir>, +#> # TCY <sir>, TGC <sir>, DOX <sir>, ERY <sir>, CLI <sir>, AZM <sir>, +#> # IPM <sir>, MEM <sir>, MTR <sir>, CHL <sir>, COL <sir>, MUP <sir>, … + +# Add a fake syndrome column +data$syndrome <- ifelse(data$mo %like% "coli", "UTI", "No UTI") Basic WISCA antibiogram - -antibiogram(data, - wisca = TRUE) + +wisca(data, + antimicrobials = c("AMC", "CIP", "GEN")) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Amikacin -Amoxicillin Amoxicillin/clavulanic acid -Ampicillin -Azithromycin -Benzylpenicillin -Cefazolin -Cefepime -Cefotaxime -Cefoxitin -Ceftazidime -Ceftriaxone -Cefuroxime -Chloramphenicol Ciprofloxacin -Clindamycin -Colistin -Doxycycline -Erythromycin -Flucloxacillin -Fosfomycin Gentamicin -Imipenem -Kanamycin -Linezolid -Meropenem -Metronidazole -Moxifloxacin -Mupirocin -Nitrofurantoin -Oxacillin -Piperacillin/tazobactam -Rifampicin -Teicoplanin -Tetracycline -Tigecycline -Tobramycin -Trimethoprim -Trimethoprim/sulfamethoxazole -Vancomycin -41.7% (37.2-47.5%) -35.7% (33.3-38.2%) 73.7% (71.7-75.8%) -35.8% (33.6-38.1%) -43.8% (41.5-46%) -28.2% (25.8-30.8%) -69.3% (64.9-73.8%) -74.8% (70.5-78.8%) -73.3% (69.2-77.3%) -69.6% (65.5-73.7%) -35.9% (33.6-38.2%) -73.3% (68.9-77.2%) -71.9% (69.8-74%) -64.9% (51.7-78.5%) -77% (74.5-79.6%) -47.3% (44.7-49.6%) -33% (30.8-35.1%) -63.6% (52.1-74.9%) -43.7% (41.6-46%) -59.3% (47-71%) -60.5% (55.5-65.8%) -72.7% (70.7-74.8%) -78.2% (74-82.2%) -25.6% (13.5-37.7%) -54.9% (50.4-59%) -77.1% (72.8-81.2%) -56.1% (39.5-70.7%) -49.6% (43.6-55.6%) -65.2% (52.7-78.1%) -76.5% (69.4-82.3%) -57.8% (45.4-69.6%) -69.4% (64.2-74.2%) -52.4% (47.6-56.8%) -48.1% (43.4-52.9%) -61.4% (53.6-70.5%) -81.9% (78.1-85.5%) -60.7% (57.8-63.5%) -61% (58.8-63.5%) -76.5% (74.5-78.5%) -61.9% (59.8-64.2%) +77% (74.3-79.4%) +72.8% (70.7-74.8%) + + + + +Use combination regimens + + +wisca(data, + antimicrobials = c("AMC", "AMC + CIP", "AMC + GEN")) + + + + + + + +Amoxicillin/clavulanic acid +Amoxicillin/clavulanic acid + Ciprofloxacin +Amoxicillin/clavulanic acid + Gentamicin + + +73.8% (71.8-75.7%) +87.5% (85.9-89%) +89.7% (88.2-91.1%) Stratify by syndrome - -antibiogram(data, - syndromic_group = "syndrome", - wisca = TRUE) - + +wisca(data, + antimicrobials = c("AMC", "AMC + CIP", "AMC + GEN"), + syndromic_group = "syndrome") + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + Syndromic Group -Amikacin -Amoxicillin Amoxicillin/clavulanic acid -Ampicillin -Azithromycin -Benzylpenicillin -Cefazolin -Cefepime -Cefotaxime -Cefoxitin -Ceftazidime -Ceftriaxone -Cefuroxime -Chloramphenicol -Ciprofloxacin -Clindamycin -Colistin -Doxycycline -Erythromycin -Flucloxacillin -Fosfomycin -Gentamicin -Imipenem -Kanamycin -Linezolid -Meropenem -Metronidazole -Moxifloxacin -Mupirocin -Nitrofurantoin -Oxacillin -Piperacillin/tazobactam -Rifampicin -Teicoplanin -Tetracycline -Tigecycline -Tobramycin -Trimethoprim -Trimethoprim/sulfamethoxazole -Vancomycin +Amoxicillin/clavulanic acid + Ciprofloxacin +Amoxicillin/clavulanic acid + Gentamicin -Other -25% (20.2-31.7%) -31.6% (28.7-34%) -70.1% (67.7-72.4%) -31.6% (29.1-34.1%) -56.4% (53.8-58.8%) -36.3% (33.1-39.4%) -61.5% (55.7-66.5%) -68.5% (63.4-73.8%) -66.7% (61.4-71.9%) -63% (57.7-68.6%) -18.3% (15.9-20.8%) -66.6% (61.4-71.5%) -65.5% (62.7-68%) -69.6% (60-77.2%) -74% (70.8-77.2%) -60.9% (58.1-63.6%) -13.9% (11.8-15.8%) -67.4% (63.7-70.9%) -56.4% (54-58.9%) -61.4% (56-67.6%) -49.6% (43.2-56.3%) -65.6% (62.8-68.1%) -71.8% (66.7-77%) -18.6% (13.1-25.9%) -70.8% (65.1-75.8%) -70.6% (65.1-75.7%) -49.8% (34.2-66.6%) -63.3% (56.2-70.3%) -69.8% (62.6-76.4%) -70.5% (61.2-77.5%) -60% (54.4-65.4%) -62.4% (56.4-68.6%) -67.6% (61.9-73.2%) -61.9% (55.4-67.6%) -67.8% (64.8-70.6%) -77% (72.3-81.8%) -50.1% (46.7-53.6%) -61.1% (58.4-64%) -78.8% (76.4-80.9%) -79.6% (77.4-81.8%) +No UTI +70.1% (67.8-72.3%) +85.2% (83.1-87.2%) +87.1% (85.3-88.7%) UTI -91.5% (88.8-93.5%) -50% (45.5-54.6%) -80.9% (77.8-84%) -49.9% (45.6-54.3%) -8.2% (6.4-10.5%) -8.2% (6.3-10.3%) -88.9% (84.2-92.3%) -89.4% (86.5-91.8%) -89.9% (87.4-92.1%) -86.1% (82.9-88.9%) -89.8% (87.2-91.9%) -89.8% (87.1-92.1%) -87.4% (84.5-89.8%) -NA -81.4% (78.3-84.3%) -8.2% (6.3-10.4%) -91.7% (89.6-93.8%) -NA -8.1% (6.3-10.4%) -NA -90.6% (86.5-93.3%) -90.2% (87.9-92.2%) -91.8% (89.7-93.8%) -NA -8.1% (6.1-10.2%) -91.8% (89.6-93.8%) -71.4% (31.8-91.6%) -9.3% (6.7-13.3%) -NA -89.4% (86.9-91.7%) -NA -87.2% (84.4-89.6%) -8.2% (6.3-10.4%) -8.2% (6.3-10.3%) -41.2% (14.3-74.4%) -90.9% (87.7-93.3%) -89.6% (87.1-91.8%) -59.1% (54.7-63.4%) -65.3% (61.3-69.2%) -8.2% (6.2-10.3%) +80.9% (77.7-83.8%) +88.2% (85.7-90.5%) +90.9% (88.7-93%) - - -Use combination regimens - -The antibiogram() function supports combination -regimens: - -antibiogram(data, - antimicrobials = c("AMC", "GEN", "AMC + GEN", "CIP"), - wisca = TRUE) +The AMR package is available in 20 languages, which can +all be used for the wisca() function too: + +wisca(data, + antimicrobials = c("AMC", "AMC + CIP", "AMC + GEN"), + syndromic_group = gsub("UTI", "UCI", data$syndrome), + language = "Spanish") - - - - + + + + -Amoxicillin/clavulanic acid -Amoxicillin/clavulanic acid + Gentamicin -Ciprofloxacin -Gentamicin - - -73.8% (71.7-75.8%) -89.7% (88.2-91.2%) -77% (74.3-79.6%) -72.8% (70.6-74.9%) - - - - - - -Interpretation - -Suppose you get this output: - - -Regimen -Coverage -Lower_CI -Upper_CI +Grupo sindrómico +Amoxicilina/ácido clavulánico +Amoxicilina/ácido clavulánico + Ciprofloxacina +Amoxicilina/ácido clavulánico + Gentamicina -AMC -0.72 -0.65 -0.78 +No UCI +70% (67.8-72.4%) +85.3% (83.3-87.2%) +87% (85.3-88.8%) -AMC + GEN -0.88 -0.83 -0.93 +UCI +80.9% (77.7-83.9%) +88.2% (85.5-90.6%) +90.9% (88.7-93%) -Interpretation: - -“AMC + GEN covers 88% of expected pathogens for this syndrome, -with 95% certainty that the true coverage lies between 83% and -93%.” - -Regimens with few tested isolates will show wider -intervals. - + -Sensible defaults, but you can customise +Sensible defaults, which can be customised -minimum = 30: exclude regimens with <30 isolates -tested. +simulations = 1000: number of Monte Carlo draws -simulations = 1000: number of Monte Carlo samples. +conf_interval = 0.95: coverage interval width -conf_interval = 0.95: coverage interval width. - -combine_SI = TRUE: count “I”/“SDD” as susceptible. +combine_SI = TRUE: count “I” and “SDD” as +susceptible - Limitations -WISCA does not model time trends or temporal resistance shifts. -It assumes data are representative of current clinical -practice. -It does not account for patient-level covariates (yet). -Species-specific data are abstracted into syndrome-level -estimates. +It assumes your data are representative +No adjustment for patient-level covariates, although these could be +passed onto the syndromic_group argument +WISCA does not model resistance over time, you might want to use +tidymodels for that, for which we wrote a +basic introduction + - + + +Summary + +WISCA enables: + +Empirical regimen comparison, +Syndrome-specific coverage estimation, +Fully probabilistic interpretation. + +It is available in the AMR package via either: + +wisca(...) + +antibiogram(..., wisca = TRUE) Reference -Bielicki JA et al. (2016).Weighted-incidence syndromic combination antibiograms to guide -empiric treatment in pediatric bloodstream infections.J Antimicrob Chemother, 71(2):529–536. doi:10.1093/jac/dkv397 - - - -Conclusion - -WISCA shifts empirical therapy from simple percent susceptible toward -probabilistic, syndrome-based decision support. It is a -statistically principled, clinically intuitive method to guide regimen -selection — and easy to use via the antibiogram() function -in the AMR package. -For antimicrobial stewardship teams, it enables -disease-specific, reproducible, and data-driven -guidance — even in the face of sparse data. +Bielicki, JA, et al. (2016). Selecting appropriate empirical +antibiotic regimens for paediatric bloodstream infections: application +of a Bayesian decision model to local and pooled antimicrobial +resistance surveillance data. J Antimicrob +Chemother. 71(3):794-802. https://doi.org/10.1093/jac/dkv397 diff --git a/articles/datasets.html b/articles/datasets.html index 37870663c..9f6650dbe 100644 --- a/articles/datasets.html +++ b/articles/datasets.html @@ -5,7 +5,7 @@ -Data sets for download / own use • AMR (for R) +Download data sets for download / own use • AMR (for R) @@ -18,7 +18,7 @@ - + @@ -30,7 +30,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 @@ -78,7 +78,7 @@ - Data sets for download / own use + Download data sets for download / own use 01 May 2025 diff --git a/articles/index.html b/articles/index.html index 00c38ba11..8c2396208 100644 --- a/articles/index.html +++ b/articles/index.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 @@ -55,17 +55,17 @@ AMR with tidymodels - How to conduct AMR data analysis + Conduct AMR data analysis - Data sets for download / own use + Download data sets for download / own use - How to apply EUCAST rules + Apply EUCAST rules - How to determine multi-drug resistance (MDR) + Determine multi-drug resistance (MDR) - How to conduct principal component analysis (PCA) for AMR + Conduct principal component analysis (PCA) for AMR - How to work with WHONET data + Work with WHONET data Estimating Empirical Coverage with WISCA diff --git a/authors.html b/authors.html index 91f6cdb92..406ff14d1 100644 --- a/authors.html +++ b/authors.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/index.html b/index.html index c54583dcd..a17e60373 100644 --- a/index.html +++ b/index.html @@ -33,7 +33,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/news/index.html b/news/index.html index c41fe17f6..b4e488aa8 100644 --- a/news/index.html +++ b/news/index.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 @@ -49,11 +49,11 @@ -AMR 2.1.1.9267 +AMR 2.1.1.9268 (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.) This package now supports not only tools for AMR data analysis in clinical settings, but also for veterinary and environmental microbiology. This was made possible through a collaboration with the University of Prince Edward Island’s Atlantic Veterinary College, Canada. To celebrate this great improvement of the package, we also updated the package logo to reflect this change. -tl;dr +tl;dr Scope Expansion: One Health support (Human + Veterinary + Environmental microbiology). @@ -113,15 +113,15 @@ -Full Changelog +Full Changelog -Breaking +Breaking Dataset antibiotics has been renamed to antimicrobials as the data set contains more than just antibiotics. Using antibiotics will still work, but now returns a warning. Removed all functions and references that used the deprecated rsi class, which were all replaced with their sir equivalents over two years ago. Functions resistance_predict() and sir_predict() are now deprecated and will be removed in a future version. Use the tidymodels framework instead, for which we wrote a basic introduction. -New +New One Health implementation Function as.sir() now has extensive support for veterinary breakpoints from CLSI. Use breakpoint_type = "animal" and set the host argument to a variable that contains animal species names. @@ -176,7 +176,7 @@ -Changed +Changed SIR interpretation Support for parallel computing to greatly improve speed using the parallel package (part of base R). Use as.sir(your_data, parallel = TRUE) to run SIR interpretation using multiple cores. It is now possible to use column names for arguments guideline, ab, mo, and uti: as.sir(..., ab = "column1", mo = "column2", uti = "column3"). This greatly improves the flexibility for users. @@ -258,7 +258,7 @@ Added console colours support of sir class for Positron -Other +Other New website domain: https://amr-for-r.org! The old domain (http://amr-for-r.org/) will remain to work. Added Dr. Larisse Bolton and Aislinn Cook as contributors for their fantastic implementation of WISCA in a mathematically solid way Added Matthew Saab, Dr. Jordan Stull, and Prof. Javier Sanchez as contributors for their tremendous input on veterinary breakpoints and interpretations @@ -269,7 +269,7 @@ -Older Versions +Older Versions This changelog only contains changes from AMR v3.0 (March 2025) and later. For prior v2 versions, please see our v2 archive. For prior v1 versions, please see our v1 archive. diff --git a/pkgdown.yml b/pkgdown.yml index 422682566..9d8e5b247 100644 --- a/pkgdown.yml +++ b/pkgdown.yml @@ -11,7 +11,7 @@ articles: PCA: PCA.html WHONET: WHONET.html WISCA: WISCA.html -last_built: 2025-05-01T09:52Z +last_built: 2025-05-01T12:49Z urls: reference: https://amr-for-r.org/reference article: https://amr-for-r.org/articles diff --git a/reference/AMR-deprecated.html b/reference/AMR-deprecated.html index 710bf6438..b87581537 100644 --- a/reference/AMR-deprecated.html +++ b/reference/AMR-deprecated.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/AMR-options.html b/reference/AMR-options.html index b980c2f22..98d17aeb9 100644 --- a/reference/AMR-options.html +++ b/reference/AMR-options.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/AMR.html b/reference/AMR.html index a10a5b560..4b9b4adfc 100644 --- a/reference/AMR.html +++ b/reference/AMR.html @@ -21,7 +21,7 @@ The AMR package is available in English, Chinese, Czech, Danish, Dutch, Finnish, AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/WHOCC.html b/reference/WHOCC.html index 881d5caa5..bec940791 100644 --- a/reference/WHOCC.html +++ b/reference/WHOCC.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/WHONET.html b/reference/WHONET.html index ae85b7e69..33c73154b 100644 --- a/reference/WHONET.html +++ b/reference/WHONET.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/ab_from_text.html b/reference/ab_from_text.html index b4e4dcbcb..09eaa45fc 100644 --- a/reference/ab_from_text.html +++ b/reference/ab_from_text.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/ab_property.html b/reference/ab_property.html index d9dffe75f..2f26142bf 100644 --- a/reference/ab_property.html +++ b/reference/ab_property.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/add_custom_antimicrobials.html b/reference/add_custom_antimicrobials.html index 3a3dee3f0..8d657ac38 100644 --- a/reference/add_custom_antimicrobials.html +++ b/reference/add_custom_antimicrobials.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/add_custom_microorganisms.html b/reference/add_custom_microorganisms.html index 0272d1ae5..f736fb203 100644 --- a/reference/add_custom_microorganisms.html +++ b/reference/add_custom_microorganisms.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/age.html b/reference/age.html index ba976d0b4..3d05a5675 100644 --- a/reference/age.html +++ b/reference/age.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/age_groups.html b/reference/age_groups.html index 5f4da0e98..f331ff309 100644 --- a/reference/age_groups.html +++ b/reference/age_groups.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/antibiogram.html b/reference/antibiogram.html index c09750dff..11d18f3cd 100644 --- a/reference/antibiogram.html +++ b/reference/antibiogram.html @@ -9,7 +9,7 @@ Adhering to previously described approaches (see Source) and especially the Baye AMR (for R) - 2.1.1.9267 + 2.1.1.9268 @@ -63,16 +63,17 @@ Adhering to previously described approaches (see Source) and especially the Baye only_all_tested = FALSE, digits = ifelse(wisca, 1, 0), formatting_type = getOption("AMR_antibiogram_formatting_type", ifelse(wisca, 14, 18)), 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(), ...) + minimum = 30, combine_SI = TRUE, sep = " + ", sort_columns = TRUE, + wisca = FALSE, simulations = 1000, conf_interval = 0.95, + interval_side = "two-tailed", info = interactive(), ...) wisca(x, antimicrobials = where(is.sir), ab_transform = "name", syndromic_group = NULL, only_all_tested = FALSE, digits = 1, formatting_type = getOption("AMR_antibiogram_formatting_type", 14), col_mo = NULL, language = get_AMR_locale(), combine_SI = TRUE, - sep = " + ", simulations = 1000, conf_interval = 0.95, - interval_side = "two-tailed", info = interactive(), ...) + sep = " + ", sort_columns = TRUE, simulations = 1000, + conf_interval = 0.95, interval_side = "two-tailed", + info = interactive(), ...) retrieve_wisca_parameters(wisca_model, ...) @@ -168,6 +169,10 @@ Adhering to previously described approaches (see Source) and especially the Baye A separating character for antimicrobial columns in combination antibiograms. +sort_columns +A logical to indicate whether the antimicrobial columns must be sorted on name. + + 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. Set simulations, conf_interval, and interval_side to adjust. @@ -572,9 +577,9 @@ Adhering to previously described approaches (see Source) and especially the Baye #> # An Antibiogram (WISCA / 95% CI): 3 × 4 #> `Syndromic Group` `Piperacillin/tazobactam` Piperacillin/tazobactam + Gentam…¹ #> <chr> <chr> <chr> -#> 1 Clinical 73.4% (68.3-78.6%) 92.4% (90.7-93.8%) -#> 2 ICU 57.4% (49.7-65.4%) 85% (82.1-87.9%) -#> 3 Outpatient 57% (47.4-66.7%) 74.4% (68.6-79.5%) +#> 1 Clinical 73.4% (68.3-78.6%) 92.3% (90.7-93.7%) +#> 2 ICU 57.4% (49.7-65.4%) 84.9% (82.1-87.6%) +#> 3 Outpatient 57% (47.4-66.7%) 74.6% (68.8-79.8%) #> # ℹ abbreviated name: ¹`Piperacillin/tazobactam + Gentamicin` #> # ℹ 1 more variable: `Piperacillin/tazobactam + Tobramycin` <chr> #> # Use `ggplot2::autoplot()` or base R `plot()` to create a plot of this antibiogram, diff --git a/reference/antimicrobial_selectors.html b/reference/antimicrobial_selectors.html index 93ce4ef3b..c3dabbef6 100644 --- a/reference/antimicrobial_selectors.html +++ b/reference/antimicrobial_selectors.html @@ -17,7 +17,7 @@ my_data_with_all_these_columns %>% AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/antimicrobials.html b/reference/antimicrobials.html index a2e3cacae..bd4c5b65b 100644 --- a/reference/antimicrobials.html +++ b/reference/antimicrobials.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/as.ab.html b/reference/as.ab.html index 2a8e7fd33..27b1bc67b 100644 --- a/reference/as.ab.html +++ b/reference/as.ab.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/as.av.html b/reference/as.av.html index a49c35a10..d344a0457 100644 --- a/reference/as.av.html +++ b/reference/as.av.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/as.disk.html b/reference/as.disk.html index 5c9f2bc00..d76dfaf18 100644 --- a/reference/as.disk.html +++ b/reference/as.disk.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/as.mic.html b/reference/as.mic.html index 972d8b9d4..386aec98f 100644 --- a/reference/as.mic.html +++ b/reference/as.mic.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/as.mo.html b/reference/as.mo.html index 1978becb7..b9d2bc558 100644 --- a/reference/as.mo.html +++ b/reference/as.mo.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/as.sir.html b/reference/as.sir.html index 484dd1cb6..8bf085d0d 100644 --- a/reference/as.sir.html +++ b/reference/as.sir.html @@ -9,7 +9,7 @@ Breakpoints are currently implemented from EUCAST 2011-2025 and CLSI 2011-2025, AMR (for R) - 2.1.1.9267 + 2.1.1.9268 @@ -409,10 +409,10 @@ Breakpoints are currently implemented from EUCAST 2011-2025 and CLSI 2011-2025, #> # A tibble: 4 × 18 #> datetime index method ab_given mo_given host_given input_given #> <dttm> <int> <chr> <chr> <chr> <chr> <chr> -#> 1 2025-05-01 09:53:45 1 MIC amoxicillin Escherich… human 8 -#> 2 2025-05-01 09:53:45 1 MIC cipro Escherich… human 0.256 -#> 3 2025-05-01 09:53:45 1 DISK tobra Escherich… human 16 -#> 4 2025-05-01 09:53:45 1 DISK genta Escherich… human 18 +#> 1 2025-05-01 12:50:15 1 MIC amoxicillin Escherich… human 8 +#> 2 2025-05-01 12:50:15 1 MIC cipro Escherich… human 0.256 +#> 3 2025-05-01 12:50:15 1 DISK tobra Escherich… human 16 +#> 4 2025-05-01 12:50:15 1 DISK genta Escherich… human 18 #> # ℹ 11 more variables: ab <ab>, mo <mo>, host <chr>, input <chr>, #> # outcome <sir>, notes <chr>, guideline <chr>, ref_table <chr>, uti <lgl>, #> # breakpoint_S_R <chr>, site <chr> diff --git a/reference/atc_online.html b/reference/atc_online.html index 88436baef..9d6a3bccb 100644 --- a/reference/atc_online.html +++ b/reference/atc_online.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/av_from_text.html b/reference/av_from_text.html index dd52bd601..7e67a8fa8 100644 --- a/reference/av_from_text.html +++ b/reference/av_from_text.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/av_property.html b/reference/av_property.html index 66ea93df1..bed6bd19c 100644 --- a/reference/av_property.html +++ b/reference/av_property.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/availability.html b/reference/availability.html index 420f47fd1..29f26c155 100644 --- a/reference/availability.html +++ b/reference/availability.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/bug_drug_combinations.html b/reference/bug_drug_combinations.html index f77b268fc..c12f956ce 100644 --- a/reference/bug_drug_combinations.html +++ b/reference/bug_drug_combinations.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/clinical_breakpoints.html b/reference/clinical_breakpoints.html index 33e78d4c7..3d8d245e7 100644 --- a/reference/clinical_breakpoints.html +++ b/reference/clinical_breakpoints.html @@ -21,7 +21,7 @@ Use as.sir() to transform MICs or disks measurements to SIR values.">AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/count.html b/reference/count.html index 70e2bcd80..484293afb 100644 --- a/reference/count.html +++ b/reference/count.html @@ -9,7 +9,7 @@ count_resistant() should be used to count resistant isolates, count_susceptible( AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/custom_eucast_rules.html b/reference/custom_eucast_rules.html index 964cbbf1d..29ad03269 100644 --- a/reference/custom_eucast_rules.html +++ b/reference/custom_eucast_rules.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/dosage.html b/reference/dosage.html index 455991769..19999dab2 100644 --- a/reference/dosage.html +++ b/reference/dosage.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/eucast_rules.html b/reference/eucast_rules.html index 4423b20ad..1dff7c81a 100644 --- a/reference/eucast_rules.html +++ b/reference/eucast_rules.html @@ -9,7 +9,7 @@ To improve the interpretation of the antibiogram before EUCAST rules are applied AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/example_isolates.html b/reference/example_isolates.html index 7fca8a430..1bfb4505f 100644 --- a/reference/example_isolates.html +++ b/reference/example_isolates.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/example_isolates_unclean.html b/reference/example_isolates_unclean.html index c05bdce14..872c648d0 100644 --- a/reference/example_isolates_unclean.html +++ b/reference/example_isolates_unclean.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/export_ncbi_biosample.html b/reference/export_ncbi_biosample.html index f9a60fd2e..b6b7dc084 100644 --- a/reference/export_ncbi_biosample.html +++ b/reference/export_ncbi_biosample.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/first_isolate.html b/reference/first_isolate.html index 13e789fde..f142ba14a 100644 --- a/reference/first_isolate.html +++ b/reference/first_isolate.html @@ -9,7 +9,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/g.test.html b/reference/g.test.html index 66601b59a..1c8e81c23 100644 --- a/reference/g.test.html +++ b/reference/g.test.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/get_episode.html b/reference/get_episode.html index 5e71e0aef..388f2752e 100644 --- a/reference/get_episode.html +++ b/reference/get_episode.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/ggplot_pca.html b/reference/ggplot_pca.html index b356e878a..98ef3047f 100644 --- a/reference/ggplot_pca.html +++ b/reference/ggplot_pca.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/ggplot_sir.html b/reference/ggplot_sir.html index af5cb7c77..27da7437d 100644 --- a/reference/ggplot_sir.html +++ b/reference/ggplot_sir.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/guess_ab_col.html b/reference/guess_ab_col.html index 03108d4b7..2740debaa 100644 --- a/reference/guess_ab_col.html +++ b/reference/guess_ab_col.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/index.html b/reference/index.html index 04ee979a8..2281846e9 100644 --- a/reference/index.html +++ b/reference/index.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/intrinsic_resistant.html b/reference/intrinsic_resistant.html index 77607bd45..f4fe570dc 100644 --- a/reference/intrinsic_resistant.html +++ b/reference/intrinsic_resistant.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/italicise_taxonomy.html b/reference/italicise_taxonomy.html index c0bf0e168..0cf1a0042 100644 --- a/reference/italicise_taxonomy.html +++ b/reference/italicise_taxonomy.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/join.html b/reference/join.html index 282a0e8c4..889378526 100644 --- a/reference/join.html +++ b/reference/join.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/key_antimicrobials.html b/reference/key_antimicrobials.html index 0f4f44072..7e49ee2fb 100644 --- a/reference/key_antimicrobials.html +++ b/reference/key_antimicrobials.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/kurtosis.html b/reference/kurtosis.html index 6398ec2d7..51b1d6801 100644 --- a/reference/kurtosis.html +++ b/reference/kurtosis.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/like.html b/reference/like.html index b4f74ebaa..5874e8326 100644 --- a/reference/like.html +++ b/reference/like.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/mdro.html b/reference/mdro.html index 3f38a5903..1465952e9 100644 --- a/reference/mdro.html +++ b/reference/mdro.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/mean_amr_distance.html b/reference/mean_amr_distance.html index 2cd80a3ef..e22862390 100644 --- a/reference/mean_amr_distance.html +++ b/reference/mean_amr_distance.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/microorganisms.codes.html b/reference/microorganisms.codes.html index 981ed609a..0851c0fea 100644 --- a/reference/microorganisms.codes.html +++ b/reference/microorganisms.codes.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/microorganisms.groups.html b/reference/microorganisms.groups.html index ad656630a..2ea9464a8 100644 --- a/reference/microorganisms.groups.html +++ b/reference/microorganisms.groups.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/microorganisms.html b/reference/microorganisms.html index 90c761aa3..67986bf45 100644 --- a/reference/microorganisms.html +++ b/reference/microorganisms.html @@ -9,7 +9,7 @@ This data set is carefully crafted, yet made 100% reproducible from public and a AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/mo_matching_score.html b/reference/mo_matching_score.html index b2f5bb0d5..d06c919ec 100644 --- a/reference/mo_matching_score.html +++ b/reference/mo_matching_score.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/mo_property.html b/reference/mo_property.html index 242784faa..672aaccdd 100644 --- a/reference/mo_property.html +++ b/reference/mo_property.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/mo_source.html b/reference/mo_source.html index 675f0fc6c..13c80580d 100644 --- a/reference/mo_source.html +++ b/reference/mo_source.html @@ -9,7 +9,7 @@ This is the fastest way to have your organisation (or analysis) specific codes p AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/pca.html b/reference/pca.html index adfd78511..d9b13369f 100644 --- a/reference/pca.html +++ b/reference/pca.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/plot.html b/reference/plot.html index a22b8ec2c..592304708 100644 --- a/reference/plot.html +++ b/reference/plot.html @@ -9,7 +9,7 @@ Especially the scale_*_mic() functions are relevant wrappers to plot MIC values AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/proportion.html b/reference/proportion.html index 2caab7b6d..5cbc9d3b9 100644 --- a/reference/proportion.html +++ b/reference/proportion.html @@ -9,7 +9,7 @@ resistance() should be used to calculate resistance, susceptibility() should be AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/random.html b/reference/random.html index e2b10582b..984f8c5aa 100644 --- a/reference/random.html +++ b/reference/random.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/resistance_predict.html b/reference/resistance_predict.html index 8d19d9a3a..b46e83ef7 100644 --- a/reference/resistance_predict.html +++ b/reference/resistance_predict.html @@ -9,7 +9,7 @@ NOTE: These functions are deprecated and will be removed in a future version. Us AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/skewness.html b/reference/skewness.html index a8db9df84..be2d4fb5a 100644 --- a/reference/skewness.html +++ b/reference/skewness.html @@ -9,7 +9,7 @@ When negative ('left-skewed'): the left tail is longer; the mass of the distribu AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/top_n_microorganisms.html b/reference/top_n_microorganisms.html index 1e4c24288..06e128f7a 100644 --- a/reference/top_n_microorganisms.html +++ b/reference/top_n_microorganisms.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/reference/translate.html b/reference/translate.html index 3aba09dbc..182c8285c 100644 --- a/reference/translate.html +++ b/reference/translate.html @@ -7,7 +7,7 @@ AMR (for R) - 2.1.1.9267 + 2.1.1.9268 diff --git a/search.json b/search.json index eb3550678..07a98a55e 100644 --- a/search.json +++ b/search.json @@ -1 +1 @@ -[{"path":"https://amr-for-r.org/articles/AMR.html","id":"introduction","dir":"Articles","previous_headings":"","what":"Introduction","title":"How to conduct AMR data analysis","text":"Conducting AMR data analysis unfortunately requires -depth knowledge different scientific fields, makes hard right. least, requires: Good questions (always start !) reliable data thorough understanding (clinical) epidemiology, understand clinical epidemiological relevance possible bias results thorough understanding (clinical) microbiology/infectious diseases, understand microorganisms causal infections implications pharmaceutical treatment, well understanding intrinsic acquired microbial resistance Experience data analysis microbiological tests results, understand determination limitations MIC values interpretations SIR values Availability biological taxonomy microorganisms probably normalisation factors pharmaceuticals, defined daily doses (DDD) Available (inter-)national guidelines, profound methods apply course, instantly provide knowledge experience. AMR package, aimed providing (1) tools simplify antimicrobial resistance data cleaning, transformation analysis, (2) methods easily incorporate international guidelines (3) scientifically reliable reference data, including requirements mentioned . AMR package enables standardised reproducible AMR data analysis, application evidence-based rules, determination first isolates, translation various codes microorganisms antimicrobial agents, determination (multi-drug) resistant microorganisms, calculation antimicrobial resistance, prevalence future trends.","code":""},{"path":"https://amr-for-r.org/articles/AMR.html","id":"preparation","dir":"Articles","previous_headings":"","what":"Preparation","title":"How to conduct AMR data analysis","text":"tutorial, create fake demonstration data work . can skip Cleaning data already data ready. start analysis, try make structure data generally look like :","code":""},{"path":"https://amr-for-r.org/articles/AMR.html","id":"needed-r-packages","dir":"Articles","previous_headings":"Preparation","what":"Needed R packages","title":"How to conduct AMR data analysis","text":"many uses R, need additional packages AMR data analysis. package works closely together tidyverse packages dplyr ggplot2 RStudio. tidyverse tremendously improves way conduct data science - allows natural way writing syntaxes creating beautiful plots R. also use cleaner package, can used cleaning data creating frequency tables. AMR package contains data set example_isolates_unclean, might look data users extracted laboratory systems: AMR data analysis, like microorganism column contain valid, --date taxonomy, antibiotic columns cleaned SIR values well.","code":"library(dplyr) library(ggplot2) library(AMR) # (if not yet installed, install with:) # install.packages(c(\"dplyr\", \"ggplot2\", \"AMR\")) example_isolates_unclean #> # A tibble: 3,000 × 8 #> patient_id hospital date bacteria AMX AMC CIP GEN #> #> 1 J3 A 2012-11-21 E. coli R I S S #> 2 R7 A 2018-04-03 K. pneumoniae R I S S #> 3 P3 A 2014-09-19 E. coli R S S S #> 4 P10 A 2015-12-10 E. coli S I S S #> 5 B7 A 2015-03-02 E. coli S S S S #> 6 W3 A 2018-03-31 S. aureus R S R S #> 7 J8 A 2016-06-14 E. coli R S S S #> 8 M3 A 2015-10-25 E. coli R S S S #> 9 J3 A 2019-06-19 E. coli S S S S #> 10 G6 A 2015-04-27 S. aureus S S S S #> # ℹ 2,990 more rows # we will use 'our_data' as the data set name for this tutorial our_data <- example_isolates_unclean"},{"path":"https://amr-for-r.org/articles/AMR.html","id":"taxonomy-of-microorganisms","dir":"Articles","previous_headings":"Preparation","what":"Taxonomy of microorganisms","title":"How to conduct AMR data analysis","text":".mo(), users can transform arbitrary microorganism names codes current taxonomy. AMR package contains --date taxonomic data. specific, currently included data retrieved 24 Jun 2024. codes AMR packages come .mo() short, still human readable. importantly, .mo() supports kinds input: first character codes denote taxonomic kingdom, Bacteria (B), Fungi (F), Protozoa (P). AMR package also contain functions directly retrieve taxonomic properties, name, genus, species, family, order, even Gram-stain. start mo_ use .mo() internally, still arbitrary user input can used: Now can thus clean data: Apparently, uncertainty translation taxonomic codes. Let’s check : ’s good.","code":"as.mo(\"Klebsiella pneumoniae\") #> Class 'mo' #> [1] B_KLBSL_PNMN as.mo(\"K. pneumoniae\") #> Class 'mo' #> [1] B_KLBSL_PNMN as.mo(\"KLEPNE\") #> Class 'mo' #> [1] B_KLBSL_PNMN as.mo(\"KLPN\") #> Class 'mo' #> [1] B_KLBSL_PNMN mo_family(\"K. pneumoniae\") #> [1] \"Enterobacteriaceae\" mo_genus(\"K. pneumoniae\") #> [1] \"Klebsiella\" mo_species(\"K. pneumoniae\") #> [1] \"pneumoniae\" mo_gramstain(\"Klebsiella pneumoniae\") #> [1] \"Gram-negative\" mo_ref(\"K. pneumoniae\") #> [1] \"Trevisan, 1887\" mo_snomed(\"K. pneumoniae\") #> [[1]] #> [1] \"1098101000112102\" \"446870005\" \"1098201000112108\" \"409801009\" #> [5] \"56415008\" \"714315002\" \"713926009\" our_data$bacteria <- as.mo(our_data$bacteria, info = TRUE) #> ℹ Retrieved values from the microorganisms.codes data set for \"ESCCOL\", #> \"KLEPNE\", \"STAAUR\", and \"STRPNE\". #> ℹ Microorganism translation was uncertain for four microorganisms. Run #> mo_uncertainties() to review these uncertainties, or use #> add_custom_microorganisms() to add custom entries. mo_uncertainties() #> Matching scores are based on the resemblance between the input and the full #> taxonomic name, and the pathogenicity in humans. See ?mo_matching_score. #> Colour keys: 0.000-0.549 0.550-0.649 0.650-0.749 0.750-1.000 #> #> -------------------------------------------------------------------------------- #> \"E. coli\" -> Escherichia coli (B_ESCHR_COLI, 0.688) #> Also matched: Enterococcus crotali (0.650), Escherichia coli coli #> (0.643), Escherichia coli expressing (0.611), Enterobacter cowanii #> (0.600), Enterococcus columbae (0.595), Enterococcus camelliae (0.591), #> Enterococcus casseliflavus (0.577), Enterobacter cloacae cloacae #> (0.571), Enterobacter cloacae complex (0.571), and Enterobacter cloacae #> dissolvens (0.565) #> -------------------------------------------------------------------------------- #> \"K. pneumoniae\" -> Klebsiella pneumoniae (B_KLBSL_PNMN, 0.786) #> Also matched: Klebsiella pneumoniae complex (0.707), Klebsiella #> pneumoniae ozaenae (0.707), Klebsiella pneumoniae pneumoniae (0.688), #> Klebsiella pneumoniae rhinoscleromatis (0.658), Klebsiella pasteurii #> (0.500), Klebsiella planticola (0.500), Kingella potus (0.400), #> Kluyveromyces pseudotropicale (0.386), Kluyveromyces pseudotropicalis #> (0.363), and Kosakonia pseudosacchari (0.361) #> -------------------------------------------------------------------------------- #> \"S. aureus\" -> Staphylococcus aureus (B_STPHY_AURS, 0.690) #> Also matched: Staphylococcus aureus aureus (0.643), Staphylococcus #> argenteus (0.625), Staphylococcus aureus anaerobius (0.625), #> Staphylococcus auricularis (0.615), Salmonella Aurelianis (0.595), #> Salmonella Aarhus (0.588), Salmonella Amounderness (0.587), #> Staphylococcus argensis (0.587), Streptococcus australis (0.587), and #> Salmonella choleraesuis arizonae (0.562) #> -------------------------------------------------------------------------------- #> \"S. pneumoniae\" -> Streptococcus pneumoniae (B_STRPT_PNMN, 0.750) #> Also matched: Streptococcus pseudopneumoniae (0.700), Streptococcus #> phocae salmonis (0.552), Serratia proteamaculans quinovora (0.545), #> Streptococcus pseudoporcinus (0.536), Staphylococcus piscifermentans #> (0.533), Staphylococcus pseudintermedius (0.532), Serratia #> proteamaculans proteamaculans (0.526), Streptococcus gallolyticus #> pasteurianus (0.526), Salmonella Portanigra (0.524), and Streptococcus #> periodonticum (0.519) #> #> Only the first 10 other matches of each record are shown. Run #> print(mo_uncertainties(), n = ...) to view more entries, or save #> mo_uncertainties() to an object."},{"path":"https://amr-for-r.org/articles/AMR.html","id":"antibiotic-results","dir":"Articles","previous_headings":"Preparation","what":"Antibiotic results","title":"How to conduct AMR data analysis","text":"column antibiotic test results must also cleaned. AMR package comes three new data types work test results: mic minimal inhibitory concentrations (MIC), disk disk diffusion diameters, sir SIR data interpreted already. package can also determine SIR values based MIC disk diffusion values, read .sir() page. now, just clean SIR columns data using dplyr: basically cleaning, time start data inclusion.","code":"# method 1, be explicit about the columns: our_data <- our_data %>% mutate_at(vars(AMX:GEN), as.sir) # method 2, let the AMR package determine the eligible columns our_data <- our_data %>% mutate_if(is_sir_eligible, as.sir) # result: our_data #> # A tibble: 3,000 × 8 #> patient_id hospital date bacteria AMX AMC CIP GEN #> #> 1 J3 A 2012-11-21 B_ESCHR_COLI R I S S #> 2 R7 A 2018-04-03 B_KLBSL_PNMN R I S S #> 3 P3 A 2014-09-19 B_ESCHR_COLI R S S S #> 4 P10 A 2015-12-10 B_ESCHR_COLI S I S S #> 5 B7 A 2015-03-02 B_ESCHR_COLI S S S S #> 6 W3 A 2018-03-31 B_STPHY_AURS R S R S #> 7 J8 A 2016-06-14 B_ESCHR_COLI R S S S #> 8 M3 A 2015-10-25 B_ESCHR_COLI R S S S #> 9 J3 A 2019-06-19 B_ESCHR_COLI S S S S #> 10 G6 A 2015-04-27 B_STPHY_AURS S S S S #> # ℹ 2,990 more rows"},{"path":"https://amr-for-r.org/articles/AMR.html","id":"first-isolates","dir":"Articles","previous_headings":"Preparation","what":"First isolates","title":"How to conduct AMR data analysis","text":"need know isolates can actually use analysis without repetition bias. conduct analysis antimicrobial resistance, must include first isolate every patient per episode (Hindler et al., Clin Infect Dis. 2007). , easily get overestimate underestimate resistance antibiotic. Imagine patient admitted MRSA found 5 different blood cultures following weeks (yes, countries like Netherlands blood drawing policies). resistance percentage oxacillin isolates overestimated, included MRSA . clearly selection bias. Clinical Laboratory Standards Institute (CLSI) appoints follows: (…) preparing cumulative antibiogram guide clinical decisions empirical antimicrobial therapy initial infections, first isolate given species per patient, per analysis period (eg, one year) included, irrespective body site, antimicrobial susceptibility profile, phenotypical characteristics (eg, biotype). first isolate easily identified, cumulative antimicrobial susceptibility test data prepared using first isolate generally comparable cumulative antimicrobial susceptibility test data calculated methods, providing duplicate isolates excluded. M39-A4 Analysis Presentation Cumulative Antimicrobial Susceptibility Test Data, 4th Edition. CLSI, 2014. Chapter 6.4 AMR package includes methodology first_isolate() function able apply four different methods defined Hindler et al. 2007: phenotype-based, episode-based, patient-based, isolate-based. right method depends goals analysis, default phenotype-based method case method properly correct duplicate isolates. Read methods first_isolate() page. outcome function can easily added data: 91% suitable resistance analysis! can now filter filter() function, also dplyr package: future use, two syntaxes can shortened: end 2 724 isolates analysis. Now data looks like: Time analysis.","code":"our_data <- our_data %>% mutate(first = first_isolate(info = TRUE)) #> ℹ Determining first isolates using an episode length of 365 days #> ℹ Using column 'bacteria' as input for col_mo. #> ℹ Using column 'date' as input for col_date. #> ℹ Using column 'patient_id' as input for col_patient_id. #> ℹ Basing inclusion on all antimicrobial results, using a points threshold #> of 2 #> => Found 2,724 'phenotype-based' first isolates (90.8% of total where a #> microbial ID was available) our_data_1st <- our_data %>% filter(first == TRUE) our_data_1st <- our_data %>% filter_first_isolate() our_data_1st #> # A tibble: 2,724 × 9 #> patient_id hospital date bacteria AMX AMC CIP GEN first #> #> 1 J3 A 2012-11-21 B_ESCHR_COLI R I S S TRUE #> 2 R7 A 2018-04-03 B_KLBSL_PNMN R I S S TRUE #> 3 P3 A 2014-09-19 B_ESCHR_COLI R S S S TRUE #> 4 P10 A 2015-12-10 B_ESCHR_COLI S I S S TRUE #> 5 B7 A 2015-03-02 B_ESCHR_COLI S S S S TRUE #> 6 W3 A 2018-03-31 B_STPHY_AURS R S R S TRUE #> 7 M3 A 2015-10-25 B_ESCHR_COLI R S S S TRUE #> 8 J3 A 2019-06-19 B_ESCHR_COLI S S S S TRUE #> 9 G6 A 2015-04-27 B_STPHY_AURS S S S S TRUE #> 10 P4 A 2011-06-21 B_ESCHR_COLI S S S S TRUE #> # ℹ 2,714 more rows"},{"path":"https://amr-for-r.org/articles/AMR.html","id":"analysing-the-data","dir":"Articles","previous_headings":"","what":"Analysing the data","title":"How to conduct AMR data analysis","text":"base R summary() function gives good first impression, comes support new mo sir classes now data set:","code":"summary(our_data_1st) #> patient_id hospital date #> Length:2724 Length:2724 Min. :2011-01-01 #> Class :character Class :character 1st Qu.:2013-04-07 #> Mode :character Mode :character Median :2015-06-03 #> Mean :2015-06-09 #> 3rd Qu.:2017-08-11 #> Max. :2019-12-27 #> bacteria AMX AMC #> Class :mo Class:sir Class:sir #> :0 %S :41.6% (n=1133) %S :52.6% (n=1432) #> Unique:4 %SDD : 0.0% (n=0) %SDD : 0.0% (n=0) #> #1 :B_ESCHR_COLI %I :16.4% (n=446) %I :12.2% (n=333) #> #2 :B_STPHY_AURS %R :42.0% (n=1145) %R :35.2% (n=959) #> #3 :B_STRPT_PNMN %NI : 0.0% (n=0) %NI : 0.0% (n=0) #> CIP GEN first #> Class:sir Class:sir Mode:logical #> %S :52.5% (n=1431) %S :61.0% (n=1661) TRUE:2724 #> %SDD : 0.0% (n=0) %SDD : 0.0% (n=0) #> %I : 6.5% (n=176) %I : 3.0% (n=82) #> %R :41.0% (n=1117) %R :36.0% (n=981) #> %NI : 0.0% (n=0) %NI : 0.0% (n=0) glimpse(our_data_1st) #> Rows: 2,724 #> Columns: 9 #> $ patient_id \"J3\", \"R7\", \"P3\", \"P10\", \"B7\", \"W3\", \"M3\", \"J3\", \"G6\", \"P4\"… #> $ hospital \"A\", \"A\", \"A\", \"A\", \"A\", \"A\", \"A\", \"A\", \"A\", \"A\", \"A\", \"A\",… #> $ date 2012-11-21, 2018-04-03, 2014-09-19, 2015-12-10, 2015-03-02… #> $ bacteria \"B_ESCHR_COLI\", \"B_KLBSL_PNMN\", \"B_ESCHR_COLI\", \"B_ESCHR_COL… #> $ AMX R, R, R, S, S, R, R, S, S, S, S, R, S, S, R, R, R, R, S, R,… #> $ AMC I, I, S, I, S, S, S, S, S, S, S, S, S, S, S, S, S, R, S, S,… #> $ CIP S, S, S, S, S, R, S, S, S, S, S, S, S, S, S, S, S, S, S, S,… #> $ GEN S, S, S, S, S, S, S, S, S, S, S, R, S, S, S, S, S, S, S, S,… #> $ first TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,… # number of unique values per column: sapply(our_data_1st, n_distinct) #> patient_id hospital date bacteria AMX AMC CIP #> 260 3 1854 4 3 3 3 #> GEN first #> 3 1"},{"path":"https://amr-for-r.org/articles/AMR.html","id":"availability-of-species","dir":"Articles","previous_headings":"Analysing the data","what":"Availability of species","title":"How to conduct AMR data analysis","text":"just get idea species distributed, create frequency table count() based name microorganisms:","code":"our_data %>% count(mo_name(bacteria), sort = TRUE) #> # A tibble: 4 × 2 #> `mo_name(bacteria)` n #> #> 1 Escherichia coli 1518 #> 2 Staphylococcus aureus 730 #> 3 Streptococcus pneumoniae 426 #> 4 Klebsiella pneumoniae 326 our_data_1st %>% count(mo_name(bacteria), sort = TRUE) #> # A tibble: 4 × 2 #> `mo_name(bacteria)` n #> #> 1 Escherichia coli 1321 #> 2 Staphylococcus aureus 682 #> 3 Streptococcus pneumoniae 402 #> 4 Klebsiella pneumoniae 319"},{"path":"https://amr-for-r.org/articles/AMR.html","id":"select-and-filter-with-antibiotic-selectors","dir":"Articles","previous_headings":"Analysing the data","what":"Select and filter with antibiotic selectors","title":"How to conduct AMR data analysis","text":"Using -called antibiotic class selectors, can select filter columns based antibiotic class antibiotic results :","code":"our_data_1st %>% select(date, aminoglycosides()) #> ℹ For aminoglycosides() using column 'GEN' (gentamicin) #> # A tibble: 2,724 × 2 #> date GEN #> #> 1 2012-11-21 S #> 2 2018-04-03 S #> 3 2014-09-19 S #> 4 2015-12-10 S #> 5 2015-03-02 S #> 6 2018-03-31 S #> 7 2015-10-25 S #> 8 2019-06-19 S #> 9 2015-04-27 S #> 10 2011-06-21 S #> # ℹ 2,714 more rows our_data_1st %>% select(bacteria, betalactams()) #> ℹ For betalactams() using columns 'AMX' (amoxicillin) and 'AMC' #> (amoxicillin/clavulanic acid) #> # A tibble: 2,724 × 3 #> bacteria AMX AMC #> #> 1 B_ESCHR_COLI R I #> 2 B_KLBSL_PNMN R I #> 3 B_ESCHR_COLI R S #> 4 B_ESCHR_COLI S I #> 5 B_ESCHR_COLI S S #> 6 B_STPHY_AURS R S #> 7 B_ESCHR_COLI R S #> 8 B_ESCHR_COLI S S #> 9 B_STPHY_AURS S S #> 10 B_ESCHR_COLI S S #> # ℹ 2,714 more rows our_data_1st %>% select(bacteria, where(is.sir)) #> # A tibble: 2,724 × 5 #> bacteria AMX AMC CIP GEN #> #> 1 B_ESCHR_COLI R I S S #> 2 B_KLBSL_PNMN R I S S #> 3 B_ESCHR_COLI R S S S #> 4 B_ESCHR_COLI S I S S #> 5 B_ESCHR_COLI S S S S #> 6 B_STPHY_AURS R S R S #> 7 B_ESCHR_COLI R S S S #> 8 B_ESCHR_COLI S S S S #> 9 B_STPHY_AURS S S S S #> 10 B_ESCHR_COLI S S S S #> # ℹ 2,714 more rows # filtering using AB selectors is also possible: our_data_1st %>% filter(any(aminoglycosides() == \"R\")) #> ℹ For aminoglycosides() using column 'GEN' (gentamicin) #> # A tibble: 981 × 9 #> patient_id hospital date bacteria AMX AMC CIP GEN first #> #> 1 J5 A 2017-12-25 B_STRPT_PNMN R S S R TRUE #> 2 X1 A 2017-07-04 B_STPHY_AURS R S S R TRUE #> 3 B3 A 2016-07-24 B_ESCHR_COLI S S S R TRUE #> 4 V7 A 2012-04-03 B_ESCHR_COLI S S S R TRUE #> 5 C9 A 2017-03-23 B_ESCHR_COLI S S S R TRUE #> 6 R1 A 2018-06-10 B_STPHY_AURS S S S R TRUE #> 7 S2 A 2013-07-19 B_STRPT_PNMN S S S R TRUE #> 8 P5 A 2019-03-09 B_STPHY_AURS S S S R TRUE #> 9 Q8 A 2019-08-10 B_STPHY_AURS S S S R TRUE #> 10 K5 A 2013-03-15 B_STRPT_PNMN S S S R TRUE #> # ℹ 971 more rows our_data_1st %>% filter(all(betalactams() == \"R\")) #> ℹ For betalactams() using columns 'AMX' (amoxicillin) and 'AMC' #> (amoxicillin/clavulanic acid) #> # A tibble: 462 × 9 #> patient_id hospital date bacteria AMX AMC CIP GEN first #> #> 1 M7 A 2013-07-22 B_STRPT_PNMN R R S S TRUE #> 2 R10 A 2013-12-20 B_STPHY_AURS R R S S TRUE #> 3 R7 A 2015-10-25 B_STPHY_AURS R R S S TRUE #> 4 R8 A 2019-10-25 B_STPHY_AURS R R S S TRUE #> 5 B6 A 2016-11-20 B_ESCHR_COLI R R R R TRUE #> 6 I7 A 2015-08-19 B_ESCHR_COLI R R S S TRUE #> 7 N3 A 2014-12-29 B_STRPT_PNMN R R R S TRUE #> 8 Q2 A 2019-09-22 B_ESCHR_COLI R R S S TRUE #> 9 X7 A 2011-03-20 B_ESCHR_COLI R R S R TRUE #> 10 V1 A 2018-08-07 B_STPHY_AURS R R S S TRUE #> # ℹ 452 more rows # even works in base R (since R 3.0): our_data_1st[all(betalactams() == \"R\"), ] #> ℹ For betalactams() using columns 'AMX' (amoxicillin) and 'AMC' #> (amoxicillin/clavulanic acid) #> # A tibble: 462 × 9 #> patient_id hospital date bacteria AMX AMC CIP GEN first #> #> 1 M7 A 2013-07-22 B_STRPT_PNMN R R S S TRUE #> 2 R10 A 2013-12-20 B_STPHY_AURS R R S S TRUE #> 3 R7 A 2015-10-25 B_STPHY_AURS R R S S TRUE #> 4 R8 A 2019-10-25 B_STPHY_AURS R R S S TRUE #> 5 B6 A 2016-11-20 B_ESCHR_COLI R R R R TRUE #> 6 I7 A 2015-08-19 B_ESCHR_COLI R R S S TRUE #> 7 N3 A 2014-12-29 B_STRPT_PNMN R R R S TRUE #> 8 Q2 A 2019-09-22 B_ESCHR_COLI R R S S TRUE #> 9 X7 A 2011-03-20 B_ESCHR_COLI R R S R TRUE #> 10 V1 A 2018-08-07 B_STPHY_AURS R R S S TRUE #> # ℹ 452 more rows"},{"path":"https://amr-for-r.org/articles/AMR.html","id":"generate-antibiograms","dir":"Articles","previous_headings":"Analysing the data","what":"Generate antibiograms","title":"How to conduct AMR data analysis","text":"Since AMR v2.0 (March 2023), easy create different types antibiograms, support 20 different languages. four antibiogram types, proposed Klinker et al. (2021, DOI 10.1177/20499361211011373), supported new antibiogram() function: Traditional Antibiogram (TA) e.g, susceptibility Pseudomonas aeruginosa piperacillin/tazobactam (TZP) Combination Antibiogram (CA) e.g, sdditional susceptibility Pseudomonas aeruginosa TZP + tobramycin versus TZP alone Syndromic Antibiogram (SA) e.g, susceptibility Pseudomonas aeruginosa TZP among respiratory specimens (obtained among ICU patients ) Weighted-Incidence Syndromic Combination Antibiogram (WISCA) e.g, susceptibility Pseudomonas aeruginosa TZP among respiratory specimens (obtained among ICU patients ) male patients age >=65 years heart failure section, show use antibiogram() function create antibiogram types. starters, included example_isolates data set looks like:","code":"example_isolates #> # A tibble: 2,000 × 46 #> date patient age gender ward mo PEN OXA FLC AMX #> #> 1 2002-01-02 A77334 65 F Clinical B_ESCHR_COLI R NA NA NA #> 2 2002-01-03 A77334 65 F Clinical B_ESCHR_COLI R NA NA NA #> 3 2002-01-07 067927 45 F ICU B_STPHY_EPDR R NA R NA #> 4 2002-01-07 067927 45 F ICU B_STPHY_EPDR R NA R NA #> 5 2002-01-13 067927 45 F ICU B_STPHY_EPDR R NA R NA #> 6 2002-01-13 067927 45 F ICU B_STPHY_EPDR R NA R NA #> 7 2002-01-14 462729 78 M Clinical B_STPHY_AURS R NA S R #> 8 2002-01-14 462729 78 M Clinical B_STPHY_AURS R NA S R #> 9 2002-01-16 067927 45 F ICU B_STPHY_EPDR R NA R NA #> 10 2002-01-17 858515 79 F ICU B_STPHY_EPDR R NA S NA #> # ℹ 1,990 more rows #> # ℹ 36 more variables: AMC , AMP , TZP , CZO , FEP , #> # CXM , FOX , CTX , CAZ , CRO , GEN , #> # TOB , AMK , KAN , TMP , SXT , NIT , #> # FOS , LNZ , CIP , MFX , VAN , TEC , #> # TCY , TGC , DOX , ERY , CLI , AZM , #> # IPM , MEM , MTR , CHL , COL , MUP , …"},{"path":"https://amr-for-r.org/articles/AMR.html","id":"traditional-antibiogram","dir":"Articles","previous_headings":"Analysing the data > Generate antibiograms","what":"Traditional Antibiogram","title":"How to conduct AMR data analysis","text":"create traditional antibiogram, simply state antibiotics used. antibiotics argument antibiogram() function supports (combination) previously mentioned antibiotic class selectors: Notice antibiogram() function automatically prints right format using Quarto R Markdown (page), even applies italics taxonomic names (using italicise_taxonomy() internally). also uses language OS either English, Chinese, Czech, Danish, Dutch, Finnish, French, German, Greek, Italian, Japanese, Norwegian, Polish, Portuguese, Romanian, Russian, Spanish, Swedish, Turkish, Ukrainian. next example, force language Spanish using language argument:","code":"antibiogram(example_isolates, antibiotics = c(aminoglycosides(), carbapenems())) #> ℹ For aminoglycosides() using columns 'GEN' (gentamicin), 'TOB' #> (tobramycin), 'AMK' (amikacin), and 'KAN' (kanamycin) #> ℹ For carbapenems() using columns 'IPM' (imipenem) and 'MEM' (meropenem) antibiogram(example_isolates, mo_transform = \"gramstain\", antibiotics = aminoglycosides(), ab_transform = \"name\", language = \"es\") #> ℹ For aminoglycosides() using columns 'GEN' (gentamicin), 'TOB' #> (tobramycin), 'AMK' (amikacin), and 'KAN' (kanamycin)"},{"path":"https://amr-for-r.org/articles/AMR.html","id":"combined-antibiogram","dir":"Articles","previous_headings":"Analysing the data > Generate antibiograms","what":"Combined Antibiogram","title":"How to conduct AMR data analysis","text":"create combined antibiogram, use antibiotic codes names plus + character like :","code":"combined_ab <- antibiogram(example_isolates, antibiotics = c(\"TZP\", \"TZP+TOB\", \"TZP+GEN\"), ab_transform = NULL) combined_ab"},{"path":"https://amr-for-r.org/articles/AMR.html","id":"syndromic-antibiogram","dir":"Articles","previous_headings":"Analysing the data > Generate antibiograms","what":"Syndromic Antibiogram","title":"How to conduct AMR data analysis","text":"create syndromic antibiogram, syndromic_group argument must used. can column data, e.g. ifelse() calculations based certain columns:","code":"antibiogram(example_isolates, antibiotics = c(aminoglycosides(), carbapenems()), syndromic_group = \"ward\") #> ℹ For aminoglycosides() using columns 'GEN' (gentamicin), 'TOB' #> (tobramycin), 'AMK' (amikacin), and 'KAN' (kanamycin) #> ℹ For carbapenems() using columns 'IPM' (imipenem) and 'MEM' (meropenem)"},{"path":"https://amr-for-r.org/articles/AMR.html","id":"weighted-incidence-syndromic-combination-antibiogram-wisca","dir":"Articles","previous_headings":"Analysing the data > Generate antibiograms","what":"Weighted-Incidence Syndromic Combination Antibiogram (WISCA)","title":"How to conduct AMR data analysis","text":"create Weighted-Incidence Syndromic Combination Antibiogram (WISCA), simply set wisca = TRUE antibiogram() function, use dedicated wisca() function. Unlike traditional antibiograms, WISCA provides syndrome-based susceptibility estimates, weighted pathogen incidence antimicrobial susceptibility patterns. WISCA uses Bayesian decision model integrate data multiple pathogens, improving empirical therapy guidance, especially low-incidence infections. pathogen-agnostic, meaning results syndrome-based rather stratified microorganism. reliable results, ensure data includes first isolates (use first_isolate()) consider filtering top n species (use top_n_microorganisms()), WISCA outcomes meaningful based robust incidence estimates. patient- syndrome-specific WISCA, run function grouped tibble, .e., using group_by() first:","code":"example_isolates %>% wisca(antibiotics = c(\"TZP\", \"TZP+TOB\", \"TZP+GEN\"), minimum = 10) # Recommended threshold: ≥30 example_isolates %>% top_n_microorganisms(n = 10) %>% group_by(age_group = age_groups(age, c(25, 50, 75)), gender) %>% wisca(antibiotics = c(\"TZP\", \"TZP+TOB\", \"TZP+GEN\"))"},{"path":"https://amr-for-r.org/articles/AMR.html","id":"plotting-antibiograms","dir":"Articles","previous_headings":"Analysing the data > Generate antibiograms","what":"Plotting antibiograms","title":"How to conduct AMR data analysis","text":"Antibiograms can plotted using autoplot() ggplot2 packages, since AMR package provides extension function: calculate antimicrobial resistance sensible way, also correcting results, use resistance() susceptibility() functions.","code":"autoplot(combined_ab)"},{"path":"https://amr-for-r.org/articles/AMR.html","id":"resistance-percentages","dir":"Articles","previous_headings":"Analysing the data","what":"Resistance percentages","title":"How to conduct AMR data analysis","text":"functions resistance() susceptibility() can used calculate antimicrobial resistance susceptibility. specific analyses, functions proportion_S(), proportion_SI(), proportion_I(), proportion_IR() proportion_R() can used determine proportion specific antimicrobial outcome. functions contain minimum argument, denoting minimum required number test results returning value. functions otherwise return NA. default minimum = 30, following CLSI M39-A4 guideline applying microbial epidemiology. per EUCAST guideline 2019, calculate resistance proportion R (proportion_R(), equal resistance()) susceptibility proportion S (proportion_SI(), equal susceptibility()). functions can used : can used conjunction group_by() summarise(), dplyr package:","code":"our_data_1st %>% resistance(AMX) #> [1] 0.4203377 our_data_1st %>% group_by(hospital) %>% summarise(amoxicillin = resistance(AMX)) #> # A tibble: 3 × 2 #> hospital amoxicillin #> #> 1 A 0.340 #> 2 B 0.551 #> 3 C 0.370"},{"path":"https://amr-for-r.org/articles/AMR.html","id":"interpreting-mic-and-disk-diffusion-values","dir":"Articles","previous_headings":"Analysing the data","what":"Interpreting MIC and Disk Diffusion Values","title":"How to conduct AMR data analysis","text":"Minimal inhibitory concentration (MIC) values disk diffusion diameters can interpreted clinical breakpoints (SIR) using .sir(). ’s example randomly generated MIC values Klebsiella pneumoniae ciprofloxacin: allows direct interpretation according EUCAST CLSI breakpoints, facilitating automated AMR data processing.","code":"set.seed(123) mic_values <- random_mic(100) sir_values <- as.sir(mic_values, mo = \"K. pneumoniae\", ab = \"cipro\", guideline = \"EUCAST 2024\") my_data <- tibble(MIC = mic_values, SIR = sir_values) my_data #> # A tibble: 100 × 2 #> MIC SIR #> #> 1 16.000 R #> 2 0.005 S #> 3 1.000 R #> 4 >=256.000 R #> 5 2.000 R #> 6 0.025 S #> 7 16.000 R #> 8 0.025 S #> 9 0.500 I #> 10 0.005 S #> # ℹ 90 more rows"},{"path":"https://amr-for-r.org/articles/AMR.html","id":"plotting-mic-and-sir-interpretations","dir":"Articles","previous_headings":"Analysing the data","what":"Plotting MIC and SIR Interpretations","title":"How to conduct AMR data analysis","text":"can visualise MIC distributions SIR interpretations using ggplot2, using new scale_y_mic() y-axis scale_colour_sir() colour-code SIR categories. plot provides intuitive way assess susceptibility patterns across different groups incorporating clinical breakpoints. straightforward less manual approach, ggplot2’s function autoplot() extended package directly plot MIC disk diffusion values: Author: Dr. Matthijs Berends, 23rd Feb 2025","code":"# add a group my_data$group <- rep(c(\"A\", \"B\", \"C\", \"D\"), each = 25) ggplot(my_data, aes(x = group, y = MIC, colour = SIR)) + geom_jitter(width = 0.2, size = 2) + geom_boxplot(fill = NA, colour = \"grey40\") + scale_y_mic() + scale_colour_sir() + labs(title = \"MIC Distribution and SIR Interpretation\", x = \"Sample Groups\", y = \"MIC (mg/L)\") autoplot(mic_values) # by providing `mo` and `ab`, colours will indicate the SIR interpretation: autoplot(mic_values, mo = \"K. pneumoniae\", ab = \"cipro\", guideline = \"EUCAST 2024\")"},{"path":"https://amr-for-r.org/articles/AMR_for_Python.html","id":"introduction","dir":"Articles","previous_headings":"","what":"Introduction","title":"AMR for Python","text":"AMR package R powerful tool antimicrobial resistance (AMR) analysis. provides extensive features handling microbial antimicrobial data. However, work primarily Python, now intuitive option available: AMR Python package. Python package wrapper around AMR R package. uses rpy2 package internally. Despite need R installed, Python users can now easily work AMR data directly Python code.","code":""},{"path":"https://amr-for-r.org/articles/AMR_for_Python.html","id":"prerequisites","dir":"Articles","previous_headings":"","what":"Prerequisites","title":"AMR for Python","text":"package tested virtual environment (venv). can set environment running: can activate environment, venv ready work .","code":"# linux and macOS: python -m venv /path/to/new/virtual/environment # Windows: python -m venv C:\\path\\to\\new\\virtual\\environment"},{"path":"https://amr-for-r.org/articles/AMR_for_Python.html","id":"install-amr","dir":"Articles","previous_headings":"","what":"Install AMR","title":"AMR for Python","text":"Since Python package available official Python Package Index, can just run: Make sure R installed. need install AMR R package, installed automatically. Linux: macOS (using Homebrew): Windows, visit CRAN download page download install R.","code":"pip install AMR # Ubuntu / Debian sudo apt install r-base # Fedora: sudo dnf install R # CentOS/RHEL sudo yum install R brew install r"},{"path":[]},{"path":"https://amr-for-r.org/articles/AMR_for_Python.html","id":"cleaning-taxonomy","dir":"Articles","previous_headings":"Examples of Usage","what":"Cleaning Taxonomy","title":"AMR for Python","text":"’s example demonstrates clean microorganism drug names using AMR Python package:","code":"import pandas as pd import AMR # Sample data data = { \"MOs\": ['E. coli', 'ESCCOL', 'esco', 'Esche coli'], \"Drug\": ['Cipro', 'CIP', 'J01MA02', 'Ciproxin'] } df = pd.DataFrame(data) # Use AMR functions to clean microorganism and drug names df['MO_clean'] = AMR.mo_name(df['MOs']) df['Drug_clean'] = AMR.ab_name(df['Drug']) # Display the results print(df)"},{"path":"https://amr-for-r.org/articles/AMR_for_Python.html","id":"explanation","dir":"Articles","previous_headings":"Examples of Usage > Cleaning Taxonomy","what":"Explanation","title":"AMR for Python","text":"mo_name: function standardises microorganism names. , different variations Escherichia coli (“E. coli”, “ESCCOL”, “esco”, “Esche coli”) converted correct, standardised form, “Escherichia coli”. ab_name: Similarly, function standardises antimicrobial names. different representations ciprofloxacin (e.g., “Cipro”, “CIP”, “J01MA02”, “Ciproxin”) converted standard name, “Ciprofloxacin”.","code":""},{"path":"https://amr-for-r.org/articles/AMR_for_Python.html","id":"calculating-amr","dir":"Articles","previous_headings":"Examples of Usage","what":"Calculating AMR","title":"AMR for Python","text":"","code":"import AMR import pandas as pd df = AMR.example_isolates result = AMR.resistance(df[\"AMX\"]) print(result) [0.59555556]"},{"path":"https://amr-for-r.org/articles/AMR_for_Python.html","id":"generating-antibiograms","dir":"Articles","previous_headings":"Examples of Usage","what":"Generating Antibiograms","title":"AMR for Python","text":"One core functions AMR package generating antibiogram, table summarises antimicrobial susceptibility bacterial isolates. ’s can generate antibiogram Python: example, generate antibiogram selecting various antibiotics.","code":"result2a = AMR.antibiogram(df[[\"mo\", \"AMX\", \"CIP\", \"TZP\"]]) print(result2a) result2b = AMR.antibiogram(df[[\"mo\", \"AMX\", \"CIP\", \"TZP\"]], mo_transform = \"gramstain\") print(result2b)"},{"path":"https://amr-for-r.org/articles/AMR_for_Python.html","id":"taxonomic-data-sets-now-in-python","dir":"Articles","previous_headings":"Examples of Usage","what":"Taxonomic Data Sets Now in Python!","title":"AMR for Python","text":"Python user, might like important data sets AMR R package, microorganisms, antimicrobials, clinical_breakpoints, example_isolates, now available regular Python data frames:","code":"AMR.microorganisms AMR.antimicrobials"},{"path":"https://amr-for-r.org/articles/AMR_for_Python.html","id":"conclusion","dir":"Articles","previous_headings":"","what":"Conclusion","title":"AMR for Python","text":"AMR Python package, Python users can now effortlessly call R functions AMR R package. eliminates need complex rpy2 configurations provides clean, easy--use interface antimicrobial resistance analysis. examples provided demonstrate can applied typical workflows, standardising microorganism antimicrobial names calculating resistance. just running import AMR, users can seamlessly integrate robust features R AMR package Python workflows. Whether ’re cleaning data analysing resistance patterns, AMR Python package makes easy work AMR data Python.","code":""},{"path":"https://amr-for-r.org/articles/AMR_with_tidymodels.html","id":"example-1-using-antimicrobial-selectors","dir":"Articles","previous_headings":"","what":"Example 1: Using Antimicrobial Selectors","title":"AMR with tidymodels","text":"leveraging power tidymodels AMR package, ’ll build reproducible machine learning workflow predict Gramstain microorganism two important antibiotic classes: aminoglycosides beta-lactams.","code":""},{"path":"https://amr-for-r.org/articles/AMR_with_tidymodels.html","id":"objective","dir":"Articles","previous_headings":"Example 1: Using Antimicrobial Selectors","what":"Objective","title":"AMR with tidymodels","text":"goal build predictive model using tidymodels framework determine Gramstain microorganism based microbial data. : Preprocess data using selector functions aminoglycosides() betalactams(). Define logistic regression model prediction. Use structured tidymodels workflow preprocess, train, evaluate model.","code":""},{"path":"https://amr-for-r.org/articles/AMR_with_tidymodels.html","id":"data-preparation","dir":"Articles","previous_headings":"Example 1: Using Antimicrobial Selectors","what":"Data Preparation","title":"AMR with tidymodels","text":"begin loading required libraries preparing example_isolates dataset AMR package. Prepare data: Explanation: aminoglycosides() betalactams() dynamically select columns antimicrobials classes. drop_na() ensures model receives complete cases training.","code":"# Load required libraries library(AMR) # For AMR data analysis library(tidymodels) # For machine learning workflows, and data manipulation (dplyr, tidyr, ...) # Your data could look like this: example_isolates #> # A tibble: 2,000 × 46 #> date patient age gender ward mo PEN OXA FLC AMX #> #> 1 2002-01-02 A77334 65 F Clinical B_ESCHR_COLI R NA NA NA #> 2 2002-01-03 A77334 65 F Clinical B_ESCHR_COLI R NA NA NA #> 3 2002-01-07 067927 45 F ICU B_STPHY_EPDR R NA R NA #> 4 2002-01-07 067927 45 F ICU B_STPHY_EPDR R NA R NA #> 5 2002-01-13 067927 45 F ICU B_STPHY_EPDR R NA R NA #> 6 2002-01-13 067927 45 F ICU B_STPHY_EPDR R NA R NA #> 7 2002-01-14 462729 78 M Clinical B_STPHY_AURS R NA S R #> 8 2002-01-14 462729 78 M Clinical B_STPHY_AURS R NA S R #> 9 2002-01-16 067927 45 F ICU B_STPHY_EPDR R NA R NA #> 10 2002-01-17 858515 79 F ICU B_STPHY_EPDR R NA S NA #> # ℹ 1,990 more rows #> # ℹ 36 more variables: AMC , AMP , TZP , CZO , FEP , #> # CXM , FOX , CTX , CAZ , CRO , GEN , #> # TOB , AMK , KAN , TMP , SXT , NIT , #> # FOS , LNZ , CIP , MFX , VAN , TEC
vignettes/AMR.Rmd
WISCA uses a Bayesian decision model to integrate @@ -1190,57 +1190,57 @@ function on a grouped tibble, i.e., using
tibble
This page was entirely written by our AMR for R Assistant, a ChatGPT -manually-trained model able to answer any question about the AMR -package. +manually-trained model able to answer any question about the +AMR package.
This page was entirely written by our AMR for R Assistant, a ChatGPT -manually-trained model able to answer any question about the AMR -package.
AMR
Antimicrobial resistance (AMR) is a global health crisis, and understanding resistance patterns is crucial for managing effective diff --git a/articles/EUCAST.html b/articles/EUCAST.html index 7354b8426..1a093e42d 100644 --- a/articles/EUCAST.html +++ b/articles/EUCAST.html @@ -5,7 +5,7 @@ -
vignettes/EUCAST.Rmd
vignettes/MDR.Rmd
vignettes/PCA.Rmd
vignettes/WHONET.Rmd
+This explainer was largely written by our AMR for R Assistant, a ChatGPT +manually-trained model able to answer any question about the +AMR package. +
This explainer was largely written by our AMR for R Assistant, a ChatGPT +manually-trained model able to answer any question about the +AMR package.
This is the purpose of WISCA, or:
-Weighted-Incidence Syndromic Combination -Antibiogram -
Weighted-Incidence Syndromic Combination -Antibiogram
WISCA is a Bayesian approach that integrates: - Pathogen -prevalence (how often each species causes the syndrome), - +
This is the purpose of WISCA, or +Weighted-Incidence Syndromic Combination +Antibiogram.
WISCA is a Bayesian approach that integrates:
to estimate the overall empirical coverage of -antimicrobial regimens — with quantified uncertainty.
This vignette explains how WISCA works, why it is useful, and how to -apply it in AMR.
A standard antibiogram gives you:
``` Species → Antibiotic → Susceptibility %
Species → Antibiotic → Susceptibility %
But clinicians don’t know the species a priori. They need to -choose a regimen that covers the likely pathogens — +choose a regimen that covers the likely pathogens, without knowing which one is present.
Traditional antibiograms: - Fragment information by organism, - Do -not weight by real-world prevalence, - Do not account for combination -therapy or sample size, - Do not provide uncertainty.
Traditional antibiograms calculate the susceptibility % as just the +number of resistant isolates divided by the total number of tested +isolates. Therefore, traditional antibiograms:
“What is the probability that this regimen will cover the pathogen, given the syndrome?”
This means combining two things: - Incidence of each -pathogen in the syndrome, - Susceptibility of each -pathogen to the regimen.
This means combining two things:
We can write this as:
``` coverage = ∑ (pathogen incidence × susceptibility)
For example, suppose: - E. coli causes 60% of cases, and 90% of -E. coli are susceptible to a drug. - Klebsiella causes 40% of -cases, and 70% of Klebsiella are susceptible.
Coverage=∑i(Incidencei×Susceptibilityi)\text{Coverage} = \sum_i (\text{Incidence}_i \times \text{Susceptibility}_i)
For example, suppose:
Then:
``` coverage = (0.6 × 0.9) + (0.4 × 0.7) = 0.82
Coverage=(0.6×0.9)+(0.4×0.7)=0.82\text{Coverage} = (0.6 \times 0.9) + (0.4 \times 0.7) = 0.82
But in real data, incidence and susceptibility are estimated -from samples — so they carry uncertainty. WISCA models this +from samples, so they carry uncertainty. WISCA models this probabilistically, using conjugate Bayesian distributions.
Let: - K be the number of pathogens, - -α = (1, 1, ..., 1) be a **Dirichlet** prior (uniform), - n -= (n₁, …, nₖ) be the observed counts per species.
α = (1, 1, ..., 1) be a **Dirichlet** prior (uniform), -
Then the posterior incidence follows:
``` incidence ∼ Dirichlet(α + n)
In simulations, we draw from this posterior using:
``` xᵢ ∼ Gamma(αᵢ + nᵢ, 1)
``` incidenceᵢ = xᵢ / ∑ xⱼ
Let:
Then the posterior incidence is:
p∼Dirichlet(α1+n1,…,αK+nK)p \sim \text{Dirichlet}(\alpha_1 + n_1, \ldots, \alpha_K + n_K)
To simulate from this, we use:
xi∼Gamma(αi+ni,1),pi=xi∑j=1Kxjx_i \sim \text{Gamma}(\alpha_i + n_i,\ 1), \quad p_i = \frac{x_i}{\sum_{j=1}^{K} x_j}
Each pathogen–regimen pair has: - prior: Beta(1, 1) - -data: S susceptible out of N tested
prior: Beta(1, 1) -
``` susceptibility ∼ Beta(1 + S, 1 + (N - S))
In each simulation, we draw random susceptibility per species from -this Beta distribution.
Each pathogen–regimen pair has a prior and data:
The +SS +category could also include values SDD (susceptible, dose-dependent) and +I (intermediate [CLSI], or susceptible, increased exposure +[EUCAST]).
Then the posterior is:
θ∼Beta(α0+S,β0+N−S)\theta \sim \text{Beta}(\alpha_0 + S,\ \beta_0 + N - S)
Putting it together:
``` For each simulation: - Draw incidence ∼ Dirichlet - Draw -susceptibility ∼ Beta - Multiply → coverage estimate
We repeat this (e.g. 1000×) and summarise: - Mean: -expected coverage - Quantiles: credible interval -(default 95%)
Coverage=∑i=1Kpi⋅θi\text{Coverage} = \sum_{i=1}^{K} p_i \cdot \theta_i
Repeat this simulation (e.g. 1000×) and summarise:
+ library(AMR) data <- example_isolates -# Add a fake syndrome column for stratification -data$syndrome <- ifelse(data$mo %like% "coli", "UTI", "Other") +# Structure of our data +data +#> # A tibble: 2,000 × 46 +#> date patient age gender ward mo PEN OXA FLC AMX +#> <date> <chr> <dbl> <chr> <chr> <mo> <sir> <sir> <sir> <sir> +#> 1 2002-01-02 A77334 65 F Clinical B_ESCHR_COLI R NA NA NA +#> 2 2002-01-03 A77334 65 F Clinical B_ESCHR_COLI R NA NA NA +#> 3 2002-01-07 067927 45 F ICU B_STPHY_EPDR R NA R NA +#> 4 2002-01-07 067927 45 F ICU B_STPHY_EPDR R NA R NA +#> 5 2002-01-13 067927 45 F ICU B_STPHY_EPDR R NA R NA +#> 6 2002-01-13 067927 45 F ICU B_STPHY_EPDR R NA R NA +#> 7 2002-01-14 462729 78 M Clinical B_STPHY_AURS R NA S R +#> 8 2002-01-14 462729 78 M Clinical B_STPHY_AURS R NA S R +#> 9 2002-01-16 067927 45 F ICU B_STPHY_EPDR R NA R NA +#> 10 2002-01-17 858515 79 F ICU B_STPHY_EPDR R NA S NA +#> # ℹ 1,990 more rows +#> # ℹ 36 more variables: AMC <sir>, AMP <sir>, TZP <sir>, CZO <sir>, FEP <sir>, +#> # CXM <sir>, FOX <sir>, CTX <sir>, CAZ <sir>, CRO <sir>, GEN <sir>, +#> # TOB <sir>, AMK <sir>, KAN <sir>, TMP <sir>, SXT <sir>, NIT <sir>, +#> # FOS <sir>, LNZ <sir>, CIP <sir>, MFX <sir>, VAN <sir>, TEC <sir>, +#> # TCY <sir>, TGC <sir>, DOX <sir>, ERY <sir>, CLI <sir>, AZM <sir>, +#> # IPM <sir>, MEM <sir>, MTR <sir>, CHL <sir>, COL <sir>, MUP <sir>, … + +# Add a fake syndrome column +data$syndrome <- ifelse(data$mo %like% "coli", "UTI", "No UTI")
library(AMR) data <- example_isolates -# Add a fake syndrome column for stratification -data$syndrome <- ifelse(data$mo %like% "coli", "UTI", "Other")
-antibiogram(data, - wisca = TRUE)
antibiogram(data, - wisca = TRUE)
+wisca(data, + antimicrobials = c("AMC", "CIP", "GEN"))
wisca(data, + antimicrobials = c("AMC", "CIP", "GEN"))
+wisca(data, + antimicrobials = c("AMC", "AMC + CIP", "AMC + GEN"))
wisca(data, + antimicrobials = c("AMC", "AMC + CIP", "AMC + GEN"))
-antibiogram(data, - syndromic_group = "syndrome", - wisca = TRUE)
antibiogram(data, - syndromic_group = "syndrome", - wisca = TRUE)
+wisca(data, + antimicrobials = c("AMC", "AMC + CIP", "AMC + GEN"), + syndromic_group = "syndrome")
wisca(data, + antimicrobials = c("AMC", "AMC + CIP", "AMC + GEN"), + syndromic_group = "syndrome")
The antibiogram() function supports combination -regimens:
antibiogram()
-antibiogram(data, - antimicrobials = c("AMC", "GEN", "AMC + GEN", "CIP"), - wisca = TRUE)
antibiogram(data, - antimicrobials = c("AMC", "GEN", "AMC + GEN", "CIP"), - wisca = TRUE)
The AMR package is available in 20 languages, which can +all be used for the wisca() function too:
wisca()
+wisca(data, + antimicrobials = c("AMC", "AMC + CIP", "AMC + GEN"), + syndromic_group = gsub("UTI", "UCI", data$syndrome), + language = "Spanish")
wisca(data, + antimicrobials = c("AMC", "AMC + CIP", "AMC + GEN"), + syndromic_group = gsub("UTI", "UCI", data$syndrome), + language = "Spanish")
Suppose you get this output:
Interpretation:
-“AMC + GEN covers 88% of expected pathogens for this syndrome, -with 95% certainty that the true coverage lies between 83% and -93%.” -
“AMC + GEN covers 88% of expected pathogens for this syndrome, -with 95% certainty that the true coverage lies between 83% and -93%.”
Regimens with few tested isolates will show wider -intervals.
minimum = 30
simulations = 1000
conf_interval = 0.95
combine_SI = TRUE
syndromic_group
tidymodels
WISCA enables:
It is available in the AMR package via either:
+wisca(...) + +antibiogram(..., wisca = TRUE)
wisca(...) + +antibiogram(..., wisca = TRUE)
Bielicki JA et al. (2016).Weighted-incidence syndromic combination antibiograms to guide -empiric treatment in pediatric bloodstream infections.J Antimicrob Chemother, 71(2):529–536. doi:10.1093/jac/dkv397
WISCA shifts empirical therapy from simple percent susceptible toward -probabilistic, syndrome-based decision support. It is a -statistically principled, clinically intuitive method to guide regimen -selection — and easy to use via the antibiogram() function -in the AMR package.
For antimicrobial stewardship teams, it enables -disease-specific, reproducible, and data-driven -guidance — even in the face of sparse data.
Bielicki, JA, et al. (2016). Selecting appropriate empirical +antibiotic regimens for paediatric bloodstream infections: application +of a Bayesian decision model to local and pooled antimicrobial +resistance surveillance data. J Antimicrob +Chemother. 71(3):794-802. https://doi.org/10.1093/jac/dkv397
(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.)
This package now supports not only tools for AMR data analysis in clinical settings, but also for veterinary and environmental microbiology. This was made possible through a collaboration with the University of Prince Edward Island’s Atlantic Veterinary College, Canada. To celebrate this great improvement of the package, we also updated the package logo to reflect this change.
antibiotics
antimicrobials
rsi
sir
resistance_predict()
sir_predict()
as.sir()
breakpoint_type = "animal"
host
parallel
as.sir(your_data, parallel = TRUE)
guideline
ab
mo
uti
as.sir(..., ab = "column1", mo = "column2", uti = "column3")
This changelog only contains changes from AMR v3.0 (March 2025) and later.
A separating character for antimicrobial columns in combination antibiograms.
A logical to indicate whether the antimicrobial columns must be sorted on name.
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. Set simulations, conf_interval, and interval_side to adjust.
FALSE
simulations
conf_interval
interval_side