About AMR and R package
R package to simplify the analysis and prediction of Antimicrobial Resistance (AMR) and to work with microbial and antimicrobial data and properties, by using evidence-based methods. Copyright by: https://msberends.github.io/AMR/index.html#copyright
Outine
- R packages installation
- Import CSV data
- Find frequency by variables
- Find resistance percentages
- Find resistance percentages by organism and number of isolates
- Calculate empiric susceptibility
- Calculate empiric susceptibility - Percentage
- Plotting results and compare susceptibility by antibiotics
- Yearly isolates summary - Bar chart
1. R packages installation
Open your R-Studio and install the following packages:
install.packages(c("dplyr", "ggplot2", "AMR", "cleaner"))
After successful installtion, Import the libraries:
library(dplyr) library(ggplot2) library(AMR) library(cleaner)
2. Import CSV data
# Import excel/csv data
data_sample <- read.csv("Your-file-location/amr-sample-data-r-analysis.csv")
head(data_sample) # AMK = Amikacin, AMC = Amoxicillin / Clavulanic Acid, CIP = Ciprofloxacin,
# CTX = cefotaxime, SXT = Trimethoprim/Sulfamethoxazole, CRO = Ceftriaxone
Output:
3. Find frequency by variables
data_sample %>% freq(Sex)
data_sample %>% freq(Organism)
data_sample %>% freq(Sample)
Output-Sex:
Frequency table
Class: character
Length: 23,411
Available: 23,411 (100.0%, NA: 0 = 0.0%)
Unique: 2
Shortest: 1
Longest: 1
Item Count Percent Cum. Count Cum. Percent
--- ------ -------- --------- ------------ --------------
1 f 13,568 57.96% 13,568 57.96%
2 m 9,843 42.04% 23,411 100.00%
Output-Organism:
Frequency table
Class: character
Length: 23,411
Available: 23,411 (100.0%, NA: 0 = 0.0%)
Unique: 3
Shortest: 14
Longest: 21
Item Count Percent Cum. Count Cum. Percent
--- ----------------------- -------- --------- ------------ --------------
1 Escherichia coli 11,887 50.78% 11,887 50.78%
2 Klebsiella sp. 7,709 32.93% 19,596 83.70%
3 Staphylococcus aureus 3,815 16.30% 23,411 100.00%
Output-Sample:
Frequency table
Class: character
Length: 23,411
Available: 23,411 (100.0%, NA: 0 = 0.0%)
Unique: 6
Shortest: 3
Longest: 10
Item Count Percent Cum. Count Cum. Percent
--- ------------ -------- --------- ------------ --------------
1 Urine 12,814 54.73% 12,814 54.73%
2 Pus 5,753 24.57% 18,567 79.31%
3 Wound Swab 2,549 10.89% 21,116 90.20%
4 Blood 1,214 5.19% 22,330 95.38%
5 Sputum 1,079 4.61% 23,409 99.99%
6 Stool 2 0.01% 23,411 100.00%
4. Overview of different bug/drug combinations
# Number of isolates in different bug/drug combinations
data_sample %>%
bug_drug_combinations() %>%
head(100) # show 100 rows
Results:
mo ab S I R total
1 E. coli AMC 3163 0 8484 11647
2 E. coli AMK 10541 2 1215 11758
3 E. coli CIP 3148 0 8710 11858
4 E. coli CRO 3741 0 8118 11859
5 E. coli CTX 483 0 1575 2058
6 E. coli GEN 9301 0 2487 11788
7 E. coli SXT 5408 1 6438 11847
8 Klebsiella AMC 2261 0 5360 7621
9 Klebsiella AMK 4818 1 2843 7662
10 Klebsiella CIP 2777 6 4904 7687
11 Klebsiella CRO 2626 0 5054 7680
12 Klebsiella CTX 1358 0 3799 5157
13 Klebsiella GEN 4461 0 3182 7643
14 Klebsiella SXT 2984 0 4687 7671
15 S. aureus AMC 2208 0 1388 3596
16 S. aureus AMK 3476 0 291 3767
17 S. aureus CIP 1228 0 2573 3801
18 S. aureus CRO 6 0 2 8
19 S. aureus CTX 2 0 3 5
20 S. aureus GEN 3359 0 422 3781
21 S. aureus SXT 2523 0 1272 3795
# For `aminoglycosides()` using column 'GEN' (gentamicin)
data_sample %>%
select(col_mo, aminoglycosides()) %>%
bug_drug_combinations()
Result:
mo ab S I R total
1 E. coli AMK 10541 2 1215 11758
2 E. coli GEN 9301 0 2487 11788
3 Klebsiella AMK 4818 1 2843 7662
4 Klebsiella GEN 4461 0 3182 7643
5 S. aureus AMK 3476 0 291 3767
6 S. aureus GEN 3359 0 422 3781
5. Find resistance percentages
data_sample %>% resistance(AMC) Output: 0.6662001
6. Find resistance percentages by organism and number of isolates
data_sample %>%
group_by(Organism) %>%
summarise(amoxiclav = resistance(AMC),
#amoxiclav_isolates = n_rsi(AMC),
gentamicin = resistance(GEN),
#gentamicin_isolates = n_rsi(GEN),
ciprofloxacin = resistance(CIP),
#ciprofloxacin_isolates = n_rsi(CIP)
)
Output:
Organism amoxiclav gentamicin ciprofloxacin
1 Escherichia coli 0.728 0.211 0.735
2 Klebsiella sp. 0.703 0.416 0.638
3 Staphylococcus aureus 0.386 0.112 0.677
-----------------------------------------------------------
# Total number of isolates responsible for the percentages by group (S, I or R)
data_sample %>%
group_by(col_mo) %>%
summarise(amoxiclav = resistance(AMC),
#amoxiclav_isolates = n_rsi(AMC),
gentamicin = resistance(GEN),
#gentamicin_isolates = n_rsi(GEN),
ciprofloxacin = resistance(CIP),
#ciprofloxacin_isolates = n_rsi(CIP)
total_isolates = n_rsi(SXT))
Output:
col_mo amoxiclav gentamicin ciprofloxacin total_isolates
1 B_ESCHR_COLI 0.728 0.211 0.735 11847
2 B_KLBSL 0.703 0.416 0.638 7671
3 B_STPHY_AURS 0.386 0.112 0.677 3795
-----------------------------------------------------------
# For the resistance within certain antibiotic classes, use a antibiotic class selector
such as penicillins(), which automatically will include the columns AMX and AMC of our data
data_sample %>%
summarise(across(penicillins(), resistance, as_percent = TRUE)) %>%
rename_with(set_ab_names, penicillins())
Output:
amoxicillin_clavulanic_acid
1 66.6%
-----------------------------------------------------------
7. Calculate empiric susceptibility: Get the proportion of multiple antibiotics, to calculate empiric susceptibility of combination therapies
data_sample %>%
group_by(Organism) %>%
summarise(amoxiclav = susceptibility(AMC),
gentamicin = susceptibility(GEN),
amoxiclav_genta = susceptibility(AMC, GEN))
Output:
Organism amoxiclav gentamicin amoxiclav_genta
1 Escherichia coli 0.272 0.789 0.804
2 Klebsiella sp. 0.297 0.584 0.592
3 Staphylococcus aureus 0.614 0.888 0.907
8. Calculate empiric susceptibility - Percentage
data_sample %>% group_by(Organism) %>% summarise(across(penicillins(), resistance, as_percent = TRUE)) Output: Organism AMC 1 Escherichia coli 72.8% 2 Klebsiella sp. 70.3% 3 Staphylococcus aureus 38.6%
9. Plotting results and compare susceptibility by antibiotics
data_sample %>%
group_by(Organism) %>%
summarise("1. Amoxi/clav" = susceptibility(AMC),
"2. Gentamicin" = susceptibility(GEN),
"3. Ciprofloxacin" = susceptibility(CIP),
"4. Cefotaxime" = susceptibility(CTX),
"5. Ceftriaxone" = susceptibility(CRO),
"6. Amoxi/clav + genta" = susceptibility(AMC, GEN)) %>%
tidyr::pivot_longer(-Organism, names_to = "antibiotic") %>%
ggplot(aes(x = Organism,
y = value,
fill = antibiotic)) +
geom_col(position = "dodge2")
Output:
10. Stacked bars for SI and R
ggplot(data_sample) + geom_rsi(translate_ab = FALSE Output:![]()
11. Resistance per genus and antibiotic
# group the data on `genus` ggplot(data_sample %>% group_by(col_mo)) + geom_rsi(x = "col_mo") + facet_rsi(facet = "antibiotic") + # set colours to the R/SI interpretations (colour-blind friendly) scale_rsi_colours() + # show percentages on y axis scale_y_percent(breaks = 0:4 * 25) + # turn 90 degrees, to make it bars instead of columns coord_flip() + # add labels labs(title = "Resistance per genus and antibiotic") # and print genus in italic to follow our convention # (is now y axis because we turned the plot) theme(axis.text.y = element_text(face = "italic")) Output:![]()
12. Yearly isolates summary - Bar chart
ggplot(data_sample) + geom_bar(aes(Year)) Output:![]()
Source: https://msberends.github.io/AMR/articles/AMR.html