msberends / AMR

Functions to simplify and standardise antimicrobial resistance (AMR) data analysis and to work with microbial and antimicrobial properties by using evidence-based methods, as described in https://doi.org/10.18637/jss.v104.i03.
https://msberends.github.io/AMR/
Other
83 stars 12 forks source link

Phenotype-based first isolate determination selects too many isolates #122

Closed msberends closed 10 months ago

msberends commented 11 months ago

Phenotype-based first isolate determination selects too many isolates:

tibble(mo = as.mo("S. aureus"),
       fluclox = as.sir(rep(c("S", "R"), 5)),
       cefoxitin = fluclox,
       date = Sys.Date() - c(-10:-1),
       id = "A") %>% 
    mutate(phenotype = first_isolate(method = "phenotype", col_patient_id = "id"),
           episode = first_isolate(method = "episode", col_patient_id = "id"),
           patient = first_isolate(method = "patient", col_patient_id = "id"),
           isolate = first_isolate(method = "isolate", col_patient_id = "id"))

image

Should only return TRUE for each phenotype.

msberends commented 10 months ago

So, the problem here was that the phenotype-based algorithm checked the antimicrobial results in the previous row only.

In the new version of AMR, antimicrobial results of all isolates found in a patient will be checked. This leads to this result (notice how the phenotype column are now not all TRUE anymore):

tibble(mo = as.mo("S. aureus"),
       fluclox = as.sir(rep(c("S", "R"), 5)),
       cefoxitin = fluclox,
       date = Sys.Date() - c(-10:-1),
       id = "A") %>% 
    mutate(phenotype = first_isolate(method = "phenotype", col_patient_id = "id"),
           episode = first_isolate(method = "episode", col_patient_id = "id"),
           patient = first_isolate(method = "patient", col_patient_id = "id"),
           isolate = first_isolate(method = "isolate", col_patient_id = "id"))
image

When adding another antibiotic, it can clearly be seen that the algorithm now works as expected:

tibble(mo = as.mo("S. aureus"),
       fluclox = as.sir(rep(c("S", "R"), 5)),
       cefoxitin = fluclox,
       genta = as.sir(c(rep("S", 5), rep("R", 5))),
       date = Sys.Date() - c(-10:-1),
       id = "A") %>% 
    mutate(phenotype = first_isolate(method = "phenotype", col_patient_id = "id"),
           episode = first_isolate(method = "episode", col_patient_id = "id"),
           patient = first_isolate(method = "patient", col_patient_id = "id"),
           isolate = first_isolate(method = "isolate", col_patient_id = "id"))
image

As intended, it now only returns TRUE for each phenotype.