@@ -261,21 +261,21 @@ make the structure of your data generally look like this:
-
2024-05-12
+
2024-05-20
abcd
Escherichia coli
S
S
-
2024-05-12
+
2024-05-20
abcd
Escherichia coli
S
R
-
2024-05-12
+
2024-05-20
efgh
Escherichia coli
R
@@ -318,8 +318,9 @@ have extracted from their laboratory systems:
#> 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
-
+#> # ℹ 2,990 more rows
+
+# we will use 'our_data' as the data set name for this tutorialour_data<-example_isolates_unclean
For AMR data analysis, we would like the microorganism column to
@@ -336,17 +337,20 @@ included data were retrieved on 11 Dec 2022.
The codes of the AMR packages that come from as.mo() are
short, but still human readable. More importantly, as.mo()
supports all kinds of input:
The first character in above codes denote their taxonomic kingdom,
@@ -356,33 +360,38 @@ retrieve taxonomic properties, such as the name, genus, species, family,
order, and even Gram-stain. They all start with mo_ and
they use as.mo() internally, so that still any arbitrary
user input can be used:
our_data$bacteria<-as.mo(our_data$bacteria, info =TRUE)#> ℹ Microorganism translation was uncertain for four microorganisms. Run#> mo_uncertainties() to review these uncertainties, or use#> add_custom_microorganisms() to add custom entries.
Apparently, there was some uncertainty about the translation to
taxonomic codes. Let’s check this:
-
+
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.
@@ -439,7 +448,7 @@ diffusion values, read more about that on the
The outcome of the function can easily be added to our data:
-
+
our_data<-our_data%>%mutate(first =first_isolate(info =TRUE))#> ℹ Determining first isolates using an episode length of 365 days
@@ -521,16 +530,16 @@ the methods on the first_isolate
So we end up with 2 712 isolates for analysis. Now our data looks
like:
-
+
our_data_1st#> # A tibble: 2,712 × 9#> patient_id hospital date bacteria AMX AMC CIP GEN first
@@ -555,7 +564,7 @@ like:
The base R summary() function gives a good first
impression, as it comes with support for the new mo and
sir classes that we now have in our data set:
-
+
summary(our_data_1st)#> patient_id hospital date #> Length:2712 Length:2712 Min. :2011-01-01
@@ -577,8 +586,9 @@ impression, as it comes with support for the new mo and
#> %SI :58.0% (n=1574) %SI :62.7% (n=1701) #> - %S :51.5% (n=1396) - %S :59.6% (n=1616) #> - %I : 6.6% (n=178) - %I : 3.1% (n=85)
-#>
-
+#>
+
+glimpse(our_data_1st)#> Rows: 2,712#> Columns: 9
@@ -590,8 +600,9 @@ impression, as it comes with support for the new mo and
#> $ AMC <sir> I, I, I, S, S, S, S, S, S, S, S, S, I, S, S, S, S, R, S, S,…#> $ CIP <sir> S, S, S, S, R, S, S, S, S, S, S, S, S, S, S, S, S, S, S, S,…#> $ GEN <sir> S, S, S, S, S, S, S, S, S, S, R, S, S, S, S, S, S, S, S, S,…
-#> $ first <lgl> TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE,…
-
+#> $ first <lgl> 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
@@ -604,7 +615,7 @@ impression, as it comes with support for the new mo and
To just get an idea how the species are distributed, create a
frequency table with count() based on the name of the
microorganisms:
Using so-called antibiotic class selectors, you can select or filter
columns based on the antibiotic class that your antibiotic results are
in:
-
+
our_data_1st%>%select(date, aminoglycosides())#> ℹ For aminoglycosides() using column 'GEN' (gentamicin)
@@ -648,8 +660,9 @@ in:
#> 8 2015-04-27 S #> 9 2011-06-21 S #> 10 2014-09-05 S
-#> # ℹ 2,702 more rows
-
+#> # ℹ 2,702 more rows
+
+our_data_1st%>%select(bacteria, betalactams())#> ℹ For betalactams() using columns 'AMX' (amoxicillin) and 'AMC'
@@ -667,8 +680,9 @@ in:
#> 8 B_STPHY_AURS S S #> 9 B_ESCHR_COLI S S #> 10 B_ESCHR_COLI S S
-#> # ℹ 2,702 more rows
-
+#> # ℹ 2,702 more rows
+
+our_data_1st%>%select(bacteria, where(is.sir))#> # A tibble: 2,712 × 5
@@ -684,8 +698,9 @@ in:
#> 8 B_STPHY_AURS S S S S #> 9 B_ESCHR_COLI S S S S #> 10 B_ESCHR_COLI S S S S
-#> # ℹ 2,702 more rows
-
+#> # ℹ 2,702 more rows
+
+# filtering using AB selectors is also possible:our_data_1st%>%filter(any(aminoglycosides()=="R"))
@@ -703,8 +718,9 @@ in:
#> 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
-#> # ℹ 1,001 more rows
-
+#> # ℹ 1,001 more rows
+
+our_data_1st%>%filter(all(betalactams()=="R"))#> ℹ For betalactams() using columns 'AMX' (amoxicillin) and 'AMC'
@@ -722,8 +738,9 @@ in:
#> 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
-#> # ℹ 473 more rows
-
+#> # ℹ 473 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'
@@ -776,7 +793,7 @@ failure
function to create any of the above antibiogram types. For starters,
this is what the included example_isolates data set looks
like:
-
+
example_isolates#> # A tibble: 2,000 × 46#> date patient age gender ward mo PEN OXA FLC AMX
@@ -805,7 +822,7 @@ like:
should be used. The antibiotics argument in the
antibiogram() function supports any (combination) of the
previously mentioned antibiotic class selectors:
-
+
antibiogram(example_isolates, antibiotics =c(aminoglycosides(), carbapenems()))#> ℹ For aminoglycosides() using columns 'GEN' (gentamicin), 'TOB'
@@ -932,7 +949,7 @@ Chinese, Czech, Danish, Dutch, Finnish, French, German, Greek, Italian,
Japanese, Norwegian, Polish, Portuguese, Romanian, Russian, Spanish,
Swedish, Turkish, or Ukrainian. In this next example, we force the
language to be Spanish using the language argument:
-
+
antibiogram(example_isolates, mo_transform ="gramstain", antibiotics =aminoglycosides(),
@@ -978,7 +995,7 @@ language to be Spanish using the language argument:
To create a combined antibiogram, use antibiotic codes or names with
a plus + character like this:
@@ -1060,7 +1077,7 @@ a plus + character like this:
To create a syndromic antibiogram, the syndromic_group
argument must be used. This can be any column in the data, or e.g. an
ifelse() with calculations based on certain columns:
-
+
antibiogram(example_isolates, antibiotics =c(aminoglycosides(), carbapenems()), syndromic_group ="ward")
@@ -1254,7 +1271,7 @@ Antibiogram) in which cases are predefined based on clinical or
demographic characteristics (e.g., endocarditis in 75+ females). This
next example is a simplification without clinical characteristics, but
just gives an idea of how a WISCA can be created:
-
+
wisca<-antibiogram(example_isolates, antibiotics =c("AMC", "AMC+CIP", "TZP", "TZP+TOB"), mo_transform ="gramstain",
@@ -1322,7 +1339,7 @@ just gives an idea of how a WISCA can be created:
Antibiograms can be plotted using autoplot() from the
ggplot2 packages, since this AMR package
provides an extension to that function:
To calculate antimicrobial resistance in a more sensible way, also by
@@ -1351,12 +1368,12 @@ proportion of R (proportion_R()
I (proportion_SI(), equal to
susceptibility()). These functions can be used on their
own:
+eucast_rules(oops, info =FALSE)#> mo ampicillin#> 1 Klebsiella R
@@ -258,13 +259,14 @@ be applied using eucast_rules()
mo_is_intrinsic_resistant() that uses the same guideline,
but allows to check for one or more specific microorganisms or
antibiotics:
-
+mo_is_intrinsic_resistant("Klebsiella",c("ampicillin", "kanamycin")
@@ -275,7 +277,7 @@ used for filling in known resistance and susceptibility based on results
of other antimicrobials drugs. This process is called interpretive
reading, is basically a form of imputation, and is part of the
eucast_rules() function as well:
-
+
data<-data.frame( mo =c("Staphylococcus aureus",
@@ -293,7 +295,7 @@ reading, is basically a form of imputation, and is part of the
FOX ="S", # Cefoxitin stringsAsFactors =FALSE)
-
+
data
@@ -359,7 +361,7 @@ reading, is basically a form of imputation, and is part of the
Class: factor > ordered > sir (numeric)
Length: 500
-Levels: 3: S < I < R
+Levels: 5: S < SDD < I < R < N
Available: 481 (96.2%, NA: 19 = 3.8%)
Unique: 3
Applies all recent CLSI and EUCAST clinical and veterinary breakpoints for MICs and disk zones
Corrects for duplicate isolates, calculates and predicts AMR per antibiotic class
-
Integrates with WHONET, ATC, EARS-Net, PubChem, LOINC and SNOMED CT
+
Integrates with WHONET, ATC, EARS-Net, PubChem, LOINC, and SNOMED CT
Works on Windows, macOS and Linux with all versions of R since R-3.0 and is completely dependency-free, highly suitable for places with limited resources
@@ -777,7 +777,7 @@
Manually, using:
install.packages("remotes")# if you haven't already
-remotes::install_github("msberends/AMR")
(this beta version will eventually become v3.0. We’re happy to reach a new major milestone soon, which will be all about the new One Health support!)
-
A New Milestone: One Health Support (= Human + Veterinary + Environmental)
+
A New Milestone: One Health Support (= Human + Veterinary + Environmental)
This package now supports not only tools for AMR data analysis in clinical settings, but also for veterinary and environmental microbiology. This was made possible through a collaboration with the University of Prince Edward Island, Canada. To celebrate this great improvement of the package, we also updated the package logo to reflect this change.
-
Breaking
+
Breaking
Removed all functions and references that used the deprecated rsi class, which were all replaced with their sir equivalents over a year ago
-
New
+
New
One Health implementation
Function as.sir() now has extensive support for animal breakpoints from CLSI. Use breakpoint_type = "animal" and set the host argument to a variable that contains animal species names.
The clinical_breakpoints data set contains all these breakpoints, and can be downloaded on our download page.
@@ -180,12 +180,14 @@
ab_url() now supports retrieving the WHOCC url of their ATCvet pages
+
+as.sir() now returns additional factor levels “N” for non-interpretable and “SDD” for susceptible dose-dependent. Users can now set their own criteria (using regular expressions) as to what should be considered S, I, R, SDD, and N.
The function group scale_*_mic(), namely: scale_x_mic(), scale_y_mic(), scale_colour_mic() and scale_fill_mic(). They are advanced ggplot2 extensions to allow easy plotting of MIC values. They allow for manual range definition and plotting missing intermediate log2 levels.
Function limit_mic_range(), which allows to limit MIC values to a manually set range. This is the powerhouse behind the scale_*_mic() functions, but it can be used by users directly to e.g. compare equality in MIC distributions by rescaling them to the same range first.
Function mo_group_members() to retrieve the member microorganisms. For example, mo_group_members("Strep group C") returns a vector of all microorganisms that are in that group.
-
Changed
+
Changed
For MICs:
Added as valid levels: 4096, 6 powers of 0.0625, and 5 powers of 192 (192, 384, 576, 768, 960)
Added new argument keep_operators to as.mic(). This can be "all" (default), "none", or "edges". This argument is also available in the new limit_mic_range() and scale_*_mic() functions.
@@ -203,7 +205,7 @@
Improved overall algorithm of as.ab() for better performance and accuracy
-
Other
+
Other
Added Jordan Stull, Matthew Saab, and Javier Sanchez as contributors, to thank them for their valuable input
diff --git a/reference/intrinsic_resistant.html b/reference/intrinsic_resistant.html
index 63d61640..6a39559d 100644
--- a/reference/intrinsic_resistant.html
+++ b/reference/intrinsic_resistant.html
@@ -10,7 +10,7 @@
AMR (for R)
- 2.1.1.9029
+ 2.1.1.9031
diff --git a/reference/italicise_taxonomy.html b/reference/italicise_taxonomy.html
index 1d459bdb..e779b1f4 100644
--- a/reference/italicise_taxonomy.html
+++ b/reference/italicise_taxonomy.html
@@ -10,7 +10,7 @@
AMR (for R)
- 2.1.1.9029
+ 2.1.1.9031
diff --git a/reference/join.html b/reference/join.html
index b1fd2dbc..bc2ca9dd 100644
--- a/reference/join.html
+++ b/reference/join.html
@@ -10,7 +10,7 @@
AMR (for R)
- 2.1.1.9029
+ 2.1.1.9031
diff --git a/reference/key_antimicrobials.html b/reference/key_antimicrobials.html
index 152e7165..fc975777 100644
--- a/reference/key_antimicrobials.html
+++ b/reference/key_antimicrobials.html
@@ -10,7 +10,7 @@
AMR (for R)
- 2.1.1.9029
+ 2.1.1.9031
diff --git a/reference/kurtosis.html b/reference/kurtosis.html
index 49595bf0..2a5291cc 100644
--- a/reference/kurtosis.html
+++ b/reference/kurtosis.html
@@ -10,7 +10,7 @@
AMR (for R)
- 2.1.1.9029
+ 2.1.1.9031
diff --git a/reference/like.html b/reference/like.html
index 1f5ed873..99224264 100644
--- a/reference/like.html
+++ b/reference/like.html
@@ -10,7 +10,7 @@
AMR (for R)
- 2.1.1.9029
+ 2.1.1.9031
diff --git a/reference/mdro.html b/reference/mdro.html
index 5034b249..476a767e 100644
--- a/reference/mdro.html
+++ b/reference/mdro.html
@@ -10,7 +10,7 @@
AMR (for R)
- 2.1.1.9029
+ 2.1.1.9031
diff --git a/reference/mean_amr_distance.html b/reference/mean_amr_distance.html
index 90293fc1..4f8b1b5d 100644
--- a/reference/mean_amr_distance.html
+++ b/reference/mean_amr_distance.html
@@ -10,7 +10,7 @@
AMR (for R)
- 2.1.1.9029
+ 2.1.1.9031
diff --git a/reference/microorganisms.codes.html b/reference/microorganisms.codes.html
index 97907fa1..a893f4d3 100644
--- a/reference/microorganisms.codes.html
+++ b/reference/microorganisms.codes.html
@@ -10,7 +10,7 @@
AMR (for R)
- 2.1.1.9029
+ 2.1.1.9031
diff --git a/reference/microorganisms.groups.html b/reference/microorganisms.groups.html
index 1e89e826..4b610a23 100644
--- a/reference/microorganisms.groups.html
+++ b/reference/microorganisms.groups.html
@@ -10,7 +10,7 @@
AMR (for R)
- 2.1.1.9029
+ 2.1.1.9031
diff --git a/reference/microorganisms.html b/reference/microorganisms.html
index 9818a9db..42954add 100644
--- a/reference/microorganisms.html
+++ b/reference/microorganisms.html
@@ -10,7 +10,7 @@
AMR (for R)
- 2.1.1.9029
+ 2.1.1.9031
diff --git a/reference/mo_matching_score.html b/reference/mo_matching_score.html
index 654ee8ae..30b6a952 100644
--- a/reference/mo_matching_score.html
+++ b/reference/mo_matching_score.html
@@ -10,7 +10,7 @@
AMR (for R)
- 2.1.1.9029
+ 2.1.1.9031
diff --git a/reference/mo_property.html b/reference/mo_property.html
index ab478a2e..abad18c4 100644
--- a/reference/mo_property.html
+++ b/reference/mo_property.html
@@ -10,7 +10,7 @@
AMR (for R)
- 2.1.1.9029
+ 2.1.1.9031
diff --git a/reference/mo_source.html b/reference/mo_source.html
index 34dfd5cd..8462f2b8 100644
--- a/reference/mo_source.html
+++ b/reference/mo_source.html
@@ -12,7 +12,7 @@ This is the fastest way to have your organisation (or analysis) specific codes p
AMR (for R)
- 2.1.1.9029
+ 2.1.1.9031
diff --git a/reference/pca.html b/reference/pca.html
index edbd98c7..85055448 100644
--- a/reference/pca.html
+++ b/reference/pca.html
@@ -10,7 +10,7 @@
AMR (for R)
- 2.1.1.9029
+ 2.1.1.9031
@@ -213,7 +213,7 @@
standard deviations are less than or equal to tol times the
standard deviation of the first component.) With the default null
setting, no components are omitted (unless rank. is specified
- less than min(dim(x)).). Other settings for tol could be
+ less than min(dim(x)).). Other settings for tol could be
tol = 0 or tol = sqrt(.Machine$double.eps), which
would omit essentially constant components.
diff --git a/reference/plot-13.png b/reference/plot-13.png
index f8459a69..53732c2c 100644
Binary files a/reference/plot-13.png and b/reference/plot-13.png differ
diff --git a/reference/plot.html b/reference/plot.html
index d033fcfb..6ac7692e 100644
--- a/reference/plot.html
+++ b/reference/plot.html
@@ -12,7 +12,7 @@ Especially the scale_*_mic() functions are relevant wrappers to plot MIC values
AMR (for R)
- 2.1.1.9029
+ 2.1.1.9031
diff --git a/reference/proportion.html b/reference/proportion.html
index 9762a47a..933df950 100644
--- a/reference/proportion.html
+++ b/reference/proportion.html
@@ -12,7 +12,7 @@ resistance() should be used to calculate resistance, susceptibility() should be
AMR (for R)
- 2.1.1.9029
+ 2.1.1.9031
@@ -277,7 +277,7 @@ resistance() should be used to calculate resistance, susceptibility() should be
Details
Remember that you should filter your data to let it contain only first isolates! This is needed to exclude duplicates and to reduce selection bias. Use first_isolate() to determine them in your data set with one of the four available algorithms.
-
The function resistance() is equal to the function proportion_R(). The function susceptibility() is equal to the function proportion_SI().
+
The function resistance() is equal to the function proportion_R(). The function susceptibility() is equal to the function proportion_SI(). Since AMR v3.0, proportion_SI() and proportion_I() include dose-dependent susceptibility ('SDD').
Use sir_confidence_interval() to calculate the confidence interval, which relies on binom.test(), i.e., the Clopper-Pearson method. This function returns a vector of length 2 at default for antimicrobial resistance. Change the side argument to "left"/"min" or "right"/"max" to return a single value, and change the ab_result argument to e.g. c("S", "I") to test for antimicrobial susceptibility, see Examples.
These functions are not meant to count isolates, but to calculate the proportion of resistance/susceptibility. Use the count_*() functions to count isolates. The function susceptibility() is essentially equal to count_susceptible()/count_all(). Low counts can influence the outcome - the proportion_*() functions may camouflage this, since they only return the proportion (albeit dependent on the minimum argument).
The function proportion_df() takes any variable from data that has an sir class (created with as.sir()) and calculates the proportions S, I, and R. It also supports grouped variables. The function sir_df() works exactly like proportion_df(), but adds the number of isolates.
@@ -384,10 +384,16 @@ A microorganism is categorised as "Resistant" when there is a high likelihood of
proportion_S(example_isolates$AMX)#> [1] 0.4022222proportion_SI(example_isolates$AMX)
+#> Note that proportion_SI() will also include dose-dependent
+#> susceptibility, 'SDD'. This note will be shown once for this session.#> [1] 0.4044444proportion_I(example_isolates$AMX)
+#> Note that proportion_I() will also include dose-dependent susceptibility,
+#> 'SDD'. This note will be shown once for this session.#> [1] 0.002222222proportion_IR(example_isolates$AMX)
+#> Note that proportion_IR() will also include dose-dependent
+#> susceptibility, 'SDD'. This note will be shown once for this session.#> [1] 0.5977778proportion_R(example_isolates$AMX)#> [1] 0.5955556
@@ -511,21 +517,27 @@ A microorganism is categorised as "Resistant" when there is a high likelihood of
group_by(ward)%>%sir_df(translate =FALSE)}
-#># A tibble: 12 × 7
-#> ward antibiotic interpretation value ci_min ci_max isolates
-#>*<chr><chr><ord><dbl><dbl><dbl><int>
-#> 1 Clinical AMX SI 0.423 0.389 0.457 357
-#> 2 Clinical AMX R 0.577 0.543 0.611 487
-#> 3 Clinical CIP SI 0.853 0.827 0.876 741
-#> 4 Clinical CIP R 0.147 0.124 0.173 128
-#> 5 ICU AMX SI 0.369 0.323 0.417 158
-#> 6 ICU AMX R 0.631 0.583 0.677 270
-#> 7 ICU CIP SI 0.810 0.770 0.845 362
-#> 8 ICU CIP R 0.190 0.155 0.230 85
-#> 9 Outpatient AMX SI 0.397 0.288 0.515 31
-#>10 Outpatient AMX R 0.603 0.485 0.712 47
-#>11 Outpatient CIP SI 0.839 0.748 0.907 78
-#>12 Outpatient CIP R 0.161 0.0932 0.252 15
+#># A tibble: 18 × 7
+#> ward antibiotic interpretation value ci_min ci_max isolates
+#>*<chr><chr><ord><dbl><dbl><dbl><int>
+#> 1 Clinical AMX SI 0.423 0.389 0.457 357
+#> 2 Clinical AMX R 0.577 0.543 0.611 487
+#> 3 Clinical AMX NA 0 0 0.00436 0
+#> 4 Clinical CIP SI 0.853 0.827 0.876 741
+#> 5 Clinical CIP R 0.147 0.124 0.173 128
+#> 6 Clinical CIP NA 0 0 0.00424 0
+#> 7 ICU AMX SI 0.369 0.323 0.417 158
+#> 8 ICU AMX R 0.631 0.583 0.677 270
+#> 9 ICU AMX NA 0 0 0.00858 0
+#>10 ICU CIP SI 0.810 0.770 0.845 362
+#>11 ICU CIP R 0.190 0.155 0.230 85
+#>12 ICU CIP NA 0 0 0.00822 0
+#>13 Outpatient AMX SI 0.397 0.288 0.515 31
+#>14 Outpatient AMX R 0.603 0.485 0.712 47
+#>15 Outpatient AMX NA 0 0 0.0462 0
+#>16 Outpatient CIP SI 0.839 0.748 0.907 78
+#>17 Outpatient CIP R 0.161 0.0932 0.252 15
+#>18 Outpatient CIP NA 0 0 0.0389 0# }
diff --git a/reference/random.html b/reference/random.html
index 35637fa1..5d9a201f 100644
--- a/reference/random.html
+++ b/reference/random.html
@@ -10,7 +10,7 @@
AMR (for R)
- 2.1.1.9029
+ 2.1.1.9031
diff --git a/reference/resistance_predict.html b/reference/resistance_predict.html
index 17bde39f..d2d566c7 100644
--- a/reference/resistance_predict.html
+++ b/reference/resistance_predict.html
@@ -10,7 +10,7 @@
AMR (for R)
- 2.1.1.9029
+ 2.1.1.9031
diff --git a/reference/skewness.html b/reference/skewness.html
index 628af734..9852e10f 100644
--- a/reference/skewness.html
+++ b/reference/skewness.html
@@ -12,7 +12,7 @@ When negative ('left-skewed'): the left tail is longer; the mass of the distribu
AMR (for R)
- 2.1.1.9029
+ 2.1.1.9031
diff --git a/reference/translate.html b/reference/translate.html
index a7d3f89d..e9223c07 100644
--- a/reference/translate.html
+++ b/reference/translate.html
@@ -10,7 +10,7 @@
AMR (for R)
- 2.1.1.9029
+ 2.1.1.9031
diff --git a/search.json b/search.json
index 45d44161..4dec9178 100644
--- a/search.json
+++ b/search.json
@@ -1 +1 @@
-[{"path":"https://msberends.github.io/AMR/articles/AMR.html","id":"introduction","dir":"Articles","previous_headings":"","what":"Introduction","title":"How to conduct AMR data analysis","text":"Conducting AMR data analysis unfortunately requires -depth knowledge different scientific fields, makes hard right. least, requires: Good questions (always start !) reliable data thorough understanding (clinical) epidemiology, understand clinical epidemiological relevance possible bias results thorough understanding (clinical) microbiology/infectious diseases, understand microorganisms causal infections implications pharmaceutical treatment, well understanding intrinsic acquired microbial resistance Experience data analysis microbiological tests results, understand determination limitations MIC values interpretations SIR values Availability biological taxonomy microorganisms probably normalisation factors pharmaceuticals, defined daily doses (DDD) Available (inter-)national guidelines, profound methods apply course, instantly provide knowledge experience. AMR package, aimed providing (1) tools simplify antimicrobial resistance data cleaning, transformation analysis, (2) methods easily incorporate international guidelines (3) scientifically reliable reference data, including requirements mentioned . AMR package enables standardised reproducible AMR data analysis, application evidence-based rules, determination first isolates, translation various codes microorganisms antimicrobial agents, determination (multi-drug) resistant microorganisms, calculation antimicrobial resistance, prevalence future trends.","code":""},{"path":"https://msberends.github.io/AMR/articles/AMR.html","id":"preparation","dir":"Articles","previous_headings":"","what":"Preparation","title":"How to conduct AMR data analysis","text":"tutorial, create fake demonstration data work . can skip Cleaning data already data ready. start analysis, try make structure data generally look like :","code":""},{"path":"https://msberends.github.io/AMR/articles/AMR.html","id":"needed-r-packages","dir":"Articles","previous_headings":"Preparation","what":"Needed R packages","title":"How to conduct AMR data analysis","text":"many uses R, need additional packages AMR data analysis. package works closely together tidyverse packages dplyr ggplot2 RStudio. tidyverse tremendously improves way conduct data science - allows natural way writing syntaxes creating beautiful plots R. also use cleaner package, can used cleaning data creating frequency tables. AMR package contains data set example_isolates_unclean, might look data users extracted laboratory systems: AMR data analysis, like microorganism column contain valid, --date taxonomy, antibiotic columns cleaned SIR values well.","code":"library(dplyr) library(ggplot2) library(AMR) # (if not yet installed, install with:) # install.packages(c(\"dplyr\", \"ggplot2\", \"AMR\")) example_isolates_unclean #> # A tibble: 3,000 × 8 #> patient_id hospital date bacteria AMX AMC CIP GEN #> #> 1 J3 A 2012-11-21 E. coli R I S S #> 2 R7 A 2018-04-03 K. pneumoniae R I S S #> 3 P3 A 2014-09-19 E. coli R S S S #> 4 P10 A 2015-12-10 E. coli S I S S #> 5 B7 A 2015-03-02 E. coli S S S S #> 6 W3 A 2018-03-31 S. aureus R S R S #> 7 J8 A 2016-06-14 E. coli R S S S #> 8 M3 A 2015-10-25 E. coli R S S S #> 9 J3 A 2019-06-19 E. coli S S S S #> 10 G6 A 2015-04-27 S. aureus S S S S #> # ℹ 2,990 more rows # we will use 'our_data' as the data set name for this tutorial our_data <- example_isolates_unclean"},{"path":"https://msberends.github.io/AMR/articles/AMR.html","id":"taxonomy-of-microorganisms","dir":"Articles","previous_headings":"Preparation","what":"Taxonomy of microorganisms","title":"How to conduct AMR data analysis","text":".mo(), users can transform arbitrary microorganism names codes current taxonomy. AMR package contains --date taxonomic data. specific, currently included data retrieved 11 Dec 2022. 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) #> ℹ 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. #> #> -------------------------------------------------------------------------------- #> \"E. coli\" -> Escherichia coli (B_ESCHR_COLI, 0.688) #> Also matched: Enterobacter cowanii (0.600), Eubacterium combesii #> (0.600), Eggerthia catenaformis (0.591), Eubacterium callanderi #> (0.591), Enterocloster citroniae (0.587), Eubacterium cylindroides #> (0.583), Enterococcus casseliflavus (0.577), Enterobacter cloacae #> cloacae (0.571), Enterobacter cloacae complex (0.571), and Ehrlichia #> canis (0.567) #> -------------------------------------------------------------------------------- #> \"K. pneumoniae\" -> Klebsiella pneumoniae (B_KLBSL_PNMN, 0.786) #> Also matched: 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), Kosakonia pseudosacchari (0.361), Kaistella #> palustris (0.333), Kocuria palustris (0.333), and Kocuria pelophila #> (0.333) #> -------------------------------------------------------------------------------- #> \"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), Salmonella #> Aurelianis (0.595), Salmonella Aarhus (0.588), Salmonella Amounderness #> (0.587), Selenomonas artemidis (0.571), Salmonella choleraesuis #> arizonae (0.562), Streptococcus anginosus anginosus (0.561), and #> Salmonella Abaetetuba (0.548) #> -------------------------------------------------------------------------------- #> \"S. pneumoniae\" -> Streptococcus pneumoniae (B_STRPT_PNMN, 0.750) #> Also matched: Streptococcus pseudopneumoniae (0.700), Serratia #> proteamaculans quinovora (0.545), Streptococcus pseudoporcinus (0.536), #> Staphylococcus pseudintermedius (0.532), Serratia proteamaculans #> proteamaculans (0.526), Salmonella Portanigra (0.524), Sphingomonas #> paucimobilis (0.520), Streptococcus pluranimalium (0.519), #> Streptococcus constellatus pharyngis (0.514), and Salmonella Pakistan #> (0.500) #> #> Only the first 10 other matches of each record are shown. Run #> print(mo_uncertainties(), n = ...) to view more entries, or save #> mo_uncertainties() to an object."},{"path":"https://msberends.github.io/AMR/articles/AMR.html","id":"antibiotic-results","dir":"Articles","previous_headings":"Preparation","what":"Antibiotic results","title":"How to conduct AMR data analysis","text":"column antibiotic test results must also cleaned. AMR package comes three new data types work test results: mic minimal inhibitory concentrations (MIC), disk disk diffusion diameters, sir SIR data interpreted already. package can also determine SIR values based MIC disk diffusion values, read .sir() page. now, just clean SIR columns data using dplyr: basically cleaning, time start data inclusion.","code":"# method 1, be explicit about the columns: our_data <- our_data %>% mutate_at(vars(AMX:GEN), as.sir) # method 2, let the AMR package determine the eligible columns our_data <- our_data %>% mutate_if(is_sir_eligible, as.sir) # result: our_data #> # A tibble: 3,000 × 8 #> patient_id hospital date bacteria AMX AMC CIP GEN #> #> 1 J3 A 2012-11-21 B_ESCHR_COLI R I S S #> 2 R7 A 2018-04-03 B_KLBSL_PNMN R I S S #> 3 P3 A 2014-09-19 B_ESCHR_COLI R S S S #> 4 P10 A 2015-12-10 B_ESCHR_COLI S I S S #> 5 B7 A 2015-03-02 B_ESCHR_COLI S S S S #> 6 W3 A 2018-03-31 B_STPHY_AURS R S R S #> 7 J8 A 2016-06-14 B_ESCHR_COLI R S S S #> 8 M3 A 2015-10-25 B_ESCHR_COLI R S S S #> 9 J3 A 2019-06-19 B_ESCHR_COLI S S S S #> 10 G6 A 2015-04-27 B_STPHY_AURS S S S S #> # ℹ 2,990 more rows"},{"path":"https://msberends.github.io/AMR/articles/AMR.html","id":"first-isolates","dir":"Articles","previous_headings":"Preparation","what":"First isolates","title":"How to conduct AMR data analysis","text":"need know isolates can actually use analysis without repetition bias. conduct analysis antimicrobial resistance, must include first isolate every patient per episode (Hindler et al., Clin Infect Dis. 2007). , easily get overestimate underestimate resistance antibiotic. Imagine patient admitted MRSA found 5 different blood cultures following weeks (yes, countries like Netherlands blood drawing policies). resistance percentage oxacillin isolates overestimated, included MRSA . clearly selection bias. Clinical Laboratory Standards Institute (CLSI) appoints follows: (…) preparing cumulative antibiogram guide clinical decisions empirical antimicrobial therapy initial infections, first isolate given species per patient, per analysis period (eg, one year) included, irrespective body site, antimicrobial susceptibility profile, phenotypical characteristics (eg, biotype). first isolate easily identified, cumulative antimicrobial susceptibility test data prepared using first isolate generally comparable cumulative antimicrobial susceptibility test data calculated methods, providing duplicate isolates excluded. M39-A4 Analysis Presentation Cumulative Antimicrobial Susceptibility Test Data, 4th Edition. CLSI, 2014. Chapter 6.4 AMR package includes methodology first_isolate() function able apply four different methods defined Hindler et al. 2007: phenotype-based, episode-based, patient-based, isolate-based. right method depends goals analysis, default phenotype-based method case method properly correct duplicate isolates. Read methods first_isolate() page. outcome function can easily added data: 90% suitable resistance analysis! can now filter filter() function, also dplyr package: future use, two syntaxes can shortened: end 2 712 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,712 'phenotype-based' first isolates (90.4% 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,712 × 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 P10 A 2015-12-10 B_ESCHR_COLI S I S S TRUE #> 4 B7 A 2015-03-02 B_ESCHR_COLI S S S S TRUE #> 5 W3 A 2018-03-31 B_STPHY_AURS R S R S TRUE #> 6 M3 A 2015-10-25 B_ESCHR_COLI R S S S TRUE #> 7 J3 A 2019-06-19 B_ESCHR_COLI S S S S TRUE #> 8 G6 A 2015-04-27 B_STPHY_AURS S S S S TRUE #> 9 P4 A 2011-06-21 B_ESCHR_COLI S S S S TRUE #> 10 Z1 A 2014-09-05 B_ESCHR_COLI S S S S TRUE #> # ℹ 2,702 more rows"},{"path":"https://msberends.github.io/AMR/articles/AMR.html","id":"analysing-the-data","dir":"Articles","previous_headings":"","what":"Analysing the data","title":"How to conduct AMR data analysis","text":"base R summary() function gives good first impression, comes support new mo sir classes now data set:","code":"summary(our_data_1st) #> patient_id hospital date #> Length:2712 Length:2712 Min. :2011-01-01 #> Class :character Class :character 1st Qu.:2013-05-03 #> Mode :character Mode :character Median :2015-06-16 #> Mean :2015-06-21 #> 3rd Qu.:2017-08-24 #> Max. :2019-12-27 #> bacteria AMX AMC #> Class :mo Class:sir Class:sir #> :0 %R :42.9% (n=1163) %R :36.1% (n=978) #> Unique:4 %SI :57.1% (n=1549) %SI :63.9% (n=1734) #> #1 :B_ESCHR_COLI - %S :41.0% (n=1112) - %S :52.0% (n=1409) #> #2 :B_STPHY_AURS - %I :16.1% (n=437) - %I :12.0% (n=325) #> #3 :B_STRPT_PNMN #> CIP GEN first #> Class:sir Class:sir Mode:logical #> %R :42.0% (n=1138) %R :37.3% (n=1011) TRUE:2712 #> %SI :58.0% (n=1574) %SI :62.7% (n=1701) #> - %S :51.5% (n=1396) - %S :59.6% (n=1616) #> - %I : 6.6% (n=178) - %I : 3.1% (n=85) #> glimpse(our_data_1st) #> Rows: 2,712 #> Columns: 9 #> $ patient_id \"J3\", \"R7\", \"P10\", \"B7\", \"W3\", \"M3\", \"J3\", \"G6\", \"P4\", \"Z1\"… #> $ hospital \"A\", \"A\", \"A\", \"A\", \"A\", \"A\", \"A\", \"A\", \"A\", \"A\", \"A\", \"A\",… #> $ date 2012-11-21, 2018-04-03, 2015-12-10, 2015-03-02, 2018-03-31… #> $ bacteria \"B_ESCHR_COLI\", \"B_KLBSL_PNMN\", \"B_ESCHR_COLI\", \"B_ESCHR_COL… #> $ AMX R, R, S, S, R, R, S, S, S, S, R, S, S, S, R, R, R, R, S, R,… #> $ AMC I, I, I, S, S, S, S, S, S, S, S, S, I, S, S, S, S, R, S, S,… #> $ CIP S, S, S, S, R, S, 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, R, S, 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 1852 4 3 3 3 #> GEN first #> 3 1"},{"path":"https://msberends.github.io/AMR/articles/AMR.html","id":"availability-of-species","dir":"Articles","previous_headings":"Analysing the data","what":"Availability of species","title":"How to conduct AMR data analysis","text":"just get idea species distributed, create frequency table count() based name microorganisms:","code":"our_data %>% count(mo_name(bacteria), sort = TRUE) #> # A tibble: 4 × 2 #> `mo_name(bacteria)` n #> #> 1 Escherichia coli 1518 #> 2 Staphylococcus aureus 730 #> 3 Streptococcus pneumoniae 426 #> 4 Klebsiella pneumoniae 326 our_data_1st %>% count(mo_name(bacteria), sort = TRUE) #> # A tibble: 4 × 2 #> `mo_name(bacteria)` n #> #> 1 Escherichia coli 1319 #> 2 Staphylococcus aureus 676 #> 3 Streptococcus pneumoniae 400 #> 4 Klebsiella pneumoniae 317"},{"path":"https://msberends.github.io/AMR/articles/AMR.html","id":"select-and-filter-with-antibiotic-selectors","dir":"Articles","previous_headings":"Analysing the data","what":"Select and filter with antibiotic selectors","title":"How to conduct AMR data analysis","text":"Using -called antibiotic class selectors, can select filter columns based antibiotic class antibiotic results :","code":"our_data_1st %>% select(date, aminoglycosides()) #> ℹ For aminoglycosides() using column 'GEN' (gentamicin) #> # A tibble: 2,712 × 2 #> date GEN #> #> 1 2012-11-21 S #> 2 2018-04-03 S #> 3 2015-12-10 S #> 4 2015-03-02 S #> 5 2018-03-31 S #> 6 2015-10-25 S #> 7 2019-06-19 S #> 8 2015-04-27 S #> 9 2011-06-21 S #> 10 2014-09-05 S #> # ℹ 2,702 more rows our_data_1st %>% select(bacteria, betalactams()) #> ℹ For betalactams() using columns 'AMX' (amoxicillin) and 'AMC' #> (amoxicillin/clavulanic acid) #> # A tibble: 2,712 × 3 #> bacteria AMX AMC #> #> 1 B_ESCHR_COLI R I #> 2 B_KLBSL_PNMN R I #> 3 B_ESCHR_COLI S I #> 4 B_ESCHR_COLI S S #> 5 B_STPHY_AURS R S #> 6 B_ESCHR_COLI R S #> 7 B_ESCHR_COLI S S #> 8 B_STPHY_AURS S S #> 9 B_ESCHR_COLI S S #> 10 B_ESCHR_COLI S S #> # ℹ 2,702 more rows our_data_1st %>% select(bacteria, where(is.sir)) #> # A tibble: 2,712 × 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 S I S S #> 4 B_ESCHR_COLI S S S S #> 5 B_STPHY_AURS R S R S #> 6 B_ESCHR_COLI R S S S #> 7 B_ESCHR_COLI S S S S #> 8 B_STPHY_AURS S S S S #> 9 B_ESCHR_COLI S S S S #> 10 B_ESCHR_COLI S S S S #> # ℹ 2,702 more rows # filtering using AB selectors is also possible: our_data_1st %>% filter(any(aminoglycosides() == \"R\")) #> ℹ For aminoglycosides() using column 'GEN' (gentamicin) #> # A tibble: 1,011 × 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 #> # ℹ 1,001 more rows our_data_1st %>% filter(all(betalactams() == \"R\")) #> ℹ For betalactams() using columns 'AMX' (amoxicillin) and 'AMC' #> (amoxicillin/clavulanic acid) #> # A tibble: 483 × 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 #> # ℹ 473 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: 483 × 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 #> # ℹ 473 more rows"},{"path":"https://msberends.github.io/AMR/articles/AMR.html","id":"generate-antibiograms","dir":"Articles","previous_headings":"Analysing the data","what":"Generate antibiograms","title":"How to conduct AMR data analysis","text":"Since AMR v2.0 (March 2023), easy create different types antibiograms, support 20 different languages. four antibiogram types, proposed Klinker et al. (2021, DOI 10.1177/20499361211011373), supported new antibiogram() function: Traditional Antibiogram (TA) e.g, susceptibility Pseudomonas aeruginosa piperacillin/tazobactam (TZP) Combination Antibiogram (CA) e.g, sdditional susceptibility Pseudomonas aeruginosa TZP + tobramycin versus TZP alone Syndromic Antibiogram (SA) e.g, susceptibility Pseudomonas aeruginosa TZP among respiratory specimens (obtained among ICU patients ) Weighted-Incidence Syndromic Combination Antibiogram (WISCA) e.g, susceptibility Pseudomonas aeruginosa TZP among respiratory specimens (obtained among ICU patients ) male patients age >=65 years heart failure section, show use antibiogram() function create antibiogram types. starters, included example_isolates data set looks like:","code":"example_isolates #> # A tibble: 2,000 × 46 #> date patient age gender ward mo PEN OXA FLC AMX #> #> 1 2002-01-02 A77334 65 F Clinical B_ESCHR_COLI R NA NA NA #> 2 2002-01-03 A77334 65 F Clinical B_ESCHR_COLI R NA NA NA #> 3 2002-01-07 067927 45 F ICU B_STPHY_EPDR R NA R NA #> 4 2002-01-07 067927 45 F ICU B_STPHY_EPDR R NA R NA #> 5 2002-01-13 067927 45 F ICU B_STPHY_EPDR R NA R NA #> 6 2002-01-13 067927 45 F ICU B_STPHY_EPDR R NA R NA #> 7 2002-01-14 462729 78 M Clinical B_STPHY_AURS R NA S R #> 8 2002-01-14 462729 78 M Clinical B_STPHY_AURS R NA S R #> 9 2002-01-16 067927 45 F ICU B_STPHY_EPDR R NA R NA #> 10 2002-01-17 858515 79 F ICU B_STPHY_EPDR R NA S NA #> # ℹ 1,990 more rows #> # ℹ 36 more variables: AMC , AMP , TZP , CZO , FEP , #> # CXM , FOX , CTX , CAZ , CRO , GEN , #> # TOB , AMK , KAN , TMP , SXT , NIT , #> # FOS , LNZ , CIP , MFX , VAN , TEC , #> # TCY , TGC , DOX , ERY , CLI , AZM , #> # IPM , MEM , MTR , CHL , COL , MUP , …"},{"path":"https://msberends.github.io/AMR/articles/AMR.html","id":"traditional-antibiogram","dir":"Articles","previous_headings":"Analysing the data > Generate antibiograms","what":"Traditional Antibiogram","title":"How to conduct AMR data analysis","text":"create traditional antibiogram, simply state antibiotics used. antibiotics argument antibiogram() function supports (combination) previously mentioned antibiotic class selectors: Notice antibiogram() function automatically prints right format using Quarto R Markdown (page), even applies italics taxonomic names (using italicise_taxonomy() internally). also uses language OS either English, Chinese, Czech, Danish, Dutch, Finnish, French, German, Greek, Italian, Japanese, Norwegian, Polish, Portuguese, Romanian, Russian, Spanish, Swedish, Turkish, Ukrainian. next example, force language Spanish using language argument:","code":"antibiogram(example_isolates, antibiotics = c(aminoglycosides(), carbapenems())) #> ℹ For aminoglycosides() using columns 'GEN' (gentamicin), 'TOB' #> (tobramycin), 'AMK' (amikacin), and 'KAN' (kanamycin) #> ℹ For carbapenems() using columns 'IPM' (imipenem) and 'MEM' (meropenem) antibiogram(example_isolates, mo_transform = \"gramstain\", antibiotics = aminoglycosides(), ab_transform = \"name\", language = \"es\") #> ℹ For aminoglycosides() using columns 'GEN' (gentamicin), 'TOB' #> (tobramycin), 'AMK' (amikacin), and 'KAN' (kanamycin)"},{"path":"https://msberends.github.io/AMR/articles/AMR.html","id":"combined-antibiogram","dir":"Articles","previous_headings":"Analysing the data > Generate antibiograms","what":"Combined Antibiogram","title":"How to conduct AMR data analysis","text":"create combined antibiogram, use antibiotic codes names plus + character like :","code":"antibiogram(example_isolates, antibiotics = c(\"TZP\", \"TZP+TOB\", \"TZP+GEN\"))"},{"path":"https://msberends.github.io/AMR/articles/AMR.html","id":"syndromic-antibiogram","dir":"Articles","previous_headings":"Analysing the data > Generate antibiograms","what":"Syndromic Antibiogram","title":"How to conduct AMR data analysis","text":"create syndromic antibiogram, syndromic_group argument must used. can column data, e.g. ifelse() calculations based certain columns:","code":"antibiogram(example_isolates, antibiotics = c(aminoglycosides(), carbapenems()), syndromic_group = \"ward\") #> ℹ For aminoglycosides() using columns 'GEN' (gentamicin), 'TOB' #> (tobramycin), 'AMK' (amikacin), and 'KAN' (kanamycin) #> ℹ For carbapenems() using columns 'IPM' (imipenem) and 'MEM' (meropenem)"},{"path":"https://msberends.github.io/AMR/articles/AMR.html","id":"weighted-incidence-syndromic-combination-antibiogram-wisca","dir":"Articles","previous_headings":"Analysing the data > Generate antibiograms","what":"Weighted-Incidence Syndromic Combination Antibiogram (WISCA)","title":"How to conduct AMR data analysis","text":"create WISCA, must state combination therapy antibiotics argument (similar Combination Antibiogram), define syndromic group syndromic_group argument (similar Syndromic Antibiogram) cases predefined based clinical demographic characteristics (e.g., endocarditis 75+ females). next example simplification without clinical characteristics, just gives idea WISCA can created:","code":"wisca <- antibiogram(example_isolates, antibiotics = c(\"AMC\", \"AMC+CIP\", \"TZP\", \"TZP+TOB\"), mo_transform = \"gramstain\", minimum = 10, # this should be >= 30, but now just as example syndromic_group = ifelse(example_isolates$age >= 65 & example_isolates$gender == \"M\", \"WISCA Group 1\", \"WISCA Group 2\")) wisca"},{"path":"https://msberends.github.io/AMR/articles/AMR.html","id":"plotting-antibiograms","dir":"Articles","previous_headings":"Analysing the data > Generate antibiograms","what":"Plotting antibiograms","title":"How to conduct AMR data analysis","text":"Antibiograms can plotted using autoplot() ggplot2 packages, since AMR package provides extension function: calculate antimicrobial resistance sensible way, also correcting results, use resistance() susceptibility() functions.","code":"autoplot(wisca)"},{"path":"https://msberends.github.io/AMR/articles/AMR.html","id":"resistance-percentages","dir":"Articles","previous_headings":"Analysing the data","what":"Resistance percentages","title":"How to conduct AMR data analysis","text":"functions resistance() susceptibility() can used calculate antimicrobial resistance susceptibility. specific analyses, functions proportion_S(), proportion_SI(), proportion_I(), proportion_IR() proportion_R() can used determine proportion specific antimicrobial outcome. functions contain minimum argument, denoting minimum required number test results returning value. functions otherwise return NA. default minimum = 30, following CLSI M39-A4 guideline applying microbial epidemiology. per EUCAST guideline 2019, calculate resistance proportion R (proportion_R(), equal resistance()) susceptibility proportion S (proportion_SI(), equal susceptibility()). functions can used : can used conjunction group_by() summarise(), dplyr package: Author: Dr. Matthijs Berends, 26th Feb 2023","code":"our_data_1st %>% resistance(AMX) #> [1] 0.4288348 our_data_1st %>% group_by(hospital) %>% summarise(amoxicillin = resistance(AMX)) #> # A tibble: 3 × 2 #> hospital amoxicillin #> #> 1 A 0.342 #> 2 B 0.564 #> 3 C 0.372"},{"path":"https://msberends.github.io/AMR/articles/EUCAST.html","id":"introduction","dir":"Articles","previous_headings":"","what":"Introduction","title":"How to apply EUCAST rules","text":"EUCAST rules? European Committee Antimicrobial Susceptibility Testing (EUCAST) states website: EUCAST expert rules tabulated collection expert knowledge intrinsic resistances, exceptional resistance phenotypes interpretive rules may applied antimicrobial susceptibility testing order reduce errors make appropriate recommendations reporting particular resistances. Europe, lot medical microbiological laboratories already apply rules (Brown et al., 2015). package features latest insights intrinsic resistance unusual phenotypes (v3.1, 2016). Moreover, eucast_rules() function use purpose can also apply additional rules, like forcing ampicillin = R isolates amoxicillin/clavulanic acid = R.","code":""},{"path":"https://msberends.github.io/AMR/articles/EUCAST.html","id":"examples","dir":"Articles","previous_headings":"","what":"Examples","title":"How to apply EUCAST rules","text":"rules can used discard impossible 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 ampicillin susceptible ampicillin. antibiogram available identification available, antibiogram re-interpreted based identification (namely, Klebsiella). EUCAST expert rules solve , can applied using eucast_rules(): convenient function mo_is_intrinsic_resistant() uses guideline, allows check one specific microorganisms antibiotics: EUCAST rules can used correction, can also used filling known resistance susceptibility based results antimicrobials drugs. process called interpretive reading, basically form imputation, part eucast_rules() function well:","code":"oops <- data.frame( mo = c( \"Klebsiella\", \"Escherichia\" ), ampicillin = \"S\" ) oops #> mo ampicillin #> 1 Klebsiella S #> 2 Escherichia S eucast_rules(oops, info = FALSE) #> mo ampicillin #> 1 Klebsiella R #> 2 Escherichia S mo_is_intrinsic_resistant( c(\"Klebsiella\", \"Escherichia\"), \"ampicillin\" ) #> [1] TRUE FALSE mo_is_intrinsic_resistant( \"Klebsiella\", c(\"ampicillin\", \"kanamycin\") ) #> [1] TRUE FALSE data <- data.frame( mo = c( \"Staphylococcus aureus\", \"Enterococcus faecalis\", \"Escherichia coli\", \"Klebsiella pneumoniae\", \"Pseudomonas aeruginosa\" ), VAN = \"-\", # Vancomycin AMX = \"-\", # Amoxicillin COL = \"-\", # Colistin CAZ = \"-\", # Ceftazidime CXM = \"-\", # Cefuroxime PEN = \"S\", # Benzylenicillin FOX = \"S\", # Cefoxitin stringsAsFactors = FALSE ) data eucast_rules(data)"},{"path":"https://msberends.github.io/AMR/articles/MDR.html","id":"type-of-input","dir":"Articles","previous_headings":"","what":"Type of input","title":"How to determine multi-drug resistance (MDR)","text":"mdro() function takes data set input, regular data.frame. tries automatically determine right columns info isolates, name species columns results antimicrobial agents. See help page info set right settings data command ?mdro. WHONET data (data), settings automatically set correctly.","code":""},{"path":"https://msberends.github.io/AMR/articles/MDR.html","id":"guidelines","dir":"Articles","previous_headings":"","what":"Guidelines","title":"How to determine multi-drug resistance (MDR)","text":"mdro() function support multiple guidelines. can select guideline guideline parameter. Currently supported guidelines (case-insensitive): guideline = \"CMI2012\" (default) Magiorakos AP, Srinivasan et al. “Multidrug-resistant, extensively drug-resistant pandrug-resistant bacteria: international expert proposal interim standard definitions acquired resistance.” Clinical Microbiology Infection (2012) (link) guideline = \"EUCAST3.2\" (simply guideline = \"EUCAST\") European international guideline - EUCAST Expert Rules Version 3.2 “Intrinsic Resistance Unusual Phenotypes” (link) guideline = \"EUCAST3.1\" European international guideline - EUCAST Expert Rules Version 3.1 “Intrinsic Resistance Exceptional Phenotypes Tables” (link) guideline = \"TB\" international guideline multi-drug resistant tuberculosis - World Health Organization “Companion handbook guidelines programmatic management drug-resistant tuberculosis” (link) guideline = \"MRGN\" German national guideline - Mueller et al. (2015) Antimicrobial Resistance Infection Control 4:7. DOI: 10.1186/s13756-015-0047-6 guideline = \"BRMO\" Dutch national guideline - Rijksinstituut voor Volksgezondheid en Milieu “WIP-richtlijn BRMO (Bijzonder Resistente Micro-Organismen) (ZKH)” (link) Please suggest (country-specific) guidelines letting us know: https://github.com/msberends/AMR/issues/new.","code":""},{"path":"https://msberends.github.io/AMR/articles/MDR.html","id":"custom-guidelines","dir":"Articles","previous_headings":"Guidelines","what":"Custom Guidelines","title":"How to determine multi-drug resistance (MDR)","text":"can also use custom guideline. Custom guidelines can set custom_mdro_guideline() function. great importance custom rules determine MDROs hospital, e.g., rules dependent ward, state contact isolation variables data. familiar case_when() dplyr package, recognise input method set rules. Rules must set using R considers ‘formula notation’: row/isolate matches first rule, value first ~ (case ‘Elderly Type ’) set MDRO value. Otherwise, second rule tried . maximum number rules unlimited. can print rules set console overview. Colours help reading console supports colours. outcome function can used guideline argument mdro() function: rules set (custom object case) exported shared file location using saveRDS() collaborate multiple users. custom rules set imported using readRDS().","code":"custom <- custom_mdro_guideline( CIP == \"R\" & age > 60 ~ \"Elderly Type A\", ERY == \"R\" & age > 60 ~ \"Elderly Type B\" ) custom #> A set of custom MDRO rules: #> 1. If CIP is \"R\" and age is higher than 60 then: Elderly Type A #> 2. If ERY is \"R\" and age is higher than 60 then: Elderly Type B #> 3. Otherwise: Negative #> #> Unmatched rows will return NA. #> Results will be of class 'factor', with ordered levels: Negative < Elderly Type A < Elderly Type B x <- mdro(example_isolates, guideline = custom) table(x) #> x #> Negative Elderly Type A Elderly Type B #> 1070 198 732"},{"path":"https://msberends.github.io/AMR/articles/MDR.html","id":"examples","dir":"Articles","previous_headings":"","what":"Examples","title":"How to determine multi-drug resistance (MDR)","text":"mdro() function always returns ordered factor predefined guidelines. example, output default guideline Magiorakos et al. returns factor levels ‘Negative’, ‘MDR’, ‘XDR’ ‘PDR’ order. next example uses example_isolates data set. data set included package contains full antibiograms 2,000 microbial isolates. reflects reality can used practise AMR data analysis. test MDR/XDR/PDR guideline data set, get: Frequency table Class: factor > ordered (numeric) Length: 2,000 Levels: 4: Negative < Multi-drug-resistant (MDR) < Extensively drug-resistant … Available: 1,729 (86.45%, NA: 271 = 13.55%) Unique: 2 another example, create data set determine multi-drug resistant TB: column names automatically verified valid drug names codes, worked exactly way: data set now looks like : can now add interpretation MDR-TB data set. can use: shortcut mdr_tb(): Create frequency table results: Frequency table Class: factor > ordered (numeric) Length: 5,000 Levels: 5: Negative < Mono-resistant < Poly-resistant < Multi-drug-resistant <… Available: 5,000 (100%, NA: 0 = 0%) Unique: 5","code":"library(dplyr) # to support pipes: %>% library(cleaner) # to create frequency tables example_isolates %>% mdro() %>% freq() # show frequency table of the result #> Warning: in mdro(): NA introduced for isolates where the available percentage of #> antimicrobial classes was below 50% (set with pct_required_classes) # random_sir() is a helper function to generate # a random vector with values S, I and R my_TB_data <- data.frame( rifampicin = random_sir(5000), isoniazid = random_sir(5000), gatifloxacin = random_sir(5000), ethambutol = random_sir(5000), pyrazinamide = random_sir(5000), moxifloxacin = random_sir(5000), kanamycin = random_sir(5000) ) my_TB_data <- data.frame( RIF = random_sir(5000), INH = random_sir(5000), GAT = random_sir(5000), ETH = random_sir(5000), PZA = random_sir(5000), MFX = random_sir(5000), KAN = random_sir(5000) ) head(my_TB_data) #> rifampicin isoniazid gatifloxacin ethambutol pyrazinamide moxifloxacin #> 1 I R S S S S #> 2 S S I R R S #> 3 R I I I R I #> 4 I S S S S S #> 5 I I I S I S #> 6 R S R S I I #> kanamycin #> 1 R #> 2 I #> 3 S #> 4 I #> 5 I #> 6 I mdro(my_TB_data, guideline = \"TB\") my_TB_data$mdr <- mdr_tb(my_TB_data) #> ℹ No column found as input for col_mo, assuming all rows contain #> Mycobacterium tuberculosis. freq(my_TB_data$mdr)"},{"path":[]},{"path":"https://msberends.github.io/AMR/articles/PCA.html","id":"transforming","dir":"Articles","previous_headings":"","what":"Transforming","title":"How to conduct principal component analysis (PCA) for AMR","text":"PCA, need transform AMR data first. example_isolates data set package looks like: Now transform data set resistance percentages per taxonomic order genus:","code":"library(AMR) library(dplyr) glimpse(example_isolates) #> Rows: 2,000 #> Columns: 46 #> $ date 2002-01-02, 2002-01-03, 2002-01-07, 2002-01-07, 2002-01-13, 2… #> $ patient \"A77334\", \"A77334\", \"067927\", \"067927\", \"067927\", \"067927\", \"4… #> $ age 65, 65, 45, 45, 45, 45, 78, 78, 45, 79, 67, 67, 71, 71, 75, 50… #> $ gender \"F\", \"F\", \"F\", \"F\", \"F\", \"F\", \"M\", \"M\", \"F\", \"F\", \"M\", \"M\", \"M… #> $ ward \"Clinical\", \"Clinical\", \"ICU\", \"ICU\", \"ICU\", \"ICU\", \"Clinical\"… #> $ mo \"B_ESCHR_COLI\", \"B_ESCHR_COLI\", \"B_STPHY_EPDR\", \"B_STPHY_EPDR\",… #> $ PEN R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, R, S,… #> $ OXA NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ FLC NA, NA, R, R, R, R, S, S, R, S, S, S, NA, NA, NA, NA, NA, R, R… #> $ AMX NA, NA, NA, NA, NA, NA, R, R, NA, NA, NA, NA, NA, NA, R, NA, N… #> $ AMC I, I, NA, NA, NA, NA, S, S, NA, NA, S, S, I, I, R, I, I, NA, N… #> $ AMP NA, NA, NA, NA, NA, NA, R, R, NA, NA, NA, NA, NA, NA, R, NA, N… #> $ TZP NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ CZO NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, R, NA,… #> $ FEP NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ CXM I, I, R, R, R, R, S, S, R, S, S, S, S, S, NA, S, S, R, R, S, S… #> $ FOX NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, R, NA,… #> $ CTX NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, S, S, NA, S, S… #> $ CAZ NA, NA, R, R, R, R, R, R, R, R, R, R, NA, NA, NA, S, S, R, R, … #> $ CRO NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, S, S, NA, S, S… #> $ GEN NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ TOB NA, NA, NA, NA, NA, NA, S, S, NA, NA, NA, NA, S, S, NA, NA, NA… #> $ AMK NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ KAN NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA… #> $ TMP