Comments (10)
Sorry posted too soon. See updated message above
from amr.
Is it possible to have a 'conservative' option for as.rsi
as.rsi(....., conservative = FALSE)
from amr.
Ah, but WHONET is actually wrong there I think.
Fact is, we don't know if the MIC is 4 since it was capped at >=2. If you as a professional would treat it as a potential 4, that's up to you (or your colleagues). I can of course as an epidemiologist imagine why they would treat it as R, but for this function to work reliably and sustainably, we have to treat the data 'as is'.
Imagine your lab result would be >2 and the breakpoint for R would be >=8, how would you then treat it? If that's a clear S or I, should we take into account log2 calculations to determine the difference between those values? That's quite a horrible way of interpreting raw results. What we could do, is treat >=2
as 2, and >2
as 2 * 2 (= 4). But then that would become a problem in lower MICs, where the steps may not be powers of 2, but rather e.g. 0.0125 < 0.0188 < 0.0250.
Is it possible to have a 'conservative' option for as.rsi
as.rsi(....., conservative = FALSE)
That I do like. But then perhaps something a bit more clear, like maintain_capped_values
, treat_capped_as_maximum
, ... Not sure yet. We could then say: if the raw input value is something like ">.."
(but not ">=.."
), it should always be R since it would surpass the breakpoint anyway. Same with "<.."
, that should then be S. What do you think of that?
from amr.
Something like this?
# MIC clearly greater than 2, but at default is treated as 2, since we don't know the 'real' value
data.frame(mo = "A.baumanii",
CIP = ">2") %>%
as.rsi(guideline = 'CLSI 2019')
#> mo CIP
#> 1 A.baumanii I
# MIC clearly greater than 2, but now treated as R regardless of the number 2
data.frame(mo = "A.baumanii",
CIP = ">2") %>%
as.rsi(guideline = 'CLSI 2019', conserve_capped_values = TRUE)
#> mo CIP
#> 1 A.baumanii R
# MIC greater than or equal to 2, will be treated as 2, also with conserve_capped_values = TRUE
data.frame(mo = "A.baumanii",
CIP = ">=2") %>%
as.rsi(guideline = 'CLSI 2019', conserve_capped_values = TRUE)
#> mo CIP
#> 1 A.baumanii I
from amr.
That looks perfect.
I have been talking to my colleagues in the Philippines who run the national AMR program. The MIC values are coming from a Vitek machine and depending on the card used different values are reported. For instance for CIP with K.pneumo it report >=4
and >=8
whereas for E.coli it reports >2
. The former values are define positions on the log2 scale, whereas the latter is a truly a value somewhere/anywhere above 2 so should be interpreted as worse case scenario i.e R
from amr.
Awesome, then we'll keep it this way! Many thanks!
from amr.
An update
In the case of ABA and CIP the breakpoints are 1 and 4
2 should be reported as R since the next log2 increment from 2 is 4
1 WHONET reports as NS since it could be I or R
Could the change be made that for conserve_capped_values
if the X
in >X
is above the lower breakpoint but the next log2 increment is below the upper breakpoint it reports NS
else if the next log2 increment above X
matches or exceeds the upper breakpoint it reports R
.
I understand if you want to leave as is since this breaks the simple R, I , S tri state paradigm
from amr.
Oof, that's hard. We had to choose a 'truth' to go by when it comes to interpretation to R/SI. We chose to follow EUCAST, which means that I is not NS to us, but rather susceptible (albeit 'Susceptible, increased exposure'): please see our website https://msberends.github.io/AMR/reference/as.rsi.html#interpretation-of-r-and-s-i.
From our colleagues in Sweden we understood last year that the WHO (including WHONET, EARS-Net) were also to adopt this idea. A quick internet search brought me to the AMR Reporting Protocol 2020 from the ECDC, where I found on page 13:
I think it's wise to leave it as is. Unfortunately, the tri state paradigm is more complicated then we can capture in one methodology. Hopefully, being transparant and clear about our choices helps our users to understand how and why our package works the way it works.
But I'll keep thinking about it. If it seems more appropriate in a later phase to change the behaviour of as.rsi()
the way you suggest, we'll implement it of course immediately.
from amr.
Many thanks - totally understand. I think it is a clearer with the tri state paradigm
from amr.
Fix released to official R repository
Just a small notice: we released a new software version, containing the fix to this issue. Please update your version using either the user interface of your software, or by running:
install.packages("AMR")
from amr.
Related Issues (20)
- Clinical breakpoints for *Burkholderia mallei* and *Burkholderia pseudomallei* for all antibiotic might be wrong HOT 2
- Breakpoints prefer PK/PD
- NA converted to first defined custom micro-organism HOT 5
- UTI coding not being recognised in SIR interpretation HOT 12
- First isolate: ICU filtering based on wrong ordering
- typo in function name in tutorial for "Predicting future antimicrobial resistance using regression models" HOT 3
- In `clinical_breakpoints`, some values in `ref_tbl` are missing
- Problem with getting S. coagulans instead of old S. schleiferi coagulans
- `minimum_matching_score` not always considered
- Update clinical_breakpoints to WHONET 2023
- Rework EUCAST Expert Rules HOT 1
- how are IE cut-offs used in MIC graphs HOT 7
- Phenotype-based first isolate determination selects too many isolates HOT 1
- Errors in CLSI interpretation HOT 3
- Decrease time in printing tibbles HOT 1
- Add `keep_synonyms = TRUE` to internal 1st isolate determination
- Add more LOINC codes for antibiotics HOT 1
- Support for working with multiple patient species for veterinary antibiograms? HOT 1
- MIC decimals on dark RStudio too black
- Improvements for `as.mic()` and MIC plotting
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from amr.