diff --git a/DESCRIPTION b/DESCRIPTION index adc46a938..87b0d87c0 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,5 +1,5 @@ Package: AMR -Version: 3.1.0.9012 +Version: 3.1.0.9013 Date: 2026-10-30 Title: Antimicrobial Resistance Data Analysis Description: Functions to simplify and standardise antimicrobial resistance (AMR) diff --git a/NEWS.md b/NEWS.md index 77de88e45..31d4a08fa 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -# AMR 3.1.0.9012 +# AMR 3.1.0.9013 This version fixes a critical bug in WISCA that biased all coverage estimates of `wisca()` and `antibiogram(..., wisca = TRUE)` downwards since AMR 3.0.0. Users are strongly advised to re-run their WISCA analyses. @@ -9,6 +9,8 @@ This version fixes a critical bug in WISCA that biased all coverage estimates of * A new warning is given when the prior weight of 1 per pathogen (Bielicki *et al.*, 2016) accounts for more than 5% of the pathogen incidence, i.e., with rare pathogens or small groups, as this can strongly lower the estimated coverage; consider `top_n_microorganisms()` or fewer and larger groups in that case * Microorganism coercion (`as.mo()`) * Fixed the misaligned arrows in the message on taxonomically renamed microorganisms in colour-supporting consoles, for old names whose author reference lacks "*et al.*" (#336) +* `intrinsic_resistant` data set + * Species groups and complexes are now listed for every antimicrobial to which all their species are intrinsically resistant. This adds 62 bug-drug combinations for the *Burkholderia cepacia* complex, coryneform bacteria, the *Enterobacter cloacae* complex (e.g., amoxicillin and amoxicillin/clavulanic acid), the *Klebsiella pneumoniae* complex, and coagulase-negative staphylococci, which affects `mo_is_intrinsic_resistant()`, `not_intrinsic_resistant()`, and the priors of `wisca()` (#338) ### Other * The manual index on the website was rewritten to improve findability, with sections ordered by task and a filter field diff --git a/data-raw/_reproduction_scripts/reproduction_of_intrinsic_resistant.R b/data-raw/_reproduction_scripts/reproduction_of_intrinsic_resistant.R index 9681cbb40..343ab05a8 100644 --- a/data-raw/_reproduction_scripts/reproduction_of_intrinsic_resistant.R +++ b/data-raw/_reproduction_scripts/reproduction_of_intrinsic_resistant.R @@ -58,6 +58,23 @@ int_resis3 <- int_resis2[which(!int_resis2$ab %in% untreatable), ] int_resis3$ab <- as.ab(int_resis3$ab) int_resis3 +# add species groups (e.g., complexes) for every antimicrobial to which all their species are intrinsically resistant (#338) +groups <- microorganisms.groups[which(microorganisms$rank[match(microorganisms.groups$mo, microorganisms$mo)] == "species"), , drop = FALSE] +int_resis_keys <- paste(int_resis3$mo, int_resis3$ab) +groups_species <- split(as.character(groups$mo), as.character(groups$mo_group)) +int_resis_groups <- do.call(rbind, Map(function(group, species) { + abx <- unique(as.character(int_resis3$ab[int_resis3$mo %in% species])) + abx <- abx[vapply(abx, function(ab) all(paste(species, ab) %in% int_resis_keys), logical(1))] + data.frame(mo = rep(group, length(abx)), ab = abx, stringsAsFactors = FALSE) +}, names(groups_species), groups_species)) +int_resis_groups <- int_resis_groups[which(!paste(int_resis_groups$mo, int_resis_groups$ab) %in% int_resis_keys), , drop = FALSE] +int_resis_groups$mo <- as.mo(int_resis_groups$mo, keep_synonyms = TRUE) +int_resis_groups$ab <- as.ab(int_resis_groups$ab) +int_resis3 <- bind_rows(int_resis3, int_resis_groups) +# keep the order of the microorganisms and antimicrobials data sets +int_resis3 <- int_resis3[order(match(int_resis3$mo, microorganisms$mo), match(int_resis3$ab, antimicrobials$ab)), , drop = FALSE] +rownames(int_resis3) <- NULL + all(int_resis3$mo %in% microorganisms$mo) all(int_resis3$ab %in% antimicrobials$ab) diff --git a/data-raw/datasets/intrinsic_resistant.dta b/data-raw/datasets/intrinsic_resistant.dta index 5cbca3704..6c2e3ac43 100644 Binary files a/data-raw/datasets/intrinsic_resistant.dta and b/data-raw/datasets/intrinsic_resistant.dta differ diff --git a/data-raw/datasets/intrinsic_resistant.feather b/data-raw/datasets/intrinsic_resistant.feather index 084bc329f..4cdfbbebb 100644 Binary files a/data-raw/datasets/intrinsic_resistant.feather and b/data-raw/datasets/intrinsic_resistant.feather differ diff --git a/data-raw/datasets/intrinsic_resistant.parquet b/data-raw/datasets/intrinsic_resistant.parquet index 8e3842669..0142d455d 100644 Binary files a/data-raw/datasets/intrinsic_resistant.parquet and b/data-raw/datasets/intrinsic_resistant.parquet differ diff --git a/data-raw/datasets/intrinsic_resistant.rds b/data-raw/datasets/intrinsic_resistant.rds index ad7567755..7448df668 100644 Binary files a/data-raw/datasets/intrinsic_resistant.rds and b/data-raw/datasets/intrinsic_resistant.rds differ diff --git a/data-raw/datasets/intrinsic_resistant.sav b/data-raw/datasets/intrinsic_resistant.sav index 3d23b69bb..e9399e424 100644 Binary files a/data-raw/datasets/intrinsic_resistant.sav and b/data-raw/datasets/intrinsic_resistant.sav differ diff --git a/data-raw/datasets/intrinsic_resistant.txt b/data-raw/datasets/intrinsic_resistant.txt index 9bcb295d6..f6026c575 100644 --- a/data-raw/datasets/intrinsic_resistant.txt +++ b/data-raw/datasets/intrinsic_resistant.txt @@ -31323,8 +31323,19 @@ "Burkholderia cepacia" "Zorbamycin" "Burkholderia cepacia complex" "Acetylmidecamycin" "Burkholderia cepacia complex" "Acetylspiramycin" +"Burkholderia cepacia complex" "Amikacin" +"Burkholderia cepacia complex" "Amikacin/fosfomycin" +"Burkholderia cepacia complex" "Amoxicillin" +"Burkholderia cepacia complex" "Amoxicillin/clavulanic acid" +"Burkholderia cepacia complex" "Ampicillin" +"Burkholderia cepacia complex" "Ampicillin/sulbactam" +"Burkholderia cepacia complex" "Apramycin" +"Burkholderia cepacia complex" "Arbekacin" +"Burkholderia cepacia complex" "Astromicin" "Burkholderia cepacia complex" "Avoparcin" "Burkholderia cepacia complex" "Azithromycin" +"Burkholderia cepacia complex" "Aztreonam" +"Burkholderia cepacia complex" "Bekanamycin" "Burkholderia cepacia complex" "Benzylpenicillin" "Burkholderia cepacia complex" "Bleomycin" "Burkholderia cepacia complex" "Cadazolid" @@ -31342,54 +31353,87 @@ "Burkholderia cepacia complex" "Cefmetazole" "Burkholderia cepacia complex" "Cefonicid" "Burkholderia cepacia complex" "Ceforanide" +"Burkholderia cepacia complex" "Cefotaxime" "Burkholderia cepacia complex" "Cefotetan" "Burkholderia cepacia complex" "Cefotiam" "Burkholderia cepacia complex" "Cefoxitin" "Burkholderia cepacia complex" "Cefprozil" "Burkholderia cepacia complex" "Cefroxadine" "Burkholderia cepacia complex" "Ceftezole" +"Burkholderia cepacia complex" "Ceftriaxone" "Burkholderia cepacia complex" "Cefuroxime" "Burkholderia cepacia complex" "Cefuroxime axetil" "Burkholderia cepacia complex" "Cephradine" +"Burkholderia cepacia complex" "Chloramphenicol" +"Burkholderia cepacia complex" "Ciprofloxacin" "Burkholderia cepacia complex" "Clarithromycin" "Burkholderia cepacia complex" "Clindamycin" +"Burkholderia cepacia complex" "Colistin" "Burkholderia cepacia complex" "Cycloserine" "Burkholderia cepacia complex" "Dalbavancin" +"Burkholderia cepacia complex" "Dibekacin" "Burkholderia cepacia complex" "Dirithromycin" +"Burkholderia cepacia complex" "Ertapenem" "Burkholderia cepacia complex" "Erythromycin" "Burkholderia cepacia complex" "Flurithromycin" +"Burkholderia cepacia complex" "Fosfomycin" +"Burkholderia cepacia complex" "Framycetin" "Burkholderia cepacia complex" "Fusidic acid" "Burkholderia cepacia complex" "Gamithromycin" +"Burkholderia cepacia complex" "Gentamicin" +"Burkholderia cepacia complex" "Habekacin" +"Burkholderia cepacia complex" "Hygromycin" +"Burkholderia cepacia complex" "Isepamicin" "Burkholderia cepacia complex" "Josamycin" +"Burkholderia cepacia complex" "Kanamycin" +"Burkholderia cepacia complex" "Kanamycin/cephalexin" +"Burkholderia cepacia complex" "Kasugamycin" "Burkholderia cepacia complex" "Kitasamycin" "Burkholderia cepacia complex" "Lincomycin" "Burkholderia cepacia complex" "Linezolid" "Burkholderia cepacia complex" "Loracarbef" "Burkholderia cepacia complex" "Meleumycin" +"Burkholderia cepacia complex" "Micronomicin" "Burkholderia cepacia complex" "Midecamycin" "Burkholderia cepacia complex" "Miocamycin" "Burkholderia cepacia complex" "Nafithromycin" +"Burkholderia cepacia complex" "Neomycin" +"Burkholderia cepacia complex" "Netilmicin" "Burkholderia cepacia complex" "Norvancomycin" "Burkholderia cepacia complex" "Oleandomycin" "Burkholderia cepacia complex" "Oritavancin" "Burkholderia cepacia complex" "Ostreogrycin" +"Burkholderia cepacia complex" "Pentisomicin" +"Burkholderia cepacia complex" "Piperacillin" +"Burkholderia cepacia complex" "Piperacillin/tazobactam" "Burkholderia cepacia complex" "Pirlimycin" +"Burkholderia cepacia complex" "Plazomicin" +"Burkholderia cepacia complex" "Polymyxin B" "Burkholderia cepacia complex" "Primycin" "Burkholderia cepacia complex" "Pristinamycin" +"Burkholderia cepacia complex" "Propikacin" "Burkholderia cepacia complex" "Quinupristin/dalfopristin" "Burkholderia cepacia complex" "Ramoplanin" +"Burkholderia cepacia complex" "Ribostamycin" "Burkholderia cepacia complex" "Rifampicin" "Burkholderia cepacia complex" "Rokitamycin" "Burkholderia cepacia complex" "Roxithromycin" +"Burkholderia cepacia complex" "Sisomicin" "Burkholderia cepacia complex" "Solithromycin" "Burkholderia cepacia complex" "Spiramycin" +"Burkholderia cepacia complex" "Streptoduocin" +"Burkholderia cepacia complex" "Streptomycin" "Burkholderia cepacia complex" "Tedizolid" "Burkholderia cepacia complex" "Teicoplanin" "Burkholderia cepacia complex" "Telavancin" "Burkholderia cepacia complex" "Telithromycin" "Burkholderia cepacia complex" "Thiacetazone" +"Burkholderia cepacia complex" "Ticarcillin" +"Burkholderia cepacia complex" "Ticarcillin/clavulanic acid" "Burkholderia cepacia complex" "Tildipirosin" "Burkholderia cepacia complex" "Tilmicosin" +"Burkholderia cepacia complex" "Tobramycin" +"Burkholderia cepacia complex" "Trimethoprim" "Burkholderia cepacia complex" "Troleandomycin" "Burkholderia cepacia complex" "Tulathromycin" "Burkholderia cepacia complex" "Tylosin" @@ -65522,6 +65566,7 @@ "Cnuibacter physcomitrellae" "Polymyxin B" "Cnuibacter physcomitrellae" "Temocillin" "Coagulase-negative Staphylococcus (CoNS)" "Aztreonam" +"Coagulase-negative Staphylococcus (CoNS)" "Ceftazidime" "Coagulase-negative Staphylococcus (CoNS)" "Colistin" "Coagulase-negative Staphylococcus (CoNS)" "Nalidixic acid" "Coagulase-negative Staphylococcus (CoNS)" "Polymyxin B" @@ -67762,6 +67807,11 @@ "Corynebacterium zhongnanshanii" "Nalidixic acid" "Corynebacterium zhongnanshanii" "Polymyxin B" "Corynebacterium zhongnanshanii" "Temocillin" +"Coryneform bacterium" "Aztreonam" +"Coryneform bacterium" "Colistin" +"Coryneform bacterium" "Nalidixic acid" +"Coryneform bacterium" "Polymyxin B" +"Coryneform bacterium" "Temocillin" "Cosenzaea" "Acetylmidecamycin" "Cosenzaea" "Acetylspiramycin" "Cosenzaea" "Avoparcin" @@ -76494,11 +76544,20 @@ "Enterobacter cloacae cloacae" "Zorbamycin" "Enterobacter cloacae complex" "Acetylmidecamycin" "Enterobacter cloacae complex" "Acetylspiramycin" +"Enterobacter cloacae complex" "Amoxicillin" +"Enterobacter cloacae complex" "Amoxicillin/clavulanic acid" +"Enterobacter cloacae complex" "Ampicillin" +"Enterobacter cloacae complex" "Ampicillin/sulbactam" "Enterobacter cloacae complex" "Avoparcin" "Enterobacter cloacae complex" "Azithromycin" "Enterobacter cloacae complex" "Benzylpenicillin" "Enterobacter cloacae complex" "Bleomycin" "Enterobacter cloacae complex" "Cadazolid" +"Enterobacter cloacae complex" "Cefadroxil" +"Enterobacter cloacae complex" "Cefalexin" +"Enterobacter cloacae complex" "Cefalotin" +"Enterobacter cloacae complex" "Cefazolin" +"Enterobacter cloacae complex" "Cefoxitin" "Enterobacter cloacae complex" "Clarithromycin" "Enterobacter cloacae complex" "Clindamycin" "Enterobacter cloacae complex" "Cycloserine" @@ -102515,6 +102574,8 @@ "Klebsiella pneumoniae" "Zorbamycin" "Klebsiella pneumoniae complex" "Acetylmidecamycin" "Klebsiella pneumoniae complex" "Acetylspiramycin" +"Klebsiella pneumoniae complex" "Amoxicillin" +"Klebsiella pneumoniae complex" "Ampicillin" "Klebsiella pneumoniae complex" "Avoparcin" "Klebsiella pneumoniae complex" "Azithromycin" "Klebsiella pneumoniae complex" "Benzylpenicillin" @@ -102556,6 +102617,7 @@ "Klebsiella pneumoniae complex" "Telavancin" "Klebsiella pneumoniae complex" "Telithromycin" "Klebsiella pneumoniae complex" "Thiacetazone" +"Klebsiella pneumoniae complex" "Ticarcillin" "Klebsiella pneumoniae complex" "Tildipirosin" "Klebsiella pneumoniae complex" "Tilmicosin" "Klebsiella pneumoniae complex" "Troleandomycin" diff --git a/data-raw/datasets/intrinsic_resistant.xlsx b/data-raw/datasets/intrinsic_resistant.xlsx index 077669c44..4d406588c 100644 Binary files a/data-raw/datasets/intrinsic_resistant.xlsx and b/data-raw/datasets/intrinsic_resistant.xlsx differ diff --git a/data-raw/intrinsicR.md5 b/data-raw/intrinsicR.md5 index 329247c6b..b280a27a1 100644 --- a/data-raw/intrinsicR.md5 +++ b/data-raw/intrinsicR.md5 @@ -1 +1 @@ -b32da210529081a8e0ab8874956739d1 +e17c4cf3ac9495a9ed832b64da96770a diff --git a/data/intrinsic_resistant.rda b/data/intrinsic_resistant.rda index 478822733..c9e9bdf8b 100644 Binary files a/data/intrinsic_resistant.rda and b/data/intrinsic_resistant.rda differ diff --git a/man/intrinsic_resistant.Rd b/man/intrinsic_resistant.Rd index dafbb508d..ed060a135 100644 --- a/man/intrinsic_resistant.Rd +++ b/man/intrinsic_resistant.Rd @@ -5,7 +5,7 @@ \alias{intrinsic_resistant} \title{Data Set Denoting Bacterial Intrinsic Resistance} \format{ -A \link[tibble:tibble]{tibble} with 307 684 observations and 3 variables: +A \link[tibble:tibble]{tibble} with 307 746 observations and 3 variables: \itemize{ \item \code{mo}\cr Microorganism ID which occurs in \code{\link[=microorganisms]{microorganisms$mo}}. Names can be retrieved using \code{\link[=mo_name]{mo_name()}}. \item \code{ab}\cr Antimicrobial ID which occurs in \code{\link[=antimicrobials]{antimicrobials$ab}}. Names can be retrieved using \code{\link[=ab_name]{ab_name()}}. diff --git a/tests/testthat/test-data.R b/tests/testthat/test-data.R index c9cc71edd..734ff1169 100644 --- a/tests/testthat/test-data.R +++ b/tests/testthat/test-data.R @@ -547,6 +547,25 @@ test_that("intrinsic_resistant: synonyms have exactly the resistances of their c expect_true(length(absent) == 0, info = paste("Current names missing while their synonym is listed:", describe_mo(absent))) }) +test_that("intrinsic_resistant: species groups have the resistances shared by all their species", { + skip_on_cran() + ir_keys <- paste(intrinsic_resistant$mo, intrinsic_resistant$ab) + groups <- microorganisms.groups[which(microorganisms$rank[match(microorganisms.groups$mo, microorganisms$mo)] == "species"), , drop = FALSE] + groups_species <- split(as.character(groups$mo), as.character(groups$mo_group)) + missing <- unlist(Map(function(group, species) { + abx <- unique(as.character(intrinsic_resistant$ab[intrinsic_resistant$mo %in% species])) + abx <- abx[vapply(abx, function(ab) all(paste(species, ab) %in% ir_keys), logical(1))] + if (length(abx) == 0) { + return(NULL) + } + abx <- abx[!paste(group, abx) %in% ir_keys] + if (length(abx) > 0) paste0(group, " (", paste(abx, collapse = ", "), ")") + }, names(groups_species), groups_species), use.names = FALSE) + expect_true(length(missing) == 0, info = paste("Species groups missing resistances shared by all their species:", paste(missing, collapse = "; "))) + # Enterobacter cloacae complex (#338) + expect_true(all(mo_is_intrinsic_resistant(rep("B_ENTRBC_CLOC-C", 2), ab = c("AMX", "AMC")))) +}) + test_that("interpretive rules name organisms that exist", { skip_on_cran() r <- AMR:::INTERPRETIVE_RULES_DF