+
-
-Defining the Workflow
+
+Defining the Workflow
We now define the modelling workflow, which consists of a
preprocessing step, a model specification, and the fitting process.
-
1. Preprocessing with a Recipe
+1. Preprocessing with a Recipe
-
+
# Define the recipe
resistance_recipe_time <- recipe ( res_AMX ~ year + gramstain , data = data_time ) %>%
step_dummy ( gramstain , one_hot = TRUE ) %>% # Convert categorical to numerical
@@ -540,10 +784,10 @@ variable.
-
2. Specifying the Model
+2. Specifying the Model
We use a linear regression model to predict resistance trends.
-
+
# Define the linear regression model
lm_model <- linear_reg ( ) %>%
set_engine ( "lm" ) # Use linear regression
@@ -562,10 +806,10 @@ engine.
-
3. Building the Workflow
+3. Building the Workflow
We combine the preprocessing recipe and model into a workflow.
-
+
# Create workflow
resistance_workflow_time <- workflow ( ) %>%
add_recipe ( resistance_recipe_time ) %>%
@@ -590,12 +834,12 @@ engine.
-
-Training and Evaluating the Model
+
+Training and Evaluating the Model
We split the data into training and testing sets, fit the model, and
evaluate performance.
-
+
# Split the data
set.seed ( 123 )
data_split_time <- initial_split ( data_time , prop = 0.8 )
@@ -636,11 +880,11 @@ sets.
-
-Visualising Predictions
+
+Visualising Predictions
We plot resistance trends over time for amoxicillin.
-
+
library ( ggplot2 )
# Plot actual vs predicted resistance over time
@@ -651,10 +895,10 @@ sets.
x = "Year" ,
y = "Resistance Proportion" ) +
theme_minimal ( )
-
+
Additionally, we can visualise resistance trends in
ggplot2
and directly add linear models there:
-
+
ggplot ( data_time , aes ( x = year , y = res_AMX , color = gramstain ) ) +
geom_line ( ) +
labs ( title = "AMX Resistance Trends" ,
@@ -665,11 +909,11 @@ sets.
formula = y ~ x ,
alpha = 0.25 ) +
theme_minimal ( )
-
+
-
-Conclusion
+
+Conclusion
In this example, we demonstrated how to analyze AMR trends over time
using tidymodels
. By aggregating resistance rates by year
diff --git a/articles/AMR_with_tidymodels_files/figure-html/unnamed-chunk-14-1.png b/articles/AMR_with_tidymodels_files/figure-html/unnamed-chunk-14-1.png
index 0116fcb2a..a31617e3c 100644
Binary files a/articles/AMR_with_tidymodels_files/figure-html/unnamed-chunk-14-1.png and b/articles/AMR_with_tidymodels_files/figure-html/unnamed-chunk-14-1.png differ
diff --git a/articles/AMR_with_tidymodels_files/figure-html/unnamed-chunk-20-1.png b/articles/AMR_with_tidymodels_files/figure-html/unnamed-chunk-20-1.png
new file mode 100644
index 000000000..0116fcb2a
Binary files /dev/null and b/articles/AMR_with_tidymodels_files/figure-html/unnamed-chunk-20-1.png differ
diff --git a/articles/AMR_with_tidymodels_files/figure-html/unnamed-chunk-15-1.png b/articles/AMR_with_tidymodels_files/figure-html/unnamed-chunk-21-1.png
similarity index 100%
rename from articles/AMR_with_tidymodels_files/figure-html/unnamed-chunk-15-1.png
rename to articles/AMR_with_tidymodels_files/figure-html/unnamed-chunk-21-1.png
diff --git a/articles/EUCAST.html b/articles/EUCAST.html
index 06fa1abe7..005f6a1ac 100644
--- a/articles/EUCAST.html
+++ b/articles/EUCAST.html
@@ -30,7 +30,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/articles/PCA.html b/articles/PCA.html
index 58d54f07e..c0899b2d5 100644
--- a/articles/PCA.html
+++ b/articles/PCA.html
@@ -30,7 +30,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/articles/WHONET.html b/articles/WHONET.html
index f405c2bc3..c527d8c05 100644
--- a/articles/WHONET.html
+++ b/articles/WHONET.html
@@ -30,7 +30,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/articles/WISCA.html b/articles/WISCA.html
index fc9d4c902..a2e936989 100644
--- a/articles/WISCA.html
+++ b/articles/WISCA.html
@@ -30,7 +30,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/articles/datasets.html b/articles/datasets.html
index 79d0c606a..5cba63c7d 100644
--- a/articles/datasets.html
+++ b/articles/datasets.html
@@ -30,7 +30,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
@@ -80,7 +80,7 @@
-
AMR 3.0.0.9002
+
AMR 3.0.0.9004
-
Changed
-
Fix for antibiogram()
for when no antimicrobials are set
+New
+Integration with the tidymodels framework to allow seamless use of MIC and SIR data in modelling pipelines via recipes
+
+
+
+
Changed
+
Fixed a bug in antibiogram()
for when no antimicrobials are set
+Fixed a bug in as.ab()
for antimicrobial codes with a number in it if they are preceded by a space
+Fixed a bug in eucast_rules()
for using specific custom rules
Fixed some specific Dutch translations for antimicrobials
+Updated random_mic()
and random_disk()
to set skewedness of the distribution and allow multiple microorganisms
diff --git a/pkgdown.yml b/pkgdown.yml
index 6f8d60c6c..0f7af5331 100644
--- a/pkgdown.yml
+++ b/pkgdown.yml
@@ -10,7 +10,7 @@ articles:
PCA: PCA.html
WHONET: WHONET.html
WISCA: WISCA.html
-last_built: 2025-06-06T07:42Z
+last_built: 2025-06-13T15:09Z
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 797de40f5..c5e420a9c 100644
--- a/reference/AMR-deprecated.html
+++ b/reference/AMR-deprecated.html
@@ -7,7 +7,7 @@
AMR (for R)
-
3.0.0.9002
+
3.0.0.9004
diff --git a/reference/AMR-options.html b/reference/AMR-options.html
index adcf1e78f..d200efdc4 100644
--- a/reference/AMR-options.html
+++ b/reference/AMR-options.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/AMR.html b/reference/AMR.html
index 4e1bf1efe..7af7a47f9 100644
--- a/reference/AMR.html
+++ b/reference/AMR.html
@@ -21,7 +21,7 @@ The AMR package is available in English, Arabic, Bengali, Chinese, Czech, Danish
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/WHOCC.html b/reference/WHOCC.html
index 0342c454e..8e5851461 100644
--- a/reference/WHOCC.html
+++ b/reference/WHOCC.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/WHONET.html b/reference/WHONET.html
index 36caf304c..38565f30c 100644
--- a/reference/WHONET.html
+++ b/reference/WHONET.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/ab_from_text.html b/reference/ab_from_text.html
index fb9054c37..124c7812a 100644
--- a/reference/ab_from_text.html
+++ b/reference/ab_from_text.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/ab_property.html b/reference/ab_property.html
index b12e84616..285ab9f1d 100644
--- a/reference/ab_property.html
+++ b/reference/ab_property.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/add_custom_antimicrobials.html b/reference/add_custom_antimicrobials.html
index 0714aff9d..a6efe76de 100644
--- a/reference/add_custom_antimicrobials.html
+++ b/reference/add_custom_antimicrobials.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/add_custom_microorganisms.html b/reference/add_custom_microorganisms.html
index 78427dd83..ff1062152 100644
--- a/reference/add_custom_microorganisms.html
+++ b/reference/add_custom_microorganisms.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/age.html b/reference/age.html
index d999f2c18..fbb077cdb 100644
--- a/reference/age.html
+++ b/reference/age.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
@@ -112,16 +112,16 @@
df
#> birth_date age age_exact age_at_y2k
-#> 1 1999-06-30 25 25.93425 0
-#> 2 1968-01-29 57 57.35068 31
-#> 3 1965-12-05 59 59.50137 34
-#> 4 1980-03-01 45 45.26575 19
-#> 5 1949-11-01 75 75.59452 50
-#> 6 1947-02-14 78 78.30685 52
-#> 7 1940-02-19 85 85.29315 59
-#> 8 1988-01-10 37 37.40274 11
-#> 9 1997-08-27 27 27.77534 2
-#> 10 1978-01-26 47 47.35890 21
+#> 1 1999-06-30 25 25.95342 0
+#> 2 1968-01-29 57 57.36986 31
+#> 3 1965-12-05 59 59.52055 34
+#> 4 1980-03-01 45 45.28493 19
+#> 5 1949-11-01 75 75.61370 50
+#> 6 1947-02-14 78 78.32603 52
+#> 7 1940-02-19 85 85.31233 59
+#> 8 1988-01-10 37 37.42192 11
+#> 9 1997-08-27 27 27.79452 2
+#> 10 1978-01-26 47 47.37808 21
On this page
diff --git a/reference/age_groups.html b/reference/age_groups.html
index 4bcf4a8bd..e4f575224 100644
--- a/reference/age_groups.html
+++ b/reference/age_groups.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/all_mic.html b/reference/all_mic.html
new file mode 100644
index 000000000..ba0c13dee
--- /dev/null
+++ b/reference/all_mic.html
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/reference/all_mic_predictors.html b/reference/all_mic_predictors.html
new file mode 100644
index 000000000..ba0c13dee
--- /dev/null
+++ b/reference/all_mic_predictors.html
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/reference/all_sir.html b/reference/all_sir.html
new file mode 100644
index 000000000..ba0c13dee
--- /dev/null
+++ b/reference/all_sir.html
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/reference/all_sir_predictors.html b/reference/all_sir_predictors.html
new file mode 100644
index 000000000..ba0c13dee
--- /dev/null
+++ b/reference/all_sir_predictors.html
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/reference/amr-tidymodels.html b/reference/amr-tidymodels.html
new file mode 100644
index 000000000..2ee36ddbf
--- /dev/null
+++ b/reference/amr-tidymodels.html
@@ -0,0 +1,246 @@
+
+AMR Extensions for Tidymodels — amr-tidymodels • AMR (for R)
+ Skip to contents
+
+
+
+
+
+
+
+
+
This family of functions allows using AMR-specific data types such as <mic>
and <sir>
inside tidymodels
pipelines.
+
+
+
+
Usage
+
all_mic ( )
+
+all_mic_predictors ( )
+
+all_sir ( )
+
+all_sir_predictors ( )
+
+step_mic_log2 ( recipe , ... , role = NA , trained = FALSE , columns = NULL ,
+ skip = FALSE , id = recipes :: rand_id ( "mic_log2" ) )
+
+step_sir_numeric ( recipe , ... , role = NA , trained = FALSE , columns = NULL ,
+ skip = FALSE , id = recipes :: rand_id ( "sir_numeric" ) )
+
+
+
+
Arguments
+
+
+
recipe
+A recipe object. The step will be added to the sequence of
+operations for this recipe.
+
+
+...
+One or more selector functions to choose variables for this step.
+See selections()
for more details.
+
+
+role
+Not used by this step since no new variables are created.
+
+
+trained
+A logical to indicate if the quantities for preprocessing have
+been estimated.
+
+
+skip
+A logical. Should the step be skipped when the recipe is baked by
+bake()
? While all operations are baked when prep()
is run, some
+operations may not be able to be conducted on new data (e.g. processing the
+outcome variable(s)). Care should be taken when using skip = TRUE
as it
+may affect the computations for subsequent operations.
+
+
+id
+A character string that is unique to this step to identify it.
+
+
+
+
Details
+
You can read more in our online AMR with tidymodels introduction .
+
Tidyselect helpers include:
Pre-processing pipeline steps include:
step_mic_log2()
to convert MIC columns to numeric (via as.numeric()
) and apply a log2 transform, to be used with all_mic_predictors()
+step_sir_numeric()
to convert SIR columns to numeric (via as.numeric()
), to be used with all_sir_predictors()
: "S"
= 1, "I"
/"SDD"
= 2, "R"
= 3. All other values are rendered NA
. Keep this in mind for further processing, especially if the model does not allow for NA
values.
+These steps integrate with recipes::recipe()
and work like standard preprocessing steps. They are useful for preparing data for modelling, especially with classification models.
+
+
+
+
+
Examples
+
library ( tidymodels )
+#> ── Attaching packages ────────────────────────────────────── tidymodels 1.3.0 ──
+#> ✔ broom 1.0.8 ✔ rsample 1.3.0
+#> ✔ dials 1.4.0 ✔ tibble 3.3.0
+#> ✔ infer 1.0.8 ✔ tidyr 1.3.1
+#> ✔ modeldata 1.4.0 ✔ tune 1.3.0
+#> ✔ parsnip 1.3.2 ✔ workflows 1.2.0
+#> ✔ purrr 1.0.4 ✔ workflowsets 1.1.1
+#> ✔ recipes 1.3.1 ✔ 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()
+
+# The below approach formed the basis for this paper: DOI 10.3389/fmicb.2025.1582703
+# Presence of ESBL genes was predicted based on raw MIC values.
+
+
+# example data set in the AMR package
+esbl_isolates
+#> # A tibble: 500 × 19
+#> esbl genus AMC AMP TZP CXM FOX CTX CAZ GEN TOB TMP SXT
+#> <lgl> <chr> <mic> <mic> <mic> <mic> <mic> <mic> <mic> <mic> <mic> <mic> <mic>
+#> 1 FALSE Esch… 32 32 4 64 64 8.00 8.00 1 1 16.0 20
+#> 2 FALSE Esch… 32 32 4 64 64 4.00 8.00 1 1 16.0 320
+#> 3 FALSE Esch… 4 2 64 8 4 8.00 0.12 16 16 0.5 20
+#> 4 FALSE Kleb… 32 32 16 64 64 8.00 8.00 1 1 0.5 20
+#> 5 FALSE Esch… 32 32 4 4 4 0.25 2.00 1 1 16.0 320
+#> 6 FALSE Citr… 32 32 16 64 64 64.00 32.00 1 1 0.5 20
+#> 7 FALSE Morg… 32 32 4 64 64 16.00 2.00 1 1 0.5 20
+#> 8 FALSE Prot… 16 32 4 1 4 8.00 0.12 1 1 16.0 320
+#> 9 FALSE Ente… 32 32 8 64 64 32.00 4.00 1 1 0.5 20
+#> 10 FALSE Citr… 32 32 32 64 64 8.00 64.00 1 1 16.0 320
+#> # ℹ 490 more rows
+#> # ℹ 6 more variables: NIT <mic>, FOS <mic>, CIP <mic>, IPM <mic>, MEM <mic>,
+#> # COL <mic>
+
+# Prepare a binary outcome and convert to ordered factor
+data <- esbl_isolates %>%
+ mutate ( esbl = factor ( esbl , levels = c ( FALSE , TRUE ) , ordered = TRUE ) )
+
+# Split into training and testing sets
+split <- initial_split ( data )
+training_data <- training ( split )
+testing_data <- testing ( split )
+
+# Create and prep a recipe with MIC log2 transformation
+mic_recipe <- recipe ( esbl ~ . , data = training_data ) %>%
+ # Optionally remove non-predictive variables
+ remove_role ( genus , old_role = "predictor" ) %>%
+ # Apply the log2 transformation to all MIC predictors
+ step_mic_log2 ( all_mic_predictors ( ) ) %>%
+ prep ( )
+
+# View prepped recipe
+mic_recipe
+#>
+#> ── Recipe ──────────────────────────────────────────────────────────────────────
+#>
+#> ── Inputs
+#> Number of variables by role
+#> outcome: 1
+#> predictor: 17
+#> undeclared role: 1
+#>
+#> ── Training information
+#> Training data contained 375 data points and no incomplete rows.
+#>
+#> ── Operations
+#> • Log2 transformation of MIC columns: AMC , AMP , TZP , CXM , FOX , ... | Trained
+
+# Apply the recipe to training and testing data
+out_training <- bake ( mic_recipe , new_data = NULL )
+out_testing <- bake ( mic_recipe , new_data = testing_data )
+
+# Fit a logistic regression model
+fitted <- logistic_reg ( mode = "classification" ) %>%
+ set_engine ( "glm" ) %>%
+ fit ( esbl ~ . , data = out_training )
+#> Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
+
+# Generate predictions on the test set
+predictions <- predict ( fitted , out_testing ) %>%
+ bind_cols ( out_testing )
+
+# Evaluate predictions using standard classification metrics
+our_metrics <- metric_set ( accuracy , kap , ppv , npv )
+metrics <- our_metrics ( predictions , truth = esbl , estimate = .pred_class )
+
+# Show performance:
+# - negative predictive value (NPV) of ~98%
+# - positive predictive value (PPV) of ~94%
+metrics
+#> # A tibble: 4 × 3
+#> .metric .estimator .estimate
+#> <chr> <chr> <dbl>
+#> 1 accuracy binary 0.912
+#> 2 kap binary 0.824
+#> 3 ppv binary 0.917
+#> 4 npv binary 0.908
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/reference/antibiogram.html b/reference/antibiogram.html
index fd2221a78..af118809e 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)
- 3.0.0.9002
+ 3.0.0.9004
@@ -614,7 +614,7 @@ Adhering to previously described approaches (see Source) and especially the Baye
#>
#> |Syndromic Group |Piperacillin/tazobactam |
#> |:---------------|:-----------------------|
-#> |Clinical |73.5% (67.8-79%) |
+#> |Clinical |73.5% (68-79%) |
#> |ICU |57.7% (49.9-65.3%) |
#> |Outpatient |56.9% (46.5-66.8%) |
diff --git a/reference/antimicrobial_selectors.html b/reference/antimicrobial_selectors.html
index 3e55096b4..884b7629b 100644
--- a/reference/antimicrobial_selectors.html
+++ b/reference/antimicrobial_selectors.html
@@ -17,7 +17,7 @@ my_data_with_all_these_columns %>%
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
@@ -670,6 +670,9 @@ my_data_with_all_these_columns %>%
#> Loading required package: data.table
#>
#> Attaching package: ‘data.table’
+#> The following object is masked from ‘package:purrr’:
+#>
+#> transpose
#> The following objects are masked from ‘package:dplyr’:
#>
#> between, first, last
diff --git a/reference/antimicrobials.html b/reference/antimicrobials.html
index 5be993ade..6299a2e28 100644
--- a/reference/antimicrobials.html
+++ b/reference/antimicrobials.html
@@ -9,7 +9,7 @@ The antibiotics data set has been renamed to antimicrobials. The old name will b
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/as.ab.html b/reference/as.ab.html
index b32f5c712..4a5821158 100644
--- a/reference/as.ab.html
+++ b/reference/as.ab.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/as.av.html b/reference/as.av.html
index 18e7ab3d4..450ccac57 100644
--- a/reference/as.av.html
+++ b/reference/as.av.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/as.disk.html b/reference/as.disk.html
index 5e01efd67..b5fa2ba57 100644
--- a/reference/as.disk.html
+++ b/reference/as.disk.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/as.mic.html b/reference/as.mic.html
index bfbb97dc6..cb9fc6c33 100644
--- a/reference/as.mic.html
+++ b/reference/as.mic.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/as.mo.html b/reference/as.mo.html
index 92551e84c..db223e3be 100644
--- a/reference/as.mo.html
+++ b/reference/as.mo.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/as.sir.html b/reference/as.sir.html
index 70a27dbaf..ef0a9b40c 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)
- 3.0.0.9002
+ 3.0.0.9004
@@ -309,7 +309,7 @@ Breakpoints are currently implemented from EUCAST 2011-2025 and CLSI 2011-2025,
The function is.sir()
detects if the input contains class sir
. If the input is a data.frame or list , it iterates over all columns/items and returns a logical vector.
-The base R function as.double()
can be used to retrieve quantitative values from a sir
object: "S"
= 1, "I"
/"SDD"
= 2, "R"
= 3. All other values are rendered NA
. Note: Do not use as.integer()
, since that (because of how R works internally) will return the factor level indices, and not these aforementioned quantitative values.
+The base R function as.double()
can be used to retrieve quantitative values from a sir
object: "S"
= 1, "I"
/"SDD"
= 2, "R"
= 3. All other values are rendered NA
. Note: Do not use as.integer()
, since that (because of how R works internally) will return the factor level indices, and not these aforementioned quantitative values.
The function is_sir_eligible()
returns TRUE
when a column contains at most 5% potentially invalid antimicrobial interpretations, and FALSE
otherwise. The threshold of 5% can be set with the threshold
argument. If the input is a data.frame , it iterates over all columns and returns a logical vector.
@@ -414,10 +414,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-06-06 07:43:11 1 MIC amoxicillin Escherich… human 8
-
#> 2 2025-06-06 07:43:12 1 MIC cipro Escherich… human 0.256
-
#> 3 2025-06-06 07:43:12 1 DISK tobra Escherich… human 16
-
#> 4 2025-06-06 07:43:12 1 DISK genta Escherich… human 18
+
#> 1 2025-06-13 15:10:25 1 MIC amoxicillin Escherich… human 8
+
#> 2 2025-06-13 15:10:25 1 MIC cipro Escherich… human 0.256
+
#> 3 2025-06-13 15:10:26 1 DISK tobra Escherich… human 16
+
#> 4 2025-06-13 15:10:26 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>
@@ -614,7 +614,7 @@ Breakpoints are currently implemented from EUCAST 2011-2025 and CLSI 2011-2025,
# For CLEANING existing SIR values -------------------------------------
as.sir ( c ( "S" , "SDD" , "I" , "R" , "NI" , "A" , "B" , "C" ) )
-
#> Warning: in as.sir() : 3 results in index '20' truncated (38%) that were invalid
+
#> Warning: in as.sir() : 3 results in index '21' truncated (38%) that were invalid
#> antimicrobial interpretations: "A", "B", and "C"
#> Class 'sir'
#> [1] S SDD I R NI <NA> <NA> <NA>
diff --git a/reference/atc_online.html b/reference/atc_online.html
index 279168701..fd9e820ee 100644
--- a/reference/atc_online.html
+++ b/reference/atc_online.html
@@ -7,7 +7,7 @@
AMR (for R)
-
3.0.0.9002
+
3.0.0.9004
diff --git a/reference/av_from_text.html b/reference/av_from_text.html
index 757906101..19ce460e5 100644
--- a/reference/av_from_text.html
+++ b/reference/av_from_text.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/av_property.html b/reference/av_property.html
index b751cf7e2..4d83eb4ac 100644
--- a/reference/av_property.html
+++ b/reference/av_property.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/availability.html b/reference/availability.html
index dd27c6baf..42a796761 100644
--- a/reference/availability.html
+++ b/reference/availability.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/bug_drug_combinations.html b/reference/bug_drug_combinations.html
index 2e186c89a..742c19fb7 100644
--- a/reference/bug_drug_combinations.html
+++ b/reference/bug_drug_combinations.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/clinical_breakpoints.html b/reference/clinical_breakpoints.html
index 1ea0b0519..8406c6d03 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)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/count.html b/reference/count.html
index 5af44c651..73cdd9c36 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)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/custom_eucast_rules.html b/reference/custom_eucast_rules.html
index 9c1daae04..1361faa22 100644
--- a/reference/custom_eucast_rules.html
+++ b/reference/custom_eucast_rules.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/custom_mdro_guideline.html b/reference/custom_mdro_guideline.html
index cf396c2cf..39693fb64 100644
--- a/reference/custom_mdro_guideline.html
+++ b/reference/custom_mdro_guideline.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/dosage.html b/reference/dosage.html
index 28461b950..8e1ecfcd5 100644
--- a/reference/dosage.html
+++ b/reference/dosage.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/esbl_isolates.html b/reference/esbl_isolates.html
new file mode 100644
index 000000000..edbfc6086
--- /dev/null
+++ b/reference/esbl_isolates.html
@@ -0,0 +1,112 @@
+
+Data Set with 500 ESBL Isolates — esbl_isolates • AMR (for R)
+ Skip to contents
+
+
+
+
+
+
+
+
+
A data set containing 500 microbial isolates with MIC values of common antibiotics and a binary esbl
column for extended-spectrum beta-lactamase (ESBL) production. This data set contains randomised fictitious data but reflects reality and can be used to practise AMR-related machine learning, e.g., classification modelling with tidymodels .
+
+
+
+
+
+
+
A tibble with 500 observations and 19 variables:
esbl
Logical indicator if the isolate is ESBL-producing
+genus
Genus of the microorganism
+AMC:COL
MIC values for 17 antimicrobial agents, transformed to class mic
(see as.mic()
)
+
+
+
+
+
Examples
+
esbl_isolates
+#> # A tibble: 500 × 19
+#> esbl genus AMC AMP TZP CXM FOX CTX CAZ GEN TOB TMP SXT
+#> <lgl> <chr> <mic> <mic> <mic> <mic> <mic> <mic> <mic> <mic> <mic> <mic> <mic>
+#> 1 FALSE Esch… 32 32 4 64 64 8.00 8.00 1 1 16.0 20
+#> 2 FALSE Esch… 32 32 4 64 64 4.00 8.00 1 1 16.0 320
+#> 3 FALSE Esch… 4 2 64 8 4 8.00 0.12 16 16 0.5 20
+#> 4 FALSE Kleb… 32 32 16 64 64 8.00 8.00 1 1 0.5 20
+#> 5 FALSE Esch… 32 32 4 4 4 0.25 2.00 1 1 16.0 320
+#> 6 FALSE Citr… 32 32 16 64 64 64.00 32.00 1 1 0.5 20
+#> 7 FALSE Morg… 32 32 4 64 64 16.00 2.00 1 1 0.5 20
+#> 8 FALSE Prot… 16 32 4 1 4 8.00 0.12 1 1 16.0 320
+#> 9 FALSE Ente… 32 32 8 64 64 32.00 4.00 1 1 0.5 20
+#> 10 FALSE Citr… 32 32 32 64 64 8.00 64.00 1 1 16.0 320
+#> # ℹ 490 more rows
+#> # ℹ 6 more variables: NIT <mic>, FOS <mic>, CIP <mic>, IPM <mic>, MEM <mic>,
+#> # COL <mic>
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/reference/eucast_rules.html b/reference/eucast_rules.html
index 0ce40645d..169c77a5e 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)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/example_isolates.html b/reference/example_isolates.html
index 725a032e4..27c39918f 100644
--- a/reference/example_isolates.html
+++ b/reference/example_isolates.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/example_isolates_unclean.html b/reference/example_isolates_unclean.html
index b02129aff..6813d6b7a 100644
--- a/reference/example_isolates_unclean.html
+++ b/reference/example_isolates_unclean.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/export_ncbi_biosample.html b/reference/export_ncbi_biosample.html
index c9cd236ab..916a6e46d 100644
--- a/reference/export_ncbi_biosample.html
+++ b/reference/export_ncbi_biosample.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/first_isolate.html b/reference/first_isolate.html
index 396211830..29474f0ab 100644
--- a/reference/first_isolate.html
+++ b/reference/first_isolate.html
@@ -9,7 +9,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/g.test.html b/reference/g.test.html
index b030db3e1..c78fa45a4 100644
--- a/reference/g.test.html
+++ b/reference/g.test.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/get_episode.html b/reference/get_episode.html
index c3ecc9565..38a6beac2 100644
--- a/reference/get_episode.html
+++ b/reference/get_episode.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
@@ -154,27 +154,27 @@
df <- example_isolates [ sample ( seq_len ( 2000 ) , size = 100 ) , ]
get_episode ( df $ date , episode_days = 60 ) # indices
-#> [1] 16 20 42 39 6 46 25 24 12 15 44 11 1 37 29 48 11 4 15 28 45 6 31 4 32
-#> [26] 23 43 35 23 27 21 48 4 40 25 46 30 12 38 46 13 18 8 26 8 7 34 5 31 25
-#> [51] 28 36 40 40 10 45 22 10 42 24 6 25 1 3 33 43 26 25 15 17 31 7 46 14 36
-#> [76] 9 39 49 41 40 2 37 6 48 47 43 47 6 38 14 30 22 42 34 40 19 9 19 16 21
+#> [1] 7 4 45 15 6 11 26 43 24 20 8 29 24 42 32 13 45 2 43 39 15 32 45 2 31
+#> [26] 4 19 21 44 22 44 9 43 38 16 7 45 10 33 36 44 4 20 11 14 5 19 7 39 6
+#> [51] 46 30 4 30 41 7 13 28 37 30 18 27 9 42 17 22 40 12 8 34 13 2 44 4 3
+#> [76] 33 35 15 22 23 15 9 40 12 1 43 17 18 36 31 22 34 37 43 36 37 10 23 25 36
is_new_episode ( df $ date , episode_days = 60 ) # TRUE/FALSE
#> [1] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
-#> [13] TRUE TRUE TRUE TRUE FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE
-#> [25] TRUE TRUE TRUE TRUE FALSE TRUE TRUE FALSE FALSE TRUE FALSE FALSE
-#> [37] TRUE FALSE TRUE FALSE TRUE TRUE TRUE TRUE FALSE TRUE TRUE TRUE
-#> [49] FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE FALSE FALSE FALSE
-#> [61] FALSE FALSE FALSE TRUE TRUE FALSE FALSE FALSE FALSE TRUE FALSE FALSE
-#> [73] FALSE TRUE FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE FALSE FALSE
-#> [85] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE
-#> [97] FALSE FALSE FALSE FALSE
+#> [13] FALSE TRUE TRUE TRUE FALSE TRUE FALSE TRUE FALSE FALSE FALSE FALSE
+#> [25] TRUE FALSE TRUE TRUE TRUE TRUE FALSE TRUE FALSE TRUE TRUE FALSE
+#> [37] FALSE TRUE TRUE TRUE FALSE FALSE FALSE FALSE TRUE TRUE FALSE FALSE
+#> [49] FALSE FALSE TRUE TRUE FALSE FALSE TRUE FALSE FALSE TRUE TRUE FALSE
+#> [61] TRUE TRUE FALSE FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE FALSE
+#> [73] FALSE FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE FALSE FALSE FALSE
+#> [85] TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
+#> [97] FALSE FALSE TRUE FALSE
# filter on results from the third 60-day episode only, using base R
df [ which ( get_episode ( df $ date , 60 ) == 3 ) , ]
#> # A tibble: 1 × 46
#> date patient age gender ward mo PEN OXA FLC AMX
#> <date> <chr> <dbl> <chr> <chr> <mo> <sir> <sir> <sir> <sir>
-#> 1 2002-11-14 058917 76 F ICU B_ STPHY_ HMNS R NA S NA
+#> 1 2003-01-06 894506 83 M ICU B_ STRPT_ PNMN S NA NA S
#> # ℹ 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>,
@@ -208,19 +208,19 @@
arrange ( patient , condition , date )
}
#> # A tibble: 100 × 4
-#> # Groups: patient, condition [98]
+#> # Groups: patient, condition [93]
#> patient date condition new_episode
#> <chr> <date> <chr> <lgl>
-#> 1 010257 2004-04-03 C TRUE
-#> 2 021368 2016-03-25 B TRUE
-#> 3 034010 2010-02-26 C TRUE
-#> 4 058917 2002-11-14 A TRUE
-#> 5 083080 2010-02-25 B TRUE
-#> 6 097186 2015-10-28 A TRUE
-#> 7 0DBF93 2015-12-03 B TRUE
-#> 8 105248 2005-06-16 A TRUE
-#> 9 130252 2002-04-08 B TRUE
-#> 10 161740 2005-06-21 C TRUE
+#> 1 060287 2007-03-11 A TRUE
+#> 2 101305 2006-12-13 A TRUE
+#> 3 141061 2014-10-22 A TRUE
+#> 4 151041 2006-02-10 A TRUE
+#> 5 15D386 2004-08-01 B TRUE
+#> 6 187841 2008-04-22 A TRUE
+#> 7 189363 2004-06-22 C TRUE
+#> 8 208305 2015-09-14 A TRUE
+#> 9 257844 2011-05-22 A TRUE
+#> 10 284FFF 2010-03-31 A TRUE
#> # ℹ 90 more rows
if ( require ( "dplyr" ) ) {
@@ -234,19 +234,19 @@
arrange ( patient , ward , date )
}
#> # A tibble: 100 × 5
-#> # Groups: ward, patient [94]
-#> ward date patient new_index new_logical
-#> <chr> <date> <chr> <int> <lgl>
-#> 1 Clinical 2004-04-03 010257 1 TRUE
-#> 2 Outpatient 2016-03-25 021368 1 TRUE
-#> 3 Clinical 2010-02-26 034010 1 TRUE
-#> 4 ICU 2002-11-14 058917 1 TRUE
-#> 5 Clinical 2010-02-25 083080 1 TRUE
-#> 6 Clinical 2015-10-28 097186 1 TRUE
-#> 7 ICU 2015-12-03 0DBF93 1 TRUE
-#> 8 Clinical 2005-06-16 105248 1 TRUE
-#> 9 ICU 2002-04-08 130252 1 TRUE
-#> 10 Clinical 2005-06-21 161740 1 TRUE
+#> # Groups: ward, patient [88]
+#> ward date patient new_index new_logical
+#> <chr> <date> <chr> <int> <lgl>
+#> 1 Clinical 2007-03-11 060287 1 TRUE
+#> 2 Clinical 2006-12-13 101305 1 TRUE
+#> 3 Clinical 2014-10-22 141061 1 TRUE
+#> 4 Clinical 2006-02-10 151041 1 TRUE
+#> 5 ICU 2004-08-01 15D386 1 TRUE
+#> 6 Clinical 2008-04-22 187841 1 TRUE
+#> 7 Clinical 2004-06-22 189363 1 TRUE
+#> 8 Clinical 2015-09-14 208305 1 TRUE
+#> 9 Clinical 2011-05-22 257844 1 TRUE
+#> 10 Clinical 2010-03-31 284FFF 1 TRUE
#> # ℹ 90 more rows
if ( require ( "dplyr" ) ) {
@@ -262,9 +262,9 @@
#> # A tibble: 3 × 5
#> ward n_patients n_episodes_365 n_episodes_60 n_episodes_30
#> <chr> <int> <int> <int> <int>
-#> 1 Clinical 51 13 34 41
-#> 2 ICU 36 11 26 30
-#> 3 Outpatient 7 6 7 7
+#> 1 Clinical 55 12 34 39
+#> 2 ICU 27 10 24 25
+#> 3 Outpatient 6 5 6 6
# grouping on patients and microorganisms leads to the same
# results as first_isolate() when using 'episode-based':
@@ -282,7 +282,7 @@
identical ( x , y )
}
-#> [1] TRUE
+#> [1] FALSE
# but is_new_episode() has a lot more flexibility than first_isolate(),
# since you can now group on anything that seems relevant:
@@ -293,19 +293,19 @@
select ( group_vars ( . ) , flag_episode )
}
#> # A tibble: 100 × 4
-#> # Groups: patient, mo, ward [98]
-#> patient mo ward flag_episode
-#> <chr> <mo> <chr> <lgl>
-#> 1 E19253 B_ STPHY_ CONS Clinical TRUE
-#> 2 CB6026 B_ PSDMN_ AERG Clinical TRUE
-#> 3 D07D73 B_ STRPT_ PYGN ICU TRUE
-#> 4 972724 B_ SPHNGB_ SPRT ICU TRUE
-#> 5 999565 B_ STPHY_ CONS Clinical TRUE
-#> 6 7D1606 B_ VLLNL_ PRVL ICU TRUE
-#> 7 B26404 B_ STPHY_ EPDR Clinical TRUE
-#> 8 AB0003 B_ ESCHR_ COLI Clinical TRUE
-#> 9 105248 B_ ESCHR_ COLI Clinical TRUE
-#> 10 F09078 B_ ESCHR_ COLI Clinical TRUE
+#> # Groups: patient, mo, ward [92]
+#> patient mo ward flag_episode
+#> <chr> <mo> <chr> <lgl>
+#> 1 F24801 B_ STRPT_ AGLC ICU TRUE
+#> 2 A26548 B_ STPHY_ CONS ICU TRUE
+#> 3 422833 B_ ENTRC_ FCLS Clinical TRUE
+#> 4 AFD3B1 UNKNOWN Clinical TRUE
+#> 5 F35553 B_ ENTRBC_ CLOC ICU TRUE
+#> 6 316893 B_ STPHY_ CONS Clinical TRUE
+#> 7 B54813 B_ ENTRC ICU TRUE
+#> 8 E06844 B_ STPHY_ AURS Outpatient TRUE
+#> 9 B65162 B_ STRPT_ PNMN Clinical TRUE
+#> 10 43F266 B_ STPHY_ AURS ICU TRUE
#> # ℹ 90 more rows
# }
diff --git a/reference/ggplot_pca.html b/reference/ggplot_pca.html
index fff430940..b99e50e60 100644
--- a/reference/ggplot_pca.html
+++ b/reference/ggplot_pca.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/ggplot_sir.html b/reference/ggplot_sir.html
index 1a8cda0f2..c83df590f 100644
--- a/reference/ggplot_sir.html
+++ b/reference/ggplot_sir.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/guess_ab_col.html b/reference/guess_ab_col.html
index dc68fae94..364b0197f 100644
--- a/reference/guess_ab_col.html
+++ b/reference/guess_ab_col.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/index.html b/reference/index.html
index ec2d40c74..402331727 100644
--- a/reference/index.html
+++ b/reference/index.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
@@ -388,6 +388,12 @@
Data Set with 2 000 Example Isolates
+ esbl_isolates
+
+
+ Data Set with 500 ESBL Isolates
+
+
microorganisms.codes
diff --git a/reference/intrinsic_resistant.html b/reference/intrinsic_resistant.html
index 123b1d91e..0aefbbaf6 100644
--- a/reference/intrinsic_resistant.html
+++ b/reference/intrinsic_resistant.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/italicise_taxonomy.html b/reference/italicise_taxonomy.html
index 4547378fc..c28a577d4 100644
--- a/reference/italicise_taxonomy.html
+++ b/reference/italicise_taxonomy.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/join.html b/reference/join.html
index 19e709b52..4f250e3fb 100644
--- a/reference/join.html
+++ b/reference/join.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/key_antimicrobials.html b/reference/key_antimicrobials.html
index 08ce8e921..4de5a83a6 100644
--- a/reference/key_antimicrobials.html
+++ b/reference/key_antimicrobials.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/kurtosis.html b/reference/kurtosis.html
index 4d9890878..a3e6a4ed9 100644
--- a/reference/kurtosis.html
+++ b/reference/kurtosis.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
@@ -91,9 +91,9 @@
Examples
kurtosis ( rnorm ( 10000 ) )
-#> [1] 3.082227
+#> [1] 3.072546
kurtosis ( rnorm ( 10000 ) , excess = TRUE )
-#> [1] -0.02736212
+#> [1] -0.024332
On this page
diff --git a/reference/like.html b/reference/like.html
index 8b5e8f372..2cc6d5491 100644
--- a/reference/like.html
+++ b/reference/like.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
@@ -107,6 +107,8 @@
Examples
# data.table has a more limited version of %like%, so unload it:
try ( detach ( "package:data.table" , unload = TRUE ) , silent = TRUE )
+#> Warning: ‘data.table’ namespace cannot be unloaded:
+#> namespace ‘data.table’ is imported by ‘prodlim’ so cannot be unloaded
a <- "This is a test"
b <- "TEST"
diff --git a/reference/mdro.html b/reference/mdro.html
index 84ce88bec..c574ecdd2 100644
--- a/reference/mdro.html
+++ b/reference/mdro.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/mean_amr_distance.html b/reference/mean_amr_distance.html
index c6d5d264c..95273f73d 100644
--- a/reference/mean_amr_distance.html
+++ b/reference/mean_amr_distance.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
@@ -110,31 +110,31 @@
sir <- random_sir ( 10 )
sir
#> Class 'sir'
-#> [1] S R S S I R R R S S
+#> [1] R S R I I R R R S R
mean_amr_distance ( sir )
-#> [1] -0.7745967 1.1618950 -0.7745967 -0.7745967 -0.7745967 1.1618950
-#> [7] 1.1618950 1.1618950 -0.7745967 -0.7745967
+#> [1] 0.7745967 -1.1618950 0.7745967 -1.1618950 -1.1618950 0.7745967
+#> [7] 0.7745967 0.7745967 -1.1618950 0.7745967
mic <- random_mic ( 10 )
mic
#> Class 'mic'
-#> [1] 0.01 <=0.001 >=64 2 0.25 <=0.001 32 0.025 0.125
-#> [10] <=0.001
+#> [1] 0.25 0.0005 0.001 0.0002 8 <=0.0001 <=0.0001 0.004
+#> [9] 0.016 0.002
mean_amr_distance ( mic )
-#> [1] -0.52636230 -1.08012768 1.58136840 0.74786845 0.24776848 -1.08012768
-#> [7] 1.41466841 -0.30599690 0.08106849 -1.08012768
+#> [1] 1.17346160 -0.53194487 -0.34173212 -0.78339244 2.12452534 -0.97360519
+#> [7] -0.97360519 0.03869338 0.41911887 -0.15151937
# equal to the Z-score of their log2:
( log2 ( mic ) - mean ( log2 ( mic ) ) ) / sd ( log2 ( mic ) )
-#> [1] -0.52636230 -1.08012768 1.58136840 0.74786845 0.24776848 -1.08012768
-#> [7] 1.41466841 -0.30599690 0.08106849 -1.08012768
+#> [1] 1.17346160 -0.53194487 -0.34173212 -0.78339244 2.12452534 -0.97360519
+#> [7] -0.97360519 0.03869338 0.41911887 -0.15151937
disk <- random_disk ( 10 )
disk
#> Class 'disk'
-#> [1] 46 7 16 44 16 16 12 41 13 47
+#> [1] 31 26 23 38 44 41 20 49 32 16
mean_amr_distance ( disk )
-#> [1] 1.2329916 -1.1475367 -0.5981840 1.1109132 -0.5981840 -0.5981840
-#> [7] -0.8423408 0.9277957 -0.7813016 1.2940308
+#> [1] -0.09179851 -0.55079106 -0.82618658 0.55079106 1.10158211 0.82618658
+#> [7] -1.10158211 1.56057466 0.00000000 -1.46877615
y <- data.frame (
id = LETTERS [ 1 : 10 ] ,
@@ -145,35 +145,35 @@
)
y
#> id amox cipr gent tobr
-#> 1 A R 30 1 >=8
-#> 2 B I 21 8 4
-#> 3 C R 20 1 4
-#> 4 D S 30 2 1
-#> 5 E S 25 16 4
-#> 6 F I 31 4 2
-#> 7 G R 31 1 >=8
-#> 8 H R 18 8 1
-#> 9 I S 17 0.5 >=8
-#> 10 J S 17 4 4
+#> 1 A S 27 8 32
+#> 2 B I 33 2 16
+#> 3 C I 22 1 <=4
+#> 4 D R 32 0.25 8
+#> 5 E S 31 8 16
+#> 6 F I 31 2 <=4
+#> 7 G R 28 2 <=4
+#> 8 H S 22 16 8
+#> 9 I I 22 8 16
+#> 10 J I 24 0.25 32
mean_amr_distance ( y )
#> ℹ Calculating mean AMR distance based on columns "amox", "cipr", "gent",
#> and "tobr"
-#> [1] 0.58987341 -0.03053318 -0.04319558 -0.40303919 0.28644445 0.01028759
-#> [7] 0.63115955 -0.11068385 -0.58280241 -0.34751080
+#> [1] 0.42546514 0.31178268 -0.85243112 0.27789744 0.43759204 -0.22674498
+#> [7] 0.19734764 -0.16271414 -0.06891128 -0.33928341
y $ amr_distance <- mean_amr_distance ( y , is.mic ( y ) )
#> ℹ Calculating mean AMR distance based on columns "gent" and "tobr"
y [ order ( y $ amr_distance ) , ]
#> id amox cipr gent tobr amr_distance
-#> 4 D S 30 2 1 -0.9142137
-#> 3 C R 20 1 4 -0.3370495
-#> 8 H R 18 8 1 -0.3068815
-#> 9 I S 17 0.5 >=8 -0.2003005
-#> 6 F I 31 4 2 -0.1701325
-#> 1 A R 30 1 >=8 0.1033656
-#> 7 G R 31 1 >=8 0.1033656
-#> 10 J S 17 4 4 0.2702827
-#> 2 B I 21 8 4 0.5739488
-#> 5 E S 25 16 4 0.8776150
+#> 4 D R 32 0.25 8 -0.93315862
+#> 3 C I 22 1 <=4 -0.88239870
+#> 6 F I 31 2 <=4 -0.64403306
+#> 7 G R 28 2 <=4 -0.64403306
+#> 10 J I 24 0.25 32 -0.08121587
+#> 2 B I 33 2 16 0.20790970
+#> 8 H S 22 16 8 0.49703526
+#> 5 E S 31 8 16 0.68464099
+#> 9 I I 22 8 16 0.68464099
+#> 1 A S 27 8 32 1.11061237
if ( require ( "dplyr" ) ) {
y %>%
@@ -186,16 +186,16 @@
#> ℹ Calculating mean AMR distance based on columns "amox", "cipr", "gent",
#> and "tobr"
#> id amox cipr gent tobr amr_distance check_id_C
-#> 1 C R 20 1 4 -0.04319558 0.00000000
-#> 2 B I 21 8 4 -0.03053318 0.01266241
-#> 3 F I 31 4 2 0.01028759 0.05348318
-#> 4 H R 18 8 1 -0.11068385 0.06748826
-#> 5 J S 17 4 4 -0.34751080 0.30431522
-#> 6 E S 25 16 4 0.28644445 0.32964004
-#> 7 D S 30 2 1 -0.40303919 0.35984361
-#> 8 I S 17 0.5 >=8 -0.58280241 0.53960682
-#> 9 A R 30 1 >=8 0.58987341 0.63306899
-#> 10 G R 31 1 >=8 0.63115955 0.67435514
+#> 1 C I 22 1 <=4 -0.85243112 0.0000000
+#> 2 J I 24 0.25 32 -0.33928341 0.5131477
+#> 3 F I 31 2 <=4 -0.22674498 0.6256861
+#> 4 H S 22 16 8 -0.16271414 0.6897170
+#> 5 I I 22 8 16 -0.06891128 0.7835198
+#> 6 G R 28 2 <=4 0.19734764 1.0497788
+#> 7 D R 32 0.25 8 0.27789744 1.1303286
+#> 8 B I 33 2 16 0.31178268 1.1642138
+#> 9 A S 27 8 32 0.42546514 1.2778963
+#> 10 E S 31 8 16 0.43759204 1.2900232
if ( require ( "dplyr" ) ) {
# support for groups
example_isolates %>%
diff --git a/reference/microorganisms.codes.html b/reference/microorganisms.codes.html
index 3c0aaf2f5..4743f29a9 100644
--- a/reference/microorganisms.codes.html
+++ b/reference/microorganisms.codes.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/microorganisms.groups.html b/reference/microorganisms.groups.html
index c5e718049..ff1558935 100644
--- a/reference/microorganisms.groups.html
+++ b/reference/microorganisms.groups.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/microorganisms.html b/reference/microorganisms.html
index d16728285..edfbe3bc8 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)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/mo_matching_score.html b/reference/mo_matching_score.html
index 52a32ccb8..5f6bf94cf 100644
--- a/reference/mo_matching_score.html
+++ b/reference/mo_matching_score.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/mo_property.html b/reference/mo_property.html
index e54fa8eb6..54f19e270 100644
--- a/reference/mo_property.html
+++ b/reference/mo_property.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/mo_source.html b/reference/mo_source.html
index c8751ad4b..cc26d99f9 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)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/pca.html b/reference/pca.html
index e0b2936e2..24148df4a 100644
--- a/reference/pca.html
+++ b/reference/pca.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/plot-1.png b/reference/plot-1.png
index 4928b87a2..d32f27989 100644
Binary files a/reference/plot-1.png and b/reference/plot-1.png differ
diff --git a/reference/plot-10.png b/reference/plot-10.png
index 29efa3e4b..e54b68dd9 100644
Binary files a/reference/plot-10.png and b/reference/plot-10.png differ
diff --git a/reference/plot-12.png b/reference/plot-12.png
index 6d0ec99cb..2be06214e 100644
Binary files a/reference/plot-12.png and b/reference/plot-12.png differ
diff --git a/reference/plot-13.png b/reference/plot-13.png
index d6081d6f9..d5ceb768e 100644
Binary files a/reference/plot-13.png and b/reference/plot-13.png differ
diff --git a/reference/plot-14.png b/reference/plot-14.png
index a95d8b703..dcd1fc928 100644
Binary files a/reference/plot-14.png and b/reference/plot-14.png differ
diff --git a/reference/plot-15.png b/reference/plot-15.png
index 30df283ad..4e426ce47 100644
Binary files a/reference/plot-15.png and b/reference/plot-15.png differ
diff --git a/reference/plot-16.png b/reference/plot-16.png
index 5b79a31e3..4bde42f42 100644
Binary files a/reference/plot-16.png and b/reference/plot-16.png differ
diff --git a/reference/plot-17.png b/reference/plot-17.png
index e93447aab..07fde5614 100644
Binary files a/reference/plot-17.png and b/reference/plot-17.png differ
diff --git a/reference/plot-18.png b/reference/plot-18.png
index e40378b4e..48fd92f9c 100644
Binary files a/reference/plot-18.png and b/reference/plot-18.png differ
diff --git a/reference/plot-19.png b/reference/plot-19.png
index 9eb7a5a11..836d3011e 100644
Binary files a/reference/plot-19.png and b/reference/plot-19.png differ
diff --git a/reference/plot-2.png b/reference/plot-2.png
index 397c1f3df..97f649fae 100644
Binary files a/reference/plot-2.png and b/reference/plot-2.png differ
diff --git a/reference/plot-20.png b/reference/plot-20.png
index 192b2a6c2..38ca5fe02 100644
Binary files a/reference/plot-20.png and b/reference/plot-20.png differ
diff --git a/reference/plot-3.png b/reference/plot-3.png
index 89cb54527..d6e85c3c6 100644
Binary files a/reference/plot-3.png and b/reference/plot-3.png differ
diff --git a/reference/plot-9.png b/reference/plot-9.png
index 1a7f28559..da6e8d1d8 100644
Binary files a/reference/plot-9.png and b/reference/plot-9.png differ
diff --git a/reference/plot.html b/reference/plot.html
index d23d8e426..987ee268d 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)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/proportion.html b/reference/proportion.html
index e3147bd1a..0ee778bfc 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)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/random-1.png b/reference/random-1.png
new file mode 100644
index 000000000..2748ad23f
Binary files /dev/null and b/reference/random-1.png differ
diff --git a/reference/random-2.png b/reference/random-2.png
new file mode 100644
index 000000000..eb222fc32
Binary files /dev/null and b/reference/random-2.png differ
diff --git a/reference/random.html b/reference/random.html
index fb1f4cdcb..45ff0bc00 100644
--- a/reference/random.html
+++ b/reference/random.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
@@ -55,9 +55,11 @@
Usage
-
random_mic ( size = NULL , mo = NULL , ab = NULL , ... )
+ random_mic ( size = NULL , mo = NULL , ab = NULL , skew = "right" ,
+ severity = 1 , ... )
-random_disk ( size = NULL , mo = NULL , ab = NULL , ... )
+random_disk ( size = NULL , mo = NULL , ab = NULL , skew = "left" ,
+ severity = 1 , ... )
random_sir ( size = NULL , prob_SIR = c ( 0.33 , 0.33 , 0.33 ) , ... )
@@ -71,13 +73,21 @@
mo
-
Any character that can be coerced to a valid microorganism code with as.mo()
.
+
Any character that can be coerced to a valid microorganism code with as.mo()
. Can be the same length as size
.
ab
Any character that can be coerced to a valid antimicrobial drug code with as.ab()
.
+
skew
+
Direction of skew for MIC or disk values, either "right"
or "left"
. A left-skewed distribution has the majority of the data on the right.
+
+
+
severity
+
Skew severity; higher values will increase the skewedness. Default is 2
; use 0
to prevent skewedness.
+
+
...
Ignored, only in place to allow future extensions.
@@ -92,51 +102,61 @@
Details
-
The base R function sample()
is used for generating values.
-
Generated values are based on the EUCAST 2025 guideline as implemented in the clinical_breakpoints data set. To create specific generated values per bug or drug, set the mo
and/or ab
argument.
-
+ Internally, MIC and disk zone values are sampled based on clinical breakpoints defined in the clinical_breakpoints data set. To create specific generated values per bug or drug, set the mo
and/or ab
argument. The MICs are sampled on a log2 scale and disks linearly, using weighted probabilities. The weights are based on the skew
and severity
arguments:
skew = "right"
places more emphasis on lower MIC or higher disk values.
+skew = "left"
places more emphasis on higher MIC or lower disk values.
+severity
controls the exponential bias applied.
+
Examples
random_mic ( 25 )
#> Class 'mic'
-#> [1] <=0.001 8 0.002 256 256 256 0.125 0.25 0.005
-#> [10] 1 0.01 32 32 256 0.01 32 8 0.025
-#> [19] 0.0625 0.5 0.0625 0.5 0.01 0.125 0.5
+#> [1] 0.125 2 16 1 0.004 0.008 0.0005 0.125
+#> [9] 2 0.008 0.008 0.016 0.064 0.064 <=0.0002 0.001
+#> [17] 0.0005 0.5 0.002 0.002 0.125 8 <=0.0002 0.002
+#> [25] 0.064
random_disk ( 25 )
#> Class 'disk'
-#> [1] 48 46 26 46 17 46 15 50 20 13 48 44 6 47 26 15 12 20 11 45 8 41 45 14 37
+#> [1] 47 24 47 38 28 36 33 31 50 41 29 40 31 44 45 37 40 44 49 9 48 20 37 47 28
random_sir ( 25 )
#> Class 'sir'
-#> [1] I R S R I S S I S R S R I R S S S S I R S S S S R
+#> [1] S R R S S I S I S S I S R I I I I S I R I I I I R
+
+# add more skewedness, make more realistic by setting a bug and/or drug:
+disks <- random_disk ( 100 , severity = 2 , mo = "Escherichia coli" , ab = "CIP" )
+plot ( disks )
+
+# `plot()` and `ggplot2::autoplot()` allow for coloured bars if `mo` and `ab` are set
+plot ( disks , mo = "Escherichia coli" , ab = "CIP" , guideline = "CLSI 2025" )
+
# \donttest{
-# make the random generation more realistic by setting a bug and/or drug:
random_mic ( 25 , "Klebsiella pneumoniae" ) # range 0.0625-64
#> Class 'mic'
-#> [1] 2 0.25 0.002 0.025 0.01 0.0625 0.25 0.01 0.0625
-#> [10] <=0.001 0.01 0.125 8 0.002 0.0625 0.002 >=256 >=256
-#> [19] 0.5 >=256 1 0.125 64 64 0.25
+#> [1] 0.0005 8 0.008 0.0002 0.0002 0.0002 0.0002 <=0.0001
+#> [9] 64 <=0.0001 1 0.5 0.001 0.5 0.001 0.0005
+#> [17] 0.016 0.008 0.002 0.032 <=0.0001 0.0002 0.001 0.0005
+#> [25] 0.001
random_mic ( 25 , "Klebsiella pneumoniae" , "meropenem" ) # range 0.0625-16
#> Class 'mic'
-#> [1] 2 <=0.5 8 8 <=0.5 2 2 8 2 8 8 4
-#> [13] 1 <=0.5 >=16 1 4 2 1 <=0.5 >=16 4 4 4
-#> [25] 8
+#> [1] <=0.5 <=0.5 2 <=0.5 1 <=0.5 <=0.5 <=0.5 <=0.5 1 <=0.5 <=0.5
+#> [13] <=0.5 1 <=0.5 1 <=0.5 <=0.5 <=0.5 <=0.5 <=0.5 <=0.5 2 1
+#> [25] 2
random_mic ( 25 , "Streptococcus pneumoniae" , "meropenem" ) # range 0.0625-4
#> Class 'mic'
-#> [1] 8 0.5 2 0.125 <=0.025 0.25 0.0625 2 16
-#> [10] 0.25 0.5 16 0.5 1 8 <=0.025 2 <=0.025
-#> [19] 0.125 8 1 0.0625 2 1 4
+#> [1] 0.125 0.125 1 0.25 0.5 0.125 0.125 0.125 0.125 0.125 0.125 0.125
+#> [13] 1 0.125 0.5 1 0.125 0.25 0.5 0.25 0.5 0.5 0.5 0.125
+#> [25] 0.25
random_disk ( 25 , "Klebsiella pneumoniae" ) # range 8-50
#> Class 'disk'
-#> [1] 39 19 39 20 37 11 18 10 46 46 9 40 46 24 30 31 13 12 42 50 43 12 34 22 47
+#> [1] 32 21 23 21 14 22 25 29 29 28 34 34 34 33 13 28 33 34 32 25 18 26 13 21 33
random_disk ( 25 , "Klebsiella pneumoniae" , "ampicillin" ) # range 11-17
#> Class 'disk'
-#> [1] 13 11 17 12 11 16 13 14 15 13 17 15 11 13 16 15 14 13 12 16 14 11 12 14 17
+#> [1] 20 21 15 22 16 22 16 14 21 17 15 19 20 17 18 21 16 20 11 22 19 18 19 11 21
random_disk ( 25 , "Streptococcus pneumoniae" , "ampicillin" ) # range 12-27
#> Class 'disk'
-#> [1] 24 19 20 27 27 20 21 16 23 20 22 17 27 20 23 22 22 16 16 24 24 19 25 17 19
+#> [1] 29 25 31 17 29 21 31 34 33 31 29 30 23 20 33 20 34 32 35 26 26 26 34 30 33
# }
diff --git a/reference/resistance_predict.html b/reference/resistance_predict.html
index e5abd9ef2..da653c156 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)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/skewness.html b/reference/skewness.html
index 1d3cfa5bb..600522a7c 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)
- 3.0.0.9002
+ 3.0.0.9004
@@ -90,7 +90,7 @@ When negative ('left-skewed'): the left tail is longer; the mass of the distribu
Examples
skewness ( runif ( 1000 ) )
-#> [1] -0.008140368
+#> [1] -0.08600633
On this page
diff --git a/reference/step_mic_log2.html b/reference/step_mic_log2.html
new file mode 100644
index 000000000..ba0c13dee
--- /dev/null
+++ b/reference/step_mic_log2.html
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/reference/step_sir_numeric.html b/reference/step_sir_numeric.html
new file mode 100644
index 000000000..ba0c13dee
--- /dev/null
+++ b/reference/step_sir_numeric.html
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/reference/top_n_microorganisms.html b/reference/top_n_microorganisms.html
index cd46f62a1..e7519abb6 100644
--- a/reference/top_n_microorganisms.html
+++ b/reference/top_n_microorganisms.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/reference/translate.html b/reference/translate.html
index 39c805219..3b7a65bec 100644
--- a/reference/translate.html
+++ b/reference/translate.html
@@ -7,7 +7,7 @@
AMR (for R)
- 3.0.0.9002
+ 3.0.0.9004
diff --git a/search.json b/search.json
index 134b2e43a..56da23b49 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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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":"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, Arabic, Bengali, Chinese, Czech, Danish, Dutch, Finnish, French, German, Greek, Hindi, Indonesian, Italian, Japanese, Korean, Norwegian, Polish, Portuguese, Romanian, Russian, Spanish, Swahili, Swedish, Turkish, Ukrainian, Urdu, Vietnamese. 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":"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":"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":"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":"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":"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":"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":"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 , #> # 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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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 modelling 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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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 modelling workflow, consists preprocessing step, model specification, fitting process.","code":""},{"path":"https://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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://amr-for-r.org/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 #> #> 1 rmse standard 0.0774 #> 2 rsq standard 0.711 #> 3 mae standard 0.0704"},{"path":"https://amr-for-r.org/articles/AMR_with_tidymodels.html","id":"visualising-predictions","dir":"Articles","previous_headings":"Example 2: Predicting AMR Over Time","what":"Visualising Predictions","title":"AMR with tidymodels","text":"plot resistance trends time amoxicillin. Additionally, can visualise resistance trends ggplot2 directly add linear models :","code":"library(ggplot2) # Plot actual vs predicted resistance over time ggplot(predictions_time, aes(x = year)) + geom_point(aes(y = res_AMX, color = \"Actual\")) + geom_line(aes(y = .pred, color = \"Predicted\")) + labs(title = \"Predicted vs Actual AMX Resistance Over Time\", x = \"Year\", y = \"Resistance Proportion\") + theme_minimal() ggplot(data_time, aes(x = year, y = res_AMX, color = gramstain)) + geom_line() + labs(title = \"AMX Resistance Trends\", x = \"Year\", y = \"Resistance Proportion\") + # add a linear model directly in ggplot2: geom_smooth(method = \"lm\", formula = y ~ x, alpha = 0.25) + theme_minimal()"},{"path":"https://amr-for-r.org/articles/AMR_with_tidymodels.html","id":"conclusion-1","dir":"Articles","previous_headings":"Example 2: Predicting AMR Over Time","what":"Conclusion","title":"AMR with tidymodels","text":"example, demonstrated analyze AMR trends time using tidymodels. aggregating resistance rates year hospital ward, built predictive model track changes resistance amoxicillin (AMX), amoxicillin-clavulanic acid (AMC), ciprofloxacin (CIP). method can extended antibiotics resistance patterns, providing valuable insights AMR dynamics healthcare settings.","code":""},{"path":"https://amr-for-r.org/articles/EUCAST.html","id":"introduction","dir":"Articles","previous_headings":"","what":"Introduction","title":"Apply EUCAST rules","text":"EUCAST rules? European Committee Antimicrobial Susceptibility Testing (EUCAST) states website: EUCAST expert rules (see ) tabulated collection expert knowledge interpretive rules, expected resistant phenotypes expected susceptible phenotypes applied antimicrobial susceptibility testing order reduce testing, reduce errors make appropriate recommendations reporting particular resistances. Europe, lot medical microbiological laboratories already apply rules (Brown et al., 2015). package features latest insights expected resistant phenotypes (v1.2, 2023).","code":""},{"path":"https://amr-for-r.org/articles/EUCAST.html","id":"examples","dir":"Articles","previous_headings":"","what":"Examples","title":"Apply EUCAST rules","text":"rules can used discard improbable bug-drug combinations data. example, Klebsiella produces beta-lactamase prevents ampicillin (amoxicillin) working . words, practically every strain Klebsiella resistant ampicillin. Sometimes, laboratory data can still contain strains Klebsiella susceptible ampicillin. antibiogram available identification available, antibiogram re-interpreted based identification. eucast_rules() function resolves , applying latest ‘EUCAST Expected Resistant Phenotypes’ guideline: convenient function mo_is_intrinsic_resistant() uses guideline, allows check one specific microorganisms antimicrobials: EUCAST rules can used correction, can also used filling known resistance susceptibility based results antimicrobials drugs. process called interpretive reading, basically form imputation:","code":"oops <- tibble::tibble( mo = c( \"Klebsiella pneumoniae\", \"Escherichia coli\" ), ampicillin = as.sir(\"S\") ) oops #> # A tibble: 2 × 2 #> mo ampicillin #>