# Load required librarieslibrary(AMR)# For AMR data analysis
-library(tidymodels)# For machine learning workflows, and data manipulation (dplyr, tidyr, ...)
-#> ── Attaching packages ────────────────────────────────────── tidymodels 1.3.0 ──
-#> ✔broom 1.0.8 ✔recipes 1.2.1
-#> ✔dials 1.4.0 ✔rsample 1.2.1
-#> ✔dplyr 1.1.4 ✔tibble 3.2.1
-#> ✔ggplot2 3.5.1 ✔tidyr 1.3.1
-#> ✔infer 1.0.7 ✔tune 1.3.0
-#> ✔modeldata 1.4.0 ✔workflows 1.2.0
-#> ✔parsnip 1.3.1 ✔workflowsets 1.1.0
-#> ✔purrr 1.0.4 ✔yardstick 1.3.2
-#> ── Conflicts ───────────────────────────────────────── tidymodels_conflicts() ──
-#> ✖purrr::discard() masks scales::discard()
-#> ✖dplyr::filter() masks stats::filter()
-#> ✖dplyr::lag() masks stats::lag()
-#> ✖recipes::step() masks stats::step()
-
-# Your data could look like this:
+library(tidymodels)# For machine learning workflows, and data manipulation (dplyr, tidyr, ...)
+
Prepare the data:
+
+# Your data could look like this:example_isolates#> # A tibble: 2,000 × 46#> date patient age gender ward mo PEN OXA FLC AMX
@@ -215,7 +202,7 @@ three steps: preprocessing, model specification, and fitting.
1. Preprocessing with a Recipe
We create a recipe to preprocess the data for modelling.
-
+
# Define the recipe for data preprocessingresistance_recipe<-recipe(mo~., data =data)%>%step_corr(c(aminoglycosides(), betalactams()), threshold =0.9)
@@ -233,7 +220,7 @@ three steps: preprocessing, model specification, and fitting.
For a recipe that includes at least one preprocessing operation, like
we have with step_corr(), the necessary parameters can be
estimated from a training set using prep():
-
+
prep(resistance_recipe)#> ℹ For aminoglycosides() using columns 'GEN' (gentamicin), 'TOB'#> (tobramycin), 'AMK' (amikacin), and 'KAN' (kanamycin)
@@ -277,7 +264,7 @@ much with existing, other variables.
We define a logistic regression model since resistance prediction is
a binary classification task.
-
+
# Specify a logistic regression modellogistic_model<-logistic_reg()%>%set_engine("glm")# Use the Generalised Linear Model engine
@@ -300,7 +287,7 @@ engine.
We bundle the recipe and model together into a workflow,
which organises the entire modeling process.
-
+
# Combine the recipe and model into a workflowresistance_workflow<-workflow()%>%add_recipe(resistance_recipe)%>%# Add the preprocessing recipe
@@ -328,7 +315,7 @@ which organises the entire modeling process.
To train the model, we split the data into training and testing sets.
Then, we fit the workflow on the training set and evaluate its
performance.
-
+
# Split data into training and testing setsset.seed(123)# For reproducibilitydata_split<-initial_split(data, prop =0.8)# 80% training, 20% testing
@@ -350,7 +337,7 @@ testing sets.
functions are internally called again. For training, these functions are
called since they are stored in the recipe.
Next, we evaluate the model on the testing data.
-
+
# Make predictions on the testing setpredictions<-fitted_workflow%>%predict(testing_data)# Generate predictions
@@ -417,7 +404,7 @@ kappa.
It appears we can predict the Gram stain with a 99.5% accuracy based
on AMR results of only aminoglycosides and beta-lactam antibiotics. The
ROC curve looks like this:
Explanation: - mo_name(mo): Converts
-microbial codes into proper species names. - resistance():
-Converts AMR results into numeric values (proportion of resistant
-isolates). - group_by(year, ward, species): Aggregates
-resistance rates by year and ward.
+
Explanation:
+
+
+mo_name(mo): Converts microbial codes into proper
+species names.
+
+resistance(): Converts AMR results into numeric values
+(proportion of resistant isolates).
+
+group_by(year, ward, species): Aggregates resistance
+rates by year and ward.
+
@@ -514,7 +508,7 @@ preprocessing step, a model specification, and the fitting process.
1. Preprocessing with a Recipe
-
+
# Define the reciperesistance_recipe_time<-recipe(res_AMX~year+gramstain, data =data_time)%>%step_dummy(gramstain, one_hot =TRUE)%>%# Convert categorical to numerical
@@ -534,17 +528,23 @@ preprocessing step, a model specification, and the fitting process.
#> • Dummy variables from: gramstain#> • Centering and scaling for: year#> • Sparse, unbalanced variable filter on: all_predictors()
We use a linear regression model to predict resistance trends.
-
+
# Define the linear regression modellm_model<-linear_reg()%>%set_engine("lm")# Use linear regression
@@ -553,15 +553,20 @@ variance predictors.
#> Linear Regression Model Specification (regression)#> #> Computational engine: lm
-
Explanation: - linear_reg(): Defines a
-linear regression model. - set_engine("lm"): Uses R’s
-built-in linear regression engine.
+
Explanation:
+
+
+linear_reg(): Defines a linear regression model.
+
+set_engine("lm"): Uses R’s built-in linear regression
+engine.
+
3. Building the Workflow
We combine the preprocessing recipe and model into a workflow.
We split the data into training and testing sets, fit the model, and
evaluate performance.
-
+
# Split the dataset.seed(123)data_split_time<-initial_split(data_time, prop =0.8)
@@ -618,17 +623,25 @@ evaluate performance.
#> 1 rmse standard 0.0774#> 2 rsq standard 0.711 #> 3 mae standard 0.0704
-
Explanation: - initial_split(): Splits
-data into training and testing sets. - fit(): Trains the
-workflow. - predict(): Generates resistance predictions. -
-metrics(): Evaluates model performance.
+
Explanation:
+
+
+initial_split(): Splits data into training and testing
+sets.
(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.)
-
A New Milestone: AMR v3.0 with One Health Support (= Human + Veterinary + Environmental)
+
A New Milestone: AMR v3.0 with One Health Support (= Human + Veterinary + Environmental)
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.
-
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.
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.
@@ -116,7 +116,7 @@
-
Changed
+
Changed
SIR interpretation
It is now possible to use column names for argument ab, mo, and uti: as.sir(..., ab = "column1", mo = "column2", uti = "column3"). This greatly improves the flexibility for users.
Users can now set their own criteria (using regular expressions) as to what should be considered S, I, R, SDD, and NI.
@@ -195,7 +195,7 @@
Added console colours support of sir class for Positron
-
Other
+
Other
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
Added Prof. Kat Holt, Dr. Jane Hawkey, and Dr. Natacha Couto as contributors for their many suggestions, ideas and bugfixes
@@ -204,7 +204,7 @@
Stopped support for SAS (.xpt) files, since their file structure and extremely inefficient and requires more disk space than GitHub allows in a single commit.
-
Older Versions
+
Older Versions
This changelog only contains changes from AMR v3.0 (March 2025) and later.
Any (vector of) text that can be coerced to a valid antibiotic drug code with as.ab()
+
Any (vector of) text that can be coerced to a valid antibiotic drug code with as.ab().
language
@@ -104,19 +104,19 @@
...
-
In case of set_ab_names() and data is a data.frame: columns to select (supports tidy selection such as column1:column4), otherwise other arguments passed on to as.ab()
+
In case of set_ab_names() and data is a data.frame: columns to select (supports tidy selection such as column1:column4), otherwise other arguments passed on to as.ab().
only_first
-
A logical to indicate whether only the first ATC code must be returned, with giving preference to J0-codes (i.e., the antimicrobial drug group)
+
A logical to indicate whether only the first ATC code must be returned, with giving preference to J0-codes (i.e., the antimicrobial drug group).
A logical to indicate whether missing values should be removed
+
A logical to indicate whether missing values should be removed.
diff --git a/reference/antibiogram.html b/reference/antibiogram.html
index 67c94381f..d7425af9b 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.9232
+ 2.1.1.9233
@@ -101,11 +101,11 @@ Adhering to previously described approaches (see Source) and especially the Baye
x
-
A data.frame containing at least a column with microorganisms and columns with antimicrobial results (class 'sir', see as.sir())
+
A data.frame containing at least a column with microorganisms and columns with antimicrobial results (class 'sir', see as.sir()).
antimicrobials
-
A vector specifying the antimicrobials to include in the antibiogram (see Examples). Will be evaluated using guess_ab_col(). This can be:
Any antimicrobial name or code
+
A vector specifying the antimicrobials to include in the antibiogram (see Examples). Will be evaluated using guess_ab_col(). This can be:.
A logical to indicate whether only columns of class sir must be selected (default is FALSE), see as.sir()
+
A logical to indicate whether only columns of class sir must be selected (default is FALSE), see as.sir().
only_treatable
-
A logical to indicate whether antimicrobial drugs should be excluded that are only for laboratory tests (default is TRUE), such as gentamicin-high (GEH) and imipenem/EDTA (IPE)
+
A logical to indicate whether antimicrobial drugs should be excluded that are only for laboratory tests (default is TRUE), such as gentamicin-high (GEH) and imipenem/EDTA (IPE).
Language to translate text like "no growth", which defaults to the system language (see get_AMR_locale())
+
Language to translate text like "no growth", which defaults to the system language (see get_AMR_locale()).
info
@@ -128,7 +128,7 @@
...
-
Other arguments passed on to functions
+
Other arguments passed on to functions.
diff --git a/reference/as.sir.html b/reference/as.sir.html
index 1a8e9f67d..8c91d071d 100644
--- a/reference/as.sir.html
+++ b/reference/as.sir.html
@@ -21,7 +21,7 @@ All breakpoints used for interpretation are available in our clinical_breakpoint
AMR (for R)
- 2.1.1.9232
+ 2.1.1.9233
@@ -136,7 +136,7 @@ All breakpoints used for interpretation are available in our clinical_breakpoint
x
-
Vector of values (for class mic: MIC values in mg/L, for class disk: a disk diffusion radius in millimetres)
+
Vector of values (for class mic: MIC values in mg/L, for class disk: a disk diffusion radius in millimetres).
...
@@ -144,7 +144,7 @@ All breakpoints used for interpretation are available in our clinical_breakpoint
threshold
-
Maximum fraction of invalid antimicrobial interpretations of x, see Examples
+
Maximum fraction of invalid antimicrobial interpretations of x, see Examples.
S, I, R, NI, SDD
@@ -152,15 +152,15 @@ All breakpoints used for interpretation are available in our clinical_breakpoint
A vector (or column name) with characters that can be coerced to valid microorganism codes with as.mo(), can be left empty to determine it automatically
+
A vector (or column name) with characters that can be coerced to valid microorganism codes with as.mo(), can be left empty to determine it automatically.
ab
-
A vector (or column name) with characters that can be coerced to a valid antimicrobial drug code with as.ab()
+
A vector (or column name) with characters that can be coerced to a valid antimicrobial drug code with as.ab().
guideline
@@ -172,7 +172,7 @@ All breakpoints used for interpretation are available in our clinical_breakpoint
capped_mic_handling
-
A character string that controls how MIC values with a cap (i.e., starting with <, <=, >, or >=) are interpreted. Supports the following options:
+
A character string that controls how MIC values with a cap (i.e., starting with <, <=, >, or >=) are interpreted. Supports the following options:.
"none"
<= and >= are treated as-is.
< and > are treated as-is.
"conservative"
<= and >= return "NI" (non-interpretable) if the MIC is within the breakpoint guideline range.
@@ -217,7 +217,7 @@ All breakpoints used for interpretation are available in our clinical_breakpoint
conserve_capped_values
-
Deprecated, use capped_mic_handling instead
+
Deprecated, use capped_mic_handling instead.
col_mo
@@ -225,7 +225,7 @@ All breakpoints used for interpretation are available in our clinical_breakpoint
clean
-
A logical to indicate whether previously stored results should be forgotten after returning the 'logbook' with results
+
A logical to indicate whether previously stored results should be forgotten after returning the 'logbook' with results.
@@ -820,16 +820,16 @@ A microorganism is categorised as "Resistant" when there is a high likelihood of
#># A tibble: 65 × 16#> datetime index ab_given mo_given host_given ab mo #><dttm><int><chr><chr><chr><ab><mo>
-#> 1 2025-03-31 08:58:25 1 ampicillin Strep p… human AMP B_STRPT_PNMN
-#> 2 2025-03-31 08:58:25 1 AMP Escheri… human AMP B_[ORD]_ENTRBC…
-#> 3 2025-03-31 08:58:25 1 AMP Escheri… human AMP B_[ORD]_ENTRBC…
+#> 1 2025-03-31 13:01:25 1 ampicillin Strep p… human AMP B_STRPT_PNMN
+#> 2 2025-03-31 13:01:25 1 AMP Escheri… human AMP B_[ORD]_ENTRBC…
+#> 3 2025-03-31 13:01:25 1 AMP Escheri… human AMP B_[ORD]_ENTRBC…#> 4NANANANANANA NA
-#> 5 2025-03-31 08:58:26 1 GEN Escheri… human GEN B_[ORD]_ENTRBC…
-#> 6 2025-03-31 08:58:26 1 TOB Escheri… human TOB B_[ORD]_ENTRBC…
-#> 7 2025-03-31 08:58:27 1 AMX B_STRPT… human AMX B_STRPT_PNMN
-#> 8 2025-03-31 08:58:27 1 AMX B_STRPT… human AMX B_STRPT_PNMN
-#> 9 2025-03-31 08:58:27 2 AMX B_STRPT… human AMX B_STRPT_PNMN
-#>10 2025-03-31 08:58:27 3 AMX B_STRPT… human AMX B_STRPT_PNMN
+#> 5 2025-03-31 13:01:25 1 GEN Escheri… human GEN B_[ORD]_ENTRBC…
+#> 6 2025-03-31 13:01:26 1 TOB Escheri… human TOB B_[ORD]_ENTRBC…
+#> 7 2025-03-31 13:01:26 1 AMX B_STRPT… human AMX B_STRPT_PNMN
+#> 8 2025-03-31 13:01:26 1 AMX B_STRPT… human AMX B_STRPT_PNMN
+#> 9 2025-03-31 13:01:26 2 AMX B_STRPT… human AMX B_STRPT_PNMN
+#>10 2025-03-31 13:01:26 3 AMX B_STRPT… human AMX B_STRPT_PNMN #># ℹ 55 more rows#># ℹ 9 more variables: host <chr>, method <chr>, input <chr>, outcome <sir>,#># notes <chr>, guideline <chr>, ref_table <chr>, uti <lgl>,
diff --git a/reference/atc_online.html b/reference/atc_online.html
index 8cc3b572d..1832268a1 100644
--- a/reference/atc_online.html
+++ b/reference/atc_online.html
@@ -7,7 +7,7 @@
AMR (for R)
- 2.1.1.9232
+ 2.1.1.9233
@@ -75,7 +75,7 @@
atc_code
-
A character (vector) with ATC code(s) of antimicrobials, will be coerced with as.ab() and ab_atc() internally if not a valid ATC code
+
A character (vector) with ATC code(s) of antimicrobials, will be coerced with as.ab() and ab_atc() internally if not a valid ATC code.
property
@@ -83,7 +83,7 @@
administration
-
Type of administration when using property = "Adm.R", see Details
+
Type of administration when using property = "Adm.R", see Details.
A logical to indicate whether values S, SDD, and I should be summed, so resistance will be based on only R - the default is TRUE
+
A logical to indicate whether values S, SDD, and I should be summed, so resistance will be based on only R - the default is TRUE.
add_ab_group
-
A logical to indicate where the group of the antimicrobials must be included as a first column
+
A logical to indicate where the group of the antimicrobials must be included as a first column.
remove_intrinsic_resistant
-
logical to indicate that rows and columns with 100% resistance for all tested antimicrobials must be removed from the table
+
logical to indicate that rows and columns with 100% resistance for all tested antimicrobials must be removed from the table.
decimal.mark
diff --git a/reference/clinical_breakpoints.html b/reference/clinical_breakpoints.html
index a9eca6985..6f420bd3f 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.9232
+ 2.1.1.9233
diff --git a/reference/count.html b/reference/count.html
index 3a3316ea4..712eac02e 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.9232
+ 2.1.1.9233
@@ -89,15 +89,15 @@ count_resistant() should be used to count resistant isolates, count_susceptible(
only_all_tested
-
(for combination therapies, i.e. using more than one variable for ...): a logical to indicate that isolates must be tested for all antimicrobials, see section Combination Therapy below
+
(for combination therapies, i.e. using more than one variable for ...): a logical to indicate that isolates must be tested for all antimicrobials, see section Combination Therapy below.
A column name of the antimicrobials data set to translate the antibiotic abbreviations to, using ab_property()
+
A column name of the antimicrobials data set to translate the antibiotic abbreviations to, using ab_property().
language
@@ -105,7 +105,7 @@ count_resistant() should be used to count resistant isolates, count_susceptible(
combine_SI
-
A logical to indicate whether all values of S, SDD, and I must be merged into one, so the output only consists of S+SDD+I vs. R (susceptible vs. resistant) - the default is TRUE
+
A logical to indicate whether all values of S, SDD, and I must be merged into one, so the output only consists of S+SDD+I vs. R (susceptible vs. resistant) - the default is TRUE.
Rules in formula notation, see below for instructions, and in Examples
+
Rules in formula notation, see below for instructions, and in Examples.
diff --git a/reference/dosage.html b/reference/dosage.html
index badc742a1..faf084e41 100644
--- a/reference/dosage.html
+++ b/reference/dosage.html
@@ -7,7 +7,7 @@
AMR (for R)
- 2.1.1.9232
+ 2.1.1.9233
diff --git a/reference/eucast_rules.html b/reference/eucast_rules.html
index 7e60bc2f9..d58a70f9b 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.9232
+ 2.1.1.9233
@@ -86,7 +86,7 @@ Leclercq et al. EUCAST expert rules in antimicrobial susceptibility test
x
-
A data set with antimicrobials columns, such as amox, AMX and AMC
+
A data set with antimicrobials columns, such as amox, AMX and AMC.
col_mo
@@ -94,7 +94,7 @@ Leclercq et al. EUCAST expert rules in antimicrobial susceptibility test
info
-
A logical to indicate whether progress should be printed to the console - the default is only print while in interactive sessions
+
A logical to indicate whether progress should be printed to the console - the default is only print while in interactive sessions.
rules
@@ -122,27 +122,27 @@ Leclercq et al. EUCAST expert rules in antimicrobial susceptibility test
only_sir_columns
-
A logical to indicate whether only antimicrobial columns must be detected that were transformed to class sir (see as.sir()) on beforehand (default is FALSE)
+
A logical to indicate whether only antimicrobial columns must be detected that were transformed to class sir (see as.sir()) on beforehand (default is FALSE).
A logical indicating whether to overwrite non-NA values (default: FALSE). When FALSE, only NA values are modified. To ensure compliance with EUCAST guidelines, this should remainFALSE, as EUCAST notes often state that an organism "should be tested for susceptibility to individual agents or be reported resistant."
+
A logical indicating whether to overwrite non-NA values (default: FALSE). When FALSE, only NA values are modified. To ensure compliance with EUCAST guidelines, this should remainFALSE, as EUCAST notes often state that an organism "should be tested for susceptibility to individual agents or be reported resistant.".
...
-
Column name of an antimicrobial, see section Antimicrobials below
+
Column name of an antimicrobial, see section Antimicrobials below.
ab
-
Any (vector of) text that can be coerced to a valid antimicrobial drug code with as.ab()
+
Any (vector of) text that can be coerced to a valid antimicrobial drug code with as.ab().
administration
-
Route of administration, either "im", "iv", or "oral"
+
Route of administration, either "im", "iv", or "oral".
Column name of the result date (or date that is was received on the lab) - the default is the first column with a date class
+
Column name of the result date (or date that is was received on the lab) - the default is the first column with a date class.
col_patient_id
-
Column name of the unique IDs of the patients - the default is the first column that starts with 'patient' or 'patid' (case insensitive)
+
Column name of the unique IDs of the patients - the default is the first column that starts with 'patient' or 'patid' (case insensitive).
col_mo
@@ -102,7 +102,7 @@
col_specimen
-
Column name of the specimen type or group
+
Column name of the specimen type or group.
col_icu
@@ -118,19 +118,19 @@
testcodes_exclude
-
A character vector with test codes that should be excluded (case-insensitive)
+
A character vector with test codes that should be excluded (case-insensitive).
icu_exclude
-
A logical to indicate whether ICU isolates should be excluded (rows with value TRUE in the column set with col_icu)
+
A logical to indicate whether ICU isolates should be excluded (rows with value TRUE in the column set with col_icu).
specimen_group
-
Value in the column set with col_specimen to filter on
+
Value in the column set with col_specimen to filter on.
type
-
Type to determine weighed isolates; can be "keyantimicrobials" or "points", see Details
+
Type to determine weighed isolates; can be "keyantimicrobials" or "points", see Details.
method
@@ -138,15 +138,15 @@
ignore_I
-
logical to indicate whether antibiotic interpretations with "I" will be ignored when type = "keyantimicrobials", see Details
+
logical to indicate whether antibiotic interpretations with "I" will be ignored when type = "keyantimicrobials", see Details.
points_threshold
-
Minimum number of points to require before differences in the antibiogram will lead to inclusion of an isolate when type = "points", see Details
+
Minimum number of points to require before differences in the antibiogram will lead to inclusion of an isolate when type = "points", see Details.
info
-
A logical to indicate info should be printed - the default is TRUE only in interactive mode
+
A logical to indicate info should be printed - the default is TRUE only in interactive mode.
include_unknown
@@ -158,7 +158,7 @@
...
-
Arguments passed on to first_isolate() when using filter_first_isolate(), otherwise arguments passed on to key_antimicrobials() (such as universal, gram_negative, gram_positive)
+
Arguments passed on to first_isolate() when using filter_first_isolate(), otherwise arguments passed on to key_antimicrobials() (such as universal, gram_negative, gram_positive).
A numeric vector of length two providing limits of the scale, use NA to refer to the existing minimum or maximum
+
A numeric vector of length two providing limits of the scale, use NA to refer to the existing minimum or maximum.
translate_ab
-
A column name of the antimicrobials data set to translate the antibiotic abbreviations to, using ab_property()
+
A column name of the antimicrobials data set to translate the antibiotic abbreviations to, using ab_property().
combine_SI
-
A logical to indicate whether all values of S, SDD, and I must be merged into one, so the output only consists of S+SDD+I vs. R (susceptible vs. resistant) - the default is TRUE
+
A logical to indicate whether all values of S, SDD, and I must be merged into one, so the output only consists of S+SDD+I vs. R (susceptible vs. resistant) - the default is TRUE.
A text to search x for, will be checked with as.ab() if this value is not a column in x
+
A text to search x for, will be checked with as.ab() if this value is not a column in x.
verbose
-
A logical to indicate whether additional info should be printed
+
A logical to indicate whether additional info should be printed.
only_sir_columns
-
A logical to indicate whether only antibiotic columns must be detected that were transformed to class sir (see as.sir()) on beforehand (default is FALSE)
+
A logical to indicate whether only antibiotic columns must be detected that were transformed to class sir (see as.sir()) on beforehand (default is FALSE).
A variable to join by - if left empty will search for a column with class mo (created with as.mo()) or will be "mo" if that column name exists in x, could otherwise be a column name of x with values that exist in microorganisms$mo (such as by = "bacteria_id"), or another column in microorganisms (but then it should be named, like by = c("bacteria_id" = "fullname"))
+
A variable to join by - if left empty will search for a column with class mo (created with as.mo()) or will be "mo" if that column name exists in x, could otherwise be a column name of x with values that exist in microorganisms$mo (such as by = "bacteria_id"), or another column in microorganisms (but then it should be named, like by = c("bacteria_id" = "fullname")).
suffix
@@ -85,7 +85,7 @@
...
-
Ignored, only in place to allow future extensions
+
Ignored, only in place to allow future extensions.
logical values, or a column name containing logical values, indicating the presence of an ESBL gene (or production of its proteins)
+
logical values, or a column name containing logical values, indicating the presence of an ESBL gene (or production of its proteins).
carbapenemase
-
logical values, or a column name containing logical values, indicating the presence of a carbapenemase gene (or production of its proteins)
+
logical values, or a column name containing logical values, indicating the presence of a carbapenemase gene (or production of its proteins).
mecA
-
logical values, or a column name containing logical values, indicating the presence of a mecA gene (or production of its proteins)
+
logical values, or a column name containing logical values, indicating the presence of a mecA gene (or production of its proteins).
mecC
-
logical values, or a column name containing logical values, indicating the presence of a mecC gene (or production of its proteins)
+
logical values, or a column name containing logical values, indicating the presence of a mecC gene (or production of its proteins).
vanA
-
logical values, or a column name containing logical values, indicating the presence of a vanA gene (or production of its proteins)
+
logical values, or a column name containing logical values, indicating the presence of a vanA gene (or production of its proteins).
vanB
-
logical values, or a column name containing logical values, indicating the presence of a vanB gene (or production of its proteins)
+
logical values, or a column name containing logical values, indicating the presence of a vanB gene (or production of its proteins).
info
-
A logical to indicate whether progress should be printed to the console - the default is only print while in interactive sessions
+
A logical to indicate whether progress should be printed to the console - the default is only print while in interactive sessions.
pct_required_classes
@@ -135,7 +135,7 @@
only_sir_columns
-
A logical to indicate whether only antimicrobial columns must be detected that were transformed to class sir (see as.sir()) on beforehand (default is FALSE)
+
A logical to indicate whether only antimicrobial columns must be detected that were transformed to class sir (see as.sir()) on beforehand (default is FALSE).
...
@@ -143,7 +143,7 @@
as_factor
-
A logical to indicate whether the returned value should be an ordered factor (TRUE, default), or otherwise a character vector
+
A logical to indicate whether the returned value should be an ordered factor (TRUE, default), or otherwise a character vector.
A logical to indicate whether all values of S, SDD, and I must be merged into one, so the input only consists of S+I vs. R (susceptible vs. resistant) - the default is TRUE
+
A logical to indicate whether all values of S, SDD, and I must be merged into one, so the input only consists of S+I vs. R (susceptible vs. resistant) - the default is TRUE.
amr_distance
-
The outcome of mean_amr_distance()
+
The outcome of mean_amr_distance().
row
-
An index, such as a row number
+
An index, such as a row number.
diff --git a/reference/microorganisms.codes.html b/reference/microorganisms.codes.html
index 68dc2387e..be89758b8 100644
--- a/reference/microorganisms.codes.html
+++ b/reference/microorganisms.codes.html
@@ -7,7 +7,7 @@
AMR (for R)
- 2.1.1.9232
+ 2.1.1.9233
diff --git a/reference/microorganisms.groups.html b/reference/microorganisms.groups.html
index 6765a3657..eeaaee2f3 100644
--- a/reference/microorganisms.groups.html
+++ b/reference/microorganisms.groups.html
@@ -7,7 +7,7 @@
AMR (for R)
- 2.1.1.9232
+ 2.1.1.9233
diff --git a/reference/microorganisms.html b/reference/microorganisms.html
index ffca3c980..6194c7bbd 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.9232
+ 2.1.1.9233
diff --git a/reference/mo_matching_score.html b/reference/mo_matching_score.html
index d36b4665e..db01c5db1 100644
--- a/reference/mo_matching_score.html
+++ b/reference/mo_matching_score.html
@@ -7,7 +7,7 @@
AMR (for R)
- 2.1.1.9232
+ 2.1.1.9233
@@ -63,11 +63,11 @@
One of the column names of the microorganisms data set: "mo", "fullname", "status", "kingdom", "phylum", "class", "order", "family", "genus", "species", "subspecies", "rank", "ref", "oxygen_tolerance", "source", "lpsn", "lpsn_parent", "lpsn_renamed_to", "mycobank", "mycobank_parent", "mycobank_renamed_to", "gbif", "gbif_parent", "gbif_renamed_to", "prevalence", or "snomed", or must be "shortname"
+
One of the column names of the microorganisms data set: "mo", "fullname", "status", "kingdom", "phylum", "class", "order", "family", "genus", "species", "subspecies", "rank", "ref", "oxygen_tolerance", "source", "lpsn", "lpsn_parent", "lpsn_renamed_to", "mycobank", "mycobank_parent", "mycobank_renamed_to", "gbif", "gbif_parent", "gbif_renamed_to", "prevalence", or "snomed", or must be "shortname".
diff --git a/reference/mo_source.html b/reference/mo_source.html
index 1d1bcd74a..be7c61e1d 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.9232
+ 2.1.1.9233
diff --git a/reference/pca-2.png b/reference/pca-2.png
index 16592a7a1..7f58fd8f7 100644
Binary files a/reference/pca-2.png and b/reference/pca-2.png differ
diff --git a/reference/pca-3.png b/reference/pca-3.png
new file mode 100644
index 000000000..16592a7a1
Binary files /dev/null and b/reference/pca-3.png differ
diff --git a/reference/pca.html b/reference/pca.html
index 2c15a0290..e92bc74cf 100644
--- a/reference/pca.html
+++ b/reference/pca.html
@@ -7,7 +7,7 @@
AMR (for R)
- 2.1.1.9232
+ 2.1.1.9233
@@ -64,7 +64,7 @@
diff --git a/reference/plot.html b/reference/plot.html
index 8f633da96..5911227a4 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.9232
+ 2.1.1.9233
@@ -161,7 +161,7 @@ Especially the scale_*_mic() functions are relevant wrappers to plot MIC values
...
-
Arguments passed on to methods
+
Arguments passed on to methods.
colours_SIR
@@ -177,27 +177,27 @@ Especially the scale_*_mic() functions are relevant wrappers to plot MIC values
A numeric vector of length two providing limits of the scale, use NA to refer to the existing minimum or maximum
+
A numeric vector of length two providing limits of the scale, use NA to refer to the existing minimum or maximum.
aesthetics
-
Aesthetics to apply the colours to - the default is "fill" but can also be (a combination of) "alpha", "colour", "fill", "linetype", "shape" or "size"
+
Aesthetics to apply the colours to - the default is "fill" but can also be (a combination of) "alpha", "colour", "fill", "linetype", "shape" or "size".
position
-
Position adjustment of bars, either "fill", "stack" or "dodge"
+
Position adjustment of bars, either "fill", "stack" or "dodge".
translate_ab
-
A column name of the antimicrobials data set to translate the antibiotic abbreviations to, using ab_property()
+
A column name of the antimicrobials data set to translate the antibiotic abbreviations to, using ab_property().
minimum
@@ -245,15 +245,15 @@ Especially the scale_*_mic() functions are relevant wrappers to plot MIC values
combine_SI
-
A logical to indicate whether all values of S, SDD, and I must be merged into one, so the output only consists of S+SDD+I vs. R (susceptible vs. resistant) - the default is TRUE
+
A logical to indicate whether all values of S, SDD, and I must be merged into one, so the output only consists of S+SDD+I vs. R (susceptible vs. resistant) - the default is TRUE.
datalabels.size
-
Size of the datalabels
+
Size of the datalabels.
datalabels.colour
-
Colour of the datalabels
+
Colour of the datalabels.
diff --git a/reference/proportion.html b/reference/proportion.html
index d1e8038cc..d2dddc89d 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.9232
+ 2.1.1.9233
@@ -113,11 +113,11 @@ resistance() should be used to calculate resistance, susceptibility() should be
only_all_tested
-
(for combination therapies, i.e. using more than one variable for ...): a logical to indicate that isolates must be tested for all antimicrobials, see section Combination Therapy below
+
(for combination therapies, i.e. using more than one variable for ...): a logical to indicate that isolates must be tested for all antimicrobials, see section Combination Therapy below.
ab_result
-
Antibiotic results to test against, must be one or more values of "S", "SDD", "I", or "R"
+
Antibiotic results to test against, must be one or more values of "S", "SDD", "I", or "R".
confidence_level
@@ -129,15 +129,15 @@ resistance() should be used to calculate resistance, susceptibility() should be
collapse
-
A logical to indicate whether the output values should be 'collapsed', i.e. be merged together into one value, or a character value to use for collapsing
+
A logical to indicate whether the output values should be 'collapsed', i.e. be merged together into one value, or a character value to use for collapsing.
A column name of the antimicrobials data set to translate the antibiotic abbreviations to, using ab_property()
+
A column name of the antimicrobials data set to translate the antibiotic abbreviations to, using ab_property().
language
@@ -145,7 +145,7 @@ resistance() should be used to calculate resistance, susceptibility() should be
combine_SI
-
A logical to indicate whether all values of S, SDD, and I must be merged into one, so the output only consists of S+SDD+I vs. R (susceptible vs. resistant) - the default is TRUE
+
A logical to indicate whether all values of S, SDD, and I must be merged into one, so the output only consists of S+SDD+I vs. R (susceptible vs. resistant) - the default is TRUE.
Column name of x containing antimicrobial interpretations ("R", "I" and "S")
+
Column name of x containing antimicrobial interpretations ("R", "I" and "S").
col_date
-
Column name of the date, will be used to calculate years if this column doesn't consist of years already - the default is the first column of with a date class
+
Column name of the date, will be used to calculate years if this column doesn't consist of years already - the default is the first column of with a date class.
year_min
-
Lowest year to use in the prediction model, dafaults to the lowest year in col_date
+
Lowest year to use in the prediction model, dafaults to the lowest year in col_date.
year_max
-
Highest year to use in the prediction model - the default is 10 years after today
+
Highest year to use in the prediction model - the default is 10 years after today.
year_every
-
Unit of sequence between lowest year found in the data and year_max
+
Unit of sequence between lowest year found in the data and year_max.
minimum
@@ -124,19 +124,19 @@
...
-
Arguments passed on to functions
+
Arguments passed on to functions.
main
-
Title of the plot
+
Title of the plot.
ribbon
-
A logical to indicate whether a ribbon should be shown (default) or error bars
+
A logical to indicate whether a ribbon should be shown (default) or error bars.
object
-
Model data to be plotted
+
Model data to be plotted.
diff --git a/reference/skewness.html b/reference/skewness.html
index 7f3e7a10b..36c192449 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.9232
+ 2.1.1.9233
@@ -75,11 +75,11 @@ When negative ('left-skewed'): the left tail is longer; the mass of the distribu
diff --git a/search.json b/search.json
index 84c0fd443..d061a0fef 100644
--- a/search.json
+++ b/search.json
@@ -1 +1 @@
-[{"path":"https://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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\") #> #> ℹ Run sir_interpretation_history() afterwards to retrieve a logbook with #> all the details of the breakpoint interpretations. #> #> Interpreting MIC values: 'cipro' (CIP, ciprofloxacin), EUCAST 2024... NOTE #> • Multiple breakpoints available for ciprofloxacin (CIP) in Klebsiella pneumoniae - assuming body site 'Non-meningitis'. 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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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://msberends.github.io/AMR/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. 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, ...) #> ── Attaching packages ────────────────────────────────────── tidymodels 1.3.0 ── #> ✔ broom 1.0.8 ✔ recipes 1.2.1 #> ✔ dials 1.4.0 ✔ rsample 1.2.1 #> ✔ dplyr 1.1.4 ✔ tibble 3.2.1 #> ✔ ggplot2 3.5.1 ✔ tidyr 1.3.1 #> ✔ infer 1.0.7 ✔ tune 1.3.0 #> ✔ modeldata 1.4.0 ✔ workflows 1.2.0 #> ✔ parsnip 1.3.1 ✔ workflowsets 1.1.0 #> ✔ purrr 1.0.4 ✔ yardstick 1.3.2 #> ── Conflicts ───────────────────────────────────────── tidymodels_conflicts() ── #> ✖ purrr::discard() masks scales::discard() #> ✖ dplyr::filter() masks stats::filter() #> ✖ dplyr::lag() masks stats::lag() #> ✖ recipes::step() masks stats::step() # 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 , #> # TCY , TGC , DOX , ERY , CLI , AZM , #> # IPM , MEM , MTR , CHL , COL , MUP , … # Select relevant columns for prediction data <- example_isolates %>% # select AB results dynamically select(mo, aminoglycosides(), betalactams()) %>% # replace NAs with NI (not-interpretable) mutate(across(where(is.sir), ~replace_na(.x, \"NI\")), # make factors of SIR columns across(where(is.sir), as.integer), # get Gramstain of microorganisms mo = as.factor(mo_gramstain(mo))) %>% # drop NAs - the ones without a Gramstain (fungi, etc.) drop_na() #> ℹ For aminoglycosides() using columns 'GEN' (gentamicin), 'TOB' #> (tobramycin), 'AMK' (amikacin), and 'KAN' (kanamycin) #> ℹ For betalactams() using columns 'PEN' (benzylpenicillin), 'OXA' #> (oxacillin), 'FLC' (flucloxacillin), 'AMX' (amoxicillin), 'AMC' #> (amoxicillin/clavulanic acid), 'AMP' (ampicillin), 'TZP' #> (piperacillin/tazobactam), 'CZO' (cefazolin), 'FEP' (cefepime), 'CXM' #> (cefuroxime), 'FOX' (cefoxitin), 'CTX' (cefotaxime), 'CAZ' (ceftazidime), #> 'CRO' (ceftriaxone), 'IPM' (imipenem), and 'MEM' (meropenem)"},{"path":"https://msberends.github.io/AMR/articles/AMR_with_tidymodels.html","id":"defining-the-workflow","dir":"Articles","previous_headings":"Example 1: Using Antimicrobial Selectors","what":"Defining the Workflow","title":"AMR with tidymodels","text":"now define tidymodels workflow, consists three steps: preprocessing, model specification, fitting.","code":""},{"path":"https://msberends.github.io/AMR/articles/AMR_with_tidymodels.html","id":"preprocessing-with-a-recipe","dir":"Articles","previous_headings":"Example 1: Using Antimicrobial Selectors > Defining the Workflow","what":"1. Preprocessing with a Recipe","title":"AMR with tidymodels","text":"create recipe preprocess data modelling. recipe includes least one preprocessing operation, like step_corr(), necessary parameters can estimated training set using prep(): Explanation: recipe(mo ~ ., data = data) take mo column outcome columns predictors. step_corr() removes predictors (.e., antibiotic columns) higher correlation 90%. Notice recipe contains just antimicrobial selector functions - need define columns specifically. preparation (retrieved prep()) can see columns variables ‘AMX’ ‘CTX’ removed correlate much existing, variables.","code":"# Define the recipe for data preprocessing resistance_recipe <- recipe(mo ~ ., data = data) %>% step_corr(c(aminoglycosides(), betalactams()), threshold = 0.9) resistance_recipe #> #> ── Recipe ────────────────────────────────────────────────────────────────────── #> #> ── Inputs #> Number of variables by role #> outcome: 1 #> predictor: 20 #> #> ── Operations #> • Correlation filter on: c(aminoglycosides(), betalactams()) prep(resistance_recipe) #> ℹ For aminoglycosides() using columns 'GEN' (gentamicin), 'TOB' #> (tobramycin), 'AMK' (amikacin), and 'KAN' (kanamycin) #> ℹ For betalactams() using columns 'PEN' (benzylpenicillin), 'OXA' #> (oxacillin), 'FLC' (flucloxacillin), 'AMX' (amoxicillin), 'AMC' #> (amoxicillin/clavulanic acid), 'AMP' (ampicillin), 'TZP' #> (piperacillin/tazobactam), 'CZO' (cefazolin), 'FEP' (cefepime), 'CXM' #> (cefuroxime), 'FOX' (cefoxitin), 'CTX' (cefotaxime), 'CAZ' (ceftazidime), #> 'CRO' (ceftriaxone), 'IPM' (imipenem), and 'MEM' (meropenem) #> #> ── Recipe ────────────────────────────────────────────────────────────────────── #> #> ── Inputs #> Number of variables by role #> outcome: 1 #> predictor: 20 #> #> ── Training information #> Training data contained 1968 data points and no incomplete rows. #> #> ── Operations #> • Correlation filter on: AMX CTX | Trained"},{"path":"https://msberends.github.io/AMR/articles/AMR_with_tidymodels.html","id":"specifying-the-model","dir":"Articles","previous_headings":"Example 1: Using Antimicrobial Selectors > Defining the Workflow","what":"2. Specifying the Model","title":"AMR with tidymodels","text":"define logistic regression model since resistance prediction binary classification task. Explanation: logistic_reg() sets logistic regression model. set_engine(\"glm\") specifies use R’s built-GLM engine.","code":"# Specify a logistic regression model logistic_model <- logistic_reg() %>% set_engine(\"glm\") # Use the Generalised Linear Model engine logistic_model #> Logistic Regression Model Specification (classification) #> #> Computational engine: glm"},{"path":"https://msberends.github.io/AMR/articles/AMR_with_tidymodels.html","id":"building-the-workflow","dir":"Articles","previous_headings":"Example 1: Using Antimicrobial Selectors > Defining the Workflow","what":"3. Building the Workflow","title":"AMR with tidymodels","text":"bundle recipe model together workflow, organises entire modeling process.","code":"# Combine the recipe and model into a workflow resistance_workflow <- workflow() %>% add_recipe(resistance_recipe) %>% # Add the preprocessing recipe add_model(logistic_model) # Add the logistic regression model resistance_workflow #> ══ Workflow ════════════════════════════════════════════════════════════════════ #> Preprocessor: Recipe #> Model: logistic_reg() #> #> ── Preprocessor ──────────────────────────────────────────────────────────────── #> 1 Recipe Step #> #> • step_corr() #> #> ── Model ─────────────────────────────────────────────────────────────────────── #> Logistic Regression Model Specification (classification) #> #> Computational engine: glm"},{"path":"https://msberends.github.io/AMR/articles/AMR_with_tidymodels.html","id":"training-and-evaluating-the-model","dir":"Articles","previous_headings":"Example 1: Using Antimicrobial Selectors","what":"Training and Evaluating the Model","title":"AMR with tidymodels","text":"train model, split data training testing sets. , fit workflow training set evaluate performance. Explanation: initial_split() splits data training testing sets. fit() trains workflow training set. Notice fit(), antimicrobial selector functions internally called . training, functions called since stored recipe. Next, evaluate model testing data. Explanation: predict() generates predictions testing set. metrics() computes evaluation metrics like accuracy kappa. appears can predict Gram stain 99.5% accuracy based AMR results aminoglycosides beta-lactam antibiotics. ROC curve looks like :","code":"# Split data into training and testing sets set.seed(123) # For reproducibility data_split <- initial_split(data, prop = 0.8) # 80% training, 20% testing training_data <- training(data_split) # Training set testing_data <- testing(data_split) # Testing set # Fit the workflow to the training data fitted_workflow <- resistance_workflow %>% fit(training_data) # Train the model # Make predictions on the testing set predictions <- fitted_workflow %>% predict(testing_data) # Generate predictions probabilities <- fitted_workflow %>% predict(testing_data, type = \"prob\") # Generate probabilities predictions <- predictions %>% bind_cols(probabilities) %>% bind_cols(testing_data) # Combine with true labels predictions #> # A tibble: 394 × 24 #> .pred_class `.pred_Gram-negative` `.pred_Gram-positive` mo GEN TOB #> #> 1 Gram-positive 1.07e- 1 8.93e- 1 Gram-p… 5 5 #> 2 Gram-positive 3.17e- 8 1.00e+ 0 Gram-p… 5 1 #> 3 Gram-negative 9.99e- 1 1.42e- 3 Gram-n… 5 5 #> 4 Gram-positive 2.22e-16 1 e+ 0 Gram-p… 5 5 #> 5 Gram-negative 9.46e- 1 5.42e- 2 Gram-n… 5 5 #> 6 Gram-positive 1.07e- 1 8.93e- 1 Gram-p… 5 5 #> 7 Gram-positive 2.22e-16 1 e+ 0 Gram-p… 1 5 #> 8 Gram-positive 2.22e-16 1 e+ 0 Gram-p… 4 4 #> 9 Gram-negative 1 e+ 0 2.22e-16 Gram-n… 1 1 #> 10 Gram-positive 6.05e-11 1.00e+ 0 Gram-p… 4 4 #> # ℹ 384 more rows #> # ℹ 18 more variables: AMK , KAN , PEN , OXA , FLC , #> # AMX , AMC , AMP , TZP , CZO , FEP , #> # CXM , FOX , CTX , CAZ , CRO , IPM , MEM # Evaluate model performance metrics <- predictions %>% metrics(truth = mo, estimate = .pred_class) # Calculate performance metrics metrics #> # A tibble: 2 × 3 #> .metric .estimator .estimate #> #> 1 accuracy binary 0.995 #> 2 kap binary 0.989 # To assess some other model properties, you can make our own `metrics()` function our_metrics <- metric_set(accuracy, kap, ppv, npv) # add Positive Predictive Value and Negative Predictive Value metrics2 <- predictions %>% our_metrics(truth = mo, estimate = .pred_class) # run again on our `our_metrics()` function metrics2 #> # A tibble: 4 × 3 #> .metric .estimator .estimate #> #> 1 accuracy binary 0.995 #> 2 kap binary 0.989 #> 3 ppv binary 0.987 #> 4 npv binary 1 predictions %>% roc_curve(mo, `.pred_Gram-negative`) %>% autoplot()"},{"path":"https://msberends.github.io/AMR/articles/AMR_with_tidymodels.html","id":"conclusion","dir":"Articles","previous_headings":"Example 1: Using Antimicrobial Selectors","what":"Conclusion","title":"AMR with tidymodels","text":"post, demonstrated build machine learning pipeline tidymodels framework AMR package. combining selector functions like aminoglycosides() betalactams() tidymodels, efficiently prepared data, trained model, evaluated performance. workflow extensible antimicrobial classes resistance patterns, empowering users analyse AMR data systematically reproducibly.","code":""},{"path":"https://msberends.github.io/AMR/articles/AMR_with_tidymodels.html","id":"example-2-predicting-amr-over-time","dir":"Articles","previous_headings":"","what":"Example 2: Predicting AMR Over Time","title":"AMR with tidymodels","text":"second example, aim predict antimicrobial resistance (AMR) trends time using tidymodels. model resistance three antibiotics (amoxicillin AMX, amoxicillin-clavulanic acid AMC, ciprofloxacin CIP), based historical data grouped year hospital ward.","code":""},{"path":"https://msberends.github.io/AMR/articles/AMR_with_tidymodels.html","id":"objective-1","dir":"Articles","previous_headings":"Example 2: Predicting AMR Over Time","what":"Objective","title":"AMR with tidymodels","text":"goal : Prepare dataset aggregating resistance data time. Define regression model predict AMR trends. Use tidymodels preprocess, train, evaluate model.","code":""},{"path":"https://msberends.github.io/AMR/articles/AMR_with_tidymodels.html","id":"data-preparation-1","dir":"Articles","previous_headings":"Example 2: Predicting AMR Over Time","what":"Data Preparation","title":"AMR with tidymodels","text":"start transforming example_isolates dataset structured time-series format. Explanation: - mo_name(mo): Converts microbial codes proper species names. - resistance(): Converts AMR results numeric values (proportion resistant isolates). - group_by(year, ward, species): Aggregates resistance rates year ward.","code":"# Load required libraries library(AMR) library(tidymodels) # Transform dataset data_time <- example_isolates %>% top_n_microorganisms(n = 10) %>% # Filter on the top #10 species mutate(year = as.integer(format(date, \"%Y\")), # Extract year from date gramstain = mo_gramstain(mo)) %>% # Get taxonomic names group_by(year, gramstain) %>% summarise(across(c(AMX, AMC, CIP), function(x) resistance(x, minimum = 0), .names = \"res_{.col}\"), .groups = \"drop\") %>% filter(!is.na(res_AMX) & !is.na(res_AMC) & !is.na(res_CIP)) # Drop missing values #> ℹ Using column 'mo' as input for col_mo. data_time #> # A tibble: 32 × 5 #> year gramstain res_AMX res_AMC res_CIP #> #> 1 2002 Gram-negative 1 0.105 0.0606 #> 2 2002 Gram-positive 0.838 0.182 0.162 #> 3 2003 Gram-negative 1 0.0714 0 #> 4 2003 Gram-positive 0.714 0.244 0.154 #> 5 2004 Gram-negative 0.464 0.0938 0 #> 6 2004 Gram-positive 0.849 0.299 0.244 #> 7 2005 Gram-negative 0.412 0.132 0.0588 #> 8 2005 Gram-positive 0.882 0.382 0.154 #> 9 2006 Gram-negative 0.379 0 0.1 #> 10 2006 Gram-positive 0.778 0.333 0.353 #> # ℹ 22 more rows"},{"path":"https://msberends.github.io/AMR/articles/AMR_with_tidymodels.html","id":"defining-the-workflow-1","dir":"Articles","previous_headings":"Example 2: Predicting AMR Over Time","what":"Defining the Workflow","title":"AMR with tidymodels","text":"now define modeling workflow, consists preprocessing step, model specification, fitting process.","code":""},{"path":"https://msberends.github.io/AMR/articles/AMR_with_tidymodels.html","id":"preprocessing-with-a-recipe-1","dir":"Articles","previous_headings":"Example 2: Predicting AMR Over Time > Defining the Workflow","what":"1. Preprocessing with a Recipe","title":"AMR with tidymodels","text":"Explanation: - step_dummy(): Encodes categorical variables (ward, species) numerical indicators. - step_normalize(): Normalises year variable. - step_nzv(): Removes near-zero variance predictors.","code":"# Define the recipe resistance_recipe_time <- recipe(res_AMX ~ year + gramstain, data = data_time) %>% step_dummy(gramstain, one_hot = TRUE) %>% # Convert categorical to numerical step_normalize(year) %>% # Normalise year for better model performance step_nzv(all_predictors()) # Remove near-zero variance predictors resistance_recipe_time #> #> ── Recipe ────────────────────────────────────────────────────────────────────── #> #> ── Inputs #> Number of variables by role #> outcome: 1 #> predictor: 2 #> #> ── Operations #> • Dummy variables from: gramstain #> • Centering and scaling for: year #> • Sparse, unbalanced variable filter on: all_predictors()"},{"path":"https://msberends.github.io/AMR/articles/AMR_with_tidymodels.html","id":"specifying-the-model-1","dir":"Articles","previous_headings":"Example 2: Predicting AMR Over Time > Defining the Workflow","what":"2. Specifying the Model","title":"AMR with tidymodels","text":"use linear regression model predict resistance trends. Explanation: - linear_reg(): Defines linear regression model. - set_engine(\"lm\"): Uses R’s built-linear regression engine.","code":"# Define the linear regression model lm_model <- linear_reg() %>% set_engine(\"lm\") # Use linear regression lm_model #> Linear Regression Model Specification (regression) #> #> Computational engine: lm"},{"path":"https://msberends.github.io/AMR/articles/AMR_with_tidymodels.html","id":"building-the-workflow-1","dir":"Articles","previous_headings":"Example 2: Predicting AMR Over Time > Defining the Workflow","what":"3. Building the Workflow","title":"AMR with tidymodels","text":"combine preprocessing recipe model workflow.","code":"# Create workflow resistance_workflow_time <- workflow() %>% add_recipe(resistance_recipe_time) %>% add_model(lm_model) resistance_workflow_time #> ══ Workflow ════════════════════════════════════════════════════════════════════ #> Preprocessor: Recipe #> Model: linear_reg() #> #> ── Preprocessor ──────────────────────────────────────────────────────────────── #> 3 Recipe Steps #> #> • step_dummy() #> • step_normalize() #> • step_nzv() #> #> ── Model ─────────────────────────────────────────────────────────────────────── #> Linear Regression Model Specification (regression) #> #> Computational engine: lm"},{"path":"https://msberends.github.io/AMR/articles/AMR_with_tidymodels.html","id":"training-and-evaluating-the-model-1","dir":"Articles","previous_headings":"Example 2: Predicting AMR Over Time","what":"Training and Evaluating the Model","title":"AMR with tidymodels","text":"split data training testing sets, fit model, evaluate performance. Explanation: - initial_split(): Splits data training testing sets. - fit(): Trains workflow. - predict(): Generates resistance predictions. - metrics(): Evaluates model performance.","code":"# Split the data set.seed(123) data_split_time <- initial_split(data_time, prop = 0.8) train_time <- training(data_split_time) test_time <- testing(data_split_time) # Train the model fitted_workflow_time <- resistance_workflow_time %>% fit(train_time) # Make predictions predictions_time <- fitted_workflow_time %>% predict(test_time) %>% bind_cols(test_time) # Evaluate model metrics_time <- predictions_time %>% metrics(truth = res_AMX, estimate = .pred) metrics_time #> # A tibble: 3 × 3 #> .metric .estimator .estimate #>