From 641d866db23cfb58e358b4acc43ebd152fda3147 Mon Sep 17 00:00:00 2001 From: "Matthijs S. Berends" Date: Fri, 11 Jan 2019 20:37:23 +0100 Subject: [PATCH] guess_ab_col, benchmarks --- DESCRIPTION | 2 +- NAMESPACE | 2 +- NEWS.md | 2 +- R/age.R | 2 +- R/eucast_rules.R | 254 ++++----- R/{guess_ab.R => guess_ab_col.R} | 87 ++- R/key_antibiotics.R | 47 +- R/mdro.R | 240 ++++----- _pkgdown.yml | 13 +- docs/LICENSE-text.html | 7 + docs/articles/AMR.html | 507 +++++++++--------- .../AMR_files/figure-html/plot 1-1.png | Bin 31951 -> 31762 bytes .../AMR_files/figure-html/plot 3-1.png | Bin 24228 -> 24229 bytes .../AMR_files/figure-html/plot 4-1.png | Bin 66607 -> 66607 bytes .../AMR_files/figure-html/plot 5-1.png | Bin 48879 -> 48880 bytes docs/articles/EUCAST.html | 9 +- docs/articles/G_test.html | 9 +- docs/articles/Predict.html | 9 +- docs/articles/ab_property.html | 9 +- docs/articles/benchmarks.html | 371 +++++++++++++ docs/articles/freq.html | 9 +- docs/articles/index.html | 8 + docs/articles/mo_property.html | 9 +- docs/authors.html | 7 + docs/extra.css | 7 + docs/index.html | 10 +- docs/news/index.html | 9 +- docs/pkgdown.yml | 1 + docs/reference/AMR-deprecated.html | 7 + docs/reference/AMR.html | 7 + docs/reference/ITIS.html | 7 + docs/reference/ab_property.html | 7 + docs/reference/abname.html | 7 + docs/reference/age.html | 7 + docs/reference/age_groups.html | 15 +- docs/reference/antibiotics.html | 7 + docs/reference/as.atc.html | 7 + docs/reference/as.mic.html | 7 + docs/reference/as.mo.html | 13 +- docs/reference/as.rsi.html | 11 +- docs/reference/atc_property.html | 7 + docs/reference/count.html | 21 +- docs/reference/eucast_rules.html | 62 ++- docs/reference/first_isolate.html | 19 +- docs/reference/freq.html | 23 +- docs/reference/g.test.html | 7 + docs/reference/get_locale.html | 7 + docs/reference/ggplot_rsi.html | 43 +- docs/reference/guess_ab.html | 7 + docs/reference/guess_ab_col.html | 316 +++++++++++ docs/reference/index.html | 13 +- docs/reference/join.html | 7 + docs/reference/key_antibiotics.html | 40 +- docs/reference/kurtosis.html | 7 + docs/reference/like.html | 9 +- docs/reference/mdro.html | 59 +- docs/reference/microorganisms.certe.html | 7 + docs/reference/microorganisms.html | 7 + docs/reference/microorganisms.old.html | 7 + docs/reference/microorganisms.umcg.html | 7 + docs/reference/mo_failures.html | 7 + docs/reference/mo_property.html | 7 + docs/reference/mo_renamed.html | 7 + docs/reference/p.symbol.html | 7 + docs/reference/portion.html | 31 +- docs/reference/read.4D.html | 7 + docs/reference/resistance_predict.html | 15 +- docs/reference/rsi.html | 7 + docs/reference/septic_patients.html | 7 + docs/reference/skewness.html | 7 + docs/reference/supplementary_data.html | 7 + docs/sitemap.xml | 5 +- index.md | 4 +- man/eucast_rules.Rd | 55 +- man/{guess_ab.Rd => guess_ab_col.Rd} | 23 +- man/key_antibiotics.Rd | 33 +- man/mdro.Rd | 52 +- pkgdown/extra.css | 7 + tests/testthat/test-guess_ab_col.R | 36 ++ vignettes/AMR.Rmd | 2 - vignettes/EUCAST.Rmd | 2 - vignettes/G_test.Rmd | 2 - vignettes/Predict.Rmd | 2 - vignettes/benchmarks.Rmd | 205 +++++++ vignettes/freq.Rmd | 2 - vignettes/mo_property.Rmd | 2 - 86 files changed, 2181 insertions(+), 767 deletions(-) rename R/{guess_ab.R => guess_ab_col.R} (54%) create mode 100644 docs/articles/benchmarks.html create mode 100644 docs/reference/guess_ab_col.html rename man/{guess_ab.Rd => guess_ab_col.Rd} (55%) create mode 100644 tests/testthat/test-guess_ab_col.R create mode 100755 vignettes/benchmarks.Rmd diff --git a/DESCRIPTION b/DESCRIPTION index 5f5043e0..c9648b26 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: AMR Version: 0.5.0.9009 -Date: 2019-01-08 +Date: 2019-01-11 Title: Antimicrobial Resistance Analysis Authors@R: c( person( diff --git a/NAMESPACE b/NAMESPACE index aee04dee..3ce45c98 100755 --- a/NAMESPACE +++ b/NAMESPACE @@ -76,7 +76,7 @@ export(g.test) export(geom_rsi) export(get_locale) export(ggplot_rsi) -export(guess_ab) +export(guess_ab_col) export(guess_atc) export(guess_mo) export(header) diff --git a/NEWS.md b/NEWS.md index 254bcc06..ab842da3 100755 --- a/NEWS.md +++ b/NEWS.md @@ -7,7 +7,7 @@ * Contains the complete manual of this package and all of its functions with an explanation of their parameters * Contains a comprehensive tutorial about how to conduct antimicrobial resistance analysis * Support for [`dplyr`](https://dplyr.tidyverse.org) version 0.8.0 -* Function `guess_ab` to find an antibiotic column in a table +* Function `guess_ab_col` to find an antibiotic column in a table * Function `mo_failures()` to review values that could not be coerced to a valid MO code, using `as.mo()`. This latter function will now only show a maximum of 25 uncoerced values. * Function `mo_renamed()` to get a list of all returned values from `as.mo()` that have had taxonomic renaming * Function `age()` to calculate the (patients) age in years diff --git a/R/age.R b/R/age.R index 881d5fb0..399e7ea0 100644 --- a/R/age.R +++ b/R/age.R @@ -48,7 +48,7 @@ age <- function(x, reference = Sys.Date()) { as.integer(years_gap - 1), as.integer(years_gap)) if (any(ages > 120)) { - warning("Some ages are >120.") + warning("Some ages are > 120.") } ages } diff --git a/R/eucast_rules.R b/R/eucast_rules.R index 9cc57146..6ae03d7d 100755 --- a/R/eucast_rules.R +++ b/R/eucast_rules.R @@ -30,7 +30,7 @@ #' @param ... parameters that are passed on to \code{eucast_rules} #' @inheritParams first_isolate #' @section Antibiotics: -#' To define antibiotics column names, leave as it is to determine it automatically with \code{\link{guess_ab}} or input a text (case-insensitive) or use \code{NULL} to skip a column (e.g. \code{tica = NULL}). Non-existing columns will anyway be skipped with a warning. +#' To define antibiotics column names, leave as it is to determine it automatically with \code{\link{guess_ab_col}} or input a text (case-insensitive) or use \code{NULL} to skip a column (e.g. \code{tica = NULL}). Non-existing columns will anyway be skipped with a warning. #' #' Abbrevations of the column containing antibiotics in the form: \strong{abbreviation}: generic name (\emph{ATC code}) #' @@ -158,69 +158,69 @@ eucast_rules <- function(tbl, info = TRUE, rules = c("breakpoints", "expert", "other", "all"), verbose = FALSE, - amcl = guess_ab(), - amik = guess_ab(), - amox = guess_ab(), - ampi = guess_ab(), - azit = guess_ab(), - azlo = guess_ab(), - aztr = guess_ab(), - cefa = guess_ab(), - cfep = guess_ab(), - cfot = guess_ab(), - cfox = guess_ab(), - cfra = guess_ab(), - cfta = guess_ab(), - cftr = guess_ab(), - cfur = guess_ab(), - chlo = guess_ab(), - cipr = guess_ab(), - clar = guess_ab(), - clin = guess_ab(), - clox = guess_ab(), - coli = guess_ab(), - czol = guess_ab(), - dapt = guess_ab(), - doxy = guess_ab(), - erta = guess_ab(), - eryt = guess_ab(), - fosf = guess_ab(), - fusi = guess_ab(), - gent = guess_ab(), - imip = guess_ab(), - kana = guess_ab(), - levo = guess_ab(), - linc = guess_ab(), - line = guess_ab(), - mero = guess_ab(), - mezl = guess_ab(), - mino = guess_ab(), - moxi = guess_ab(), - nali = guess_ab(), - neom = guess_ab(), - neti = guess_ab(), - nitr = guess_ab(), - norf = guess_ab(), - novo = guess_ab(), - oflo = guess_ab(), - oxac = guess_ab(), - peni = guess_ab(), - pipe = guess_ab(), - pita = guess_ab(), - poly = guess_ab(), - pris = guess_ab(), - qida = guess_ab(), - rifa = guess_ab(), - roxi = guess_ab(), - siso = guess_ab(), - teic = guess_ab(), - tetr = guess_ab(), - tica = guess_ab(), - tige = guess_ab(), - tobr = guess_ab(), - trim = guess_ab(), - trsu = guess_ab(), - vanc = guess_ab()) { + amcl = guess_ab_col(), + amik = guess_ab_col(), + amox = guess_ab_col(), + ampi = guess_ab_col(), + azit = guess_ab_col(), + azlo = guess_ab_col(), + aztr = guess_ab_col(), + cefa = guess_ab_col(), + cfep = guess_ab_col(), + cfot = guess_ab_col(), + cfox = guess_ab_col(), + cfra = guess_ab_col(), + cfta = guess_ab_col(), + cftr = guess_ab_col(), + cfur = guess_ab_col(), + chlo = guess_ab_col(), + cipr = guess_ab_col(), + clar = guess_ab_col(), + clin = guess_ab_col(), + clox = guess_ab_col(), + coli = guess_ab_col(), + czol = guess_ab_col(), + dapt = guess_ab_col(), + doxy = guess_ab_col(), + erta = guess_ab_col(), + eryt = guess_ab_col(), + fosf = guess_ab_col(), + fusi = guess_ab_col(), + gent = guess_ab_col(), + imip = guess_ab_col(), + kana = guess_ab_col(), + levo = guess_ab_col(), + linc = guess_ab_col(), + line = guess_ab_col(), + mero = guess_ab_col(), + mezl = guess_ab_col(), + mino = guess_ab_col(), + moxi = guess_ab_col(), + nali = guess_ab_col(), + neom = guess_ab_col(), + neti = guess_ab_col(), + nitr = guess_ab_col(), + norf = guess_ab_col(), + novo = guess_ab_col(), + oflo = guess_ab_col(), + oxac = guess_ab_col(), + peni = guess_ab_col(), + pipe = guess_ab_col(), + pita = guess_ab_col(), + poly = guess_ab_col(), + pris = guess_ab_col(), + qida = guess_ab_col(), + rifa = guess_ab_col(), + roxi = guess_ab_col(), + siso = guess_ab_col(), + teic = guess_ab_col(), + tetr = guess_ab_col(), + tica = guess_ab_col(), + tige = guess_ab_col(), + tobr = guess_ab_col(), + trim = guess_ab_col(), + trsu = guess_ab_col(), + vanc = guess_ab_col()) { EUCAST_VERSION_BREAKPOINTS <- "8.1, 2018" EUCAST_VERSION_EXPERT_RULES <- "3.1, 2016" @@ -268,69 +268,69 @@ eucast_rules <- function(tbl, } # check columns - if (identical(amcl, as.name("guess_ab"))) { amcl <- guess_ab(tbl, "amcl", verbose = verbose) } - if (identical(amik, as.name("guess_ab"))) { amik <- guess_ab(tbl, "amik", verbose = verbose) } - if (identical(amox, as.name("guess_ab"))) { amox <- guess_ab(tbl, "amox", verbose = verbose) } - if (identical(ampi, as.name("guess_ab"))) { ampi <- guess_ab(tbl, "ampi", verbose = verbose) } - if (identical(azit, as.name("guess_ab"))) { azit <- guess_ab(tbl, "azit", verbose = verbose) } - if (identical(azlo, as.name("guess_ab"))) { azlo <- guess_ab(tbl, "azlo", verbose = verbose) } - if (identical(aztr, as.name("guess_ab"))) { aztr <- guess_ab(tbl, "aztr", verbose = verbose) } - if (identical(cefa, as.name("guess_ab"))) { cefa <- guess_ab(tbl, "cefa", verbose = verbose) } - if (identical(cfep, as.name("guess_ab"))) { cfep <- guess_ab(tbl, "cfep", verbose = verbose) } - if (identical(cfot, as.name("guess_ab"))) { cfot <- guess_ab(tbl, "cfot", verbose = verbose) } - if (identical(cfox, as.name("guess_ab"))) { cfox <- guess_ab(tbl, "cfox", verbose = verbose) } - if (identical(cfra, as.name("guess_ab"))) { cfra <- guess_ab(tbl, "cfra", verbose = verbose) } - if (identical(cfta, as.name("guess_ab"))) { cfta <- guess_ab(tbl, "cfta", verbose = verbose) } - if (identical(cftr, as.name("guess_ab"))) { cftr <- guess_ab(tbl, "cftr", verbose = verbose) } - if (identical(cfur, as.name("guess_ab"))) { cfur <- guess_ab(tbl, "cfur", verbose = verbose) } - if (identical(chlo, as.name("guess_ab"))) { chlo <- guess_ab(tbl, "chlo", verbose = verbose) } - if (identical(cipr, as.name("guess_ab"))) { cipr <- guess_ab(tbl, "cipr", verbose = verbose) } - if (identical(clar, as.name("guess_ab"))) { clar <- guess_ab(tbl, "clar", verbose = verbose) } - if (identical(clin, as.name("guess_ab"))) { clin <- guess_ab(tbl, "clin", verbose = verbose) } - if (identical(clox, as.name("guess_ab"))) { clox <- guess_ab(tbl, "clox", verbose = verbose) } - if (identical(coli, as.name("guess_ab"))) { coli <- guess_ab(tbl, "coli", verbose = verbose) } - if (identical(czol, as.name("guess_ab"))) { czol <- guess_ab(tbl, "czol", verbose = verbose) } - if (identical(dapt, as.name("guess_ab"))) { dapt <- guess_ab(tbl, "dapt", verbose = verbose) } - if (identical(doxy, as.name("guess_ab"))) { doxy <- guess_ab(tbl, "doxy", verbose = verbose) } - if (identical(erta, as.name("guess_ab"))) { erta <- guess_ab(tbl, "erta", verbose = verbose) } - if (identical(eryt, as.name("guess_ab"))) { eryt <- guess_ab(tbl, "eryt", verbose = verbose) } - if (identical(fosf, as.name("guess_ab"))) { fosf <- guess_ab(tbl, "fosf", verbose = verbose) } - if (identical(fusi, as.name("guess_ab"))) { fusi <- guess_ab(tbl, "fusi", verbose = verbose) } - if (identical(gent, as.name("guess_ab"))) { gent <- guess_ab(tbl, "gent", verbose = verbose) } - if (identical(imip, as.name("guess_ab"))) { imip <- guess_ab(tbl, "imip", verbose = verbose) } - if (identical(kana, as.name("guess_ab"))) { kana <- guess_ab(tbl, "kana", verbose = verbose) } - if (identical(levo, as.name("guess_ab"))) { levo <- guess_ab(tbl, "levo", verbose = verbose) } - if (identical(linc, as.name("guess_ab"))) { linc <- guess_ab(tbl, "linc", verbose = verbose) } - if (identical(line, as.name("guess_ab"))) { line <- guess_ab(tbl, "line", verbose = verbose) } - if (identical(mero, as.name("guess_ab"))) { mero <- guess_ab(tbl, "mero", verbose = verbose) } - if (identical(mezl, as.name("guess_ab"))) { mezl <- guess_ab(tbl, "mezl", verbose = verbose) } - if (identical(mino, as.name("guess_ab"))) { mino <- guess_ab(tbl, "mino", verbose = verbose) } - if (identical(moxi, as.name("guess_ab"))) { moxi <- guess_ab(tbl, "moxi", verbose = verbose) } - if (identical(nali, as.name("guess_ab"))) { nali <- guess_ab(tbl, "nali", verbose = verbose) } - if (identical(neom, as.name("guess_ab"))) { neom <- guess_ab(tbl, "neom", verbose = verbose) } - if (identical(neti, as.name("guess_ab"))) { neti <- guess_ab(tbl, "neti", verbose = verbose) } - if (identical(nitr, as.name("guess_ab"))) { nitr <- guess_ab(tbl, "nitr", verbose = verbose) } - if (identical(norf, as.name("guess_ab"))) { norf <- guess_ab(tbl, "norf", verbose = verbose) } - if (identical(novo, as.name("guess_ab"))) { novo <- guess_ab(tbl, "novo", verbose = verbose) } - if (identical(oflo, as.name("guess_ab"))) { oflo <- guess_ab(tbl, "oflo", verbose = verbose) } - if (identical(oxac, as.name("guess_ab"))) { oxac <- guess_ab(tbl, "oxac", verbose = verbose) } - if (identical(peni, as.name("guess_ab"))) { peni <- guess_ab(tbl, "peni", verbose = verbose) } - if (identical(pipe, as.name("guess_ab"))) { pipe <- guess_ab(tbl, "pipe", verbose = verbose) } - if (identical(pita, as.name("guess_ab"))) { pita <- guess_ab(tbl, "pita", verbose = verbose) } - if (identical(poly, as.name("guess_ab"))) { poly <- guess_ab(tbl, "poly", verbose = verbose) } - if (identical(pris, as.name("guess_ab"))) { pris <- guess_ab(tbl, "pris", verbose = verbose) } - if (identical(qida, as.name("guess_ab"))) { qida <- guess_ab(tbl, "qida", verbose = verbose) } - if (identical(rifa, as.name("guess_ab"))) { rifa <- guess_ab(tbl, "rifa", verbose = verbose) } - if (identical(roxi, as.name("guess_ab"))) { roxi <- guess_ab(tbl, "roxi", verbose = verbose) } - if (identical(siso, as.name("guess_ab"))) { siso <- guess_ab(tbl, "siso", verbose = verbose) } - if (identical(teic, as.name("guess_ab"))) { teic <- guess_ab(tbl, "teic", verbose = verbose) } - if (identical(tetr, as.name("guess_ab"))) { tetr <- guess_ab(tbl, "tetr", verbose = verbose) } - if (identical(tica, as.name("guess_ab"))) { tica <- guess_ab(tbl, "tica", verbose = verbose) } - if (identical(tige, as.name("guess_ab"))) { tige <- guess_ab(tbl, "tige", verbose = verbose) } - if (identical(tobr, as.name("guess_ab"))) { tobr <- guess_ab(tbl, "tobr", verbose = verbose) } - if (identical(trim, as.name("guess_ab"))) { trim <- guess_ab(tbl, "trim", verbose = verbose) } - if (identical(trsu, as.name("guess_ab"))) { trsu <- guess_ab(tbl, "trsu", verbose = verbose) } - if (identical(vanc, as.name("guess_ab"))) { vanc <- guess_ab(tbl, "vanc", verbose = verbose) } + if (identical(amcl, as.name("guess_ab_col"))) { amcl <- guess_ab_col(tbl, "amcl", verbose = verbose) } + if (identical(amik, as.name("guess_ab_col"))) { amik <- guess_ab_col(tbl, "amik", verbose = verbose) } + if (identical(amox, as.name("guess_ab_col"))) { amox <- guess_ab_col(tbl, "amox", verbose = verbose) } + if (identical(ampi, as.name("guess_ab_col"))) { ampi <- guess_ab_col(tbl, "ampi", verbose = verbose) } + if (identical(azit, as.name("guess_ab_col"))) { azit <- guess_ab_col(tbl, "azit", verbose = verbose) } + if (identical(azlo, as.name("guess_ab_col"))) { azlo <- guess_ab_col(tbl, "azlo", verbose = verbose) } + if (identical(aztr, as.name("guess_ab_col"))) { aztr <- guess_ab_col(tbl, "aztr", verbose = verbose) } + if (identical(cefa, as.name("guess_ab_col"))) { cefa <- guess_ab_col(tbl, "cefa", verbose = verbose) } + if (identical(cfep, as.name("guess_ab_col"))) { cfep <- guess_ab_col(tbl, "cfep", verbose = verbose) } + if (identical(cfot, as.name("guess_ab_col"))) { cfot <- guess_ab_col(tbl, "cfot", verbose = verbose) } + if (identical(cfox, as.name("guess_ab_col"))) { cfox <- guess_ab_col(tbl, "cfox", verbose = verbose) } + if (identical(cfra, as.name("guess_ab_col"))) { cfra <- guess_ab_col(tbl, "cfra", verbose = verbose) } + if (identical(cfta, as.name("guess_ab_col"))) { cfta <- guess_ab_col(tbl, "cfta", verbose = verbose) } + if (identical(cftr, as.name("guess_ab_col"))) { cftr <- guess_ab_col(tbl, "cftr", verbose = verbose) } + if (identical(cfur, as.name("guess_ab_col"))) { cfur <- guess_ab_col(tbl, "cfur", verbose = verbose) } + if (identical(chlo, as.name("guess_ab_col"))) { chlo <- guess_ab_col(tbl, "chlo", verbose = verbose) } + if (identical(cipr, as.name("guess_ab_col"))) { cipr <- guess_ab_col(tbl, "cipr", verbose = verbose) } + if (identical(clar, as.name("guess_ab_col"))) { clar <- guess_ab_col(tbl, "clar", verbose = verbose) } + if (identical(clin, as.name("guess_ab_col"))) { clin <- guess_ab_col(tbl, "clin", verbose = verbose) } + if (identical(clox, as.name("guess_ab_col"))) { clox <- guess_ab_col(tbl, "clox", verbose = verbose) } + if (identical(coli, as.name("guess_ab_col"))) { coli <- guess_ab_col(tbl, "coli", verbose = verbose) } + if (identical(czol, as.name("guess_ab_col"))) { czol <- guess_ab_col(tbl, "czol", verbose = verbose) } + if (identical(dapt, as.name("guess_ab_col"))) { dapt <- guess_ab_col(tbl, "dapt", verbose = verbose) } + if (identical(doxy, as.name("guess_ab_col"))) { doxy <- guess_ab_col(tbl, "doxy", verbose = verbose) } + if (identical(erta, as.name("guess_ab_col"))) { erta <- guess_ab_col(tbl, "erta", verbose = verbose) } + if (identical(eryt, as.name("guess_ab_col"))) { eryt <- guess_ab_col(tbl, "eryt", verbose = verbose) } + if (identical(fosf, as.name("guess_ab_col"))) { fosf <- guess_ab_col(tbl, "fosf", verbose = verbose) } + if (identical(fusi, as.name("guess_ab_col"))) { fusi <- guess_ab_col(tbl, "fusi", verbose = verbose) } + if (identical(gent, as.name("guess_ab_col"))) { gent <- guess_ab_col(tbl, "gent", verbose = verbose) } + if (identical(imip, as.name("guess_ab_col"))) { imip <- guess_ab_col(tbl, "imip", verbose = verbose) } + if (identical(kana, as.name("guess_ab_col"))) { kana <- guess_ab_col(tbl, "kana", verbose = verbose) } + if (identical(levo, as.name("guess_ab_col"))) { levo <- guess_ab_col(tbl, "levo", verbose = verbose) } + if (identical(linc, as.name("guess_ab_col"))) { linc <- guess_ab_col(tbl, "linc", verbose = verbose) } + if (identical(line, as.name("guess_ab_col"))) { line <- guess_ab_col(tbl, "line", verbose = verbose) } + if (identical(mero, as.name("guess_ab_col"))) { mero <- guess_ab_col(tbl, "mero", verbose = verbose) } + if (identical(mezl, as.name("guess_ab_col"))) { mezl <- guess_ab_col(tbl, "mezl", verbose = verbose) } + if (identical(mino, as.name("guess_ab_col"))) { mino <- guess_ab_col(tbl, "mino", verbose = verbose) } + if (identical(moxi, as.name("guess_ab_col"))) { moxi <- guess_ab_col(tbl, "moxi", verbose = verbose) } + if (identical(nali, as.name("guess_ab_col"))) { nali <- guess_ab_col(tbl, "nali", verbose = verbose) } + if (identical(neom, as.name("guess_ab_col"))) { neom <- guess_ab_col(tbl, "neom", verbose = verbose) } + if (identical(neti, as.name("guess_ab_col"))) { neti <- guess_ab_col(tbl, "neti", verbose = verbose) } + if (identical(nitr, as.name("guess_ab_col"))) { nitr <- guess_ab_col(tbl, "nitr", verbose = verbose) } + if (identical(norf, as.name("guess_ab_col"))) { norf <- guess_ab_col(tbl, "norf", verbose = verbose) } + if (identical(novo, as.name("guess_ab_col"))) { novo <- guess_ab_col(tbl, "novo", verbose = verbose) } + if (identical(oflo, as.name("guess_ab_col"))) { oflo <- guess_ab_col(tbl, "oflo", verbose = verbose) } + if (identical(oxac, as.name("guess_ab_col"))) { oxac <- guess_ab_col(tbl, "oxac", verbose = verbose) } + if (identical(peni, as.name("guess_ab_col"))) { peni <- guess_ab_col(tbl, "peni", verbose = verbose) } + if (identical(pipe, as.name("guess_ab_col"))) { pipe <- guess_ab_col(tbl, "pipe", verbose = verbose) } + if (identical(pita, as.name("guess_ab_col"))) { pita <- guess_ab_col(tbl, "pita", verbose = verbose) } + if (identical(poly, as.name("guess_ab_col"))) { poly <- guess_ab_col(tbl, "poly", verbose = verbose) } + if (identical(pris, as.name("guess_ab_col"))) { pris <- guess_ab_col(tbl, "pris", verbose = verbose) } + if (identical(qida, as.name("guess_ab_col"))) { qida <- guess_ab_col(tbl, "qida", verbose = verbose) } + if (identical(rifa, as.name("guess_ab_col"))) { rifa <- guess_ab_col(tbl, "rifa", verbose = verbose) } + if (identical(roxi, as.name("guess_ab_col"))) { roxi <- guess_ab_col(tbl, "roxi", verbose = verbose) } + if (identical(siso, as.name("guess_ab_col"))) { siso <- guess_ab_col(tbl, "siso", verbose = verbose) } + if (identical(teic, as.name("guess_ab_col"))) { teic <- guess_ab_col(tbl, "teic", verbose = verbose) } + if (identical(tetr, as.name("guess_ab_col"))) { tetr <- guess_ab_col(tbl, "tetr", verbose = verbose) } + if (identical(tica, as.name("guess_ab_col"))) { tica <- guess_ab_col(tbl, "tica", verbose = verbose) } + if (identical(tige, as.name("guess_ab_col"))) { tige <- guess_ab_col(tbl, "tige", verbose = verbose) } + if (identical(tobr, as.name("guess_ab_col"))) { tobr <- guess_ab_col(tbl, "tobr", verbose = verbose) } + if (identical(trim, as.name("guess_ab_col"))) { trim <- guess_ab_col(tbl, "trim", verbose = verbose) } + if (identical(trsu, as.name("guess_ab_col"))) { trsu <- guess_ab_col(tbl, "trsu", verbose = verbose) } + if (identical(vanc, as.name("guess_ab_col"))) { vanc <- guess_ab_col(tbl, "vanc", verbose = verbose) } col.list <- c(amcl, amik, amox, ampi, azit, azlo, aztr, cefa, cfra, cfep, cfot, cfox, cfta, cftr, cfur, chlo, cipr, clar, clin, clox, coli, czol, dapt, doxy, erta, eryt, fosf, fusi, gent, imip, kana, diff --git a/R/guess_ab.R b/R/guess_ab_col.R similarity index 54% rename from R/guess_ab.R rename to R/guess_ab_col.R index 70fd6dab..c5b90f56 100644 --- a/R/guess_ab.R +++ b/R/guess_ab_col.R @@ -21,18 +21,28 @@ #' Guess antibiotic column #' -#' This tries to find a column name in a data set based on information from the \code{\link{antibiotics}} data set. +#' This tries to find a column name in a data set based on information from the \code{\link{antibiotics}} data set. You can look for an antibiotic (trade) of abbreviation and it will search the data for any column containing a name or ATC code of that antibiotic. #' @param tbl a \code{data.frame} #' @param col a character to look for #' @param verbose a logical to indicate whether additional info should be printed #' @importFrom dplyr %>% select filter_all any_vars #' @export #' @inheritSection AMR Read more on our website! -# @examples -# -guess_ab <- function(tbl = NULL, col = NULL, verbose = FALSE) { +#' @examples +#' df <- data.frame(amox = "S", +#' tetr = "R") +#' +#' guess_ab_col(df, "amoxicillin") +#' # [1] "amox" +#' guess_ab_col(df, "J01AA07") # ATC code of Tetracycline +#' # [1] "tetr" +#' +#' guess_ab_col(df, "J01AA07", verbose = TRUE) +#' # using column `tetr` for col "J01AA07" +#' # [1] "tetr" +guess_ab_col <- function(tbl = NULL, col = NULL, verbose = FALSE) { if (is.null(tbl) & is.null(col)) { - return(as.name("guess_ab")) + return(as.name("guess_ab_col")) } #stop("This function should not be called directly.") if (length(col) > 1) { @@ -42,35 +52,58 @@ guess_ab <- function(tbl = NULL, col = NULL, verbose = FALSE) { if (!is.data.frame(tbl)) { stop("`tbl` must be a data.frame") } + tbl_names <- colnames(tbl) + if (col %in% tbl_names) { + return(col) + } ab_result <- antibiotics %>% select(atc:trade_name) %>% - filter_all(any_vars(tolower(.) == tolower(col))) - if (nrow(ab_result) > 1) { - # get most likely one - if (col %in% ab_result$atc) { - ab_result <- ab_result %>% filter(atc == col) - } else if (col %in% ab_result$certe) { - ab_result <- ab_result %>% filter(certe == col) - } else if (col %in% ab_result$umcg) { - ab_result <- ab_result %>% filter(umcg == col) - } else if (col %in% ab_result$umcg) { - ab_result <- ab_result %>% filter(official == col) - } else { - ab_result <- ab_result[1,] - } + filter_all(any_vars(tolower(.) == tolower(col))) %>% + filter_all(any_vars(. %in% tbl_names)) + + if (nrow(ab_result) == 0 & nchar(col) > 4) { + # use like when col >= 5 characters + ab_result <- antibiotics %>% + select(atc:trade_name) %>% + filter_all(any_vars(tolower(.) %like% tolower(col))) %>% + filter_all(any_vars(. %in% tbl_names)) } - tbl_result <- tbl_names[tbl_names %in% ab_result] - if (length(tbl_result) > 1) { - tbl_result <- tbl_result[1] - warning('using column `', tbl_result, '` for col "', col, '"', call. = FALSE) - } else if (length(tbl_result) == 0) { + + if (nrow(ab_result) > 1) { + # looking more and more for reliable hit + ab_result_1 <- ab_result %>% filter(tolower(atc) == tolower(col)) + if (nrow(ab_result_1) == 0) { + ab_result_1 <- ab_result %>% filter(tolower(certe) == tolower(col)) + } + if (nrow(ab_result_1) == 0) { + ab_result_1 <- ab_result %>% filter(tolower(umcg) == tolower(col)) + } + if (nrow(ab_result_1) == 0) { + ab_result_1 <- ab_result %>% filter(tolower(official) == tolower(col)) + } + if (nrow(ab_result_1) == 0) { + ab_result_1 <- ab_result[1, ] + } + ab_result <- ab_result_1 + } + + if (length(ab_result) == 0) { if (verbose == TRUE) { message('no result found for col "', col, '"') } return(NULL) - } else if (verbose == TRUE) { - message('using column `', tbl_result, '` for col "', col, '"') + } else { + result <- tbl_names[tbl_names %in% ab_result] + if (length(result) == 0) { + if (verbose == TRUE) { + message('no result found for col "', col, '"') + } + return(NULL) + } + if (verbose == TRUE) { + message('using column `', result, '` for col "', col, '"') + } + return(result) } - tbl_result } diff --git a/R/key_antibiotics.R b/R/key_antibiotics.R index 9b37438e..f654c01f 100644 --- a/R/key_antibiotics.R +++ b/R/key_antibiotics.R @@ -25,12 +25,12 @@ #' @param tbl table with antibiotics coloms, like \code{amox} and \code{amcl}. #' @param x,y characters to compare #' @inheritParams first_isolate -#' @param universal_1,universal_2,universal_3,universal_4,universal_5,universal_6 column names of \strong{broad-spectrum} antibiotics, case-insensitive -#' @param GramPos_1,GramPos_2,GramPos_3,GramPos_4,GramPos_5,GramPos_6 column names of antibiotics for \strong{Gram positives}, case-insensitive -#' @param GramNeg_1,GramNeg_2,GramNeg_3,GramNeg_4,GramNeg_5,GramNeg_6 column names of antibiotics for \strong{Gram negatives}, case-insensitive +#' @param universal_1,universal_2,universal_3,universal_4,universal_5,universal_6 column names of \strong{broad-spectrum} antibiotics, case-insensitive. At default, the columns containing these antibiotics will be guessed with \code{\link{guess_ab_col}}. +#' @param GramPos_1,GramPos_2,GramPos_3,GramPos_4,GramPos_5,GramPos_6 column names of antibiotics for \strong{Gram positives}, case-insensitive. At default, the columns containing these antibiotics will be guessed with \code{\link{guess_ab_col}}. +#' @param GramNeg_1,GramNeg_2,GramNeg_3,GramNeg_4,GramNeg_5,GramNeg_6 column names of antibiotics for \strong{Gram negatives}, case-insensitive. At default, the columns containing these antibiotics will be guessed with \code{\link{guess_ab_col}}. #' @param warnings give warning about missing antibiotic columns, they will anyway be ignored #' @param ... other parameters passed on to function -#' @details The function \code{key_antibiotics} returns a character vector with 12 antibiotic results for every isolate. These isolates can then be compared using \code{key_antibiotics_equal}, to check if two isolates have generally the same antibiogram. Missing and invalid values are replaced with a dot (\code{"."}). The \code{\link{first_isolate}} function only uses this function on the same microbial species from the same patient. Using this, an MRSA will be included after a susceptible \emph{S. aureus} (MSSA) found within the same episode (see \code{episode} parameter of \code{\link{first_isolate}}). Without key antibiotic comparison it wouldn't. +#' @details The function \code{key_antibiotics} returns a character vector with 12 antibiotic results for every isolate. These isolates can then be compared using \code{key_antibiotics_equal}, to check if two isolates have generally the same antibiogram. Missing and invalid values are replaced with a dot (\code{"."}). The \code{\link{first_isolate}} function only uses this function on the same microbial species from the same patient. Using this, an MRSA will be included after a susceptible \emph{S. aureus} (MSSA) found within the same episode (see \code{episode} parameter of \code{\link{first_isolate}}). Without key antibiotic comparison it would not. #' #' At default, the antibiotics that are used for \strong{Gram positive bacteria} are (colum names): \cr #' \code{"amox"}, \code{"amcl"}, \code{"cfur"}, \code{"pita"}, \code{"cipr"}, \code{"trsu"} (until here is universal), \code{"vanc"}, \code{"teic"}, \code{"tetr"}, \code{"eryt"}, \code{"oxac"}, \code{"rifa"}. @@ -78,24 +78,24 @@ #' # FALSE, because I is not ignored and so the 4th value differs key_antibiotics <- function(tbl, col_mo = NULL, - universal_1 = guess_ab(tbl, "amox"), - universal_2 = guess_ab(tbl, "amcl"), - universal_3 = guess_ab(tbl, "cfur"), - universal_4 = guess_ab(tbl, "pita"), - universal_5 = guess_ab(tbl, "cipr"), - universal_6 = guess_ab(tbl, "trsu"), - GramPos_1 = guess_ab(tbl, "vanc"), - GramPos_2 = guess_ab(tbl, "teic"), - GramPos_3 = guess_ab(tbl, "tetr"), - GramPos_4 = guess_ab(tbl, "eryt"), - GramPos_5 = guess_ab(tbl, "oxac"), - GramPos_6 = guess_ab(tbl, "rifa"), - GramNeg_1 = guess_ab(tbl, "gent"), - GramNeg_2 = guess_ab(tbl, "tobr"), - GramNeg_3 = guess_ab(tbl, "coli"), - GramNeg_4 = guess_ab(tbl, "cfot"), - GramNeg_5 = guess_ab(tbl, "cfta"), - GramNeg_6 = guess_ab(tbl, "mero"), + universal_1 = guess_ab_col(tbl, "amox"), + universal_2 = guess_ab_col(tbl, "amcl"), + universal_3 = guess_ab_col(tbl, "cfur"), + universal_4 = guess_ab_col(tbl, "pita"), + universal_5 = guess_ab_col(tbl, "cipr"), + universal_6 = guess_ab_col(tbl, "trsu"), + GramPos_1 = guess_ab_col(tbl, "vanc"), + GramPos_2 = guess_ab_col(tbl, "teic"), + GramPos_3 = guess_ab_col(tbl, "tetr"), + GramPos_4 = guess_ab_col(tbl, "eryt"), + GramPos_5 = guess_ab_col(tbl, "oxac"), + GramPos_6 = guess_ab_col(tbl, "rifa"), + GramNeg_1 = guess_ab_col(tbl, "gent"), + GramNeg_2 = guess_ab_col(tbl, "tobr"), + GramNeg_3 = guess_ab_col(tbl, "coli"), + GramNeg_4 = guess_ab_col(tbl, "cfot"), + GramNeg_5 = guess_ab_col(tbl, "cfta"), + GramNeg_6 = guess_ab_col(tbl, "mero"), warnings = TRUE, ...) { @@ -153,9 +153,6 @@ key_antibiotics <- function(tbl, left_join_microorganisms(by = col_mo) %>% mutate(key_ab = NA_character_) - print(as.character(gram_positive)) - print(gram_negative) - # Gram + tbl <- tbl %>% mutate(key_ab = if_else(gramstain == "Gram positive", diff --git a/R/mdro.R b/R/mdro.R index 09deedcd..ae139bc8 100755 --- a/R/mdro.R +++ b/R/mdro.R @@ -46,66 +46,66 @@ mdro <- function(tbl, country = NULL, col_mo = NULL, info = TRUE, - amcl = guess_ab(), - amik = guess_ab(), - amox = guess_ab(), - ampi = guess_ab(), - azit = guess_ab(), - aztr = guess_ab(), - cefa = guess_ab(), - cfra = guess_ab(), - cfep = guess_ab(), - cfot = guess_ab(), - cfox = guess_ab(), - cfta = guess_ab(), - cftr = guess_ab(), - cfur = guess_ab(), - chlo = guess_ab(), - cipr = guess_ab(), - clar = guess_ab(), - clin = guess_ab(), - clox = guess_ab(), - coli = guess_ab(), - czol = guess_ab(), - dapt = guess_ab(), - doxy = guess_ab(), - erta = guess_ab(), - eryt = guess_ab(), - fosf = guess_ab(), - fusi = guess_ab(), - gent = guess_ab(), - imip = guess_ab(), - kana = guess_ab(), - levo = guess_ab(), - linc = guess_ab(), - line = guess_ab(), - mero = guess_ab(), - metr = guess_ab(), - mino = guess_ab(), - moxi = guess_ab(), - nali = guess_ab(), - neom = guess_ab(), - neti = guess_ab(), - nitr = guess_ab(), - novo = guess_ab(), - norf = guess_ab(), - oflo = guess_ab(), - peni = guess_ab(), - pipe = guess_ab(), - pita = guess_ab(), - poly = guess_ab(), - qida = guess_ab(), - rifa = guess_ab(), - roxi = guess_ab(), - siso = guess_ab(), - teic = guess_ab(), - tetr = guess_ab(), - tica = guess_ab(), - tige = guess_ab(), - tobr = guess_ab(), - trim = guess_ab(), - trsu = guess_ab(), - vanc = guess_ab()) { + amcl = guess_ab_col(), + amik = guess_ab_col(), + amox = guess_ab_col(), + ampi = guess_ab_col(), + azit = guess_ab_col(), + aztr = guess_ab_col(), + cefa = guess_ab_col(), + cfra = guess_ab_col(), + cfep = guess_ab_col(), + cfot = guess_ab_col(), + cfox = guess_ab_col(), + cfta = guess_ab_col(), + cftr = guess_ab_col(), + cfur = guess_ab_col(), + chlo = guess_ab_col(), + cipr = guess_ab_col(), + clar = guess_ab_col(), + clin = guess_ab_col(), + clox = guess_ab_col(), + coli = guess_ab_col(), + czol = guess_ab_col(), + dapt = guess_ab_col(), + doxy = guess_ab_col(), + erta = guess_ab_col(), + eryt = guess_ab_col(), + fosf = guess_ab_col(), + fusi = guess_ab_col(), + gent = guess_ab_col(), + imip = guess_ab_col(), + kana = guess_ab_col(), + levo = guess_ab_col(), + linc = guess_ab_col(), + line = guess_ab_col(), + mero = guess_ab_col(), + metr = guess_ab_col(), + mino = guess_ab_col(), + moxi = guess_ab_col(), + nali = guess_ab_col(), + neom = guess_ab_col(), + neti = guess_ab_col(), + nitr = guess_ab_col(), + novo = guess_ab_col(), + norf = guess_ab_col(), + oflo = guess_ab_col(), + peni = guess_ab_col(), + pipe = guess_ab_col(), + pita = guess_ab_col(), + poly = guess_ab_col(), + qida = guess_ab_col(), + rifa = guess_ab_col(), + roxi = guess_ab_col(), + siso = guess_ab_col(), + teic = guess_ab_col(), + tetr = guess_ab_col(), + tica = guess_ab_col(), + tige = guess_ab_col(), + tobr = guess_ab_col(), + trim = guess_ab_col(), + trsu = guess_ab_col(), + vanc = guess_ab_col()) { if (!is.data.frame(tbl)) { stop("`tbl` must be a data frame.", call. = FALSE) @@ -169,66 +169,66 @@ mdro <- function(tbl, } # check columns - if (identical(amcl, as.name("guess_ab"))) { amcl <- guess_ab(tbl, "amcl", verbose = info) } - if (identical(amik, as.name("guess_ab"))) { amik <- guess_ab(tbl, "amik", verbose = info) } - if (identical(amox, as.name("guess_ab"))) { amox <- guess_ab(tbl, "amox", verbose = info) } - if (identical(ampi, as.name("guess_ab"))) { ampi <- guess_ab(tbl, "ampi", verbose = info) } - if (identical(azit, as.name("guess_ab"))) { azit <- guess_ab(tbl, "azit", verbose = info) } - if (identical(aztr, as.name("guess_ab"))) { aztr <- guess_ab(tbl, "aztr", verbose = info) } - if (identical(cefa, as.name("guess_ab"))) { cefa <- guess_ab(tbl, "cefa", verbose = info) } - if (identical(cfra, as.name("guess_ab"))) { cfra <- guess_ab(tbl, "cfra", verbose = info) } - if (identical(cfep, as.name("guess_ab"))) { cfep <- guess_ab(tbl, "cfep", verbose = info) } - if (identical(cfot, as.name("guess_ab"))) { cfot <- guess_ab(tbl, "cfot", verbose = info) } - if (identical(cfox, as.name("guess_ab"))) { cfox <- guess_ab(tbl, "cfox", verbose = info) } - if (identical(cfta, as.name("guess_ab"))) { cfta <- guess_ab(tbl, "cfta", verbose = info) } - if (identical(cftr, as.name("guess_ab"))) { cftr <- guess_ab(tbl, "cftr", verbose = info) } - if (identical(cfur, as.name("guess_ab"))) { cfur <- guess_ab(tbl, "cfur", verbose = info) } - if (identical(chlo, as.name("guess_ab"))) { chlo <- guess_ab(tbl, "chlo", verbose = info) } - if (identical(cipr, as.name("guess_ab"))) { cipr <- guess_ab(tbl, "cipr", verbose = info) } - if (identical(clar, as.name("guess_ab"))) { clar <- guess_ab(tbl, "clar", verbose = info) } - if (identical(clin, as.name("guess_ab"))) { clin <- guess_ab(tbl, "clin", verbose = info) } - if (identical(clox, as.name("guess_ab"))) { clox <- guess_ab(tbl, "clox", verbose = info) } - if (identical(coli, as.name("guess_ab"))) { coli <- guess_ab(tbl, "coli", verbose = info) } - if (identical(czol, as.name("guess_ab"))) { czol <- guess_ab(tbl, "czol", verbose = info) } - if (identical(dapt, as.name("guess_ab"))) { dapt <- guess_ab(tbl, "dapt", verbose = info) } - if (identical(doxy, as.name("guess_ab"))) { doxy <- guess_ab(tbl, "doxy", verbose = info) } - if (identical(erta, as.name("guess_ab"))) { erta <- guess_ab(tbl, "erta", verbose = info) } - if (identical(eryt, as.name("guess_ab"))) { eryt <- guess_ab(tbl, "eryt", verbose = info) } - if (identical(fosf, as.name("guess_ab"))) { fosf <- guess_ab(tbl, "fosf", verbose = info) } - if (identical(fusi, as.name("guess_ab"))) { fusi <- guess_ab(tbl, "fusi", verbose = info) } - if (identical(gent, as.name("guess_ab"))) { gent <- guess_ab(tbl, "gent", verbose = info) } - if (identical(imip, as.name("guess_ab"))) { imip <- guess_ab(tbl, "imip", verbose = info) } - if (identical(kana, as.name("guess_ab"))) { kana <- guess_ab(tbl, "kana", verbose = info) } - if (identical(levo, as.name("guess_ab"))) { levo <- guess_ab(tbl, "levo", verbose = info) } - if (identical(linc, as.name("guess_ab"))) { linc <- guess_ab(tbl, "linc", verbose = info) } - if (identical(line, as.name("guess_ab"))) { line <- guess_ab(tbl, "line", verbose = info) } - if (identical(mero, as.name("guess_ab"))) { mero <- guess_ab(tbl, "mero", verbose = info) } - if (identical(metr, as.name("guess_ab"))) { metr <- guess_ab(tbl, "metr", verbose = info) } - if (identical(mino, as.name("guess_ab"))) { mino <- guess_ab(tbl, "mino", verbose = info) } - if (identical(moxi, as.name("guess_ab"))) { moxi <- guess_ab(tbl, "moxi", verbose = info) } - if (identical(nali, as.name("guess_ab"))) { nali <- guess_ab(tbl, "nali", verbose = info) } - if (identical(neom, as.name("guess_ab"))) { neom <- guess_ab(tbl, "neom", verbose = info) } - if (identical(neti, as.name("guess_ab"))) { neti <- guess_ab(tbl, "neti", verbose = info) } - if (identical(nitr, as.name("guess_ab"))) { nitr <- guess_ab(tbl, "nitr", verbose = info) } - if (identical(novo, as.name("guess_ab"))) { novo <- guess_ab(tbl, "novo", verbose = info) } - if (identical(norf, as.name("guess_ab"))) { norf <- guess_ab(tbl, "norf", verbose = info) } - if (identical(oflo, as.name("guess_ab"))) { oflo <- guess_ab(tbl, "oflo", verbose = info) } - if (identical(peni, as.name("guess_ab"))) { peni <- guess_ab(tbl, "peni", verbose = info) } - if (identical(pipe, as.name("guess_ab"))) { pipe <- guess_ab(tbl, "pipe", verbose = info) } - if (identical(pita, as.name("guess_ab"))) { pita <- guess_ab(tbl, "pita", verbose = info) } - if (identical(poly, as.name("guess_ab"))) { poly <- guess_ab(tbl, "poly", verbose = info) } - if (identical(qida, as.name("guess_ab"))) { qida <- guess_ab(tbl, "qida", verbose = info) } - if (identical(rifa, as.name("guess_ab"))) { rifa <- guess_ab(tbl, "rifa", verbose = info) } - if (identical(roxi, as.name("guess_ab"))) { roxi <- guess_ab(tbl, "roxi", verbose = info) } - if (identical(siso, as.name("guess_ab"))) { siso <- guess_ab(tbl, "siso", verbose = info) } - if (identical(teic, as.name("guess_ab"))) { teic <- guess_ab(tbl, "teic", verbose = info) } - if (identical(tetr, as.name("guess_ab"))) { tetr <- guess_ab(tbl, "tetr", verbose = info) } - if (identical(tica, as.name("guess_ab"))) { tica <- guess_ab(tbl, "tica", verbose = info) } - if (identical(tige, as.name("guess_ab"))) { tige <- guess_ab(tbl, "tige", verbose = info) } - if (identical(tobr, as.name("guess_ab"))) { tobr <- guess_ab(tbl, "tobr", verbose = info) } - if (identical(trim, as.name("guess_ab"))) { trim <- guess_ab(tbl, "trim", verbose = info) } - if (identical(trsu, as.name("guess_ab"))) { trsu <- guess_ab(tbl, "trsu", verbose = info) } - if (identical(vanc, as.name("guess_ab"))) { vanc <- guess_ab(tbl, "vanc", verbose = info) } + if (identical(amcl, as.name("guess_ab_col"))) { amcl <- guess_ab_col(tbl, "amcl", verbose = info) } + if (identical(amik, as.name("guess_ab_col"))) { amik <- guess_ab_col(tbl, "amik", verbose = info) } + if (identical(amox, as.name("guess_ab_col"))) { amox <- guess_ab_col(tbl, "amox", verbose = info) } + if (identical(ampi, as.name("guess_ab_col"))) { ampi <- guess_ab_col(tbl, "ampi", verbose = info) } + if (identical(azit, as.name("guess_ab_col"))) { azit <- guess_ab_col(tbl, "azit", verbose = info) } + if (identical(aztr, as.name("guess_ab_col"))) { aztr <- guess_ab_col(tbl, "aztr", verbose = info) } + if (identical(cefa, as.name("guess_ab_col"))) { cefa <- guess_ab_col(tbl, "cefa", verbose = info) } + if (identical(cfra, as.name("guess_ab_col"))) { cfra <- guess_ab_col(tbl, "cfra", verbose = info) } + if (identical(cfep, as.name("guess_ab_col"))) { cfep <- guess_ab_col(tbl, "cfep", verbose = info) } + if (identical(cfot, as.name("guess_ab_col"))) { cfot <- guess_ab_col(tbl, "cfot", verbose = info) } + if (identical(cfox, as.name("guess_ab_col"))) { cfox <- guess_ab_col(tbl, "cfox", verbose = info) } + if (identical(cfta, as.name("guess_ab_col"))) { cfta <- guess_ab_col(tbl, "cfta", verbose = info) } + if (identical(cftr, as.name("guess_ab_col"))) { cftr <- guess_ab_col(tbl, "cftr", verbose = info) } + if (identical(cfur, as.name("guess_ab_col"))) { cfur <- guess_ab_col(tbl, "cfur", verbose = info) } + if (identical(chlo, as.name("guess_ab_col"))) { chlo <- guess_ab_col(tbl, "chlo", verbose = info) } + if (identical(cipr, as.name("guess_ab_col"))) { cipr <- guess_ab_col(tbl, "cipr", verbose = info) } + if (identical(clar, as.name("guess_ab_col"))) { clar <- guess_ab_col(tbl, "clar", verbose = info) } + if (identical(clin, as.name("guess_ab_col"))) { clin <- guess_ab_col(tbl, "clin", verbose = info) } + if (identical(clox, as.name("guess_ab_col"))) { clox <- guess_ab_col(tbl, "clox", verbose = info) } + if (identical(coli, as.name("guess_ab_col"))) { coli <- guess_ab_col(tbl, "coli", verbose = info) } + if (identical(czol, as.name("guess_ab_col"))) { czol <- guess_ab_col(tbl, "czol", verbose = info) } + if (identical(dapt, as.name("guess_ab_col"))) { dapt <- guess_ab_col(tbl, "dapt", verbose = info) } + if (identical(doxy, as.name("guess_ab_col"))) { doxy <- guess_ab_col(tbl, "doxy", verbose = info) } + if (identical(erta, as.name("guess_ab_col"))) { erta <- guess_ab_col(tbl, "erta", verbose = info) } + if (identical(eryt, as.name("guess_ab_col"))) { eryt <- guess_ab_col(tbl, "eryt", verbose = info) } + if (identical(fosf, as.name("guess_ab_col"))) { fosf <- guess_ab_col(tbl, "fosf", verbose = info) } + if (identical(fusi, as.name("guess_ab_col"))) { fusi <- guess_ab_col(tbl, "fusi", verbose = info) } + if (identical(gent, as.name("guess_ab_col"))) { gent <- guess_ab_col(tbl, "gent", verbose = info) } + if (identical(imip, as.name("guess_ab_col"))) { imip <- guess_ab_col(tbl, "imip", verbose = info) } + if (identical(kana, as.name("guess_ab_col"))) { kana <- guess_ab_col(tbl, "kana", verbose = info) } + if (identical(levo, as.name("guess_ab_col"))) { levo <- guess_ab_col(tbl, "levo", verbose = info) } + if (identical(linc, as.name("guess_ab_col"))) { linc <- guess_ab_col(tbl, "linc", verbose = info) } + if (identical(line, as.name("guess_ab_col"))) { line <- guess_ab_col(tbl, "line", verbose = info) } + if (identical(mero, as.name("guess_ab_col"))) { mero <- guess_ab_col(tbl, "mero", verbose = info) } + if (identical(metr, as.name("guess_ab_col"))) { metr <- guess_ab_col(tbl, "metr", verbose = info) } + if (identical(mino, as.name("guess_ab_col"))) { mino <- guess_ab_col(tbl, "mino", verbose = info) } + if (identical(moxi, as.name("guess_ab_col"))) { moxi <- guess_ab_col(tbl, "moxi", verbose = info) } + if (identical(nali, as.name("guess_ab_col"))) { nali <- guess_ab_col(tbl, "nali", verbose = info) } + if (identical(neom, as.name("guess_ab_col"))) { neom <- guess_ab_col(tbl, "neom", verbose = info) } + if (identical(neti, as.name("guess_ab_col"))) { neti <- guess_ab_col(tbl, "neti", verbose = info) } + if (identical(nitr, as.name("guess_ab_col"))) { nitr <- guess_ab_col(tbl, "nitr", verbose = info) } + if (identical(novo, as.name("guess_ab_col"))) { novo <- guess_ab_col(tbl, "novo", verbose = info) } + if (identical(norf, as.name("guess_ab_col"))) { norf <- guess_ab_col(tbl, "norf", verbose = info) } + if (identical(oflo, as.name("guess_ab_col"))) { oflo <- guess_ab_col(tbl, "oflo", verbose = info) } + if (identical(peni, as.name("guess_ab_col"))) { peni <- guess_ab_col(tbl, "peni", verbose = info) } + if (identical(pipe, as.name("guess_ab_col"))) { pipe <- guess_ab_col(tbl, "pipe", verbose = info) } + if (identical(pita, as.name("guess_ab_col"))) { pita <- guess_ab_col(tbl, "pita", verbose = info) } + if (identical(poly, as.name("guess_ab_col"))) { poly <- guess_ab_col(tbl, "poly", verbose = info) } + if (identical(qida, as.name("guess_ab_col"))) { qida <- guess_ab_col(tbl, "qida", verbose = info) } + if (identical(rifa, as.name("guess_ab_col"))) { rifa <- guess_ab_col(tbl, "rifa", verbose = info) } + if (identical(roxi, as.name("guess_ab_col"))) { roxi <- guess_ab_col(tbl, "roxi", verbose = info) } + if (identical(siso, as.name("guess_ab_col"))) { siso <- guess_ab_col(tbl, "siso", verbose = info) } + if (identical(teic, as.name("guess_ab_col"))) { teic <- guess_ab_col(tbl, "teic", verbose = info) } + if (identical(tetr, as.name("guess_ab_col"))) { tetr <- guess_ab_col(tbl, "tetr", verbose = info) } + if (identical(tica, as.name("guess_ab_col"))) { tica <- guess_ab_col(tbl, "tica", verbose = info) } + if (identical(tige, as.name("guess_ab_col"))) { tige <- guess_ab_col(tbl, "tige", verbose = info) } + if (identical(tobr, as.name("guess_ab_col"))) { tobr <- guess_ab_col(tbl, "tobr", verbose = info) } + if (identical(trim, as.name("guess_ab_col"))) { trim <- guess_ab_col(tbl, "trim", verbose = info) } + if (identical(trsu, as.name("guess_ab_col"))) { trsu <- guess_ab_col(tbl, "trsu", verbose = info) } + if (identical(vanc, as.name("guess_ab_col"))) { vanc <- guess_ab_col(tbl, "vanc", verbose = info) } col.list <- c(amcl, amik, amox, ampi, azit, aztr, cefa, cfra, cfep, cfot, cfox, cfta, cftr, cfur, chlo, cipr, clar, clin, clox, coli, czol, dapt, doxy, erta, eryt, fosf, fusi, gent, imip, kana, diff --git a/_pkgdown.yml b/_pkgdown.yml index b2197338..f44270cf 100644 --- a/_pkgdown.yml +++ b/_pkgdown.yml @@ -53,6 +53,9 @@ navbar: - text: 'Use the G-test' icon: 'fa-clipboard-check' href: 'articles/G_test.html' + - text: 'Other: benchmarks' + icon: 'fa-shipping-fast' + href: 'articles/benchmarks.html' - text: 'Manual' icon: 'fa-book-open' href: 'reference/' @@ -73,7 +76,8 @@ navbar: reference: - title: 'Background information' desc: > - Some pages about our package and its external sources. + Some pages about our package and its external sources. Be sure to read our [How To's](./../articles/index.html) + for more information about how to work with functions in this package. contents: - '`AMR`' - '`ITIS`' @@ -85,7 +89,7 @@ reference: contents: - starts_with("as.") - '`eucast_rules`' - - '`guess_ab`' + - '`guess_ab_col`' - '`read.4D`' - title: 'Adding variables to your data' desc: > @@ -129,7 +133,10 @@ reference: - '`microorganisms.umcg`' - '`supplementary_data`' - title: Other - desc: ~ + desc: > + These functions are mostly for internal use, but some of + them may also be suitable for your analysis. Especially the + 'like' function can be useful: `if (x %like% y) {...}`. contents: - '`get_locale`' - '`like`' diff --git a/docs/LICENSE-text.html b/docs/LICENSE-text.html index 9ed9ff8c..bcf568b9 100644 --- a/docs/LICENSE-text.html +++ b/docs/LICENSE-text.html @@ -149,6 +149,13 @@ Use the G-test +
  • + + + + Other: benchmarks + +
  • diff --git a/docs/articles/AMR.html b/docs/articles/AMR.html index 9e9b3092..d586dc73 100644 --- a/docs/articles/AMR.html +++ b/docs/articles/AMR.html @@ -111,6 +111,13 @@ Use the G-test
  • +
  • + + + + Other: benchmarks + +
  • @@ -171,7 +178,7 @@

    How to conduct AMR analysis

    Matthijs S. Berends

    -

    08 January 2019

    +

    11 January 2019

    @@ -180,7 +187,7 @@ -

    Note: values on this page will change with every website update since they are based on randomly created values and the page was written in RMarkdown. However, the methodology remains unchanged. This page was generated on 08 January 2019.

    +

    Note: values on this page will change with every website update since they are based on randomly created values and the page was written in RMarkdown. However, the methodology remains unchanged. This page was generated on 11 January 2019.

    Introduction

    @@ -196,21 +203,21 @@ -2019-01-08 +2019-01-11 abcd Escherichia coli S S -2019-01-08 +2019-01-11 abcd Escherichia coli S R -2019-01-08 +2019-01-11 efgh Escherichia coli R @@ -268,18 +275,18 @@

    Put everything together

    -

    Using the sample() function, we can randomly select items from all objects we defined earlier. To let our fake data reflect reality a bit, we will also approximately define the probabilities of bacteria and the antibiotic results with the prob parameter.

    -
    data <- data.frame(date = sample(dates, 5000, replace = TRUE),
    -                   patient_id = sample(patients, 5000, replace = TRUE),
    -                   hospital = sample(hospitals, 5000, replace = TRUE, prob = c(0.30, 0.35, 0.15, 0.20)),
    -                   bacteria = sample(bacteria, 5000, replace = TRUE, prob = c(0.50, 0.25, 0.15, 0.10)),
    -                   amox = sample(ab_interpretations, 5000, replace = TRUE, prob = c(0.60, 0.05, 0.35)),
    -                   amcl = sample(ab_interpretations, 5000, replace = TRUE, prob = c(0.75, 0.10, 0.15)),
    -                   cipr = sample(ab_interpretations, 5000, replace = TRUE, prob = c(0.80, 0.00, 0.20)),
    -                   gent = sample(ab_interpretations, 5000, replace = TRUE, prob = c(0.92, 0.00, 0.08))
    +

    Using the sample() function, we can randomly select items from all objects we defined earlier. To let our fake data reflect reality a bit, we will also approximately define the probabilities of bacteria and the antibiotic results with the prob parameter.

    +
    data <- data.frame(date = sample(dates, 5000, replace = TRUE),
    +                   patient_id = sample(patients, 5000, replace = TRUE),
    +                   hospital = sample(hospitals, 5000, replace = TRUE, prob = c(0.30, 0.35, 0.15, 0.20)),
    +                   bacteria = sample(bacteria, 5000, replace = TRUE, prob = c(0.50, 0.25, 0.15, 0.10)),
    +                   amox = sample(ab_interpretations, 5000, replace = TRUE, prob = c(0.60, 0.05, 0.35)),
    +                   amcl = sample(ab_interpretations, 5000, replace = TRUE, prob = c(0.75, 0.10, 0.15)),
    +                   cipr = sample(ab_interpretations, 5000, replace = TRUE, prob = c(0.80, 0.00, 0.20)),
    +                   gent = sample(ab_interpretations, 5000, replace = TRUE, prob = c(0.92, 0.00, 0.08))
                        )
    -

    Using the left_join() function from the dplyr package, we can ‘map’ the gender to the patient ID using the patients_table object we created earlier:

    - +

    Using the left_join() function from the dplyr package, we can ‘map’ the gender to the patient ID using the patients_table object we created earlier:

    +

    The resulting data set contains 5,000 blood culture isolates. With the head() function we can preview the first 6 values of this data set:

    head(data)
    @@ -296,70 +303,70 @@ - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + - + + - - - - + + + + - - + +
    2011-02-27M6Hospital C2014-02-02P8Hospital D Escherichia coli SSRSM
    2012-07-12C2Hospital BStreptococcus pneumoniaeSRSSM
    2016-09-13O7Hospital AEscherichia coliR R S S F
    2016-12-05E4Hospital A2013-10-26Q1Hospital B Escherichia coli IRR SF
    2017-06-12E5Hospital DStreptococcus pneumoniaeSRSSM
    2013-06-16K7Hospital BEscherichia coliSI S S M
    2017-10-05M1Hospital AEscherichia coliR2013-01-11M4Hospital BStaphylococcus aureus IRSS S M
    2012-02-22H9Hospital CStreptococcus pneumoniae2016-11-18W10Hospital AStaphylococcus aureus S SR SMSF
    @@ -379,15 +386,15 @@ # # Item Count Percent Cum. Count Cum. Percent # --- ----- ------ -------- ----------- ------------- -# 1 M 2,635 52.7% 2,635 52.7% -# 2 F 2,365 47.3% 5,000 100.0%
    +# 1 M 2,598 52.0% 2,598 52.0% +# 2 F 2,402 48.0% 5,000 100.0%

    So, we can draw at least two conclusions immediately. From a data scientist perspective, the data looks clean: only values M and F. From a researcher perspective: there are slightly more men. Nothing we didn’t already know.

    -

    The data is already quite clean, but we still need to transform some variables. The bacteria column now consists of text, and we want to add more variables based on microbial IDs later on. So, we will transform this column to valid IDs. The mutate() function of the dplyr package makes this really easy:

    +

    The data is already quite clean, but we still need to transform some variables. The bacteria column now consists of text, and we want to add more variables based on microbial IDs later on. So, we will transform this column to valid IDs. The mutate() function of the dplyr package makes this really easy:

    data <- data %>%
    -  mutate(bacteria = as.mo(bacteria))
    -

    We also want to transform the antibiotics, because in real life data we don’t know if they are really clean. The as.rsi() function ensures reliability and reproducibility in these kind of variables. The mutate_at() will run the as.rsi() function on defined variables:

    + mutate(bacteria = as.mo(bacteria))
    +

    We also want to transform the antibiotics, because in real life data we don’t know if they are really clean. The as.rsi() function ensures reliability and reproducibility in these kind of variables. The mutate_at() will run the as.rsi() function on defined variables:

    data <- data %>%
    -  mutate_at(vars(amox:gent), as.rsi)
    + mutate_at(vars(amox:gent), as.rsi)

    Finally, we will apply EUCAST rules on our antimicrobial results. In Europe, most medical microbiological laboratories already apply these rules. Our package features their latest insights on intrinsic resistance and exceptional phenotypes. Moreover, the eucast_rules() function can also apply additional rules, like forcing ampicillin = R when amoxicillin/clavulanic acid = R.

    Because the amoxicillin (column amox) and amoxicillin/clavulanic acid (column amcl) in our data were generated randomly, some rows will undoubtedly contain amox = S and amcl = R, which is technically impossible. The eucast_rules() fixes this:

    +# => EUCAST rules affected 1,830 out of 5,000 rows -> changed 1,025 test results.

    Adding new variables

    Now that we have the microbial ID, we can add some taxonomic properties:

    data <- data %>% 
    -  mutate(gramstain = mo_gramstain(bacteria),
    +  mutate(gramstain = mo_gramstain(bacteria),
              genus = mo_genus(bacteria),
              species = mo_species(bacteria))
    @@ -451,14 +458,14 @@

    This AMR package includes this methodology with the first_isolate() function. It adopts the episode of a year (can be changed by user) and it starts counting days after every selected isolate. This new variable can easily be added to our data:

    -

    So only 58.6% is suitable for resistance analysis! We can now filter on is with the filter() function, also from the dplyr package:

    +# => Found 2,962 first isolates (59.2% of total)
    +

    So only 59.2% is suitable for resistance analysis! We can now filter on is with the filter() function, also from the dplyr package:

    + filter(first == TRUE)

    For future use, the above two syntaxes can be shortened with the filter_first_isolate() function:

    @@ -482,21 +489,21 @@ 1 -2010-01-31 -L4 +2010-05-23 +E7 B_ESCHR_COL R S -S +R S TRUE 2 -2010-08-01 -L4 +2010-08-03 +E7 B_ESCHR_COL -R +S S S S @@ -504,52 +511,52 @@ 3 -2010-12-29 -L4 +2011-01-20 +E7 B_ESCHR_COL -I -S R +R +S S FALSE 4 -2011-01-21 -L4 +2011-02-21 +E7 B_ESCHR_COL -R -I S +R +R S FALSE 5 -2011-02-06 -L4 +2011-08-04 +E7 B_ESCHR_COL -I S -R +S +S S TRUE 6 -2011-05-30 -L4 +2011-11-15 +E7 B_ESCHR_COL -S -I R S +S +S FALSE 7 -2011-08-16 -L4 +2012-01-13 +E7 B_ESCHR_COL S S @@ -559,8 +566,8 @@ 8 -2012-01-15 -L4 +2012-03-10 +E7 B_ESCHR_COL S S @@ -570,22 +577,22 @@ 9 -2014-07-16 -L4 +2012-11-09 +E7 B_ESCHR_COL S S -S +R S TRUE 10 -2014-09-19 -L4 +2013-04-06 +E7 B_ESCHR_COL S -R +S S S FALSE @@ -595,8 +602,8 @@

    Only 3 isolates are marked as ‘first’ according to CLSI guideline. But when reviewing the antibiogram, it is obvious that some isolates are absolutely different strains and show be included too. This is why we weigh isolates, based on their antibiogram. The key_antibiotics() function adds a vector with 18 key antibiotics: 6 broad spectrum ones, 6 small spectrum for Gram negatives and 6 small spectrum for Gram positives. These can be defined by the user.

    If a column exists with a name like ‘key(…)ab’ the first_isolate() function will automatically use it and determine the first weighted isolates. Mind the NOTEs in below output:

    +# => Found 4,399 first weighted isolates (88.0% of total) @@ -625,80 +632,80 @@ - - + + - + - - + + - + - + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - - + + - + - - + + @@ -709,8 +716,8 @@ - - + + @@ -721,23 +728,23 @@ - - + + - + - - + + - + @@ -745,14 +752,14 @@
    isolate
    12010-01-31L42010-05-23E7 B_ESCHR_COL R SSR S TRUE TRUE
    22010-08-01L42010-08-03E7 B_ESCHR_COLRS S S S FALSEFALSETRUE
    32010-12-29L42011-01-20E7 B_ESCHR_COLIS RRS S FALSE TRUE
    42011-01-21L42011-02-21E7 B_ESCHR_COLRI SRR S FALSE TRUE
    52011-02-06L42011-08-04E7 B_ESCHR_COLI SRSS S TRUE TRUE
    62011-05-30L42011-11-15E7 B_ESCHR_COLSI R SSS FALSEFALSETRUE
    72011-08-16L42012-01-13E7 B_ESCHR_COL S S
    82012-01-15L42012-03-10E7 B_ESCHR_COL S S
    92014-07-16L42012-11-09E7 B_ESCHR_COL S SSR S TRUE TRUE
    102014-09-19L42013-04-06E7 B_ESCHR_COL SRS S S FALSE
    -

    Instead of 3, now 8 isolates are flagged. In total, 88.7% of all isolates are marked ‘first weighted’ - 147.3% more than when using the CLSI guideline. In real life, this novel algorithm will yield 5-10% more isolates than the classic CLSI guideline.

    +

    Instead of 3, now 10 isolates are flagged. In total, 88% of all isolates are marked ‘first weighted’ - 147.2% more than when using the CLSI guideline. In real life, this novel algorithm will yield 5-10% more isolates than the classic CLSI guideline.

    As with filter_first_isolate(), there’s a shortcut for this new algorithm too:

    -

    So we end up with 4,435 isolates for analysis.

    +

    So we end up with 4,399 isolates for analysis.

    We can remove unneeded columns:

    + select(-c(first, keyab))

    Now our data looks like:

    head(data_1st)
    @@ -775,43 +782,11 @@ - - - + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -822,30 +797,30 @@ - - - - + + + + - + - + - - - - + + + + - + @@ -854,15 +829,47 @@ - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -884,7 +891,7 @@
    data_1st %>% freq(genus, species)

    Frequency table of genus and species
    Columns: 2
    -Length: 4,435 (of which NA: 0 = 0.00%)
    +Length: 4,399 (of which NA: 0 = 0.00%)
    Unique: 4

    Shortest: 16
    Longest: 24

    @@ -901,33 +908,33 @@ Longest: 24

    - - - - + + + + - - - - + + + + - - - - + + + + - - - + + + @@ -937,11 +944,11 @@ Longest: 24

    Resistance percentages

    The functions portion_R, portion_RI, portion_I, portion_IS and portion_S can be used to determine the portion of a specific antimicrobial outcome. They can be used on their own:

    -

    Or can be used in conjuction with group_by() and summarise(), both from the dplyr package:

    +# [1] 0.4819277 +

    Or can be used in conjuction with group_by() and summarise(), both from the dplyr package:

    data_1st %>% 
    -  group_by(hospital) %>% 
    -  summarise(amoxicillin = portion_IR(amox))
    + group_by(hospital) %>% + summarise(amoxicillin =portion_IR(amox))
    12011-02-27M6Hospital C2014-02-02P8Hospital D B_ESCHR_COL SSRSMGram negativeEscherichiacoliTRUE
    22012-07-12C2Hospital BB_STRPTC_PNESRSRMGram positiveStreptococcuspneumoniaeTRUE
    32016-09-13O7Hospital AB_ESCHR_COLR R S STRUE
    52017-10-05M1Hospital A22013-10-26Q1Hospital B B_ESCHR_COLR I RR SMF Gram negative Escherichia coli TRUE
    62012-02-22H9Hospital C32017-06-12E5Hospital D B_STRPTC_PNE SS RS R M Gram positiveTRUE
    72011-01-13S6Hospital D42013-06-16K7Hospital BB_ESCHR_COLSISSMGram negativeEscherichiacoliTRUE
    52013-01-11M4Hospital B B_STPHY_AUR I S S SMGram positiveStaphylococcusaureusTRUE
    72012-01-05S10Hospital DB_STPHY_AURRIRS F Gram positive Staphylococcus
    1 Escherichia coli2,20349.7%2,20349.7%2,13848.6%2,13848.6%
    2 Staphylococcus aureus1,07224.2%3,27573.8%1,07024.3%3,20872.9%
    3 Streptococcus pneumoniae68915.5%3,96489.4%69715.8%3,90588.8%
    4 Klebsiella pneumoniae47110.6%4,43549411.2%4,399 100.0%
    @@ -950,26 +957,26 @@ Longest: 24

    - + - + - + - +
    hospital
    Hospital A0.45041640.4591382
    Hospital B0.47820340.5000000
    Hospital C0.46705710.4682171
    Hospital D0.44711010.4953380
    -

    Of course it would be very convenient to know the number of isolates responsible for the percentages. For that purpose the n_rsi() can be used, which works exactly like n_distinct() from the dplyr package. It counts all isolates available for every group (i.e. values S, I or R):

    +

    Of course it would be very convenient to know the number of isolates responsible for the percentages. For that purpose the n_rsi() can be used, which works exactly like n_distinct() from the dplyr package. It counts all isolates available for every group (i.e. values S, I or R):

    data_1st %>% 
    -  group_by(hospital) %>% 
    -  summarise(amoxicillin = portion_IR(amox),
    +  group_by(hospital) %>% 
    +  summarise(amoxicillin = portion_IR(amox),
                 available = n_rsi(amox))
    @@ -980,30 +987,30 @@ Longest: 24

    - - + + - - + + - - + + - - + +
    Hospital A0.450416413210.45913821346
    Hospital B0.478203415140.50000001550
    Hospital C0.46705716830.4682171645
    Hospital D0.44711019170.4953380858

    These functions can also be used to get the portion of multiple antibiotics, to calculate co-resistance very easily:

    data_1st %>% 
    -  group_by(genus) %>% 
    -  summarise(amoxicillin = portion_S(amcl),
    +  group_by(genus) %>% 
    +  summarise(amoxicillin = portion_S(amcl),
                 gentamicin = portion_S(gent),
                 "amox + gent" = portion_S(amcl, gent))
    @@ -1016,37 +1023,37 @@ Longest: 24

    - - - + + + - - - + + + - - - + + + - + - +
    Escherichia0.71629600.90512940.97866550.71936390.91113190.9742750
    Klebsiella0.74946920.91295120.97664540.72267210.90283400.9777328
    Staphylococcus0.73414180.92444030.97761190.73925230.90841120.9831776
    Streptococcus0.75761970.7532281 0.00000000.75761970.7532281

    To make a transition to the next part, let’s see how this difference could be plotted:

    data_1st %>% 
    -  group_by(genus) %>% 
    -  summarise("1. Amoxicillin" = portion_S(amcl),
    +  group_by(genus) %>% 
    +  summarise("1. Amoxicillin" = portion_S(amcl),
                 "2. Gentamicin" = portion_S(gent),
                 "3. Amox + gent" = portion_S(amcl, gent)) %>% 
    -  tidyr::gather("Antibiotic", "S", -genus) %>%
    +  tidyr::gather("Antibiotic", "S", -genus) %>%
       ggplot(aes(x = genus,
                  y = S,
                  fill = Antibiotic)) +
    @@ -1076,7 +1083,7 @@ Longest: 24

    Omit the translate_ab = FALSE to have the antibiotic codes (amox, amcl, cipr, gent) translated to official WHO names (amoxicillin, amoxicillin and betalactamase inhibitor, ciprofloxacin, gentamicin).

    If we group on e.g. the genus column and add some additional functions from our package, we can create this:

    # group the data on `genus`
    -ggplot(data_1st %>% group_by(genus)) + 
    +ggplot(data_1st %>% group_by(genus)) + 
       # create bars with genus on x axis
       # it looks for variables with class `rsi`,
       # of which we have 4 (earlier created with `as.rsi`)
    @@ -1098,7 +1105,7 @@ Longest: 24

    To simplify this, we also created the ggplot_rsi() function, which combines almost all above functions:

    data_1st %>% 
    -  group_by(genus) %>%
    +  group_by(genus) %>%
       ggplot_rsi(x = "genus",
                  facet = "Antibiotic",
                  breaks = 0:4 * 25,
    @@ -1132,12 +1139,12 @@ Longest: 24

    We can transform the data and apply the test in only a couple of lines:

    septic_patients %>%
    -  filter(hospital_id %in% c("A", "D")) %>% # filter on only hospitals A and D
    -  select(hospital_id, fosf) %>%            # select the hospitals and fosfomycin
    -  group_by(hospital_id) %>%                # group on the hospitals
    +  filter(hospital_id %in% c("A", "D")) %>% # filter on only hospitals A and D
    +  select(hospital_id, fosf) %>%            # select the hospitals and fosfomycin
    +  group_by(hospital_id) %>%                # group on the hospitals
       count_df(combine_IR = TRUE) %>%          # count all isolates per group (hospital_id)
    -  tidyr::spread(hospital_id, Value) %>%    # transform output so A and D are columns
    -  select(A, D) %>%                         # and select these only
    +  tidyr::spread(hospital_id, Value) %>%    # transform output so A and D are columns
    +  select(A, D) %>%                         # and select these only
       as.matrix() %>%                          # transform to good old matrix for fisher.test()
       fisher.test()                            # do Fisher's Exact Test
     # 
    diff --git a/docs/articles/AMR_files/figure-html/plot 1-1.png b/docs/articles/AMR_files/figure-html/plot 1-1.png
    index f9b2d55eeae54c368d133b2a9b6ec0bc8f2af5cd..c9ff2753867a26b3ab53e476e8a256eb71db1348 100644
    GIT binary patch
    literal 31762
    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�hdHC3B$kNDT!JY*S
    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
    
    literal 31951
    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
    z
    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
    H78La-#{$QV
    
    diff --git a/docs/articles/AMR_files/figure-html/plot 3-1.png b/docs/articles/AMR_files/figure-html/plot 3-1.png
    index 265ee49b72de861a0e3fcb2a426d3c14bcf8e249..6bc000b5215dec49e4efec9cf303ec65da849676 100644
    GIT binary patch
    literal 24229
    zcmeIa2UwNcmMyrIqi_tc6)^yUsDKhgF_49`!H7gjf`AwiBuSR2Zbd{zMMWeTK*>2t
    z7DXfol93z)1j$h(^;meiUfuVq@2ju7>wDF&i|;#kdtrxvuYayN#~fqK<*BNCXyr2Y
    zWfTf!<&nb*>J-Y7=M)OVDW=5~3Ptmm&MG|oX?ggBHHEU#gZ#J1yL0#)g|dlqMBy(D
    zhk(AOiw>IAS+Ya6GXzHYJ8o^RT3oJ0-DMUH-ko!RT+t0i?t9vgL&P1tBUSy#qC
    z-sRY>&wTcvfq}tj*JpXAVqX#bl-Wpx9Qy08zg{c4o8>KI#y8k>W%2*F9=`hRc%H)L
    zGFILlJ5`GR=#eT9k9>O&!7D@&LQhMbDd@X&!P7$+%{kS!j){0
    zxnkq!=oqL>;)VU~!Ht&EGehrXXM0p))7o!)%g&`KuPc4F*R=fQfg3k&Y&mqVq_}uF
    z&$sSwL)WR!KuKHOG)toc7Rk~JSMZJ9Hn%+d_?xQ?jLhtNjK4hp%Qk(e$-ZSJ&k9cQ
    zxD$!z+3tS!7n2?PA}`N0m^rHaFQ1ylSkUId?fSFLubN9L+GpOV)A3nULPFy4@zw2*4{sH49SW*Ad+yxq{Lco3=i4KHDtsy`
    z5?y7SAizgUJpWn1b*XUxt}4Fz=+UDzrm3kZ&HCfQ;jfZqqZ1^oy8>J$zE(FFUg-&~
    zQrdAzEFm$mA=%WoM_|+Y%L_lE`b*C0n46m;082(w2kf@^9Xp@?N1awmnft4>H1P+A
    zHRi2D%onxDHl>9zN%#L=FScZEuDYy9;=26
    zx$#pP2}wyw%5OBE1P8l)SanFl0=RYu0N=>$1&RNolG@o7}E@|7l
    zhW1p($?oxl_x@ko=wIT`6i5ax#ozZ_#&tia=j*7}HjK_JKIrH;RpPf>p6UA1l@XN}
    z@dUXosWN|X`tT_|6Fqmd^NGwv-7BZb0c_>z%HTN-Ev>b*ZGwUvQg)Zr)XKA`2e8Vu
    z|MJf7`Cd&n*&8Y=m+mUyJYN3r@YWsa-(RY|Iw&*QXkGbQ=||(+(RGH-@kZ}&rkFJZ
    zxy?=e9q`{$JlHt*_SQrDKlqX!nxul%h!JE>SE@S{yEWLq0*nBR=e>1J_MR-e?RO2n4wUf8@%2zx2=*lw?-$ZXECL&ROcPJLx
    zlvC25QA0tBj+d@nk~{I?A92y$*|m@Nn${c(5Vsm=e2XG|uDdkQX`)Z!?5F$Ju3h_V
    zXxnI2U^YiT;=>o}>M%b$8Jjcri@j_EQZt_T!$1_@^UD`fF)iEjI4m;bQRe7hvR$U9
    zM!U-ZJwD#qAl774X`a!aQr)x<0HVD+-)miMjxt`iDUsbGH~t?0hg5ff^~lJGR?JDq
    zT7CPh*@=c%hrF`^S`renN9UgL2RXd_II;csYiVGDH$hiS4ivvU;6-CvXW(EoKQ|j0
    z(1?_7lSv@oDSy*UC(Dw54n^7uxZN`SOs!24oToum!InaGqlvz+z9%mq8K1yf)CLC^mRo$Sa}
    z*rdL4-d+tUs&&gsPY&OhJ2`^2UY+s#QT+K0ZxRZLr*+Dr|jh0b5@$I-bMa9KZt?mpavSX!EgC{$_kel66<-l-HIZ*Nj
    z^?X^7e(3Bg@BPboZ2Icr_XW<3$GQm%3Q7TpCnlQeM2Z3fll{8dr%2t~xThktSnCnN
    z+j}w*z9B&lBZzISY~kq4Oy{l=KOXvD*O!{bdz=-O!0V_q>?2cYBj7@Std`{>nW~|)
    zKyfR1#=e)I5maQv`><sXl=+Jds<{0+e&WOlrWa9BmvBJ`4jjN1v8avF
    z7c33fbFt#l_Tv$gLs*<0`ssVb#8OYQlnX3n;o_t@%nTR2QS#R^FyNxqC0(oxIpPy^
    zr8hh?Gm}+W+{iz3Cq8Ra6Z;_FD^G>?mtH&A_nK5$m&u5k)hD3~avRQH$Fc7c`o#XJ
    z?qI{I5`3r#KY#brGxx$P-cJwaaMOOyP3Fw&XZ$hQ-!S=sRmFLvkbe*u7(pW@A`+XH
    zmKGHyBqnD6;npg=<=2BEWRVWXVv*?7blV^M&X+v(WaW27m@Z!{^r@_jG$Jbdr@mFq
    zz0!NMOnd?x_j7=CZ}^*m)D~BS!Az#(s8*CtIYK8$#wp0A;z)mevSOJj-j$M)g;t49
    zwflO`S8>PNv!mU|p6v<$IAJ*3tDU^zrFN_Vn%W3!wEq;jSLF_qt>iUfyo<zrS++*E9d0vMaxd6u`mNo(l5b=@Bm&
    z=}Cko0k%AAAjyBto1y(tmp23JRq?$uEe8tECR{y4U%I9Bu=iSF-Lsoo-NloQ%Qsi@
    z%60iMomwmR>4So?#-akm@I<|7?3YgwCf8E@#b^Mc_ym)mZp->P9HbBXunB6NP5m9ifIz2VoRoATHu>tp}4J#Q;Q*!{IBY3x!iop>F2m|@`sd-T74{n}7)
    zSCNZ#IiB$wQORvV&$rt111|Mp;kPs1GW$;Dx+C*9Ha0eAIT50PmzP(w^w?}>t$~x~
    zT-h>YBrp+;_AM?bR1L3{{9PuSCIhTX9Z@~@?KZ!7u_w9KU^;8iMMP?PzGZBuMRVru
    zQtc=mtMO{>!MEK(pbw<_lPaJ8b)8Q+Kxg&^tA9_la?)9xE`ST%T_$afOgETNyaT+}_b)Hr#JlQ4SO+je2?6!X8CE)Ym{4
    zKeI_*BH2H2o6OK`JhqaZ9ji2)|5eM%ue^e1k7KsjOdAUbiB$Zi*3fMhL=;Gt{_r)qllT>+A%XwtCiXQ&G*
    zJ2*DfK!+~B3-_c3(u!t9PNrFcMgs-7f@h}R!tF;(j$5ZI_DY%C+-QS&Ml@osT5%;$
    zqviXR+WNMd2Q&f6B|7fx4gv{C&EpStPMBf&Mam9Mo
    zx50o@Z>|``pFZH~I@jf_mm4Nc6)^
    z3uSns>bOd%YtT+3+T&LMC>zAgPj*VbJgWJ)@-CHz9mM6(dR61n7%0lx*W|L(ahDAo
    z+HPo8+@uRsHnl2*Ul*F
    znz0dR{Yf9fWKQM8Pe1m+gzFGI}u!byd}$9y#3baV6BrUPlkrJYdvDuY`m(T
    z?>gPTj;0fL>Mye^4ZZc*#bCp`OZ<*&ke@Mcx0y45bzpTb3dhdwKpV!w<2*mz5<6_%
    zYwLoo1D^e{n90g<*N$F!(xA${I$oAVL(6r-zfvpKKtJ>xL4GAuE#uVtXc=x&_s`Fa
    z){muBCu>duPt9TloB+Rp@AS&+&`?w=OGSU2K4fBnt=pENZD2FdC_z`%(n0i
    z|4zx^55kx2k=(n#CTZfbwKcfJ@ozpV1Bqq(ZPVk5uFwTgku=Vne{h?D0HoiaH9R*x
    z$Zc0=gvMY1lpWxF6$sv}iTcR6xH!#7tv0EBpTe?$h=s8d!|nNqjd0gJ$^Hj7KM0$9
    z?sp~IYJ7p8JLPm-M+ZzXH|ak2mB~kEfyk{|Z&?x~BUSZl;EqkTT|S$36aZLVoDq_O
    z>f?gsn)&U)8H3r=*On~rLOWctt3X5cS^ARm=t-4sY`;raI*4_vYYqttmPEj^duM}h
    z2Um=r)W*w-f$3SOf{_;(@qtJB$ENh9Y%aa3Z@%&)nwp0$PnEZciN_h}F**F~ZuPd}
    zy7)85QaYWgqJErU*YhRrdbpDv^4+X1?!|~33guf*h10!N;W=~TvBky3g4_tnIop~O
    z7owqupwP-re=Y0XQ)C*OWe2WEyHp(D-5P%u2HvJye%x@O>b1|pekNS}eB#rWNBQ61
    zT&XyFvP1ozz--mFYI(4%w^nUAs;DSf?^F0~&~1L&*U%L^v;N{6v-sef-`29>{%wBp
    z__3ye!5p&YE;i1wfhH+>TmhHUNtf|zG2|25TK&nA-DRAP-yVQ^R^s!)`VGuZwglIA
    zjjqf2nGXs;>rFgp@)&G&UxO<>e`jBk-;p3*a|K;)cI@uQvM2YP6*P$)-a9eaGLLST
    zB;<-vMHZ>PIAmZEWN8bx=?0`|&}h%ZEKt*aVe_+a@6SAKeV=_gynGQO=l%L{(i@Rf
    zLK1MJbs0&(NDHWe%Xm01f8vq%V2-Y|u+USinlI&~F#$2GocF(!)6)u)uHv-g1jog`
    z{%_3Pq48qIJ6W^m&ZMW0Sb?4Y-N=n8({+nl<#$9p#pm~4e5ILvEYvPMK+4{HTxyd^
    z=2`G0ZYaM3bBXP$;JzPg8%#B{%%yxRCtZTnU}oaTy{E|=CU2}WSTB0^6S@bzPCBcK
    zwAIYdVPUYN>lu8Z5?W4vIcN7rK1ien-=g($cE2a2@rB
    z#M9cBST=y);jIWrdZQA&yHxxPDzbf(ZLOB{V8{1Y-soy3{4NB2g=Ev$*9XMKJ^!;n
    z1puPMTh>6LsqSTZjaG+gqhoiV?9?}($e8p9mEiqIi%kHfKnE@zcg0*0_p{TJIoKd5
    zG=o~vx|#;sBl1!}-Uw->pqM0NRXlD~N2u|F<3t>|PW6`n>RKn$;QTXG@opG5|V4REKhr
    zzm@#y1@24F&&JB#I=PR=y_bon>^4^;^x;317rM6#$ThB=X=?%Ir%>)YYLOB~DQErt
    zps1INYIkR}RLUY4%GEhvece=Z8K7Hgo^Wd8Nd7v*5K|^R-<>^_r*)gKundS9lzB_!
    z|1y*~gkOv6v{~<$&tfenb#xq%CP8BVV)+9vQGK=N4^DvUOzd)XSyB}>@A3H*w#-eW
    z61+0YNLD&b&4u9}WV|Ls1P|T3DcuEmSkwHlpXj+FE~ma#w6q^F8K_mq%i{6uP1jKx
    zSoiiIALh8u4ge;B2|HF>XHzZKnug|Ho(W=L@P3yoXqF>5XUn}^_aNtk7^CKyr8a5(
    zevb~jnH&&^PlQg40CnlxlppZGZeNg#PqAvYxOd>Ytl$Z-tG@{7v^VGr>KCBqZu$_A
    zLbbIJF5^>L`@AV6uOGFsZUb+-C2hVBfrV*A_V(Km=NVyssaPJe%m&$vKT8@DE)XmUTH%(+b!8=g;p$tREzRBJ!j
    zJWHU!P}_UA5uf0bsM_I6HuBKHj+_OJ42Z5`VpYJVeKH;aRGmsL;!{%9`A5~sm%d&u
    zdbAw{!mRbm;c$yw#K6yXFSHgnS-4$`5tWyVg~LB07w#ID-~1r0>zQdx#z6Y-nA=dB
    zc%e){SWqkKCvt(Y
    zUP&7+4GPr@q?h-G-CaPhjy<8iqWX#ms|7p&?G%x@P)huEgm|tddr*!Y1nEsGU{zob
    z?O7O>-&41^u<(dtKK}THG~lN@5S;rieX`+EdaxiX-sgf$zKn-3oOqk<5um@UyGx_v
    zvqD11+IAFp2V+yaFJb^2c@Ma$Y9VTkOC;?FPHJe_U^!Z_hJG=jg;?HrKyugG7u>Vo
    z56R9?l@;9Cup6NF2l!g-g|I6^~ICy
    zj;m_Z#c@tr_<_yVEO2_3diT;`$bd#m;yigjjbUleu<7>Sc
    zjEBtDtV6Sg!d*)_vq}Bs!Mk}+r~g&QR4J3-eTiakr~%udZCwUzH%qo6JP!?
    zgTe}?+NJd>;{YgmYM!_2*ef&1g+HGCy_=FHqJf`Z9lRT{5aX1+CeM`);F`-gQ=n{NXBEu26a`{xcud4JZG^u
    z*&pT46x{2_A7{xur?7kC#sP+1(CrN?&%3eQ0{)6Bc^xptzr7XRWlwi?y!JP*Z@+RM
    z>W0M+9=yo?;7cAZ)(l%j-dIM_G}t`*(;LQ^h%Gq^LA>t(POh>((a+$&+tz
    zSD{JE5=ka@|Mlt~*C${?#OOOMTXV4*ntS$HG|zmIXMySDPzy3Okg!?TNY%1?MNVcR
    zE~GxBD0{6HHmDoYS-L!IX7Bxe`KHD92oT?Yo!6(ZJ~$K35h@L2c4X3IPh~eUsZ#&5
    zVST_!XhlB&6Ch)BfB={uDHa(W9bLYBITkzt&@trP!n^C**>yDSyn1+Vvzt0_7!Mse
    zU7$bwNmcn^!v9RdAnE7QI28;J_EBW>T(RL?g6)r*WH14VF9{)L43SkbWB00C$H9o5
    zkPC3;lsi1F;Ql(=e9@u6C#R~8TUl9ce(>q@=je)N;2vt;NN2H_wOQ{f0Z`f(0&QzR
    z^ZWVuB)ZQ2x)AJQmq-5-VCmFgbJlT{!(VUnplu?wd2c_7#JY^6caOw|9Pab=1PXx`
    zJKCYJbNQ`D-V97VK}^Zz_gi}QS>Q7Lg!!bT8uSGk{61z}J2N_8qo}ATW}OrlH-v1r
    zecQHeLPE!qzkT}_00tQ?grBtI2&qxnxL265+j6xUK$h>HoZEGMNr}|p=0yc|uZNd%
    z!s=s~=`dWMY#JFA2al93lM%pEV@Wb%AEcA~_yqRx<&kfN!Ei)qv6Lg10uX9jwBXGU
    zj$-q-D`LzTycsV(Y%V+vu>u5NqWj?~argTJo~nw~78M@-^74OhDn1eVigG)F77>-b
    zdM-laR~+)IK+k*deR)q7-y2K--tag&&x+Ln+|ch(j>Jtxqh5de;qyO5Pi%Th*hZ#z
    z3hqfq^>X7+=if#R*0NCH^I?&l8M?WWg8+gz%u=?!V}<;|=+ZKZUKz+jEThs2?rjva
    z?jP%^tc}(a1Lp^&pr}8b@fC=o(7E4neu#bXJ%VPFDwU_vV(xR(og8TTQPscd5a%vb
    zV{Jp1aR6E6t*gU70ww_DptoPip5$kG;q$X`6fc3o{Qv^N3AB5fK)iOZ7vx{Y?RgVC*Ls}=z^iQk^d9uvknj#3emEhtW4HZ>3WpcSOd^A|2m4z{?V!d?N_L}T()czK~L
    z2t~&R*!U*%#&jg8bh~C;K58B@g(2q?G3N8a_gc%wrkON0*dj|G!gc+IlBo~UsS-z?W|g!fcT-(w6t6niZD>MyvG9W90J`8f^bW90&ahj
    zdD9hSr||B?n^bkDdlTQwUj;1`=c=&mMFr@r8W7t^jVsshY;E@vVdhCPE^mj3ryqCf
    z9f>0Ze>3XB{A|noMw&SGTcxT9zUA4&@UtO7+OSncWiLA9!MqWstw;5q9jKGadkx%X
    z$I-U{ejZ}Rt^=Xtgj*gcWzQvX`K*fYc!$jB_vaO6h$`V-<*>_smjJmx~F-NC=RNJ%md-H7fm;v>~?)
    zP>K$5IiCIeY;Qx@8vMpR`gp2)2bR7cM0=U*MBeEp$OO1B2|9
    z0^|znuB9*G)CQXi#WCm9yK8#pZ#$n~XFj_3$)iV&Xj>VUuBZbwB9b*$fqaR2X{IWG
    zm&tuj>Dn%UwVKWsaUBL3Ka0K>^v@WN2Pf1G8WSpRI(!ez(nGmiGFMJof8Gm%|A>7u
    zUQ5{j~#$qBkC-?67V(VrIeW9{7P7lNDV;tFw)0^=k|p6)b4Y``19){lh(NJfHt4`$Ra
    zhO~++3OpsuxW%eqquWGcaNy;l?S!g7&hh|Z=pOdlM|E{D>G7fh
    zKyC=n`>fhOVDqJna0K}HSd)E^mmoKrgUEb#d*S8=;O622cH@?V#|@sJ=_Zm#68~yX
    z;#noQ{XP!}4kh~s7z1!d8C%3mlJ0>WQ=M
    zO<5+NPF}c&X1<#|zT|Jk|Ni$6+Np2C@LRdry%x>R&5rBN#knJ+p0l(`S+YQUtc-?(
    z#c#*e{=0e_c%J)rNDz3syr8f!7`zQa&k?f&>R(Hl#PL^SV^GHukxm!l+?D!eS6N=V
    z(D;&E&3}Z?$#w|r&`OSdQD`-ZI8OqvAHoiTOb-^~*FQ{p7f5AQJ(yPtK^4yw6a#qTEzg5UiD^XIZ<%fLUxBO9`@u@S~CB;?yo4)eo&
    zK7^QrRdu)inM&SPvLd>UXhLXAsPJ`wBaJBW8fRcvj|GWI2z_`cz%yg?mEot25ptAJA)D8bYdS62E
    zYvsUn?1^K(Hy7wD6Mhj93sA=(Ok2QWWD>_lkPP^@`B}9?8#Pr`EkSX(Lfrwk@%J|{
    zgCa3EJME2R2j4h=HM;q-ocZY--zQIqsK&@?nTzBBqnrPZ-{jfdCcB1y(1$?)sstnF
    zE@BiyN-7eJEwNEk@?E%)l)exjWy#*KS2d6gW>t-h+TbgPur$@_%aJbh_xhyt5$YMJ
    z1VHdTyLVT2w+9tHPfgr`;hcr_i93f(zMSVIv@_)JSXUbmrfl8!S1p+Q>kh1l1a4*XmWUkc<5j|A-i$m-umrG?D^fDw93&}Koa
    zhz2(KF@4w`NI;k}0bwqitB9eLxV4zXE4Co=9vt2?^t{uQ!$Iz_H{f_kycp}%!=YB2
    zpDs}-Dp*9fQK8pUE#o$_T80#$A>eTRl6jMRb%hZS&c(jZ@PAzlU^>6(!H5-wr-}8&
    z6EqsN#K}ap3_0ZJ_;%YGlW^E+{>4sUT+hlQC}`@^z_MFM&Pzy7-P~f~7Vb#`v^?gU
    zJ8|$VK?na4x#Pdy^FQyh=FXcAmcEaSV9r_;%eqP7^&d<=?%PC-qZz`&*p><0J{q~1
    z)@hZk!p2=b5fSZ@*}R{5U4OFjbGCd*Yc?j)ZDBh3ixjK`UM7bWZQH$dv-KyNY}wMu
    zK!1@%cfQ^CSvfeZolvUl6uq%j(tjplqMqvbd;Di)A@tJ}|Mo30z(Vv55bD%oHs)}Y>oQ$GK4}Z`RdJ;8C
    zGAUAX-MLXTC`7a1y+EpQ-*H>XRvoYx$l}YFEu%5P`Jn^AjXevu0ZNlS_m%H2oXj)u
    zD-c#@=xjYxkZZxv4E^_Z}luEZBbcHaOda;s^PP{E-as~~gc-PZ2
    z@FVzyy)~(hpyrL&8qNcQW>);gzVA|6nKH>uheOjd7z>Ci08ar9?*qxT029GZ5T=%J
    z4)~Hl^=~~=fO?4Mhh5Cv87ft>S;M}yUiqivk1I=bqL*e~z=ws;Kxq8QLnPwJ+qdl#
    z@EH`_6HP0{NpnEWLmy%Q4)v@NDQ@FG*3o|c?C_raVzFk%#^T#KzH1AZd62)~)8S?o&qJ3>Sj~QE>&pQaLfb0IKn{Ak#0g
    zhQa>+)9)C$(MFvC=?|w5+$?pi@2;a&N-5s5ZtYr9tu>3$E&ATn(@m+d^SHkn%uu*=
    zfT!G^(90xw`V=psKT`QaJg&OQ{Z(AtPWpWxpX1@uY7ZT3?Ums+ft&G#x{)+j85xBd
    z>#Y`4BMqH{w1KMXPPCaiLN!1Yz#`EYb%QDd_+3q8;_**F@BQ$*98aFPv%Az79jI-Y
    z@PQ)zPoA%+yW@Jri#8JNO@n5tKK7nr_16t>q^tQ8#6t^CuP{LZIm^U>2y
    zzPbko0dWCC`cA@)@jJPd>&3$d4~8w~CoDj6p>5ED28>4Rqc`_FN;wzWVA-Ehgm8Vn
    zBP?T4L6A@W!-o%hxxuhX5D^o1hhVAsnX-98UbKgj=pfbubMpbHYfrYp^_vd(l8VYi
    zl=e3jyVTq!SQsugi3_W_kfOpjzS+iY^yAP_TwkQBlNQIn?@Y{Kx#@
    zc95XxA8R!AK;xZ&UDy!TvT9$DQZA6PG=xQjgc{?|9J0Onh_>UKg2un~`KvACaw2{#
    zDu5-)aC<9Es>j0&a)%Ml`^T$}qcO;t=@dar{LG=|k}Xz`k3IzYeg3B!0~YS0sy)L!
    zFaz@)KnCcz1!UgaqBY~8r-7b{3eH#|hpaw&(&&
    z=)7Vjo5V!%U^-)*9;8zi9^yb}6YC&C&+ZG#Ol?rz8|54Ba)|98{=ka1#^w794?ACT
    zIu%}3A8g(cxZ5H%<_0nbZ&K6k`gO0jk;_YdgEhta5Zf?VSuzC(u7^rHapEiX!jm2P
    zSHK6`_f~B`F$(?K5g1W0g($e7b<3njOTYrG=|B3i9zq0-3EnYunPM;}ER1oI#{OHO
    zPhw)CNaj#py_6n4?)lQwwo|)4fj)c-?bp7qt{gZBf|!tDwlgLP(7$J3qrn^>97RMI
    ztSthBS8)I+nb1M@9??3E2nJASN7sNgTDNA+qsNc;Uaa_LpEIowOdBa%1!ARs{z%F;
    z7|JJ^wh!yivZy=k`5(5)BY%Ir=|GxrScVe>9;hZ{U%>lcf@uZVNRR=@;N!kaI_SVB
    z8ZE)xRrj^SyC;Qoi8k;-aBz-Q$4B^1Y$1Z-wwhzh-t}O?SFCy{nRRUoEvnVMca&cW
    z7A|*0F%|#!Q3O5#~IV{a#Pijl&L^Pn_tw@b%sWO?=eJTW_^2TaH~rfP>VKEp@Xt`<|N8G3
    zV#}LGp>WBPa{)-^{?DC0VqMc2hZs^2twwqD8_UVfT{(kFgEm4OWb!a*@|u}e95?{OM)JJRCAD9P
    zx&y1!+cSP~|62iGXlVV_u)0Z419fT;W-`1fhOO>!hz(#|!v&(cieyg+Hpd~dB~d!g^_l;_6~bW
    zlh=;hUS6!x0su@APajr2tf(KLs&CHs$yeC)OkD!Q;4ce1DYPQ~#hi7d1JKb~Py19@
    z7_Jet?MSBX`xK}0e27}MD9_r$!Fx@$+WCCzHL_ElNYSf^#b}xL`OQ?d?WA*G)p?o1
    zQ_cE9vUlV--}9T~%~VyXUir`VTvQLw1SIC6f9Oy)sY~J0uUfLfEJqnRX?9_H^(hmj
    zs?+^US>b6+n|*E=IIs>VqrW<`c862r=>1#wp`g*J?ZXZi!>eOBpNoo$t`3?=FKD>g$e}Q;=
    zEi&Li>8Usekgiz_`4|&G8iAuP?-hUgL|Q7Q7fDG~IolbdN=iyT=%yf(nKz^eH@&|)
    zX55%I{1@ZKHMF`EGd&2s=^hL{4*~-Ne>RjsDcb5XeHYr64a=el&-Cdvk3Wd`!2sYA
    zI`UyKKz6;Q#v3yw40lo}z4y{NER!r+_S1*ZoM{Lc!gNmI6zxg~
    zDmneNk;UGB8KBj|bXYpr`-6AcZNGmZBX=03xKtDM71D`+TE^Bk@S|9E43IT=rBp{v
    zT*qA8j}euJy^7|dy6WnuebktB3Y885ei{A!PfQ+O`um?b(*siecLu~Ri5AU848*iD
    zkv`24vK9$%P+^#AXvB=xB8H{p%!g`Eu86OQ6|zFM3V{aiR`FlW{-YuZaQ-{X*=lfV{{0{Hr`7r
    zUSlYNOu541{A3_ruKp5&ZLQZ5?LRgxJMHRq{WeKoiKUW)3!Nw?RyUJKbb!WUo;}q?
    z&4Vk->itTw5GV2bT;z^J+GnMuA=N2k#>9q&vEmG9LkI&WnA*^!!{&JoQ5(nq+YI>c
    zS~BD+r?<rNTDnmOR>Jh#?4w_1L#?Bfx-`0Z-9Ew<
    zBK%;D7zG=TYzhj5HQCuD?gE^7{u0*bU0q#qb0Guwy}QmxSR}TVp+8YE;Wfn_|BMzH
    zhn0|F0y202iHhyV)|Md)1SHsY6fCeH4LNS}-!!+pJz=4yrq=%BXcnb!`8e^I*?2Ef
    z=i~DB=9CyA6GS*r1i1i?Jy6I=aBqA~ypRfZ2tKRAXXwtB@mxZi2Cjmb)4x1_2cm$?
    zFT;Kfw_#bJRO$h*weYO#;ikb|k5gYPF~q~$K&CA1(f5HMyM6mM+!fh)YoLd0h>Ao(
    z0~%np1vvrt#Vn?vt437Z8MOK{r&{34#E=k%n$LnjArt}L_#v-iGrlzXY~J=eNR_y|
    zs3?tz2qLdlf}24Wk>RI!ov0eOeM32}Lk!Nib_54;$XBU2H$b2Uv*!%P
    z4tE4IZiJJGI*~|>=fm3BA4()gK5Zd51=xEZx>4VpnRB|OtL!d<6d`^V$QS6UfklX|
    z0;4jnxV5-7Jalraz?XE$!j|`;+ZhTEM%T$zqcCy7rCn&^Ddvoe07uY(zku0*^#JDg
    zOgG(=6Kvl;H9EZpAge>*uMgy{gi2B-9Bwt8i$})?SZw69BeXkP+MJH6w}IN
    z2njR!s8z8#Z^OdA6Y(3KsS40C4$@@$1_Btlb})Nx@MqMgm~nU)1jG9Vm6c3POqJBa
    zg-i4qn0nrOu#j2qAJviI7GJ}vUtbOvM5G1z>f4mo$srzY#kB=~d_9
    z;Uz90uY8i`y$dG$H{_XD<@wKJj|%MA!3B3vtm}9rAQ6>z{(KjH3%g&A45S
    zUn6aoS_7U8_;>OKXDgq{ss}v}_)mlhoadQ|AsaZnRMy`SHzAfUHn>+)I?D8`RZq
    zoiW?q7H$qH&UPIIH7>cVC8n7R)g9nAyMn2==tC9ap|G2KMZt~9I9{pt9
    z_N5;q1a7uw2rfD-5`45z8@VbGpN;A`f+3;ZKA_&rkIs7ZjrmyuzCX3Bu>u80~
    z;9v!%>}PTKA~4>inl(%y90qG+TTrgyjk%xqAh(%ZS5M^|ZGj_~M0AID#jE;m#3l34
    zQ7qq_ZUguc)KtvGm{9BWqn#F*JL85S0GqAvJ0?A_@w)T$%2?_AL%RL`AU-US`Qz(iUrqhQv0
    z2*MZQ`i9--x9;EsJB*CVC1ux#rO&V*%wDIDOKNaj6SmiN!BBzv3xb*>{7=O9P7XtXx&R&+b1`P+FY__#
    zaNKtD(3$Ey{~YX0ls-})$?0MksCa?jz>t7r*(~bf+AvD@P(|Mnke0ZE;j;d4T^BgO
    z?(^PSGJ}qw!$}s8I5ZEx!bX*aBmDI-KT()d(TjquK;Qx6AU^g%fvj1|vbP)yg^6tk
    zcpb=)^y<`L_^r?3&)ZL7Td
    zNsWfsNruFI{QaGf^+Ja3Q0$K6zH{xwF#JXI%1{*{g1$w_qOjq268r&{c>xmE1WiNk
    zN0rLz$^w9X4ud7Io^HC$MI$34q(QjYcR~GxC{Q)i8fTBa=Z2|XyB{^eSQ1<QWN|VQ}{GEnU7ns&Y?^YTMBCI73iNtK6u8$Fj3#^;%*4s4jfD-^~tOQ
    zO3Zr}S!cMe(B;P@8_9nLts;xa()gZV5h
    zER=u^h0MAH!>sF6-a`f#5t3`ytm(V#d))nzSE$``Ns9aIN2E}IQ8K7)!}5p8SzJ6|
    z4AMDU@MZ#hQ7btCR>;UGd%@ECv<1eC
    z91@OrbIB0RcA$Jw$Q@`2r)rn3Sbxe|VS)um9hjl>AQKQs=+|L}{e+s19Z-gO7)aFv
    zFYt=rb1I(_85hnK`KRJIKfcYsDL*hKA?~(K%%6nyGx^IIG#)QAxP@lo8IL@6xnfCi
    zcTvb)l)I=OvyF#cW$@il9@cO@?i%Jg>yjt^M_huQ_Z(<8`{7N*uHVUvjh4{NbPk9
    z5aOG~_C`))`_b3732iMrTksUQ;=@3XVKT-A+lgq7h(OJ<&VqYLjVb}+!-!j=apKF9
    zz88K@Fg9;9q}IW=#_Cnj(Zj_+33-=$m4R%dJ9qA&g&-~fE^kDWBeo?VDt0CYlEUk^
    z4ol4wcYF&Bz+{wS%mjTXv5AzQ{A7m}O$V%r$Nb
    z343+VL2Rvq_c+OsPAF1nhUa+bVtEeIuJEYyRoo>X4l2@zUnLvIJ|U%U
    zp#3DrRt`Jvf$B?TbZ02T)_a)7OqQ=Oj}$UB2aI9&C1{THNvLN~f8l5ZC{A89*Y^t7!vDDADCB`qvZtFOv~VbVNA3mt-_4|2ppT7zTfjNLOy1s`J&q0vcVO
    z39JS?sG9TV&nHN)^=g8=4`Nrb=Ie5|*&l}TOz_7d6AKDH0ogc=c|8^$9I){mgvcN>
    zGey;!>^pHBP#T0rnyHOoJ3BkO1nDhXw!~{~=JM|D?Cg)30#~MHo9GE(A1Ku9AptlM>alB^ELe_*wyt0V1`-@$e4cEoy9cYH{u6HNl3hG>600m`
    z>x6aJ(0+nSODNW6oxZulFgr6OBm}LBtceCTCARd+42ek?1;3T8q-@ehw&&DAB#s>P
    zZkZ>?P|Xh7pXeuZ(%_VU_#?6(rRkmJJ|ayIjrfhyk=JCB^pj0A>t=NyerOUy(4mDG
    zs0y$2W+%QH5PB1q$gfF>kJh*|6hq9Ih;^Hdl-$dI>}g!_h|8~?RSJjWGe%&KD&NYzJA`;GLUMaIv
    zdI9Fy#JAH^cqj0Bx<`uVI3FALC-riIt*Lpir(ee8>ujAG4&w^LPB#*p{1k=h5|ZpX
    z?n$jqg*Q9ohC72h!(o)l)A|ST35=MqDV7A%lWxDYW#Lp^%y5KN58to^EY()h!~j}=
    zLyXyJ{(DVFRybj6q04)0aJ!%bQ0XWF%2QaH%+id9La+h32uf%Wok~yhMo!A}F0#^c
    zXmOIUm8f}`_J;u}vsf}-rw>3?$vLp`UJ{?(K;wzoB0$eMVyD^FK~8?v)Yd1p1X)oq
    zChatfnFzWXY98o3GTry#$%a3X&aYyRVR}ZM3E+6D`R>kgOOQj4@n)bKk%>0ae&XPo
    zbQODk5R-{I{UX^*+-=^r-xegWkeY`}t;8TslO|HciPNcGuwvoBAfc(T$`1n^u;fRj
    zGjEoam5u-SqWwlPG9}VKU?q0A0|a4dle4~ieQp5e5ZWL1=Y0T@@Jo>3hTY<1rh^qz
    z+Y^)*G_sRl^z&Ist!KoUI5;3!2nXW8^8un&i|GY6G3gI+#S^FL2&y-McJ+XCG$umL
    z;#4E>8>8q$?sCaU#_uYCD+LqaL)YhFf1kcZZeurVRugp9&?
    z=0Q%QYrGg@_~-kt~Ab
    zC>Rh>QGy^@5s{p8xc}T(-+P_@{`z&l9;086c8n?&Z#ZY4wbztMJ?J&Z>s43=A7Clm8Y4bqrZCFl=Nvuy3!9
    zXLxV(nX|#Q=O(|pD*5}LTXKEd(pUahK3|Lx))siM?U7qeV9g_*CYkQ+O*YBdS;Eyu
    zcEuO3s+nr;Os
    zCW-(1|NNZ`zwH@a!i?WGdj0*kReTs-lF7!)%Ufo-tNQsyrnI!QhAbx@#ce`DrWv-n
    zPhuB`etNY3TBbweCDy{Z@x~0hx)WZ~H`mGZK2u86OID;L>Zi11yBsGkycH5smw#r2
    zwPd)X0>4D%HdIAFc(Acr+uxyN-T&cr{X1{x|K{7ighuXhkemJ)T`4!w#HJyuHItQO
    z`257TR{^e_ALfQDL}Wbro1R-&Qk5>PS+mBz*^#V#G`mWhL6PrVg-DS}Y?h!&_TZcK
    zPJ+V1%+z$JR^R#AsgcggsGY~(9F}NKZ*pD^{Y(`DL0_
    zg)RN*;jrCv{T@XE!ovM^DXo)3?L21(i!bx|PCmH6Z1nuZ`=6hpvCKW`>+umE-->s?
    z7#e)ZLLZG)DEM|&Kz@F*UAn;KbCTgT4k3O)K`yCNmS$#V6sm#(9oIfk6JK3&kx?K}
    zuc8@m_g8+ZwLDNgLYj$7()r_qy%&}-B~-6(^_gg9EqQTnahSNBUTW%@ksp`2y=*97
    zBRpE-s~2u}b6wm(vCHIFa#dgBQ(_N?>CH$yd1~F&nB^4Q=QBNeX7rPawntOkoMW&<
    zQ+Dc`YgVUDo#NMD{ViB^3xDCDTufPc`80j1QSrg{#L0l0!NFG4kCwWEv=i^|>z-x$
    zD2cmDtvz_~pdw{zYDzaVHuJGrGCu2lsAy;J^U9}%b1@-i2Ti}1xNnw`$urG!4~<-E
    zX`sIF>xuQEb$7$U!n(Ha`7veck$3CRR#Ca7^?I3=FSJZd!d15<(50&o*bDL6lWrU>
    zzOCogA&o_uZ_`U}W?g32Vj2966GPyFUG%C)0_8aS7w1q~9o1OB*VM%RYs3
    zOj{?@2p^(E5zv2{l;%^Lp!=1+EU=+>86KY4sYdIzpEdE?lw;$)UvxA5u;x@+;0ApD
    zLUi3~#1(Y!UYAlhZQGG&|7S=@Ww?|mZHLXr2hx3ieSlKiJ+YHje{R?2clvTXNG{i7
    zK;Ee(Utz9G!^+BvN<&&mJzmPe&fb?dP>5wt{_F8)$u(Jy7S8lnl$A;SxObdCbIa<0
    zYr?rUHE~*G*QB4UmiFkMeZAJ)zW&)mhsMm#C_i6Q50b?=bNarn4CHj{`RwrS-p<9#
    zneD%%b(~+yc*@mvIScpMnZB&p{yeR^h2VT6cwba<>*4!4bs_FwtU}a;b1bi^Jni_k
    z;WC;di%C8d+wk|Z-T%$>@IT-7?8*k_bpXRFAmnrv$M0<(z_}Z
    z84?*3w{j@%3bk)r^{|-2)upAUcNeKaY_~(hpCm;XQjW6kdHYIHb?cq?VG>SldmkRd
    zt5V(jjJB__?Fw@$EE`?3aYS&*vlSb$E7NUj6TU9LxU7x)|AoS4W$pEweZf+{$t)}e
    z*?dc_|3j$ZKl?HMJE0AE`V0)+R^8u%b|KSq0)i}J$Q1q1hFkuR0;PZDmJ50hY2XXG
    z?f&8S)<;TS_`7ILd^|SpU&9phrllJ^ntpg7Hy`P~Hqq)wpYBOXafw1McJFV>>DMON
    zo6{(onTv6)aQ@Jn_1CUlQ=;@WW<@FZ5v*bT?w(8aVTr!XMn_|x`h}WW;5qbdx)RI8
    z@HXkqdPzk8XkP2w)9mbQ^CI8Qa94FRvzGE;fq~qfr&+DO-lIQ1Wi`7S>wWexGaq@y
    zrcsmaQ~u|67P--n@v)Icsa61oR2rj5{xd)Nyso?BmozJBd4g4+y%%rsc7AtX+zzj}
    zc=6(9mB4ou6^zvHot@^sQyme~ZbsS8UrTxX@R|
    zi&t05V|^cgXmd_s!aJ`RwHNHO!o^W(g+4QSUs_@{qEvW%#N3VtHh7PJvF>~y=25(K
    z?dhK%A6gtgd9tg{+|N`~lR!6F`s@fU*vi+}_t>$oH>pbF^~Zyz{g&WE9~={Fd7*XW
    z$ZEy6m6a)Jav8j1wn8z&>RnYa6{}RZw9d@j=2ZifcX1g4Qez9)m*?JhSJ*Vyvg~$N
    zi&xJ((aNN=ylNM}JhwJKRmNMJr7%{bT^qZi#s<&)9mzFS*{rwKs@=BOXm-uH9Hp|x
    zU!oUm3q7=Z@XE)doK9`qgoV|&tj@{F(ap?4!lOMqJ2l+E)BQ<>r}^2jm+P#b4fwIGI
    z%kJ>`;ZkbN8=Q*f%n(`KjcNxEcAu_YDQ3mNNJ|%{jdw}2iY1NCOFm=0qND69!oO{s
    z&E(#Pi^N)Dt9@e>jdkeMBP`TV(^q`uYkXxE*shYzyf
    zDL)cqLjpqY5JBlSo`~Sbk)Ffdi79%8g30;$XMem4rP6@69fl}nmZ$JODs6slrY`#>
    z@<>qhvnn?=04)IkI^bY$>GxYoR81&{1J$MAE(v3Ry{tT{p3)*FHNLq_7pA!
    z0mDAQnrt!HR!pT~1D*TOa1P0EaVd(h&oy+yzPTj!4`I&*stcCQs
    z0lzxa^T4j&-vapLr@r6uXmTknm}m(L3DGw(F+mj$3zNZqMJBS34k8Kdu|A@JN^@+^
    zy|GS|^joCw0W=&Q86k=1j)uIH8~u~e!KHzSV{6fwaIfxo;KkOFN(BXgR(1is(|rvY
    z)|HWnz$4gnRU_;0ss0WrXmMCeg!6i_-9qerqYm8JTAMwmUo@@jaOo$)KgFz|TUHb=
    zeelU9f1(Y4V2I=Wms;++dZ%6GC*JW$3!}G9PL&Oh?AneOH?IG0Sylg?#rVJT+x~)?
    zwzd4XRK-T)5;?v0s9xLPUQb0lyi@B`9BlWOjF~DucX3ZR=lsMY%UxeyY*xImO0p_?
    z|22+v6fV|S4k05;uN61XaQtSllyz4sE2nPTJqf24Gw(ij&M!&#AN2iLPj!A=nxLD=
    zIj?YWoJp4ZaoJUN0l=EK`C`IL6qv8*c=>S|Q1t&9)USvM8ZlNY!mn_PEnUaN|`
    zR$d$@Hxh8Tr#d(yqQJ)_`}@vR^4DLS66dXbn{KIY`SCt17u!r&6jje4@qMNwod$
    z-MhHujMkZ!iL~c*`hJ#?AMX<-Cvm4w3#Yr$L5lM6S;t1WbBft~d=)>+`wa7DOF(ZtW5n4KKbZOIt<
    zAX9|<1IS6Je}1)GB@ey6aKUI5es$-Wo*jCP`fo?>^!iL!Y}EX8T~VZ@iv{H&*roWQ
    z?*dPx0p4((?Ck8iQVm0;JPIz~UWJE;H*h7ZyEe{RpY6-23sjh&?5GIQZ?(R>!QB%-
    z@S5m1JtHs9-I-Uos?~R<4-f$N9@_0BJNRO86l!FIdqe#2n+Cu3%vB4y?ZKyB*8)@B~8?_i3;TWvpmeZO6A@km^UUa!5(
    zx(rQvjg|_^J|N8~vM;xS?^!@6{AnKlwYXNw>Au+@;n;-7HZnX6)KQ1k=TC`rF8O``
    z{{0}5eg^r?w&Tt3BIRZR_#zFS9WBP2B+gC_y0pKk9k$7cYCIv|4h*O+)$u3pHOsMi
    z`nu?c$*(Ma^-oRn@ROqX=^hq^*+D=B4Y{$JAcc9!jFBJoWZTmKbC0`~qvU-qtz4H@
    zXXcHiESUUu4T!}L1sy*eE*D4Q0UTlMO3otFm~KqJrdO(l>R}eVqh`&h^bY
    zYuUNcYAQ`be##Pvs^#0KOfN@W`F4Sn{9Vp%FIYuizkjn*p!fGt;;+)Me2ja>ke);QhfRzu{Wt@Odm3MO7%F;rRr8z1uq>GbkqrQ{-)
    zlbs7qtC;jm??J;6czJD1Psr+AUO
    zf`)0YFVt)sGt71GlRok8-qqYyimF>yZ&to8Ir>pa>2Q=p&CGgzo&{3n#s};Qv$@Pw
    zBrVuZjTg<2rBG?b7nave+77f7cr?4!v6j3G6-~?+vwV9qDQRFl6*45T4w@vUnRY3%HC?L72*_*-n0uTjN>ZwOf5Ur-2l(CzAj4HOd-6YNyO**$k7
    zk%d4Ef92T7i4}%9r>q>@jSIZof`x$nW=@RLpI-I{nh~cBPIX4rE!b5
    zBX6KU6bY~4GQNo~)=|<0spV4?T|uMtxHl(ml`qQcO;d9S%&c`y{5Chys?huFrCy3z
    zbFy*P9d+q=r`AHGZ2e=$j^PtZJeoE}k4w9Cryngo|N7e6iLUC{>BRWFlOO`SS?1&6)=tXZDf3He4yKEaCRAX4ph&F;&zdg|@e@GdP
    zny>G?P*&5C*q7+Cl4~1_(R3W~n4WzqbJ{*Sr(o=}F*;V^><1(|&jLVZgqEFn{H>xs
    z^*FMXK}U?`E-A0kpI3c2e?6F=4xlcF>9R_GIlJS`cZ!4`1||f*66&dV$`t3!d;XdnA5PN!|RX_ON!K=#GSec
    z-Z-Z4>5xt!e`&l{HwB3iI|ABEay_=MAAP2^Xm+@QN~>0vaky4`QdL+B?9E0CLqkI#
    zc4SW;?XM3!23n{zx$*jT^c00(FRg!?*Plzu-rLPVy=XfB3+Jh8G8S4JJ9VxN}q^@z;1^d@cwzJpgW+wc4Q%f(g
    z@D!fzs(Q&RlLXq9kwb8@v2}j8V^cP|M*;}$-jzoK^zt%GO16~hjneo}iC~
    z%94r%ouoIXGZObGl0R6YCQ`6QQS$purAy2kjAH!?9E7y!0?cwS^a?khaCqbM_2ODm6_EJ!
    zzI+AG!G&s8aaYLBH9h&B@r@`KG)@YW#VkiAB$DkzOx@4S4wa^0p?~#dkZVxhoPJ2Q
    zj@>XonL5B1A$Df?d$;I6uD!Xw?NuLm`4O}G>;V*zFFgT6KzM^?(MpvQ5a^L8ntH#S
    z=d3fLasr$IA;%jt`>JCr(arBfdB!)|2}Dk~fZ(r0)kIs}i-2@@ci+3Wm{e2bn`z*M
    z6cdTexTmg(L!$lpBOjv94wvcbo7RH!Kz{6h_L3P*e<8>sg_+*x=rvohORz*92x9&y
    z{b5tOp15su?igzE1Swkgjt6#qe5mB^J{~C3FNtD=9XT*oXP$CIf^)I8^W)2+k`Kni
    zix(BI<3jPIP{pQ1B{x;=;M=IF@vjkYX@r|YM_l7xf9x`HyR{dG{ka8UGpssBEo80v
    z*`3wTk20D(BI@kFMeF2dV|?XM%rh@kt&Ml=s{H$kW2LqZxdNN@5{`l*B9(1RP!?Ly
    zcCS?TPhX(>Y;5p+q~#|@SE?T^pH^8K*mqrxyygE~W>qt8y9d?pOlL$^rTk1UsuhxH
    z88=;I=FQKXIiq%0kYq&R+@Ft>n58U%
    z9YQ0Ivgx+I7{a|=VpW&vOD`!Y;q>?kk_4!8o#N!r=%8*X4t#{A$q+pQC>Lru#U*!hcuoABsjHAB0kqCO8$IsVfXV&BpX)6dkTKOa-~=nf8{tdGlV_GmgZKx
    zC+%kYB({2At%NfQ6RYB7<_)_gl=bu|$Eu$k9^+!fw{a$eRJ_DW5?NP(nAR8*SA6Lc
    zot!Kib^tOn%E3i|N9_bzVy(SaFzoTNZ%FS#vY*ELPQ7N=7jtTv4Jn$ndSYEeF5&b*
    z%iKf}eQxmUOG2iaKr)MGlUAgVJb>iw0%i4fgC}^LCxrlSbtbOw-ReyB>F2O~8{56c
    zdkw8B(7F`@mNTv2J=?8c)PPnCo`H~C0pczvDfm3s4^o|I$aqj{k-6wVGASlGX`r5f
    z4$#Te`_0w)js5(zStuHxx#vyoWcZ)JSSvS3k0Rw1O?M{}V){}Pd)M#yFqEmO2D=or
    zns(K0d+>%U`zQLFORukUeM`NZKU$?08mWd*i;crSF;Hn{1zs0fp(XEsQ=2C(5{wtKlPDIFf2=nvj(&uNKaysrF
    zs*EX%2Ze_uThtT7GlwlipQ^-_i-HO3NhzAI^qY76704^6u~Bvxy~Mw9p4h6B9-B%-o^~=0TKM^4CYL*(27o6Pkg?bc
    zvO)K-)v%t6&d!#kJp<_XBY|e9Ta+U=Ty}-VS|MfZ@te|}hPz;Y}+c{JU3EE&Z
    z&z#NQz7ug0uygKX!IOKK-p27)$p^u_j*
    zCVq&-pdyG8faf0~WF}yl=*3c^uw7oc?ue%5v)2-ZST1n!J~u>eY>>%>?P83Fq&%A~
    zcvRzPcGBNPEB~c@XtNwU*;+XF%V42^wk^yt_vE$C3xa0(p2jTX$%(CQ9N!u}mU^=K
    zNh^F6uV25On;w&aFP$9U40=Qa++{cu0d9mt@#jDGV7#9c
    zM$=*LH|GYhupUr(cBIm8sv`ux3hX_lODl=)U$u)=A!8w#yrGsI=Tya8=#T%g`C?8O
    z3H`v3UG*b$w&~j$&
    z?_71d~_)U8+7@D(VG5#N8?0gq-lp%3XjjI7Ukjb
    z(!j7Y1EXElb;-sOpeXY5^UE8xS(Jg8)#gaBGH?coEeT|ipKL>qI)k_GE;2@%?m1n*
    zIZ)D~yCxnRgs4^#s#}h%hoQ;(L-;zyKR}|KXd!na(R$VuLBPtAiIVUM8|iat@wfx1su{OC=DneN)$YV`!L05YsdwMgm{$v&R63`!R#^ZiJ9(mvN1}=6l!e!vtvr2M@ehqjuo-UB8(wgH1J|^vn?np3J^}HG?0K;
    zUJwzu89=lO;k+bt<8B))u3?vQ&aYDGli1J%s@X`e(s%O>mFNF7-qj$_F)7#}0+K5x
    zwRJ#=-YWk6ru&%Og?4y!R#L-V-mC*0v`0sQgg1fOs&96Nmv&Qi3yS;HXtjm}C^Hln
    zJeK&L;ykyW-Jo&+o8WXh1%(Er!iD85c{3b7=);
    z2<}mq`xP4j(=8W{4}E)0rCnf|Z?$Xz;3Ulm_O_Ii6qRP`(L5IJ`XLAFL3$ajXyw|m
    zNzfA&AZ*g6e26KieH?`ydrLq_iA38CL!ZhvgH((Cl!rbuCCoBj?W?9cWdc
    z4c2ID)GokWe@>vK$NjIc(aNt1Aqi4xs7`wJUx2!mC=f{v7b-9iw$EbHZz)lbHH)&|
    z99T-C`GG|R$QLDwq2bsDQac|gkKJHi&gHy^@)dj-Fo3dc1+r5$2uv_%k0UEN6;+#E
    z(@E?u;7z=qiK{cx+Yt&C0)cED0=8%$QFD-q-LameorCd&$ZB&FesmAYS45fm%d@CJ
    z8MfOE2o$ZeMAyqC9ePUsa5*f1&;_fp9@zXKB)w54#&{O)Gq*RLD+VEi
    zoo3J>M7m?3lQ24XK|An_^8e5s7Y
    z*OF};Ek&-T=0JpqmLZIjMBM|c2Y?Wc7Z8OJq;lpxqTuZjsugl>I$eDjzQO}O1t^uk
    z$)sKAuTO19YbAlIk6P}qgT#TqP@HjFHrjoVqjP|e1idcba9Y#$_<;ju*!*%>ZxUQp
    zY9bMEH|`2;TBc2~Qrwr%vioB|dKOK-79l0gZ+;{SrA{7H#p-~4lwNK8OAC8I(xj5of`F3O$N38w*t-s?do=Lee
    za>1D>iu{8YN6}|Hi5ggjHptV9eSm$E)@fp3~s#9
    zMxDIL?Feue{2a*34r1*1fq$}g*7F@T#B=gs)u~W&ssFNTTR&@|E7>zA?$mM?fB`@b
    zY+*&)PkY7%4xA|&wJbF9x5o7$3*E~n*JZ?3!<39pJoM0sg;%=*t|+&WuX-4K_wJ9R
    z{)pn=?QQ7+FH$310?4)h%U}H;F^uookdIsd#iIw674^}*;bg4eOqL%wf)Ng3lY3of
    z#N8IIzveSZ(17oxO96$kecLt)H6N7$NY?|ol=yVIzKEav_2P0=Y%x5_^XJc#^3$B_
    z29^-rsKEB^IiNIemwkuLR~jF4s4}%{LC$=j$Bkx$wS;6!kl3j4vKgt!_aNlPP?b&0
    z%;dpdTvvZ~V1dbbpa=MIVc#Z~pARqV`JF@wi{HTMr9OLYfpN;X4V&?IItM`~f{C%1N^dTPlss&U6s-*~0Qn?84>Hu6X@Z3%%Z6)#;{2Pd(wv35$
    z6jv}yWGVpgvmy=fcvcah*%^XUuz^U679A*^@Zdokx|=x=
    zw7cYrw;ulW;Rm;@1`*36MvhsCCc;B3SZF9fb$=aQUF&7`}@lo1vG{Ph;DZpI#(J39=wUmlh`k(iC+=#WIcym
    zidQr8g*y}BItU(PRz>iX*x#CFX55NzKYZZEdZ5IGcb(k*>yBy;qKeE9feyug#HK{Y
    z?*O!q0929ouIa#xH6zmRY8qQ=u)}?EF~8(a~|!Et|Hz6?MA@
    z{cm!U-l+Z4KZE+0UKG0@YEumg7SP{4```?d!j{J`fvBqfxl28x2C()L&l*nu7q_^f
    z5**o9a|8+NNi0LCHPv62;o(UUT2fNdn1jN*wk1ZEIlLX?f8`K3cVJ1dciJL=rT@3g
    zj{GZ@$p3^%mH+v+e;W_Juw(zNnSYSpkT)`zkf7xBqGt)^*7ijuTQ*)@Y1G5OZ+r3l
    z)kjqcS2WLr4`{zuNiVRq<4MU1db!^_nayT@>Iajh=U1-a*K=Xe3cqS26u+x{Wx!jm
    zT@eF8BR-u!)EG8PeYbo$GasDv{Ii+e<>w!^79|zzX1K-IhS*}*q_L28_eJ`HXJfb`
    zyNHxF)-z+(a{fHe09gP(FgfGgQ63D=_h(DN3|cc+SJ%X9cT^q`7%7kd85tQ-e;Uw6
    zgCQA!VsrhqMVT~_%m~gf-OVF<;t)FQBc}-U^g>=Yc5xuD+TH71QfU}TS^(K-8^PY#
    zK!8L|ngHLD+nGra8r32~l$1W;;*)HeIKS8FIRQ3(P^W2MHi8>1osK2#doV^0)B+&Jtha`4Cu$^EqLIM9E4>57eW&=;=$({lqgCeb;
    zk&ml6nH^(g=iouvek(XQxcp@(WuG=b-+9A5VmVxURHyd&FE(ywlEiq85(S-Pa5)=q
    zfWAj3jZIw=)<%BzH|;}crCAkW`diIwSNHTrX*-%@_#3ajwt)ZN95No-J7Ns31?+Y%
    zUaA{3`!`=pMWtl>b<%oHG#z=|bTQoKV4vmARafHHs4sc$f8~^v|IO|I%?(4I`FFi(
    zM%o^W1A!9^1ohlX_&%ExHCCb9<`;h!2@M<%=1$rEZ>#v%ty@PQccQz0Hnaw^g^K_U
    zoC9=1Qo7+@n7B}BOMrOy`P}u+y;6pPFj~#KpvxEmk%z8%9-{eNC4IIM_<5@tiH`Zn
    zQiUHsesDu!3%HG(kM`0N$Oa~uCM6rSPA1tFvSG1(Uy6;F7xzPe$BNp
    z?rHZZ`*c>2CEZ7sbZlSTlQ%ck*ZIb3GIl$@AaxE_GpEMPj@L0&4BI
    zTPoaTm6es{<+amOeKT{97Ov=wkO$F2Wz7vDDSm8z+hgz+Hg#dp(tf
    z{YARJARck7+s$Qe5^Xl1h!p@1&{saH5;a*XXuzsyQ}?tvG7KY8uGpMkzI-8l8P+?i
    zLfQ#Z(|BJaysO6BXH;b$#Q;KxOOuE2Ak*@(H$z@+ksqD41j3uKi)bL41h8Z@)(_wX
    z<`OtSQz9gqtj8
    z^k9Jz77$>hVk(fhV8Nz=MLHd;9&uaT{0wlGxle{gqeP2mbb9(IbYOefd_O(ilEC!G
    zj*YY(@QdLtp6BPw(lm{Xrr~uu6e%kuBQsOND3Vn0ob-nG4PZ5b8!0fu=95JwQ{7WjyG(-jm
    zr-;Y;4FX=B=OpfMk5GKIfaIoEE12Wt{n9QRUAjD*YY(M(1+!{AzKfKcJ>tI;fa?F2
    zjeyv{Q=NWe#!EI1FIkxP`Tjp|{70qxzsch0D>N^z*LY=-dYWa?rk7{W9o^(_$Ut4f
    zw&=*g7q>W(<5K1-pA2VYG*KTbBa>=-im{!$a`5ZE9gJ7Dg)FATM^b861(n+6sKkl?
    z7FbiC>t@&I(U3i!N7JcKvr=0TbYc^$*7k79iAAeAPBBnx*&a%N8}cNEs2uIM4R{Ae
    zI-bsLtGO6{r6I@F`k%jk5wr8|b!7Mc{~)OUCXa!y4Y&AT_#OkYgohazxaG;Y0RQFF
    zM|Z3@gThfnD`-0dXb%|f!T`-j@Q85TbpH79-7j
    zHbiGcePg7GVNeXlA9=VnwW~6>n(F8n7#PeblySr;BzAC9c?%Qid;fXBKD<9G9x|uf
    zT(Ca|bqe~Fz_x8a;b%f|j0DF96@C8k9rXs#j*vtky4bbgqshg%sQ|o@X%TRaP;`z-
    zG@m9uCkhp!2pls+>IH{T2zT85tmFf0@s2&sT0mMF3UgvKqQKN8>WdiGgU0rqo4&|O
    zrs4nL3nkWJMoNkD5JMut<*;83p)hW7e;;?OvEb(;$d8{A2w=Lp{eaN+FU}>S16WWEK>r==2)O+!QQSUnt?AjZT78sfx7uOoguITY
    z;tzM&+2tsy-auuF9kki{+p6G_fTJ9&TEfd&kI1b`h!$3``pq^D9|i!LYLJAnl;Cnq
    z+;b?Z%Jx6L*!~&l%1KFzhj9mK+Zky!+>$HTivJrwPh{2-25U
    zD#sE)If(&&3Y9x3VLgWCH9aB?&gaJU1GLK^J9ZWy-^(q<7D2C6Cso
    zm@9BxyT~&=AhBw7P^qY>XtmsmdcJ=G@m5^>Ul4C3)BDqYu&JoN+8Oy!zd_m7N{Mu5
    zU%!4GEftLw2Bx{NQ!mQjy*rd-)d;2qDsGh=mue8;BhTrNd#N-aP4=~GW4$GBaszP%
    z6wP7!dw*3{EBqLTCs>b0#pP*e9hkj61^!u|Ut{*e)P+SVZVjIwFEHNyae0f#M7dX)y)sFzLVJEuefddEd
    zo|yoACmK>h@HQ`A#JmO}<4^A)EyV;YgMY#IzrH`I?WiAHP$?3s94?4sG5g%x*`85nMp{Ae7XFJC6ALif6b1T-0$jxgICsX;v7cC8K|6py
    z*R?Oiv_19^mII?sr!nhuWpf}L0-D$?c4InU>H0EG^BDX4-q9gsntK{NI}8IoO*tbe
    zzGI0vbA#6my+}TUQLyIVWNN`=e}CavG&jEBptnmQqLy99-pB0n$VghysYcg8cmVWzP(QQz!ER;6R|$3K~2k2fwInaMMZa
    zBQ9k0eZsIe;TNcRd^AB1$Y-uZZ*gc4)3OFRfw17&WvMDeUxGsNA&j1!)xs%t>N{#P
    zJU`zYeu`N$>^@1E;hA
    zdy{Sy=A$PaT*pE{ij3oQoD{?7TLlCXfkn`ZPhmn8PAR=1CLTrds0d#Iv6p`6?1!~$
    z)(9GB_L8fHcLB%SL?+$!d?|sX3ywg@IP+b3xe-hU7)sr>YgeHB^v{K5&O6@_>Hsi=8lKx#n
    za35ZS#mjNl5FJ8NGpf`{Nr$*#2|swh;PW>#GV;O<>`G3tZK9&jfp8jdc1G_wb#h=IAUlVU`-b0IP7yZ;rEQxHEY*uL`aW8k%x&`O_n;XqluQhEgzdzk%D#5*o`r)VY~>tzX|@AtsKWrSX&bkH`Tx%
    zX&%L@HImw^ER;V*_9zTH2ngbb1teNYwLEcxOjm(hX~ttkepy|MuYxNk1Sc2x&XT!4
    zVhaPV0O?Hg&Q{GUm}elT1El13Ct#IX6+u%H4i}a;KHt1VgXE;7UbtF_4;Be49Ald)
    z8p{)$VBkPaM7@y4dl$%GsJ0V0&PhO*gb&~-`9R=f-c4Qa-n}D^G)}R&{QOyne@_i^
    zz#g6HIVi}n9*LH642zxNrp}ND8f7LJV?bTN?Fj})OiX4GHGNNgE!eFTzXer-#3X*y
    zv}fIPO*(e+MOIMfnyJW7ofu3I5fHdm+CHy**r=u?%x}T6b>=^EwSZEQ9c~=|5-7{$TLs{BFmWs4fEe8H|@VAySax5lXVy
    ztQv4r;6S9uz@3;&F-*wawtaiRYm4AWfkh|v8J*^vh1xWFw-|xHOT`YgM`2u;^e4&y
    zxW{ntqf*3^hY*3e~Si)ztL9EqbJ)BaDlQXatccNx0KHZNZue*iAbjT&>yzT!$L<}t*Lw#NOIr*cE<
    z{CL*Yi$EO(h#+Emf;{o$nMhork@rXuwoY(4yaTo06Mx5zaKeQNVxHt`JpE+Y$x3Ly
    zZ|C~GHv-oMt;Z|o_N(zn>^y9YZeNh3I2Flc0zb!xNV&Wt8Ly0|FR;kR>CEFGi8W9{yX!5Wv0Yup(Z|ypQ$BNMoq;5DOLZOEpv9R*RDI-Y5K(z%xIK1PP8f%E-0ntss
    zt)AZJ6pXDwDkA4)z}Xn8BE1rCsyLiKDP@i1e|W)O0;0OKt@GW3!7v=gTm$g$<4(j
    zHA3Z_QG3YFaRDq(3knaBz<|;a#r6=EK-|g#nFI0>3%UX<6CvilXM(upY^(MIWu-t+
    zBi2gzIK44^3w0p}JTS070u2r;SzW&06!ef{jWcY;QTp(zUgT>(jB;VGX5hJ@>%%h+
    z{A1^)shVH{X`v{>9&|`HE(V~Nj4#0HCxM`YtuROHq8Qnz7*Mc=aS0CY_wU~eZQF*x
    z1I8io0R_^|VNjC|3zZK8NNErc9b?nmU1rLVJe05hLAnRMSp%Gb(*axX{BTGSEJJL7
    z8I~xS1Q()svzEZf;sv|KT)i)TnhOP_b@qn@IB;Y=jTM!YqajPUdi60R5f0b}HP8o_
    zjF9cabPRsx3KJ>@Ux_W$0JcFCAiI_d0BAB)3#18O$$pxQXQ5X=fmL)Au@WT-cmD%g~PWMKv7|r_&R_x0dS#!8cXy~VEv@29Y<68
    znwL)kw>RQz&^|dq0D@aVYIg7?{Q6bs@{QK-u4%&DIWrFFz!<2AQTjH3T)bNrc@Y-a
    zPX}3+4#1QS9Eb@>4xERFP8r+@953C_u;^VHez|KS%*bRbLJ~+t*h6ZmYL03_oZ2GJPgMr6tHCwk31)L+7hq%)bN1sYinYCEhRfsywX_%hYdUTe>
    zBYsPy&~12>f=Y>a4~T^?*nP6JJGGR+JNA#^@CceFt_Mu4}bU>t9
    z;^nokA4K1qg9#*rNnW1oB8E8eR8QH+{+$eaI9GB>4q_WsynSncL2qOMXaIN_I+44f
    zp*h%@*b)hcR~L==fk>p!wbJDKfP$*$70a-%kUSS#4
    zckt{%_lArZDagq1_!c|D<_cO%ataoW73UbV0*$aL3Ua6keuGXCiK52cKwge6B@g8S
    zrqCTYw*p!vX)6|niZFt+U5k%9h_CwGMaH#yv+k9`aC0HYAfpao!f6C3ooK8?@}%uR
    zF@u}-$MUcsB;*e+rm`;D+MZ%QQ8Mqv?=
    zl*uY2W=^67o7PU3O>QJ0Qdgw73`;~t(sX4f0hft$?UfpOxW<=zNsR3KiWxgBeJI99
    zMf}>%Enh8i_}-3V1IqW_UQnc9KIG7Af+#Z)FH~BjoOl25J%4)o9wcrS
    z5CE3P(163}!m8+rV~pw`z2;?-5nbr={LO(b@E=@c9sihcA4h!nG&*GI%6j5CN8xaf
    zSE7e+2l;%7LD7?^eZ-C-RLzMKTPu#I)p6&(hkOuR?U!uGMzD2vFD+`|q2BE7O$-lLWBP
    z-jzv)sB~G#!0f&&H>0A8E@uYlt6cx%6ZYakk=GWf#G6Pj-rQS^ys%0!8%2{yi8+~!nfeltu
    zJ4?CP6ekg@6Cd4CeW;ed_!u9DgaK&4T!&6Eg*0I_^nq;1_{y&C>?pNRjCo`!^P$l
    z-UCfO+6X$dhu~-C;$A?FyurC)gUxqI8(HCQpDI
    zo-qD#_o_fl8G41JY#m>Y>>nVv*YD5oFRd6?tnjrr#@$n~{4Z{s6z;@UH|;N)gZjVK
    z?oHx^ecc*ZmQ&mfBkO;Q2445J2{UjyGIUOmeGb@qC6)O1;cEXFv_Tg=AqIB;aCZ%Q
    zhmnJRBs-b@?9DFg85#B%p)^VQqrUNew!%=BC-i~5B!cuXfU}84o*fQvFxp^F0W9^a
    z)v-c^2Xr=Ub^lf$@#-0d618zoS67UutURC+0_tXc$#Kviy5fkB^{(;llC{N=9I&VMszPz@1yn*9yvhJ}i&lmWHYXqtf(!Rwy)6J~o*5w|rI
    z4)+$OI)5!m=-CJ#D4QJ@znMV~J`#`?uo9J_)FSm&w6eRQs9`-|4%&}!_?`hId*PQr
    zaPNfO0!Lq5W_845CjhtyOS7&lp;>%!#+nM3%PX)F#Pb2nd65;Hcn1K-Pd=KkoD_&R-bCymdVI
    zK<-?%a5DcRi#H}%*I=j{NqkEd<6P?Il~f$=L<$z}=IQD0*Z|FBh8-tD)~e%S-!Rs}
    z6&(Uh1ze}n$P`H>j4o7OkNE5BCHiq%j}1r&6r=Hc1)D11_!(RS()%O8YtS)(y+GxJ
    zVU5HAMV7g#%V9$C!m}l$2^lLwF$9c9bdb)3%r9g4^$tp)-U5sxh)~+lyYm7%pfW`yx@upbq{Qb8NKG7q$1Mk5A=9`{U{u4(wOo_f+xd`Tq}d
    Cc=)OS
    
    diff --git a/docs/articles/AMR_files/figure-html/plot 4-1.png b/docs/articles/AMR_files/figure-html/plot 4-1.png
    index eecd78d2ec34e4ed30c72ea0ce96b0f91e2ba7e1..53cfc234f1b99cc94c3f8cf78a7abf90dab72e8b 100644
    GIT binary patch
    delta 51442
    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∾rXgZQC>jb!Y~@7b%Dkf@Kk@+DFx^AES{
    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

    5slYoyNF2z^2Wd!*6 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 delta 51694 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 delta 35281 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 e~A#_0&=;-?DpJ}ziyX|7cCZ@ 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

  • +
  • + + + + Other: benchmarks + +
  • @@ -171,7 +178,7 @@

    How to apply EUCAST rules

    Matthijs S. Berends

    -

    08 January 2019

    +

    11 January 2019

    diff --git a/docs/articles/G_test.html b/docs/articles/G_test.html index 184ca5e6..fb6b4173 100644 --- a/docs/articles/G_test.html +++ b/docs/articles/G_test.html @@ -111,6 +111,13 @@ Use the G-test
  • +
  • + + + + Other: benchmarks + +
  • @@ -171,7 +178,7 @@

    How to use the G-test

    Matthijs S. Berends

    -

    08 January 2019

    +

    11 January 2019

    diff --git a/docs/articles/Predict.html b/docs/articles/Predict.html index 26cd4754..7cbb6fbd 100644 --- a/docs/articles/Predict.html +++ b/docs/articles/Predict.html @@ -111,6 +111,13 @@ Use the G-test
  • +
  • + + + + Other: benchmarks + +
  • @@ -171,7 +178,7 @@

    How to predict antimicrobial resistance

    Matthijs S. Berends

    -

    08 January 2019

    +

    11 January 2019

    diff --git a/docs/articles/ab_property.html b/docs/articles/ab_property.html index e7d88cbe..85478e42 100644 --- a/docs/articles/ab_property.html +++ b/docs/articles/ab_property.html @@ -111,6 +111,13 @@ Use the G-test
  • +
  • + + + + Other: benchmarks + +
  • @@ -171,7 +178,7 @@

    How to get properties of an antibiotic

    Matthijs S. Berends

    -

    08 January 2019

    +

    11 January 2019

    diff --git a/docs/articles/benchmarks.html b/docs/articles/benchmarks.html new file mode 100644 index 00000000..a3249e69 --- /dev/null +++ b/docs/articles/benchmarks.html @@ -0,0 +1,371 @@ + + + + + + + +Benchmarks • AMR (for R) + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    +
    + + + + +

    One of the most important features of this package is the complete microbial taxonomic database, supplied by ITIS (https://www.itis.gov). We created a function as.mo() that transforms any user input value to a valid microbial ID by using AI (Artificial Intelligence) and based on the taxonomic tree of ITIS.

    +

    Using the microbenchmark package, we can review the calculation performance of this function.

    +
    library(microbenchmark)
    +

    In the next test, we try to ‘coerce’ different input values for Staphylococcus aureus. The actual result is the same every time: it returns its MO code B_STPHY_AUR (B stands for Bacteria, the taxonomic kingdom).

    +

    But the calculation time differs a lot. Here, the AI effect can be reviewed best:

    + +

    In the table above, all measurements are shown in milliseconds (thousands of seconds), tested on a quite regular Linux server from 2007 (Core 2 Duo 2.7 GHz, 2 GB DDR2 RAM). A value of 6.9 milliseconds means it will roughly determine 144 input values per second. It case of 39.2 milliseconds, this is only 26 input values per second. The more an input value resembles a full name (like C, D and F), the faster the result will be found. In case of G, the input is already a valid MO code, so it only almost takes no time at all (0.0001 seconds on our server).

    +

    To achieve this speed, the as.mo function also takes into account the prevalence of human pathogenic microorganisms. The downside is of course that less prevalent microorganisms will be determined far less faster. See this example for the ID of Burkholderia nodosa (B_BRKHL_NOD):

    + +

    That takes up to 11 times as much time! A value of 158.4 milliseconds means it can only determine ~6 different input values per second. We can conclude that looking up arbitrary codes of less prevalent microorganisms is the worst way to go, in terms of calculation performance.

    +

    To relieve this pitfall and further improve performance, two important calculations take almost no time at all: repetitive results and already precalculated results.

    +
    +

    +Repetitive results

    +

    Repetitive results mean that unique values are present more than once. Unique values will only be calculated once by as.mo(). We will use mo_fullname() for this test - a helper function that returns the full microbial name (genus, species and possibly subspecies) and uses as.mo() internally.

    + +

    So transforming 500,000 values (!) of 96 unique values only takes 0.12 seconds (120 ms). You only lose time on your unique input values.

    +

    Results of a tenfold - 5,000,000 values:

    + +

    Even the full names of 5 Million values are calculated within a second.

    +
    +
    +

    +Precalculated results

    +

    What about precalculated results? If the input is an already precalculated result of a helper function like mo_fullname(), it almost doesn’t take any time at all (see ‘C’ below):

    + +

    So going from mo_fullname("Staphylococcus aureus") to "Staphylococcus aureus" takes 0.0001 seconds - it doesn’t even start calculating if the result would be the same as the expected resulting value. That goes for all helper functions:

    + +

    Of course, when running mo_phylum("Firmicutes") the function has zero knowledge about the actual microorganism, namely S. aureus. But since the result would be "Firmicutes" too, there is no point in calculating the result. And because this package ‘knows’ all phyla of all known microorganisms (according to ITIS), it can just return the initial value immediately.

    +
    +
    +

    +Results in other languages

    +

    When the system language is non-English and supported by this AMR package, some functions take a little while longer:

    + +

    Currently supported are German, Dutch, Spanish, Italian, French and Portuguese.

    +
    +
    + + + +
    + + + +
    + + + + + diff --git a/docs/articles/freq.html b/docs/articles/freq.html index eb3ca3d8..656b19d0 100644 --- a/docs/articles/freq.html +++ b/docs/articles/freq.html @@ -111,6 +111,13 @@ Use the G-test
  • +
  • + + + + Other: benchmarks + +
  • @@ -171,7 +178,7 @@

    How to create frequency tables

    Matthijs S. Berends

    -

    08 January 2019

    +

    11 January 2019

    diff --git a/docs/articles/index.html b/docs/articles/index.html index 3742304a..329fd1bd 100644 --- a/docs/articles/index.html +++ b/docs/articles/index.html @@ -149,6 +149,13 @@ Use the G-test
  • +
  • + + + + Other: benchmarks + +
  • @@ -220,6 +227,7 @@
  • How to use the *G*-test
  • How to predict antimicrobial resistance
  • How to get properties of an antibiotic
  • +
  • Benchmarks
  • How to create frequency tables
  • How to get properties of a microorganism
  • diff --git a/docs/articles/mo_property.html b/docs/articles/mo_property.html index 4d794a18..8c22946d 100644 --- a/docs/articles/mo_property.html +++ b/docs/articles/mo_property.html @@ -111,6 +111,13 @@ Use the G-test +
  • + + + + Other: benchmarks + +
  • @@ -171,7 +178,7 @@

    How to get properties of a microorganism

    Matthijs S. Berends

    -

    08 January 2019

    +

    11 January 2019

    diff --git a/docs/authors.html b/docs/authors.html index 58b38cd1..eeddf4b3 100644 --- a/docs/authors.html +++ b/docs/authors.html @@ -149,6 +149,13 @@ Use the G-test
  • +
  • + + + + Other: benchmarks + +
  • diff --git a/docs/extra.css b/docs/extra.css index df38f6b5..2c0d74ab 100644 --- a/docs/extra.css +++ b/docs/extra.css @@ -50,6 +50,7 @@ a, a:hover, a:focus { } a[href], a[href]:hover, a[href]:focus, code a[href], code a[href]:hover, code a[href]:focus, +a[href] code, a[href] code:hover, a[href] code:focus, pre a[href], pre a[href]:hover, pre a[href]:focus, a code[href], a code[href]:hover, a code[href]:focus, a pre[href], a pre[href]:hover, a pre[href]:focus { @@ -139,3 +140,9 @@ thead { tbody { border-bottom: 2px solid black; } +table a:not(.btn), .table a:not(.btn) { + text-decoration: inherit; +} +table a:not(.btn):hover, .table a:not(.btn):hover { + text-decoration: underline; +} diff --git a/docs/index.html b/docs/index.html index b5501c45..66eca03e 100644 --- a/docs/index.html +++ b/docs/index.html @@ -113,6 +113,13 @@ Use the G-test
  • +
  • + + + + Other: benchmarks + +
  • @@ -228,7 +235,8 @@ Short introduction

    This package contains the complete microbial taxonomic data (with all nine taxonomic ranks - from kingdom to subspecies) from the publicly available Integrated Taxonomic Information System (ITIS, https://www.itis.gov).

    -

    All (sub)species from the taxonomic kingdoms Bacteria, Fungi and Protozoa are included in this package, as well as all previously accepted names known to ITIS. Furthermore, the responsible authors and year of publication are available. This allows users to use authoritative taxonomic information for their data analysis on any microorganism, not only human pathogens. It also helps to quickly determine the Gram stain of bacteria, since all bacteria are classified into subkingdom Negibacteria or Posibacteria. ITIS is a partnership of U.S., Canadian, and Mexican agencies and taxonomic specialists.

    +

    All (sub)species from the taxonomic kingdoms Bacteria, Fungi and Protozoa are included in this package, as well as all previously accepted names known to ITIS. Furthermore, the responsible authors and year of publication are available. This allows users to use authoritative taxonomic information for their data analysis on any microorganism, not only human pathogens. It also helps to quickly determine the Gram stain of bacteria, since all bacteria are classified into subkingdom Negibacteria or Posibacteria.

    +

    Read more about ITIS in our manual.

    The AMR package basically does four important things:

    1. diff --git a/docs/news/index.html b/docs/news/index.html index 87fcccc4..49aaec0b 100644 --- a/docs/news/index.html +++ b/docs/news/index.html @@ -149,6 +149,13 @@ Use the G-test
    2. +
    3. + + + + Other: benchmarks + +
    4. @@ -229,7 +236,7 @@
    5. Support for dplyr version 0.8.0
    6. -
    7. Function guess_ab to find an antibiotic column in a table
    8. +
    9. Function guess_ab_col to find an antibiotic column in a table
    10. Function mo_failures() to review values that could not be coerced to a valid MO code, using as.mo(). This latter function will now only show a maximum of 25 uncoerced values.
    11. Function mo_renamed() to get a list of all returned values from as.mo() that have had taxonomic renaming
    12. Function age() to calculate the (patients) age in years
    13. diff --git a/docs/pkgdown.yml b/docs/pkgdown.yml index 1f121089..31227eab 100644 --- a/docs/pkgdown.yml +++ b/docs/pkgdown.yml @@ -7,6 +7,7 @@ articles: G_test: G_test.html Predict: Predict.html ab_property: ab_property.html + benchmarks: benchmarks.html freq: freq.html mo_property: mo_property.html urls: diff --git a/docs/reference/AMR-deprecated.html b/docs/reference/AMR-deprecated.html index 2797d1a9..a3ad0f9a 100644 --- a/docs/reference/AMR-deprecated.html +++ b/docs/reference/AMR-deprecated.html @@ -151,6 +151,13 @@ Use the G-test +
    14. + + + + Other: benchmarks + +
    15. diff --git a/docs/reference/AMR.html b/docs/reference/AMR.html index f90f8804..6e5b904b 100644 --- a/docs/reference/AMR.html +++ b/docs/reference/AMR.html @@ -151,6 +151,13 @@ Use the G-test
    16. +
    17. + + + + Other: benchmarks + +
    18. diff --git a/docs/reference/ITIS.html b/docs/reference/ITIS.html index 67f4bc3b..8463d5f7 100644 --- a/docs/reference/ITIS.html +++ b/docs/reference/ITIS.html @@ -151,6 +151,13 @@ Use the G-test
    19. +
    20. + + + + Other: benchmarks + +
    21. diff --git a/docs/reference/ab_property.html b/docs/reference/ab_property.html index 881ae1ec..3b186ce0 100644 --- a/docs/reference/ab_property.html +++ b/docs/reference/ab_property.html @@ -151,6 +151,13 @@ Use the G-test
    22. +
    23. + + + + Other: benchmarks + +
    24. diff --git a/docs/reference/abname.html b/docs/reference/abname.html index 07508cdd..2cb1232f 100644 --- a/docs/reference/abname.html +++ b/docs/reference/abname.html @@ -151,6 +151,13 @@ Use the G-test
    25. +
    26. + + + + Other: benchmarks + +
    27. diff --git a/docs/reference/age.html b/docs/reference/age.html index b8f1053b..f3b014a1 100644 --- a/docs/reference/age.html +++ b/docs/reference/age.html @@ -151,6 +151,13 @@ Use the G-test
    28. +
    29. + + + + Other: benchmarks + +
    30. diff --git a/docs/reference/age_groups.html b/docs/reference/age_groups.html index 2e31aa90..7ab69c23 100644 --- a/docs/reference/age_groups.html +++ b/docs/reference/age_groups.html @@ -151,6 +151,13 @@ Use the G-test
    31. +
    32. + + + + Other: benchmarks + +
    33. @@ -289,11 +296,11 @@ On our website https://msberends.gitla # resistance of ciprofloxacine per age group library(dplyr) septic_patients %>% - mutate(first_isolate = first_isolate(.)) %>% - filter(first_isolate == TRUE, + mutate(first_isolate = first_isolate(.)) %>% + filter(first_isolate == TRUE, mo == as.mo("E. coli")) %>% - group_by(age_group = age_groups(age)) %>% - select(age_group, + group_by(age_group = age_groups(age)) %>% + select(age_group, cipr) %>% ggplot_rsi(x = "age_group") # } diff --git a/docs/reference/antibiotics.html b/docs/reference/antibiotics.html index 032b329e..6fdbc034 100644 --- a/docs/reference/antibiotics.html +++ b/docs/reference/antibiotics.html @@ -151,6 +151,13 @@ Use the G-test
    34. +
    35. + + + + Other: benchmarks + +
    36. diff --git a/docs/reference/as.atc.html b/docs/reference/as.atc.html index 4f7041d3..8b2bbe7f 100644 --- a/docs/reference/as.atc.html +++ b/docs/reference/as.atc.html @@ -151,6 +151,13 @@ Use the G-test
    37. +
    38. + + + + Other: benchmarks + +
    39. diff --git a/docs/reference/as.mic.html b/docs/reference/as.mic.html index 6b1fa77a..29a21aeb 100644 --- a/docs/reference/as.mic.html +++ b/docs/reference/as.mic.html @@ -151,6 +151,13 @@ Use the G-test
    40. +
    41. + + + + Other: benchmarks + +
    42. diff --git a/docs/reference/as.mo.html b/docs/reference/as.mo.html index 40722c4f..e3a5f22d 100644 --- a/docs/reference/as.mo.html +++ b/docs/reference/as.mo.html @@ -151,6 +151,13 @@ Use the G-test
    43. +
    44. + + + + Other: benchmarks + +
    45. @@ -357,16 +364,16 @@ The mo_property functions (like # the select function of tidyverse is also supported: library(dplyr) df$mo <- df %>% - select(microorganism_name) %>% + select(microorganism_name) %>% as.mo() # and can even contain 2 columns, which is convenient for genus/species combinations: df$mo <- df %>% - select(genus, species) %>% + select(genus, species) %>% as.mo() # although this works easier and does the same: df <- df %>% - mutate(mo = as.mo(paste(genus, species))) + mutate(mo = as.mo(paste(genus, species))) # }
    46. +
    47. + + + + Other: benchmarks + +
    48. @@ -270,11 +277,11 @@ On our website https://msberends.gitla # using dplyr's mutate library(dplyr) septic_patients %>% - mutate_at(vars(peni:rifa), as.rsi) + mutate_at(vars(peni:rifa), as.rsi) # fastest way to transform all columns with already valid AB results to class `rsi`: septic_patients %>% - mutate_if(is.rsi.eligible, + mutate_if(is.rsi.eligible, as.rsi) # } diff --git a/docs/reference/atc_property.html b/docs/reference/atc_property.html index 68bb0b71..1850ce54 100644 --- a/docs/reference/atc_property.html +++ b/docs/reference/atc_property.html @@ -151,6 +151,13 @@ Use the G-test
    49. +
    50. + + + + Other: benchmarks + +
    51. diff --git a/docs/reference/count.html b/docs/reference/count.html index be6540b8..0b1af0a6 100644 --- a/docs/reference/count.html +++ b/docs/reference/count.html @@ -152,6 +152,13 @@ count_R and count_IR can be used to count resistant isolates, count_S and count_ Use the G-test
    52. +
    53. + + + + Other: benchmarks + +
    54. @@ -275,7 +282,7 @@ count_R and count_IR can be used to count resistant isolates, count_S and count_

      Details

      These functions are meant to count isolates. Use the portion_* functions to calculate microbial resistance.

      -

      n_rsi is an alias of count_all. They can be used to count all available isolates, i.e. where all input antibiotics have an available result (S, I or R). Their use is equal to n_distinct. Their function is equal to count_S(...) + count_IR(...).

      +

      n_rsi is an alias of count_all. They can be used to count all available isolates, i.e. where all input antibiotics have an available result (S, I or R). Their use is equal to n_distinct. Their function is equal to count_S(...) + count_IR(...).

      count_df takes any variable from data that has an "rsi" class (created with as.rsi) and counts the amounts of R, I and S. The resulting tidy data (see Source) data.frame will have three rows (S/I/R) and a column for each variable with class "rsi".

      Read more on our website!

      @@ -314,13 +321,13 @@ On our website https://msberends.gitla library(dplyr) septic_patients %>% - group_by(hospital_id) %>% - summarise(R = count_R(cipr), + group_by(hospital_id) %>% + summarise(R = count_R(cipr), I = count_I(cipr), S = count_S(cipr), n1 = count_all(cipr), # the actual total; sum of all three n2 = n_rsi(cipr), # same - analogous to n_distinct - total = n()) # NOT the amount of tested isolates! + total = n()) # NOT the amount of tested isolates! # Count co-resistance between amoxicillin/clav acid and gentamicin, # so we can see that combination therapy does a lot more than mono therapy. @@ -338,13 +345,13 @@ On our website https://msberends.gitla # Get portions S/I/R immediately of all rsi columns septic_patients %>% - select(amox, cipr) %>% + select(amox, cipr) %>% count_df(translate = FALSE) # It also supports grouping variables septic_patients %>% - select(hospital_id, amox, cipr) %>% - group_by(hospital_id) %>% + select(hospital_id, amox, cipr) %>% + group_by(hospital_id) %>% count_df(translate = FALSE) # } diff --git a/docs/reference/eucast_rules.html b/docs/reference/eucast_rules.html index 1d287876..062f79e9 100644 --- a/docs/reference/eucast_rules.html +++ b/docs/reference/eucast_rules.html @@ -151,6 +151,13 @@ Use the G-test
    55. +
    56. + + + + Other: benchmarks + +
    57. @@ -222,27 +229,38 @@
      eucast_rules(tbl, col_mo = NULL, info = TRUE,
         rules = c("breakpoints", "expert", "other", "all"), verbose = FALSE,
      -  amcl = guess_ab(), amik = guess_ab(), amox = guess_ab(),
      -  ampi = guess_ab(), azit = guess_ab(), azlo = guess_ab(),
      -  aztr = guess_ab(), cefa = guess_ab(), cfep = guess_ab(),
      -  cfot = guess_ab(), cfox = guess_ab(), cfra = guess_ab(),
      -  cfta = guess_ab(), cftr = guess_ab(), cfur = guess_ab(),
      -  chlo = guess_ab(), cipr = guess_ab(), clar = guess_ab(),
      -  clin = guess_ab(), clox = guess_ab(), coli = guess_ab(),
      -  czol = guess_ab(), dapt = guess_ab(), doxy = guess_ab(),
      -  erta = guess_ab(), eryt = guess_ab(), fosf = guess_ab(),
      -  fusi = guess_ab(), gent = guess_ab(), imip = guess_ab(),
      -  kana = guess_ab(), levo = guess_ab(), linc = guess_ab(),
      -  line = guess_ab(), mero = guess_ab(), mezl = guess_ab(),
      -  mino = guess_ab(), moxi = guess_ab(), nali = guess_ab(),
      -  neom = guess_ab(), neti = guess_ab(), nitr = guess_ab(),
      -  norf = guess_ab(), novo = guess_ab(), oflo = guess_ab(),
      -  oxac = guess_ab(), peni = guess_ab(), pipe = guess_ab(),
      -  pita = guess_ab(), poly = guess_ab(), pris = guess_ab(),
      -  qida = guess_ab(), rifa = guess_ab(), roxi = guess_ab(),
      -  siso = guess_ab(), teic = guess_ab(), tetr = guess_ab(),
      -  tica = guess_ab(), tige = guess_ab(), tobr = guess_ab(),
      -  trim = guess_ab(), trsu = guess_ab(), vanc = guess_ab())
      +  amcl = guess_ab_col(), amik = guess_ab_col(),
      +  amox = guess_ab_col(), ampi = guess_ab_col(),
      +  azit = guess_ab_col(), azlo = guess_ab_col(),
      +  aztr = guess_ab_col(), cefa = guess_ab_col(),
      +  cfep = guess_ab_col(), cfot = guess_ab_col(),
      +  cfox = guess_ab_col(), cfra = guess_ab_col(),
      +  cfta = guess_ab_col(), cftr = guess_ab_col(),
      +  cfur = guess_ab_col(), chlo = guess_ab_col(),
      +  cipr = guess_ab_col(), clar = guess_ab_col(),
      +  clin = guess_ab_col(), clox = guess_ab_col(),
      +  coli = guess_ab_col(), czol = guess_ab_col(),
      +  dapt = guess_ab_col(), doxy = guess_ab_col(),
      +  erta = guess_ab_col(), eryt = guess_ab_col(),
      +  fosf = guess_ab_col(), fusi = guess_ab_col(),
      +  gent = guess_ab_col(), imip = guess_ab_col(),
      +  kana = guess_ab_col(), levo = guess_ab_col(),
      +  linc = guess_ab_col(), line = guess_ab_col(),
      +  mero = guess_ab_col(), mezl = guess_ab_col(),
      +  mino = guess_ab_col(), moxi = guess_ab_col(),
      +  nali = guess_ab_col(), neom = guess_ab_col(),
      +  neti = guess_ab_col(), nitr = guess_ab_col(),
      +  norf = guess_ab_col(), novo = guess_ab_col(),
      +  oflo = guess_ab_col(), oxac = guess_ab_col(),
      +  peni = guess_ab_col(), pipe = guess_ab_col(),
      +  pita = guess_ab_col(), poly = guess_ab_col(),
      +  pris = guess_ab_col(), qida = guess_ab_col(),
      +  rifa = guess_ab_col(), roxi = guess_ab_col(),
      +  siso = guess_ab_col(), teic = guess_ab_col(),
      +  tetr = guess_ab_col(), tica = guess_ab_col(),
      +  tige = guess_ab_col(), tobr = guess_ab_col(),
      +  trim = guess_ab_col(), trsu = guess_ab_col(),
      +  vanc = guess_ab_col())
       
       EUCAST_rules(...)
       
      @@ -300,7 +318,7 @@
           

      Antibiotics

      -

      To define antibiotics column names, leave as it is to determine it automatically with guess_ab or input a text (case-insensitive) or use NULL to skip a column (e.g. tica = NULL). Non-existing columns will anyway be skipped with a warning.

      +

      To define antibiotics column names, leave as it is to determine it automatically with guess_ab_col or input a text (case-insensitive) or use NULL to skip a column (e.g. tica = NULL). Non-existing columns will anyway be skipped with a warning.

      Abbrevations of the column containing antibiotics in the form: abbreviation: generic name (ATC code)

      amcl: amoxicillin+clavulanic acid (J01CR02), amik: amikacin (J01GB06), diff --git a/docs/reference/first_isolate.html b/docs/reference/first_isolate.html index 64174a59..679cb3a7 100644 --- a/docs/reference/first_isolate.html +++ b/docs/reference/first_isolate.html @@ -151,6 +151,13 @@ Use the G-test

    58. +
    59. + + + + Other: benchmarks + +
    60. @@ -361,11 +368,11 @@ On our website https://msberends.gitla library(dplyr) # Filter on first isolates: septic_patients %>% - mutate(first_isolate = first_isolate(., + mutate(first_isolate = first_isolate(., col_date = "date", col_patient_id = "patient_id", col_mo = "mo")) %>% - filter(first_isolate == TRUE) + filter(first_isolate == TRUE) # Which can be shortened to: septic_patients %>% @@ -376,14 +383,14 @@ On our website https://msberends.gitla # Now let's see if first isolates matter: A <- septic_patients %>% - group_by(hospital_id) %>% - summarise(count = n_rsi(gent), # gentamicin availability + group_by(hospital_id) %>% + summarise(count = n_rsi(gent), # gentamicin availability resistance = portion_IR(gent)) # gentamicin resistance B <- septic_patients %>% filter_first_weighted_isolate() %>% # the 1st isolate filter - group_by(hospital_id) %>% - summarise(count = n_rsi(gent), # gentamicin availability + group_by(hospital_id) %>% + summarise(count = n_rsi(gent), # gentamicin availability resistance = portion_IR(gent)) # gentamicin resistance # Have a look at A and B. diff --git a/docs/reference/freq.html b/docs/reference/freq.html index cec7b99f..5d8ea29b 100644 --- a/docs/reference/freq.html +++ b/docs/reference/freq.html @@ -152,6 +152,13 @@ top_freq can be used to get the top/bottom n items of a frequency table, with co Use the G-test
    61. +
    62. + + + + Other: benchmarks + +
    63. @@ -378,34 +385,34 @@ On our website https://msberends.gitla # you could also use `select` or `pull` to get your variables septic_patients %>% - filter(hospital_id == "A") %>% - select(mo) %>% + filter(hospital_id == "A") %>% + select(mo) %>% freq() # multiple selected variables will be pasted together septic_patients %>% left_join_microorganisms %>% - filter(hospital_id == "A") %>% + filter(hospital_id == "A") %>% freq(genus, species) # group a variable and analyse another septic_patients %>% - group_by(hospital_id) %>% + group_by(hospital_id) %>% freq(gender) # get top 10 bugs of hospital A as a vector septic_patients %>% - filter(hospital_id == "A") %>% + filter(hospital_id == "A") %>% freq(mo) %>% top_freq(10) # save frequency table to an object years <- septic_patients %>% - mutate(year = format(date, "%Y")) %>% + mutate(year = format(date, "%Y")) %>% freq(year) @@ -456,11 +463,11 @@ On our website https://msberends.gitla # only get selected columns septic_patients %>% freq(hospital_id) %>% - select(item, percent) + select(item, percent) septic_patients %>% freq(hospital_id) %>% - select(-count, -cum_count) + select(-count, -cum_count) # check differences between frequency tables diff --git a/docs/reference/g.test.html b/docs/reference/g.test.html index 47991858..3d59d670 100644 --- a/docs/reference/g.test.html +++ b/docs/reference/g.test.html @@ -151,6 +151,13 @@ Use the G-test
    64. +
    65. + + + + Other: benchmarks + +
    66. diff --git a/docs/reference/get_locale.html b/docs/reference/get_locale.html index 048803e8..0ae61eab 100644 --- a/docs/reference/get_locale.html +++ b/docs/reference/get_locale.html @@ -151,6 +151,13 @@ Use the G-test
    67. +
    68. + + + + Other: benchmarks + +
    69. diff --git a/docs/reference/ggplot_rsi.html b/docs/reference/ggplot_rsi.html index 3c78957e..b1fad1b3 100644 --- a/docs/reference/ggplot_rsi.html +++ b/docs/reference/ggplot_rsi.html @@ -151,6 +151,13 @@ Use the G-test
    70. +
    71. + + + + Other: benchmarks + +
    72. @@ -327,7 +334,7 @@ On our website https://msberends.gitla library(ggplot2) # get antimicrobial results for drugs against a UTI: -ggplot(septic_patients %>% select(amox, nitr, fosf, trim, cipr)) + +ggplot(septic_patients %>% select(amox, nitr, fosf, trim, cipr)) + geom_rsi() # prettify the plot using some additional functions: @@ -341,17 +348,17 @@ On our website https://msberends.gitla # or better yet, simplify this using the wrapper function - a single command: septic_patients %>% - select(amox, nitr, fosf, trim, cipr) %>% + select(amox, nitr, fosf, trim, cipr) %>% ggplot_rsi() # get only portions and no counts: septic_patients %>% - select(amox, nitr, fosf, trim, cipr) %>% + select(amox, nitr, fosf, trim, cipr) %>% ggplot_rsi(fun = portion_df) # add other ggplot2 parameters as you like: septic_patients %>% - select(amox, nitr, fosf, trim, cipr) %>% + select(amox, nitr, fosf, trim, cipr) %>% ggplot_rsi(width = 0.5, colour = "black", size = 1, @@ -360,25 +367,25 @@ On our website https://msberends.gitla # resistance of ciprofloxacine per age group septic_patients %>% - mutate(first_isolate = first_isolate(.)) %>% - filter(first_isolate == TRUE, + mutate(first_isolate = first_isolate(.)) %>% + filter(first_isolate == TRUE, mo == as.mo("E. coli")) %>% # `age_group` is also a function of this package: - group_by(age_group = age_groups(age)) %>% - select(age_group, + group_by(age_group = age_groups(age)) %>% + select(age_group, cipr) %>% ggplot_rsi(x = "age_group") # }# NOT RUN { # for colourblind mode, use divergent colours from the viridis package: septic_patients %>% - select(amox, nitr, fosf, trim, cipr) %>% + select(amox, nitr, fosf, trim, cipr) %>% ggplot_rsi() + scale_fill_viridis_d() # it also supports groups (don't forget to use the group var on `x` or `facet`): septic_patients %>% - select(hospital_id, amox, nitr, fosf, trim, cipr) %>% - group_by(hospital_id) %>% + select(hospital_id, amox, nitr, fosf, trim, cipr) %>% + group_by(hospital_id) %>% ggplot_rsi(x = hospital_id, facet = Antibiotic, nrow = 1) + @@ -388,22 +395,22 @@ On our website https://msberends.gitla # genuine analysis: check 2 most prevalent microorganisms septic_patients %>% # create new bacterial ID's, with all CoNS under the same group (Becker et al.) - mutate(mo = as.mo(mo, Becker = TRUE)) %>% + mutate(mo = as.mo(mo, Becker = TRUE)) %>% # filter on top three bacterial ID's - filter(mo %in% top_freq(freq(.$mo), 3)) %>% + filter(mo %in% top_freq(freq(.$mo), 3)) %>% # determine first isolates - mutate(first_isolate = first_isolate(., + mutate(first_isolate = first_isolate(., col_date = "date", col_patient_id = "patient_id", col_mo = "mo")) %>% # filter on first isolates - filter(first_isolate == TRUE) %>% + filter(first_isolate == TRUE) %>% # get short MO names (like "E. coli") - mutate(mo = mo_shortname(mo, Becker = TRUE)) %>% + mutate(mo = mo_shortname(mo, Becker = TRUE)) %>% # select this short name and some antiseptic drugs - select(mo, cfur, gent, cipr) %>% + select(mo, cfur, gent, cipr) %>% # group by MO - group_by(mo) %>% + group_by(mo) %>% # plot the thing, putting MOs on the facet ggplot_rsi(x = Antibiotic, facet = mo, diff --git a/docs/reference/guess_ab.html b/docs/reference/guess_ab.html index ced585eb..ddeb079a 100644 --- a/docs/reference/guess_ab.html +++ b/docs/reference/guess_ab.html @@ -151,6 +151,13 @@ Use the G-test
    73. +
    74. + + + + Other: benchmarks + +
    75. diff --git a/docs/reference/guess_ab_col.html b/docs/reference/guess_ab_col.html new file mode 100644 index 00000000..d604a006 --- /dev/null +++ b/docs/reference/guess_ab_col.html @@ -0,0 +1,316 @@ + + + + + + + + +Guess antibiotic column — guess_ab_col • AMR (for R) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
      +
      + + + +
      + +
      +
      + + +
      + +

      This tries to find a column name in a data set based on information from the antibiotics data set. You can look for an antibiotic (trade) of abbreviation and it will search the data for any column containing a name or ATC code of that antibiotic.

      + +
      + +
      guess_ab_col(tbl = NULL, col = NULL, verbose = FALSE)
      + +

      Arguments

      + + + + + + + + + + + + + + +
      tbl

      a data.frame

      col

      a character to look for

      verbose

      a logical to indicate whether additional info should be printed

      + +

      Read more on our website!

      + + +


      +On our website https://msberends.gitlab.io/AMR you can find a omprehensive tutorial about how to conduct AMR analysis and find the complete documentation of all functions, which reads a lot easier than in R.

      + + +

      Examples

      +
      # NOT RUN {
      +df <- data.frame(amox = "S",
      +                 tetr = "R")
      +
      +guess_ab_col(df, "amoxicillin")
      +# [1] "amox"
      +guess_ab_col(df, "J01AA07") # ATC code of Tetracycline
      +# [1] "tetr"
      +
      +guess_ab_col(df, "J01AA07", verbose = TRUE)
      +# using column `tetr` for col "J01AA07"
      +# [1] "tetr"
      +# }
      +
      + +
      + + +
      + + + + + + + + + diff --git a/docs/reference/index.html b/docs/reference/index.html index c298ed40..a85507b4 100644 --- a/docs/reference/index.html +++ b/docs/reference/index.html @@ -149,6 +149,13 @@ Use the G-test
    76. +
    77. + + + + Other: benchmarks + +
    78. @@ -222,7 +229,7 @@

      Background information

      -

      Some pages about our package and its external sources.

      +

      Some pages about our package and its external sources. Be sure to read our How To’s for more information about how to work with functions in this package.

      @@ -278,7 +285,7 @@ -

      guess_ab()

      +

      guess_ab_col()

      Guess antibiotic column

      @@ -478,7 +485,7 @@

      Other

      -

      +

      These functions are mostly for internal use, but some of them may also be suitable for your analysis. Especially the ‘like’ function can be useful: if (x %like% y) {...}.

      diff --git a/docs/reference/join.html b/docs/reference/join.html index 7a17757a..0df6d4d2 100644 --- a/docs/reference/join.html +++ b/docs/reference/join.html @@ -151,6 +151,13 @@ Use the G-test
    79. +
    80. + + + + Other: benchmarks + +
    81. diff --git a/docs/reference/key_antibiotics.html b/docs/reference/key_antibiotics.html index a733453b..ca20ed4e 100644 --- a/docs/reference/key_antibiotics.html +++ b/docs/reference/key_antibiotics.html @@ -151,6 +151,13 @@ Use the G-test
    82. +
    83. + + + + Other: benchmarks + +
    84. @@ -220,17 +227,20 @@ -
      key_antibiotics(tbl, col_mo = NULL, universal_1 = guess_ab(tbl,
      -  "amox"), universal_2 = guess_ab(tbl, "amcl"),
      -  universal_3 = guess_ab(tbl, "cfur"), universal_4 = guess_ab(tbl,
      -  "pita"), universal_5 = guess_ab(tbl, "cipr"),
      -  universal_6 = guess_ab(tbl, "trsu"), GramPos_1 = guess_ab(tbl,
      -  "vanc"), GramPos_2 = guess_ab(tbl, "teic"), GramPos_3 = guess_ab(tbl,
      -  "tetr"), GramPos_4 = guess_ab(tbl, "eryt"), GramPos_5 = guess_ab(tbl,
      -  "oxac"), GramPos_6 = guess_ab(tbl, "rifa"), GramNeg_1 = guess_ab(tbl,
      -  "gent"), GramNeg_2 = guess_ab(tbl, "tobr"), GramNeg_3 = guess_ab(tbl,
      -  "coli"), GramNeg_4 = guess_ab(tbl, "cfot"), GramNeg_5 = guess_ab(tbl,
      -  "cfta"), GramNeg_6 = guess_ab(tbl, "mero"), warnings = TRUE, ...)
      +    
      key_antibiotics(tbl, col_mo = NULL, universal_1 = guess_ab_col(tbl,
      +  "amox"), universal_2 = guess_ab_col(tbl, "amcl"),
      +  universal_3 = guess_ab_col(tbl, "cfur"),
      +  universal_4 = guess_ab_col(tbl, "pita"),
      +  universal_5 = guess_ab_col(tbl, "cipr"),
      +  universal_6 = guess_ab_col(tbl, "trsu"),
      +  GramPos_1 = guess_ab_col(tbl, "vanc"), GramPos_2 = guess_ab_col(tbl,
      +  "teic"), GramPos_3 = guess_ab_col(tbl, "tetr"),
      +  GramPos_4 = guess_ab_col(tbl, "eryt"), GramPos_5 = guess_ab_col(tbl,
      +  "oxac"), GramPos_6 = guess_ab_col(tbl, "rifa"),
      +  GramNeg_1 = guess_ab_col(tbl, "gent"), GramNeg_2 = guess_ab_col(tbl,
      +  "tobr"), GramNeg_3 = guess_ab_col(tbl, "coli"),
      +  GramNeg_4 = guess_ab_col(tbl, "cfot"), GramNeg_5 = guess_ab_col(tbl,
      +  "cfta"), GramNeg_6 = guess_ab_col(tbl, "mero"), warnings = TRUE, ...)
       
       key_antibiotics_equal(x, y, type = c("keyantibiotics", "points"),
         ignore_I = TRUE, points_threshold = 2, info = FALSE)
      @@ -248,15 +258,15 @@ universal_1, universal_2, universal_3, universal_4, universal_5, universal_6 -

      column names of broad-spectrum antibiotics, case-insensitive

      +

      column names of broad-spectrum antibiotics, case-insensitive. At default, the columns containing these antibiotics will be guessed with guess_ab_col.

      GramPos_1, GramPos_2, GramPos_3, GramPos_4, GramPos_5, GramPos_6 -

      column names of antibiotics for Gram positives, case-insensitive

      +

      column names of antibiotics for Gram positives, case-insensitive. At default, the columns containing these antibiotics will be guessed with guess_ab_col.

      GramNeg_1, GramNeg_2, GramNeg_3, GramNeg_4, GramNeg_5, GramNeg_6 -

      column names of antibiotics for Gram negatives, case-insensitive

      +

      column names of antibiotics for Gram negatives, case-insensitive. At default, the columns containing these antibiotics will be guessed with guess_ab_col.

      warnings @@ -290,7 +300,7 @@

      Details

      -

      The function key_antibiotics returns a character vector with 12 antibiotic results for every isolate. These isolates can then be compared using key_antibiotics_equal, to check if two isolates have generally the same antibiogram. Missing and invalid values are replaced with a dot ("."). The first_isolate function only uses this function on the same microbial species from the same patient. Using this, an MRSA will be included after a susceptible S. aureus (MSSA) found within the same episode (see episode parameter of first_isolate). Without key antibiotic comparison it wouldn't.

      +

      The function key_antibiotics returns a character vector with 12 antibiotic results for every isolate. These isolates can then be compared using key_antibiotics_equal, to check if two isolates have generally the same antibiogram. Missing and invalid values are replaced with a dot ("."). The first_isolate function only uses this function on the same microbial species from the same patient. Using this, an MRSA will be included after a susceptible S. aureus (MSSA) found within the same episode (see episode parameter of first_isolate). Without key antibiotic comparison it would not.

      At default, the antibiotics that are used for Gram positive bacteria are (colum names):
      "amox", "amcl", "cfur", "pita", "cipr", "trsu" (until here is universal), "vanc", "teic", "tetr", "eryt", "oxac", "rifa".

      At default, the antibiotics that are used for Gram negative bacteria are (colum names):
      diff --git a/docs/reference/kurtosis.html b/docs/reference/kurtosis.html index 17a3c09c..a946dc17 100644 --- a/docs/reference/kurtosis.html +++ b/docs/reference/kurtosis.html @@ -151,6 +151,13 @@ Use the G-test

    85. +
    86. + + + + Other: benchmarks + +
    87. diff --git a/docs/reference/like.html b/docs/reference/like.html index 1f77b2de..8d733814 100644 --- a/docs/reference/like.html +++ b/docs/reference/like.html @@ -151,6 +151,13 @@ Use the G-test
    88. +
    89. + + + + Other: benchmarks + +
    90. @@ -288,7 +295,7 @@ On our website https://msberends.gitla library(dplyr) septic_patients %>% left_join_microorganisms() %>% - filter(genus %like% '^ent') %>% + filter(genus %like% '^ent') %>% freq(genus, species) # } diff --git a/docs/reference/mdro.html b/docs/reference/mdro.html index fbc8c601..e532d5ff 100644 --- a/docs/reference/mdro.html +++ b/docs/reference/mdro.html @@ -151,6 +151,13 @@ Use the G-test
    91. +
    92. + + + + Other: benchmarks + +
    93. @@ -221,26 +228,36 @@
      mdro(tbl, country = NULL, col_mo = NULL, info = TRUE,
      -  amcl = guess_ab(), amik = guess_ab(), amox = guess_ab(),
      -  ampi = guess_ab(), azit = guess_ab(), aztr = guess_ab(),
      -  cefa = guess_ab(), cfra = guess_ab(), cfep = guess_ab(),
      -  cfot = guess_ab(), cfox = guess_ab(), cfta = guess_ab(),
      -  cftr = guess_ab(), cfur = guess_ab(), chlo = guess_ab(),
      -  cipr = guess_ab(), clar = guess_ab(), clin = guess_ab(),
      -  clox = guess_ab(), coli = guess_ab(), czol = guess_ab(),
      -  dapt = guess_ab(), doxy = guess_ab(), erta = guess_ab(),
      -  eryt = guess_ab(), fosf = guess_ab(), fusi = guess_ab(),
      -  gent = guess_ab(), imip = guess_ab(), kana = guess_ab(),
      -  levo = guess_ab(), linc = guess_ab(), line = guess_ab(),
      -  mero = guess_ab(), metr = guess_ab(), mino = guess_ab(),
      -  moxi = guess_ab(), nali = guess_ab(), neom = guess_ab(),
      -  neti = guess_ab(), nitr = guess_ab(), novo = guess_ab(),
      -  norf = guess_ab(), oflo = guess_ab(), peni = guess_ab(),
      -  pipe = guess_ab(), pita = guess_ab(), poly = guess_ab(),
      -  qida = guess_ab(), rifa = guess_ab(), roxi = guess_ab(),
      -  siso = guess_ab(), teic = guess_ab(), tetr = guess_ab(),
      -  tica = guess_ab(), tige = guess_ab(), tobr = guess_ab(),
      -  trim = guess_ab(), trsu = guess_ab(), vanc = guess_ab())
      +  amcl = guess_ab_col(), amik = guess_ab_col(),
      +  amox = guess_ab_col(), ampi = guess_ab_col(),
      +  azit = guess_ab_col(), aztr = guess_ab_col(),
      +  cefa = guess_ab_col(), cfra = guess_ab_col(),
      +  cfep = guess_ab_col(), cfot = guess_ab_col(),
      +  cfox = guess_ab_col(), cfta = guess_ab_col(),
      +  cftr = guess_ab_col(), cfur = guess_ab_col(),
      +  chlo = guess_ab_col(), cipr = guess_ab_col(),
      +  clar = guess_ab_col(), clin = guess_ab_col(),
      +  clox = guess_ab_col(), coli = guess_ab_col(),
      +  czol = guess_ab_col(), dapt = guess_ab_col(),
      +  doxy = guess_ab_col(), erta = guess_ab_col(),
      +  eryt = guess_ab_col(), fosf = guess_ab_col(),
      +  fusi = guess_ab_col(), gent = guess_ab_col(),
      +  imip = guess_ab_col(), kana = guess_ab_col(),
      +  levo = guess_ab_col(), linc = guess_ab_col(),
      +  line = guess_ab_col(), mero = guess_ab_col(),
      +  metr = guess_ab_col(), mino = guess_ab_col(),
      +  moxi = guess_ab_col(), nali = guess_ab_col(),
      +  neom = guess_ab_col(), neti = guess_ab_col(),
      +  nitr = guess_ab_col(), novo = guess_ab_col(),
      +  norf = guess_ab_col(), oflo = guess_ab_col(),
      +  peni = guess_ab_col(), pipe = guess_ab_col(),
      +  pita = guess_ab_col(), poly = guess_ab_col(),
      +  qida = guess_ab_col(), rifa = guess_ab_col(),
      +  roxi = guess_ab_col(), siso = guess_ab_col(),
      +  teic = guess_ab_col(), tetr = guess_ab_col(),
      +  tica = guess_ab_col(), tige = guess_ab_col(),
      +  tobr = guess_ab_col(), trim = guess_ab_col(),
      +  trsu = guess_ab_col(), vanc = guess_ab_col())
       
       brmo(..., country = "nl")
       
      @@ -524,7 +541,7 @@
           

      Antibiotics

      -

      To define antibiotics column names, leave as it is to determine it automatically with guess_ab or input a text (case-insensitive) or use NULL to skip a column (e.g. tica = NULL). Non-existing columns will anyway be skipped with a warning.

      +

      To define antibiotics column names, leave as it is to determine it automatically with guess_ab_col or input a text (case-insensitive) or use NULL to skip a column (e.g. tica = NULL). Non-existing columns will anyway be skipped with a warning.

      Abbrevations of the column containing antibiotics in the form: abbreviation: generic name (ATC code)

      amcl: amoxicillin+clavulanic acid (J01CR02), amik: amikacin (J01GB06), diff --git a/docs/reference/microorganisms.certe.html b/docs/reference/microorganisms.certe.html index ef184a02..198fc3e5 100644 --- a/docs/reference/microorganisms.certe.html +++ b/docs/reference/microorganisms.certe.html @@ -151,6 +151,13 @@ Use the G-test

    94. +
    95. + + + + Other: benchmarks + +
    96. diff --git a/docs/reference/microorganisms.html b/docs/reference/microorganisms.html index 160d44ea..377e80a3 100644 --- a/docs/reference/microorganisms.html +++ b/docs/reference/microorganisms.html @@ -151,6 +151,13 @@ Use the G-test
    97. +
    98. + + + + Other: benchmarks + +
    99. diff --git a/docs/reference/microorganisms.old.html b/docs/reference/microorganisms.old.html index f7753406..cdf8bbb8 100644 --- a/docs/reference/microorganisms.old.html +++ b/docs/reference/microorganisms.old.html @@ -151,6 +151,13 @@ Use the G-test
    100. +
    101. + + + + Other: benchmarks + +
    102. diff --git a/docs/reference/microorganisms.umcg.html b/docs/reference/microorganisms.umcg.html index ba61c085..4e938908 100644 --- a/docs/reference/microorganisms.umcg.html +++ b/docs/reference/microorganisms.umcg.html @@ -151,6 +151,13 @@ Use the G-test
    103. +
    104. + + + + Other: benchmarks + +
    105. diff --git a/docs/reference/mo_failures.html b/docs/reference/mo_failures.html index 81648d7c..309f5734 100644 --- a/docs/reference/mo_failures.html +++ b/docs/reference/mo_failures.html @@ -151,6 +151,13 @@ Use the G-test
    106. +
    107. + + + + Other: benchmarks + +
    108. diff --git a/docs/reference/mo_property.html b/docs/reference/mo_property.html index 56d2859d..9992a80c 100644 --- a/docs/reference/mo_property.html +++ b/docs/reference/mo_property.html @@ -151,6 +151,13 @@ Use the G-test
    109. +
    110. + + + + Other: benchmarks + +
    111. diff --git a/docs/reference/mo_renamed.html b/docs/reference/mo_renamed.html index f9a3e497..11ec3055 100644 --- a/docs/reference/mo_renamed.html +++ b/docs/reference/mo_renamed.html @@ -151,6 +151,13 @@ Use the G-test
    112. +
    113. + + + + Other: benchmarks + +
    114. diff --git a/docs/reference/p.symbol.html b/docs/reference/p.symbol.html index 9cc7460c..1ea7acd0 100644 --- a/docs/reference/p.symbol.html +++ b/docs/reference/p.symbol.html @@ -151,6 +151,13 @@ Use the G-test
    115. +
    116. + + + + Other: benchmarks + +
    117. diff --git a/docs/reference/portion.html b/docs/reference/portion.html index 44896e60..54e8cb51 100644 --- a/docs/reference/portion.html +++ b/docs/reference/portion.html @@ -152,6 +152,13 @@ portion_R and portion_IR can be used to calculate resistance, portion_S and port Use the G-test
    118. +
    119. + + + + Other: benchmarks + +
    120. @@ -333,17 +340,17 @@ On our website https://msberends.gitla septic_patients %>% portion_SI(amox) septic_patients %>% - group_by(hospital_id) %>% - summarise(p = portion_S(cipr), + group_by(hospital_id) %>% + summarise(p = portion_S(cipr), n = n_rsi(cipr)) # n_rsi works like n_distinct in dplyr septic_patients %>% - group_by(hospital_id) %>% - summarise(R = portion_R(cipr, as_percent = TRUE), + group_by(hospital_id) %>% + summarise(R = portion_R(cipr, as_percent = TRUE), I = portion_I(cipr, as_percent = TRUE), S = portion_S(cipr, as_percent = TRUE), n = n_rsi(cipr), # works like n_distinct in dplyr - total = n()) # NOT the amount of tested isolates! + total = n()) # NOT the amount of tested isolates! # Calculate co-resistance between amoxicillin/clav acid and gentamicin, # so we can see that combination therapy does a lot more than mono therapy: @@ -358,8 +365,8 @@ On our website https://msberends.gitla septic_patients %>% - group_by(hospital_id) %>% - summarise(cipro_p = portion_S(cipr, as_percent = TRUE), + group_by(hospital_id) %>% + summarise(cipro_p = portion_S(cipr, as_percent = TRUE), cipro_n = count_all(cipr), genta_p = portion_S(gent, as_percent = TRUE), genta_n = count_all(gent), @@ -368,22 +375,22 @@ On our website https://msberends.gitla # Get portions S/I/R immediately of all rsi columns septic_patients %>% - select(amox, cipr) %>% + select(amox, cipr) %>% portion_df(translate = FALSE) # It also supports grouping variables septic_patients %>% - select(hospital_id, amox, cipr) %>% - group_by(hospital_id) %>% + select(hospital_id, amox, cipr) %>% + group_by(hospital_id) %>% portion_df(translate = FALSE) # }# NOT RUN { # calculate current empiric combination therapy of Helicobacter gastritis: my_table %>% - filter(first_isolate == TRUE, + filter(first_isolate == TRUE, genus == "Helicobacter") %>% - summarise(p = portion_S(amox, metr), # amoxicillin with metronidazole + summarise(p = portion_S(amox, metr), # amoxicillin with metronidazole n = count_all(amox, metr)) # } diff --git a/docs/reference/read.4D.html b/docs/reference/read.4D.html index e545a16a..cbf9dec1 100644 --- a/docs/reference/read.4D.html +++ b/docs/reference/read.4D.html @@ -151,6 +151,13 @@ Use the G-test
    121. +
    122. + + + + Other: benchmarks + +
    123. diff --git a/docs/reference/resistance_predict.html b/docs/reference/resistance_predict.html index 2d789bbe..0249e17f 100644 --- a/docs/reference/resistance_predict.html +++ b/docs/reference/resistance_predict.html @@ -151,6 +151,13 @@ Use the G-test
    124. +
    125. + + + + Other: benchmarks + +
    126. @@ -311,7 +318,7 @@ On our website https://msberends.gitla # or use dplyr so you can actually read it: library(dplyr) tbl %>% - filter(first_isolate == TRUE, + filter(first_isolate == TRUE, genus == "Haemophilus") %>% resistance_predict(amcl, date) # }# NOT RUN { @@ -322,9 +329,9 @@ On our website https://msberends.gitla # get bacteria properties like genus and species left_join_microorganisms("mo") %>% # calculate first isolates - mutate(first_isolate = first_isolate(.)) %>% + mutate(first_isolate = first_isolate(.)) %>% # filter on first E. coli isolates - filter(genus == "Escherichia", + filter(genus == "Escherichia", species == "coli", first_isolate == TRUE) %>% # predict resistance of cefotaxime for next years @@ -338,7 +345,7 @@ On our website https://msberends.gitla if (!require(ggplot2)) { data <- septic_patients %>% - filter(mo == as.mo("E. coli")) %>% + filter(mo == as.mo("E. coli")) %>% resistance_predict(col_ab = "amox", col_date = "date", info = FALSE, diff --git a/docs/reference/rsi.html b/docs/reference/rsi.html index baab473f..bfc62eaa 100644 --- a/docs/reference/rsi.html +++ b/docs/reference/rsi.html @@ -151,6 +151,13 @@ Use the G-test
    127. +
    128. + + + + Other: benchmarks + +
    129. diff --git a/docs/reference/septic_patients.html b/docs/reference/septic_patients.html index 7e261c29..997bfc00 100644 --- a/docs/reference/septic_patients.html +++ b/docs/reference/septic_patients.html @@ -151,6 +151,13 @@ Use the G-test
    130. +
    131. + + + + Other: benchmarks + +
    132. diff --git a/docs/reference/skewness.html b/docs/reference/skewness.html index 2a7902dd..6e3ef8cd 100644 --- a/docs/reference/skewness.html +++ b/docs/reference/skewness.html @@ -152,6 +152,13 @@ When negative: the left tail is longer; the mass of the distribution is concentr Use the G-test
    133. +
    134. + + + + Other: benchmarks + +
    135. diff --git a/docs/reference/supplementary_data.html b/docs/reference/supplementary_data.html index d17871ad..742f1541 100644 --- a/docs/reference/supplementary_data.html +++ b/docs/reference/supplementary_data.html @@ -151,6 +151,13 @@ Use the G-test
    136. +
    137. + + + + Other: benchmarks + +
    138. diff --git a/docs/sitemap.xml b/docs/sitemap.xml index 430b986c..c91fb660 100644 --- a/docs/sitemap.xml +++ b/docs/sitemap.xml @@ -64,7 +64,7 @@ https://msberends.gitlab.io/AMR/reference/ggplot_rsi.html - https://msberends.gitlab.io/AMR/reference/guess_ab.html + https://msberends.gitlab.io/AMR/reference/guess_ab_col.html https://msberends.gitlab.io/AMR/reference/join.html @@ -141,6 +141,9 @@ https://msberends.gitlab.io/AMR/articles/ab_property.html + + https://msberends.gitlab.io/AMR/articles/benchmarks.html + https://msberends.gitlab.io/AMR/articles/freq.html diff --git a/index.md b/index.md index 21e2bdd3..b33a556b 100644 --- a/index.md +++ b/index.md @@ -64,7 +64,9 @@ To find out how to conduct AMR analysis, please [continue reading here to get st This package contains the **complete microbial taxonomic data** (with all nine taxonomic ranks - from kingdom to subspecies) from the publicly available Integrated Taxonomic Information System (ITIS, https://www.itis.gov). -All (sub)species from **the taxonomic kingdoms Bacteria, Fungi and Protozoa are included in this package**, as well as all previously accepted names known to ITIS. Furthermore, the responsible authors and year of publication are available. This allows users to use authoritative taxonomic information for their data analysis on any microorganism, not only human pathogens. It also helps to quickly determine the Gram stain of bacteria, since all bacteria are classified into subkingdom Negibacteria or Posibacteria. ITIS is a partnership of U.S., Canadian, and Mexican agencies and taxonomic specialists. +All (sub)species from **the taxonomic kingdoms Bacteria, Fungi and Protozoa are included in this package**, as well as all previously accepted names known to ITIS. Furthermore, the responsible authors and year of publication are available. This allows users to use authoritative taxonomic information for their data analysis on any microorganism, not only human pathogens. It also helps to quickly determine the Gram stain of bacteria, since all bacteria are classified into subkingdom Negibacteria or Posibacteria. + +Read more about ITIS [in our manual](./reference/ITIS.html). The `AMR` package basically does four important things: diff --git a/man/eucast_rules.Rd b/man/eucast_rules.Rd index 7e1e319f..9460fdef 100644 --- a/man/eucast_rules.Rd +++ b/man/eucast_rules.Rd @@ -25,27 +25,38 @@ \usage{ eucast_rules(tbl, col_mo = NULL, info = TRUE, rules = c("breakpoints", "expert", "other", "all"), verbose = FALSE, - amcl = guess_ab(), amik = guess_ab(), amox = guess_ab(), - ampi = guess_ab(), azit = guess_ab(), azlo = guess_ab(), - aztr = guess_ab(), cefa = guess_ab(), cfep = guess_ab(), - cfot = guess_ab(), cfox = guess_ab(), cfra = guess_ab(), - cfta = guess_ab(), cftr = guess_ab(), cfur = guess_ab(), - chlo = guess_ab(), cipr = guess_ab(), clar = guess_ab(), - clin = guess_ab(), clox = guess_ab(), coli = guess_ab(), - czol = guess_ab(), dapt = guess_ab(), doxy = guess_ab(), - erta = guess_ab(), eryt = guess_ab(), fosf = guess_ab(), - fusi = guess_ab(), gent = guess_ab(), imip = guess_ab(), - kana = guess_ab(), levo = guess_ab(), linc = guess_ab(), - line = guess_ab(), mero = guess_ab(), mezl = guess_ab(), - mino = guess_ab(), moxi = guess_ab(), nali = guess_ab(), - neom = guess_ab(), neti = guess_ab(), nitr = guess_ab(), - norf = guess_ab(), novo = guess_ab(), oflo = guess_ab(), - oxac = guess_ab(), peni = guess_ab(), pipe = guess_ab(), - pita = guess_ab(), poly = guess_ab(), pris = guess_ab(), - qida = guess_ab(), rifa = guess_ab(), roxi = guess_ab(), - siso = guess_ab(), teic = guess_ab(), tetr = guess_ab(), - tica = guess_ab(), tige = guess_ab(), tobr = guess_ab(), - trim = guess_ab(), trsu = guess_ab(), vanc = guess_ab()) + amcl = guess_ab_col(), amik = guess_ab_col(), + amox = guess_ab_col(), ampi = guess_ab_col(), + azit = guess_ab_col(), azlo = guess_ab_col(), + aztr = guess_ab_col(), cefa = guess_ab_col(), + cfep = guess_ab_col(), cfot = guess_ab_col(), + cfox = guess_ab_col(), cfra = guess_ab_col(), + cfta = guess_ab_col(), cftr = guess_ab_col(), + cfur = guess_ab_col(), chlo = guess_ab_col(), + cipr = guess_ab_col(), clar = guess_ab_col(), + clin = guess_ab_col(), clox = guess_ab_col(), + coli = guess_ab_col(), czol = guess_ab_col(), + dapt = guess_ab_col(), doxy = guess_ab_col(), + erta = guess_ab_col(), eryt = guess_ab_col(), + fosf = guess_ab_col(), fusi = guess_ab_col(), + gent = guess_ab_col(), imip = guess_ab_col(), + kana = guess_ab_col(), levo = guess_ab_col(), + linc = guess_ab_col(), line = guess_ab_col(), + mero = guess_ab_col(), mezl = guess_ab_col(), + mino = guess_ab_col(), moxi = guess_ab_col(), + nali = guess_ab_col(), neom = guess_ab_col(), + neti = guess_ab_col(), nitr = guess_ab_col(), + norf = guess_ab_col(), novo = guess_ab_col(), + oflo = guess_ab_col(), oxac = guess_ab_col(), + peni = guess_ab_col(), pipe = guess_ab_col(), + pita = guess_ab_col(), poly = guess_ab_col(), + pris = guess_ab_col(), qida = guess_ab_col(), + rifa = guess_ab_col(), roxi = guess_ab_col(), + siso = guess_ab_col(), teic = guess_ab_col(), + tetr = guess_ab_col(), tica = guess_ab_col(), + tige = guess_ab_col(), tobr = guess_ab_col(), + trim = guess_ab_col(), trsu = guess_ab_col(), + vanc = guess_ab_col()) EUCAST_rules(...) @@ -74,7 +85,7 @@ Apply susceptibility rules as defined by the European Committee on Antimicrobial } \section{Antibiotics}{ -To define antibiotics column names, leave as it is to determine it automatically with \code{\link{guess_ab}} or input a text (case-insensitive) or use \code{NULL} to skip a column (e.g. \code{tica = NULL}). Non-existing columns will anyway be skipped with a warning. +To define antibiotics column names, leave as it is to determine it automatically with \code{\link{guess_ab_col}} or input a text (case-insensitive) or use \code{NULL} to skip a column (e.g. \code{tica = NULL}). Non-existing columns will anyway be skipped with a warning. Abbrevations of the column containing antibiotics in the form: \strong{abbreviation}: generic name (\emph{ATC code}) diff --git a/man/guess_ab.Rd b/man/guess_ab_col.Rd similarity index 55% rename from man/guess_ab.Rd rename to man/guess_ab_col.Rd index 8ce0f929..42c703bf 100644 --- a/man/guess_ab.Rd +++ b/man/guess_ab_col.Rd @@ -1,10 +1,10 @@ % Generated by roxygen2: do not edit by hand -% Please edit documentation in R/guess_ab.R -\name{guess_ab} -\alias{guess_ab} +% Please edit documentation in R/guess_ab_col.R +\name{guess_ab_col} +\alias{guess_ab_col} \title{Guess antibiotic column} \usage{ -guess_ab(tbl = NULL, col = NULL, verbose = FALSE) +guess_ab_col(tbl = NULL, col = NULL, verbose = FALSE) } \arguments{ \item{tbl}{a \code{data.frame}} @@ -14,7 +14,7 @@ guess_ab(tbl = NULL, col = NULL, verbose = FALSE) \item{verbose}{a logical to indicate whether additional info should be printed} } \description{ -This tries to find a column name in a data set based on information from the \code{\link{antibiotics}} data set. +This tries to find a column name in a data set based on information from the \code{\link{antibiotics}} data set. You can look for an antibiotic (trade) of abbreviation and it will search the data for any column containing a name or ATC code of that antibiotic. } \section{Read more on our website!}{ @@ -22,3 +22,16 @@ This tries to find a column name in a data set based on information from the \co On our website \url{https://msberends.gitlab.io/AMR} you can find \href{https://msberends.gitlab.io/AMR/articles/AMR.html}{a omprehensive tutorial} about how to conduct AMR analysis and find \href{https://msberends.gitlab.io/AMR/reference}{the complete documentation of all functions}, which reads a lot easier than in R. } +\examples{ +df <- data.frame(amox = "S", + tetr = "R") + +guess_ab_col(df, "amoxicillin") +# [1] "amox" +guess_ab_col(df, "J01AA07") # ATC code of Tetracycline +# [1] "tetr" + +guess_ab_col(df, "J01AA07", verbose = TRUE) +# using column `tetr` for col "J01AA07" +# [1] "tetr" +} diff --git a/man/key_antibiotics.Rd b/man/key_antibiotics.Rd index 03686a7e..cc4afe6c 100755 --- a/man/key_antibiotics.Rd +++ b/man/key_antibiotics.Rd @@ -5,17 +5,20 @@ \alias{key_antibiotics_equal} \title{Key antibiotics for first \emph{weighted} isolates} \usage{ -key_antibiotics(tbl, col_mo = NULL, universal_1 = guess_ab(tbl, - "amox"), universal_2 = guess_ab(tbl, "amcl"), - universal_3 = guess_ab(tbl, "cfur"), universal_4 = guess_ab(tbl, - "pita"), universal_5 = guess_ab(tbl, "cipr"), - universal_6 = guess_ab(tbl, "trsu"), GramPos_1 = guess_ab(tbl, - "vanc"), GramPos_2 = guess_ab(tbl, "teic"), GramPos_3 = guess_ab(tbl, - "tetr"), GramPos_4 = guess_ab(tbl, "eryt"), GramPos_5 = guess_ab(tbl, - "oxac"), GramPos_6 = guess_ab(tbl, "rifa"), GramNeg_1 = guess_ab(tbl, - "gent"), GramNeg_2 = guess_ab(tbl, "tobr"), GramNeg_3 = guess_ab(tbl, - "coli"), GramNeg_4 = guess_ab(tbl, "cfot"), GramNeg_5 = guess_ab(tbl, - "cfta"), GramNeg_6 = guess_ab(tbl, "mero"), warnings = TRUE, ...) +key_antibiotics(tbl, col_mo = NULL, universal_1 = guess_ab_col(tbl, + "amox"), universal_2 = guess_ab_col(tbl, "amcl"), + universal_3 = guess_ab_col(tbl, "cfur"), + universal_4 = guess_ab_col(tbl, "pita"), + universal_5 = guess_ab_col(tbl, "cipr"), + universal_6 = guess_ab_col(tbl, "trsu"), + GramPos_1 = guess_ab_col(tbl, "vanc"), GramPos_2 = guess_ab_col(tbl, + "teic"), GramPos_3 = guess_ab_col(tbl, "tetr"), + GramPos_4 = guess_ab_col(tbl, "eryt"), GramPos_5 = guess_ab_col(tbl, + "oxac"), GramPos_6 = guess_ab_col(tbl, "rifa"), + GramNeg_1 = guess_ab_col(tbl, "gent"), GramNeg_2 = guess_ab_col(tbl, + "tobr"), GramNeg_3 = guess_ab_col(tbl, "coli"), + GramNeg_4 = guess_ab_col(tbl, "cfot"), GramNeg_5 = guess_ab_col(tbl, + "cfta"), GramNeg_6 = guess_ab_col(tbl, "mero"), warnings = TRUE, ...) key_antibiotics_equal(x, y, type = c("keyantibiotics", "points"), ignore_I = TRUE, points_threshold = 2, info = FALSE) @@ -25,11 +28,11 @@ key_antibiotics_equal(x, y, type = c("keyantibiotics", "points"), \item{col_mo}{column name of the unique IDs of the microorganisms (see \code{\link{mo}}), defaults to the first column of class \code{mo}. Values will be coerced using \code{\link{as.mo}}.} -\item{universal_1, universal_2, universal_3, universal_4, universal_5, universal_6}{column names of \strong{broad-spectrum} antibiotics, case-insensitive} +\item{universal_1, universal_2, universal_3, universal_4, universal_5, universal_6}{column names of \strong{broad-spectrum} antibiotics, case-insensitive. At default, the columns containing these antibiotics will be guessed with \code{\link{guess_ab_col}}.} -\item{GramPos_1, GramPos_2, GramPos_3, GramPos_4, GramPos_5, GramPos_6}{column names of antibiotics for \strong{Gram positives}, case-insensitive} +\item{GramPos_1, GramPos_2, GramPos_3, GramPos_4, GramPos_5, GramPos_6}{column names of antibiotics for \strong{Gram positives}, case-insensitive. At default, the columns containing these antibiotics will be guessed with \code{\link{guess_ab_col}}.} -\item{GramNeg_1, GramNeg_2, GramNeg_3, GramNeg_4, GramNeg_5, GramNeg_6}{column names of antibiotics for \strong{Gram negatives}, case-insensitive} +\item{GramNeg_1, GramNeg_2, GramNeg_3, GramNeg_4, GramNeg_5, GramNeg_6}{column names of antibiotics for \strong{Gram negatives}, case-insensitive. At default, the columns containing these antibiotics will be guessed with \code{\link{guess_ab_col}}.} \item{warnings}{give warning about missing antibiotic columns, they will anyway be ignored} @@ -49,7 +52,7 @@ key_antibiotics_equal(x, y, type = c("keyantibiotics", "points"), These function can be used to determine first isolates (see \code{\link{first_isolate}}). Using key antibiotics to determine first isolates is more reliable than without key antibiotics. These selected isolates will then be called first \emph{weighted} isolates. } \details{ -The function \code{key_antibiotics} returns a character vector with 12 antibiotic results for every isolate. These isolates can then be compared using \code{key_antibiotics_equal}, to check if two isolates have generally the same antibiogram. Missing and invalid values are replaced with a dot (\code{"."}). The \code{\link{first_isolate}} function only uses this function on the same microbial species from the same patient. Using this, an MRSA will be included after a susceptible \emph{S. aureus} (MSSA) found within the same episode (see \code{episode} parameter of \code{\link{first_isolate}}). Without key antibiotic comparison it wouldn't. +The function \code{key_antibiotics} returns a character vector with 12 antibiotic results for every isolate. These isolates can then be compared using \code{key_antibiotics_equal}, to check if two isolates have generally the same antibiogram. Missing and invalid values are replaced with a dot (\code{"."}). The \code{\link{first_isolate}} function only uses this function on the same microbial species from the same patient. Using this, an MRSA will be included after a susceptible \emph{S. aureus} (MSSA) found within the same episode (see \code{episode} parameter of \code{\link{first_isolate}}). Without key antibiotic comparison it would not. At default, the antibiotics that are used for \strong{Gram positive bacteria} are (colum names): \cr \code{"amox"}, \code{"amcl"}, \code{"cfur"}, \code{"pita"}, \code{"cipr"}, \code{"trsu"} (until here is universal), \code{"vanc"}, \code{"teic"}, \code{"tetr"}, \code{"eryt"}, \code{"oxac"}, \code{"rifa"}. diff --git a/man/mdro.Rd b/man/mdro.Rd index 04efb7d4..b3220d30 100644 --- a/man/mdro.Rd +++ b/man/mdro.Rd @@ -8,26 +8,36 @@ \title{Determine multidrug-resistant organisms (MDRO)} \usage{ mdro(tbl, country = NULL, col_mo = NULL, info = TRUE, - amcl = guess_ab(), amik = guess_ab(), amox = guess_ab(), - ampi = guess_ab(), azit = guess_ab(), aztr = guess_ab(), - cefa = guess_ab(), cfra = guess_ab(), cfep = guess_ab(), - cfot = guess_ab(), cfox = guess_ab(), cfta = guess_ab(), - cftr = guess_ab(), cfur = guess_ab(), chlo = guess_ab(), - cipr = guess_ab(), clar = guess_ab(), clin = guess_ab(), - clox = guess_ab(), coli = guess_ab(), czol = guess_ab(), - dapt = guess_ab(), doxy = guess_ab(), erta = guess_ab(), - eryt = guess_ab(), fosf = guess_ab(), fusi = guess_ab(), - gent = guess_ab(), imip = guess_ab(), kana = guess_ab(), - levo = guess_ab(), linc = guess_ab(), line = guess_ab(), - mero = guess_ab(), metr = guess_ab(), mino = guess_ab(), - moxi = guess_ab(), nali = guess_ab(), neom = guess_ab(), - neti = guess_ab(), nitr = guess_ab(), novo = guess_ab(), - norf = guess_ab(), oflo = guess_ab(), peni = guess_ab(), - pipe = guess_ab(), pita = guess_ab(), poly = guess_ab(), - qida = guess_ab(), rifa = guess_ab(), roxi = guess_ab(), - siso = guess_ab(), teic = guess_ab(), tetr = guess_ab(), - tica = guess_ab(), tige = guess_ab(), tobr = guess_ab(), - trim = guess_ab(), trsu = guess_ab(), vanc = guess_ab()) + amcl = guess_ab_col(), amik = guess_ab_col(), + amox = guess_ab_col(), ampi = guess_ab_col(), + azit = guess_ab_col(), aztr = guess_ab_col(), + cefa = guess_ab_col(), cfra = guess_ab_col(), + cfep = guess_ab_col(), cfot = guess_ab_col(), + cfox = guess_ab_col(), cfta = guess_ab_col(), + cftr = guess_ab_col(), cfur = guess_ab_col(), + chlo = guess_ab_col(), cipr = guess_ab_col(), + clar = guess_ab_col(), clin = guess_ab_col(), + clox = guess_ab_col(), coli = guess_ab_col(), + czol = guess_ab_col(), dapt = guess_ab_col(), + doxy = guess_ab_col(), erta = guess_ab_col(), + eryt = guess_ab_col(), fosf = guess_ab_col(), + fusi = guess_ab_col(), gent = guess_ab_col(), + imip = guess_ab_col(), kana = guess_ab_col(), + levo = guess_ab_col(), linc = guess_ab_col(), + line = guess_ab_col(), mero = guess_ab_col(), + metr = guess_ab_col(), mino = guess_ab_col(), + moxi = guess_ab_col(), nali = guess_ab_col(), + neom = guess_ab_col(), neti = guess_ab_col(), + nitr = guess_ab_col(), novo = guess_ab_col(), + norf = guess_ab_col(), oflo = guess_ab_col(), + peni = guess_ab_col(), pipe = guess_ab_col(), + pita = guess_ab_col(), poly = guess_ab_col(), + qida = guess_ab_col(), rifa = guess_ab_col(), + roxi = guess_ab_col(), siso = guess_ab_col(), + teic = guess_ab_col(), tetr = guess_ab_col(), + tica = guess_ab_col(), tige = guess_ab_col(), + tobr = guess_ab_col(), trim = guess_ab_col(), + trsu = guess_ab_col(), vanc = guess_ab_col()) brmo(..., country = "nl") @@ -177,7 +187,7 @@ When \code{country} will be left blank, guidelines will be taken from EUCAST Exp } \section{Antibiotics}{ -To define antibiotics column names, leave as it is to determine it automatically with \code{\link{guess_ab}} or input a text (case-insensitive) or use \code{NULL} to skip a column (e.g. \code{tica = NULL}). Non-existing columns will anyway be skipped with a warning. +To define antibiotics column names, leave as it is to determine it automatically with \code{\link{guess_ab_col}} or input a text (case-insensitive) or use \code{NULL} to skip a column (e.g. \code{tica = NULL}). Non-existing columns will anyway be skipped with a warning. Abbrevations of the column containing antibiotics in the form: \strong{abbreviation}: generic name (\emph{ATC code}) diff --git a/pkgdown/extra.css b/pkgdown/extra.css index df38f6b5..2c0d74ab 100644 --- a/pkgdown/extra.css +++ b/pkgdown/extra.css @@ -50,6 +50,7 @@ a, a:hover, a:focus { } a[href], a[href]:hover, a[href]:focus, code a[href], code a[href]:hover, code a[href]:focus, +a[href] code, a[href] code:hover, a[href] code:focus, pre a[href], pre a[href]:hover, pre a[href]:focus, a code[href], a code[href]:hover, a code[href]:focus, a pre[href], a pre[href]:hover, a pre[href]:focus { @@ -139,3 +140,9 @@ thead { tbody { border-bottom: 2px solid black; } +table a:not(.btn), .table a:not(.btn) { + text-decoration: inherit; +} +table a:not(.btn):hover, .table a:not(.btn):hover { + text-decoration: underline; +} diff --git a/tests/testthat/test-guess_ab_col.R b/tests/testthat/test-guess_ab_col.R new file mode 100644 index 00000000..e72d6259 --- /dev/null +++ b/tests/testthat/test-guess_ab_col.R @@ -0,0 +1,36 @@ +# ==================================================================== # +# TITLE # +# Antimicrobial Resistance (AMR) Analysis # +# # +# SOURCE # +# https://gitlab.com/msberends/AMR # +# # +# LICENCE # +# (c) 2019 Berends MS (m.s.berends@umcg.nl), Luz CF (c.f.luz@umcg.nl) # +# # +# This R package is free software; you can freely use and distribute # +# it for both personal and commercial purposes under the terms of the # +# GNU General Public License version 2.0 (GNU GPL-2), as published by # +# the Free Software Foundation. # +# # +# This R package was created for academic research and was publicly # +# released in the hope that it will be useful, but it comes WITHOUT # +# ANY WARRANTY OR LIABILITY. # +# Visit our website for more info: https://msberends.gitab.io/AMR. # +# ==================================================================== # + +context("guess_ab_col.R") + +test_that("guess_ab_col works", { + + expect_equal(guess_ab_col(septic_patients, "amox"), + "amox") + expect_equal(guess_ab_col(septic_patients, "amoxicillin"), + "amox") + expect_equal(guess_ab_col(septic_patients, "J01AA07"), + "tetr") + expect_equal(guess_ab_col(septic_patients, "tetracycline"), + "tetr") + expect_equal(guess_ab_col(septic_patients, "TETR"), + "tetr") +}) diff --git a/vignettes/AMR.Rmd b/vignettes/AMR.Rmd index 662d03e3..d6fe1289 100755 --- a/vignettes/AMR.Rmd +++ b/vignettes/AMR.Rmd @@ -21,8 +21,6 @@ knitr::opts_chunk$set( fig.width = 7.5, fig.height = 4.5 ) -# set to original language (English) -Sys.setlocale(locale = "C") ``` **Note:** values on this page will change with every website update since they are based on randomly created values and the page was written in [RMarkdown](https://rmarkdown.rstudio.com/). However, the methodology remains unchanged. This page was generated on `r format(Sys.Date(), "%d %B %Y")`. diff --git a/vignettes/EUCAST.Rmd b/vignettes/EUCAST.Rmd index f9d5a35f..4db83445 100644 --- a/vignettes/EUCAST.Rmd +++ b/vignettes/EUCAST.Rmd @@ -21,8 +21,6 @@ knitr::opts_chunk$set( fig.width = 7.5, fig.height = 4.5 ) -# set to original language (English) -Sys.setlocale(locale = "C") ``` ## Introduction diff --git a/vignettes/G_test.Rmd b/vignettes/G_test.Rmd index 64a89f49..019c2f08 100755 --- a/vignettes/G_test.Rmd +++ b/vignettes/G_test.Rmd @@ -18,8 +18,6 @@ knitr::opts_chunk$set( collapse = TRUE, comment = "#" ) -# set to original language (English) -Sys.setlocale(locale = "C") ``` *(will be available soon - in the meanwhile, please read about [this *G*-test in the manual](./../reference/g.test.html))* diff --git a/vignettes/Predict.Rmd b/vignettes/Predict.Rmd index 8ee2e1cd..56cdbac3 100755 --- a/vignettes/Predict.Rmd +++ b/vignettes/Predict.Rmd @@ -18,8 +18,6 @@ knitr::opts_chunk$set( collapse = TRUE, comment = "#" ) -# set to original language (English) -Sys.setlocale(locale = "C") ``` *(will be available soon)* diff --git a/vignettes/benchmarks.Rmd b/vignettes/benchmarks.Rmd new file mode 100755 index 00000000..e2308414 --- /dev/null +++ b/vignettes/benchmarks.Rmd @@ -0,0 +1,205 @@ +--- +title: "Benchmarks" +author: "Matthijs S. Berends" +date: '`r format(Sys.Date(), "%d %B %Y")`' +output: + rmarkdown::html_vignette: + toc: true + toc_depth: 3 +vignette: > + %\VignetteIndexEntry{Benchmarks} + %\VignetteEncoding{UTF-8} + %\VignetteEngine{knitr::rmarkdown} +editor_options: + chunk_output_type: console +--- + +```{r setup, include = FALSE, results = 'markup'} +knitr::opts_chunk$set( + collapse = TRUE, + comment = "#", + fig.width = 7.5, + fig.height = 4.5 +) +``` + +One of the most important features of this package is the complete microbial taxonomic database, supplied by ITIS (https://www.itis.gov). We created a function `as.mo()` that transforms any user input value to a valid microbial ID by using AI (Artificial Intelligence) and based on the taxonomic tree of ITIS. + +Using the `microbenchmark` package, we can review the calculation performance of this function. + +```r +library(microbenchmark) +``` + +In the next test, we try to 'coerce' different input values for *Staphylococcus aureus*. The actual result is the same every time: it returns its MO code `B_STPHY_AUR` (*B* stands for *Bacteria*, the taxonomic kingdom). + +But the calculation time differs a lot. Here, the AI effect can be reviewed best: + +```r +microbenchmark(A = as.mo("stau"), + B = as.mo("staaur"), + C = as.mo("S. aureus"), + D = as.mo("S. aureus"), + E = as.mo("STAAUR"), + F = as.mo("Staphylococcus aureus"), + G = as.mo("B_STPHY_AUR"), + times = 10, + unit = "ms") +# Unit: milliseconds +# expr min lq mean median uq max neval +# A 34.745551 34.798630 35.2596102 34.8994810 35.258325 38.067062 10 +# B 7.095386 7.125348 7.2219948 7.1613865 7.240377 7.495857 10 +# C 11.677114 11.733826 11.8304789 11.7715050 11.843756 12.317559 10 +# D 11.694435 11.730054 11.9859313 11.8775585 12.206371 12.750016 10 +# E 7.044402 7.117387 7.2271630 7.1923610 7.246104 7.742396 10 +# F 6.642326 6.778446 6.8988042 6.8753165 6.923577 7.513945 10 +# G 0.106788 0.131023 0.1351229 0.1357725 0.144014 0.146458 10 +``` + +In the table above, all measurements are shown in milliseconds (thousands of seconds), tested on a quite regular Linux server from 2007 (Core 2 Duo 2.7 GHz, 2 GB DDR2 RAM). A value of 6.9 milliseconds means it will roughly determine 144 input values per second. It case of 39.2 milliseconds, this is only 26 input values per second. The more an input value resembles a full name (like C, D and F), the faster the result will be found. In case of G, the input is already a valid MO code, so it only almost takes no time at all (0.0001 seconds on our server). + +To achieve this speed, the `as.mo` function also takes into account the prevalence of human pathogenic microorganisms. The downside is of course that less prevalent microorganisms will be determined far less faster. See this example for the ID of *Burkholderia nodosa* (`B_BRKHL_NOD`): + +```r +microbenchmark(A = as.mo("buno"), + B = as.mo("burnod"), + C = as.mo("B. nodosa"), + D = as.mo("B. nodosa"), + E = as.mo("BURNOD"), + F = as.mo("Burkholderia nodosa"), + G = as.mo("B_BRKHL_NOD"), + times = 10, + unit = "ms") +# Unit: milliseconds +# expr min lq mean median uq max neval +# A 124.175427 124.474837 125.8610536 125.3750560 126.160945 131.485994 10 +# B 154.249713 155.364729 160.9077032 156.8738940 157.136183 197.315105 10 +# C 66.066571 66.162393 66.5538611 66.4488130 66.698077 67.623404 10 +# D 86.747693 86.918665 90.7831016 87.8149725 89.440982 116.767991 10 +# E 154.863827 155.208563 162.6535954 158.4062465 168.593785 187.378088 10 +# F 32.427028 32.638648 32.9929454 32.7860475 32.992813 34.674241 10 +# G 0.213155 0.216578 0.2369226 0.2338985 0.253734 0.285581 10 +``` + +That takes up to 11 times as much time! A value of 158.4 milliseconds means it can only determine ~6 different input values per second. We can conclude that looking up arbitrary codes of less prevalent microorganisms is the worst way to go, in terms of calculation performance. + +To relieve this pitfall and further improve performance, two important calculations take almost no time at all: **repetitive results** and **already precalculated results**. + +### Repetitive results + +Repetitive results mean that unique values are present more than once. Unique values will only be calculated once by `as.mo()`. We will use `mo_fullname()` for this test - a helper function that returns the full microbial name (genus, species and possibly subspecies) and uses `as.mo()` internally. + +```r +library(dplyr) +# take 500,000 random MO codes from the septic_patients data set +x = septic_patients %>% + sample_n(500000, replace = TRUE) %>% + pull(mo) + +# got the right length? +length(x) +# [1] 500000 + +# and how many unique values do we have? +n_distinct(x) +# [1] 96 + +# only 96, but distributed in 500,000 results. now let's see: +microbenchmark(X = mo_fullname(x), + times = 10, + unit = "ms") +# Unit: milliseconds +# expr min lq mean median uq max neval +# X 114.9342 117.1076 129.6448 120.2047 131.5005 168.6371 10 +``` + +So transforming 500,000 values (!) of 96 unique values only takes 0.12 seconds (120 ms). You only lose time on your unique input values. + +Results of a tenfold - 5,000,000 values: + +```r +# Unit: milliseconds +# expr min lq mean median uq max neval +# X 882.9045 901.3011 1001.677 940.3421 1168.088 1226.846 10 +``` + +Even the full names of 5 *Million* values are calculated within a second. + +### Precalculated results + +What about precalculated results? If the input is an already precalculated result of a helper function like `mo_fullname()`, it almost doesn't take any time at all (see 'C' below): + +```r +microbenchmark(A = mo_fullname("B_STPHY_AUR"), + B = mo_fullname("S. aureus"), + C = mo_fullname("Staphylococcus aureus"), + times = 10, + unit = "ms") +# Unit: milliseconds +# expr min lq mean median uq max neval +# A 11.364086 11.460537 11.5104799 11.4795330 11.524860 11.818263 10 +# B 11.976454 12.012352 12.1704592 12.0853020 12.210004 12.881737 10 +# C 0.095823 0.102528 0.1167754 0.1153785 0.132629 0.140661 10 +``` + +So going from `mo_fullname("Staphylococcus aureus")` to `"Staphylococcus aureus"` takes 0.0001 seconds - it doesn't even start calculating *if the result would be the same as the expected resulting value*. That goes for all helper functions: + +```r +microbenchmark(A = mo_species("aureus"), + B = mo_genus("Staphylococcus"), + C = mo_fullname("Staphylococcus aureus"), + D = mo_family("Staphylococcaceae"), + E = mo_order("Bacillales"), + F = mo_class("Bacilli"), + G = mo_phylum("Firmicutes"), + H = mo_subkingdom("Posibacteria"), + I = mo_kingdom("Bacteria"), + times = 10, + unit = "ms") +# Unit: milliseconds +# expr min lq mean median uq max neval +# A 0.105181 0.121314 0.1478538 0.1465265 0.166711 0.211409 10 +# B 0.132558 0.146388 0.1584278 0.1499835 0.164895 0.208477 10 +# C 0.135492 0.160355 0.2341847 0.1884665 0.348857 0.395931 10 +# D 0.109650 0.115727 0.1270481 0.1264130 0.128648 0.168317 10 +# E 0.081574 0.096940 0.0992582 0.0980915 0.101479 0.120477 10 +# F 0.081575 0.088489 0.0988463 0.0989650 0.103365 0.126482 10 +# G 0.091981 0.095333 0.1043568 0.1001530 0.111327 0.129625 10 +# H 0.092610 0.093169 0.1009135 0.0985455 0.101828 0.120406 10 +# I 0.087371 0.091213 0.1069758 0.0941815 0.109302 0.192831 10 +``` + +Of course, when running `mo_phylum("Firmicutes")` the function has zero knowledge about the actual microorganism, namely *S. aureus*. But since the result would be `"Firmicutes"` too, there is no point in calculating the result. And because this package 'knows' all phyla of all known microorganisms (according to ITIS), it can just return the initial value immediately. + +### Results in other languages + +When the system language is non-English and supported by this `AMR` package, some functions take a little while longer: + +```r +mo_fullname("CoNS", language = "en") # or just mo_fullname("CoNS") on an English system +# "Coagulase Negative Staphylococcus (CoNS)" + +mo_fullname("CoNS", language = "fr") # or just mo_fullname("CoNS") on a French system +# "Staphylococcus à coagulase négative (CoNS)" + +microbenchmark(en = mo_fullname("CoNS", language = "en"), + de = mo_fullname("CoNS", language = "de"), + nl = mo_fullname("CoNS", language = "nl"), + es = mo_fullname("CoNS", language = "es"), + it = mo_fullname("CoNS", language = "it"), + fr = mo_fullname("CoNS", language = "fr"), + pt = mo_fullname("CoNS", language = "pt"), + times = 10, + unit = "ms") +# Unit: milliseconds +# expr min lq mean median uq max neval +# en 6.093583 6.51724 6.555105 6.562986 6.630663 6.99698 100 +# de 13.934874 14.35137 16.891587 14.462210 14.764658 43.63956 100 +# nl 13.900092 14.34729 15.943268 14.424565 14.581535 43.76283 100 +# es 13.833813 14.34596 14.574783 14.439757 14.653994 17.49168 100 +# it 13.811883 14.36621 15.179060 14.453515 14.812359 43.64284 100 +# fr 13.798683 14.37019 16.344731 14.468775 14.697610 48.62923 100 +# pt 13.789674 14.36244 15.706321 14.443772 14.679905 44.76701 100 +``` + +Currently supported are German, Dutch, Spanish, Italian, French and Portuguese. diff --git a/vignettes/freq.Rmd b/vignettes/freq.Rmd index cbf22f04..250a51f9 100644 --- a/vignettes/freq.Rmd +++ b/vignettes/freq.Rmd @@ -22,8 +22,6 @@ knitr::opts_chunk$set( fig.width = 7.5, fig.height = 4.5 ) -# set to original language (English) -Sys.setlocale(locale = "C") library(dplyr) library(AMR) ``` diff --git a/vignettes/mo_property.Rmd b/vignettes/mo_property.Rmd index 4ccbbdeb..71aee34c 100755 --- a/vignettes/mo_property.Rmd +++ b/vignettes/mo_property.Rmd @@ -18,8 +18,6 @@ knitr::opts_chunk$set( collapse = TRUE, comment = "#" ) -# set to original language (English) -Sys.setlocale(locale = "C") ``` *(will be available soon)*