From d94efb0f5e83b819fbd878c9c5c484fdebc74876 Mon Sep 17 00:00:00 2001 From: Matthijs Berends Date: Fri, 14 Feb 2025 14:16:46 +0100 Subject: [PATCH] (v2.1.1.9147) scale fixes and WISCA update, fix conserved capped values --- DESCRIPTION | 4 +- NAMESPACE | 2 + NEWS.md | 3 +- PythonPackage/AMR/AMR.egg-info/PKG-INFO | 2 +- ...ny.whl => AMR-2.1.1.9147-py3-none-any.whl} | Bin 10254 -> 10254 bytes PythonPackage/AMR/dist/amr-2.1.1.9146.tar.gz | Bin 10058 -> 0 bytes PythonPackage/AMR/dist/amr-2.1.1.9147.tar.gz | Bin 0 -> 10063 bytes PythonPackage/AMR/setup.py | 2 +- R/antibiogram.R | 420 +++++++++++------- R/ggplot_sir.R | 2 +- R/plotting.R | 74 +-- R/sir.R | 14 +- R/sysdata.rda | Bin 93336 -> 93624 bytes R/zzz.R | 2 +- ....txt => gpt_training_text_v2.1.1.9147.txt} | 110 +++-- data-raw/translations.tsv | 18 +- man/antibiogram.Rd | 81 ++-- man/plot.Rd | 25 +- tests/testthat/test-ggplot_sir.R | 4 +- 19 files changed, 430 insertions(+), 333 deletions(-) rename PythonPackage/AMR/dist/{AMR-2.1.1.9146-py3-none-any.whl => AMR-2.1.1.9147-py3-none-any.whl} (85%) delete mode 100644 PythonPackage/AMR/dist/amr-2.1.1.9146.tar.gz create mode 100644 PythonPackage/AMR/dist/amr-2.1.1.9147.tar.gz rename data-raw/{gpt_training_text_v2.1.1.9146.txt => gpt_training_text_v2.1.1.9147.txt} (99%) diff --git a/DESCRIPTION b/DESCRIPTION index ec225564e..967c91ccc 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,6 +1,6 @@ Package: AMR -Version: 2.1.1.9146 -Date: 2025-02-13 +Version: 2.1.1.9147 +Date: 2025-02-14 Title: Antimicrobial Resistance Data Analysis Description: Functions to simplify and standardise antimicrobial resistance (AMR) data analysis and to work with microbial and antimicrobial properties by diff --git a/NAMESPACE b/NAMESPACE index 3ce73cd9c..5b2dcbec3 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -322,10 +322,12 @@ export(retrieve_wisca_parameters) export(rifamycins) export(right_join_microorganisms) export(scale_color_mic) +export(scale_color_sir) export(scale_colour_mic) export(scale_colour_sir) export(scale_fill_mic) export(scale_fill_sir) +export(scale_sir_colors) export(scale_sir_colours) export(scale_x_mic) export(scale_x_sir) diff --git a/NEWS.md b/NEWS.md index a6710fb4b..67cbac601 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,4 @@ -# AMR 2.1.1.9146 +# AMR 2.1.1.9147 *(this beta version will eventually become v3.0. We're happy to reach a new major milestone soon, which will be all about the new One Health support! Install this beta using [the instructions here](https://msberends.github.io/AMR/#latest-development-version).)* @@ -45,6 +45,7 @@ This package now supports not only tools for AMR data analysis in clinical setti * It is now possible to use column names for argument `ab`, `mo`, and `uti`: `as.sir(..., ab = "column1", mo = "column2", uti = "column3")`. This greatly improves the flexibility for users. * Users can now set their own criteria (using regular expressions) as to what should be considered S, I, R, SDD, and NI. * To get quantitative values, `as.double()` on a `sir` object will return 1 for S, 2 for SDD/I, and 3 for R (NI will become `NA`). Other functions using `sir` classes (e.g., `summary()`) are updated to reflect the change to contain NI and SDD. + * Fix for `conserve_capped_values`, which now again works as expected: in MIC values, `x` will always be R * `antibiogram()` function * New argument `formatting_type` to set any of the 22 options for the formatting of all 'cells'. This defaults to `10` for non-WISCA and `14` for WISCA, changing the output of antibiograms to cells with more info. * For this reason, `add_total_n` is now `FALSE` at default since the denominators are added to the cells diff --git a/PythonPackage/AMR/AMR.egg-info/PKG-INFO b/PythonPackage/AMR/AMR.egg-info/PKG-INFO index d1084a0fa..50835e462 100644 --- a/PythonPackage/AMR/AMR.egg-info/PKG-INFO +++ b/PythonPackage/AMR/AMR.egg-info/PKG-INFO @@ -1,6 +1,6 @@ Metadata-Version: 2.2 Name: AMR -Version: 2.1.1.9146 +Version: 2.1.1.9147 Summary: A Python wrapper for the AMR R package Home-page: https://github.com/msberends/AMR Author: Matthijs Berends diff --git a/PythonPackage/AMR/dist/AMR-2.1.1.9146-py3-none-any.whl b/PythonPackage/AMR/dist/AMR-2.1.1.9147-py3-none-any.whl similarity index 85% rename from PythonPackage/AMR/dist/AMR-2.1.1.9146-py3-none-any.whl rename to PythonPackage/AMR/dist/AMR-2.1.1.9147-py3-none-any.whl index 2d9fc3353292a38b01a2ee9f090fa7c439c432a9..ea82d530e4555fa6ebdcbb7fb46985ee71ca7a0a 100644 GIT binary patch delta 650 zcmeAR=nLQt@MdNaVPIh3V9?F-+sIqa$_%78x3h|{fEn{RZ*p_!W%)&|E-Z+fTrVog zXg+zSXcZ&#W)ZP!UL}ysy1pNeV}K?^1F;+sJNgFc8tEAVp{1dT`Q(ktWz0ZjleJXj zfO&CE;7*AH@a_78HYJ$Jfjl>tM;!`k_( z5lj*%9_ctNDDrgelG=STg4tBz;IxXy<@UD4$7bf;`uY9-AH9?ElEOh6$JCZHerca; z=vprn7TQ<)B|Y~2(!^`^4{*TyP z!OXp0QO7Iu=ax@#NmE{5T_)gi*4N9==jr;7T1;X_zR%|`kre(R+BVJh;iCHRSrbCP zdo&&TdiT)Y%QMT@-OzQPu+n^%U3`+t-0ugsf0?lI^i9F}?b~K=f0-VT$9Sdm_OF@u z&NM6R-97P0;>Q|o<0a~wGUl!Ow$(9rPOjzS)6=agay7qO%ygZ_Z16`i^lqo@Y46H8 zD`xL{T-J1geQ}QA^Abb7lO-1}R&9N}<(`>pa%bDen57eL^W6RRVERLw8M;OC4ek2_ zycwB9nBhrbvap&JCo*c4FwPu{N%GUd6tIsi930t5g6 delta 650 zcmeAR=nLQt@MdNaVPIh3U=W(-yOFn?l^IBHZf6x?0W;=t-sI*Gp5_}h{eDvU^D2R4*7f~(90N2V8i?h9*wHsg*GSJ02rUgw%qDMCE@K8No2;cG z2h{7SqEQdhwE6D6dkKs{Ynd1r;bHZ> zrG`0X-xS#e0;b7{1xD+~COEUOoV{@B(-+UIQ>$W(zTV&et5jxxP}DZnK8r}j*H#@o^F`3Joemf z`95o{6W@JTaaLaQzb3ESv_Ejp#HANczk23j9%-ZTJZG(peC8zHJ&rl4tB+alVP#k7T(s<; z-}~#+p4!JQcP;yre!^L!DmQ3-)!OxmkK5SYBDbtulk7a>;D<|sVho=97yqeRJpIqa z__Ue_{xP2w{w-)>%XVwhJoGuRWq0l=kJ1&Y%Vqj5@BN^-OY{?^P4Epl} zycwB9nBhrbvap&JCo*c4FwPu{N%GUd6tIsnR51eO2* diff --git a/PythonPackage/AMR/dist/amr-2.1.1.9146.tar.gz b/PythonPackage/AMR/dist/amr-2.1.1.9146.tar.gz deleted file mode 100644 index 9ea0ebb611d79eab3340c86571d7521e3132f188..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10058 zcmcgwRZtv2lw@(Y-~<-;0KwgZOM<(*I|N%?gA?2d7Thhk`{EirxVtTTT-|-#-+kTH zRM+(D>3Z`wQ?G$B$jIR$)mE@j69?B%9IT(;7yoB29#(e~SC}*Z?`~_Y^%t*ID!sdH zEiA?MIvr^~A|4z%maZxUX~M~F=X)i5*eG&DZltXB+;YFqm%NQG{F9b2g0pCX>*-w* zQTSpQ^HE;gXRPzZYiERy$sxPJ>u*v~a*&Izk%gF=`tHsR=aj!@KHa>BSY30D-M)d$ zs1iGpcbooMOIuP6l9qEfZ&#P@?m|QlD(&(8yfU93QJ+XsU*F(qNoR*;*&Kx3| z_t3QlXuOdDxqspti1$VGRONZ>4a9j5Vqa;5N?JgH18-Q1XV713YN=4YW@!7=M}lLY zB|ZPHH&NnP`BM-msiYVJ5;_fmTnL*(q0(p22``5#yQBnoE_5zS-)f-kZR&FF7Y~9~ z0u&qYs`6I!yh13AbN=h3g=NJPz8r~E|s>mH<+r9pND9RCw>yLysWzAJ} zUKZSuYdG6))b9Q$DEo($ofx!Sn04jo2%Hu~nsFzU_QVt52pmG@M4U-~-fNmC8m_%I z7Ziv=BqA;q8p#*UWSh)uePP%vs@)WRPOT)er&OAy8-w`g?cXWzFhtDM)u}nI`z7!L@Z1y+_ZWifr7A{4gNWD;i<`0h%=eN>{;hhIN`7@);j#9a49`{gn&7>s1vsMV50^_z6kiWBy) zvZ^%pGlh<04~;ryI-_Z&v+6fPVr`CE1GJ@(?qaD#m5jFJZ=V6!aNg#q$#g_f?p`vw z%`6T^yzqKBrfJ6E=W{T*fN^zQ`}|~^w%-aISEI$Jqs4o2$p}kHRu(IlT2>|@ClR!{ZGOD z+5AH6r7gH!aQg~GH4_WvgZt=>4UIrpjL7h3azzwm%OfN4bEv~kK6+o zbEeoTJj_u#qZKm-$81Vw^m+Xs^R`#j_MN#u^2fB&jFC^lY+D{g|n~4)BY8SL+;H z!$|$P1n_It-!O9Fkq)rY+(LB>I*gyp80=4FXr!!7g^^4E@_ExhLmTUY{@U$dRJ}l& zXCc@Kq~UGVkTZo6^SAXx7;t|%%Tn!1{t{3*%F(g zh&hpZ^H3sqU=D4wGjZbDo~VtGZyXJMsT5aYg$tfOH-8tOrWe-nw{@Y-);CEJjOvnf zHG0%vbLLq(%qT%8S@UViakM9j2^XId-Zjg;Nt^j z1P;zE8IlnMdc+xqVf!(YdY3sP%BPdg#g2ne%IFNfsfsKQ(s()R)mb=c^)!&T6Wm#l zF|uayg%&Dtng@r^$R4LWxzml(;&6qq*)b#pDH48SOW;=e(|o8uuIoK!j_m(5rvb+i zUDk)uOOF4vwGpl=3=foQDHkqQbs6;oxHpgc15WYqy8_L}@L0=~EI6qyDa-I*{`l!K z>o}IxUYDy-+{x`kXA}Pjb}Pvj`aez`)BSuOL!j-zxX2^+c#v}S>kp`=MgxVe)M zCwV<7wz&evD0T2)pfEA)(?3)#KCH&4Oh0hl78t|-dr;Vqz^UUp?#Ve>=F2kZ!#cON zIT*1e96BcM7{tx(i^RuksF}WY=CEeY@v&GM?OXVTfOYs>jm=g6}b|$nphFZ%8&+$}jp)-7#$QCqFss zu-Fw(>gU}g{i&AET6UVg?_k@FXy1}mJ%fI<^#yXoiJYBzah>^|CHWA1&WF$E-(yDN zw4_-W+`7y_tK_A}ezT9R$x?Oy`oXcx;$KtXlqC$R-wG@#*t?Y^*{-K)Rp7$sqAr~t z%~s#eerOyvxeNt@;IW|UA0~KKk02FCx_{T&iKTK1G@j&R6lBv}<+rnO{=P*KakfI9 zkZZ%XBa^|o^yt`;u#~ZYdi+|TJyz=2(%}{OLKz$e#$x%&>!L+5ldPNubIs`ec<>U# zejD6SR5ZWk0qGwB=sZ!NC9?)y$4Abv&vnG$^9?AYA~6;maeIaH=@oS23b}B^aZ>WD zyjW||3>phmc{hC;?}|hNorO>Le&Eb|>N-(~{<|q-oMw^!%6%Q2nv`$H5;^Vl(D()5 zgdkv_AiUveU@hofU)Gy574Vz7`V0r?i|RReMuqxSI9mJ7vn#A1eMUWj6!kg=i9_O! z;jplwNYjsTvd8rcr-;I$avkR^E^BUUqQ&(FE~V(L;)|GQ)wTnEZfhZ>mEg751V8iC zm$-V_QYO+Ll4!!xXfSt|hKhyYCh^E{L`?5lA~lkYug8%*cyQBd3^#4lM%^W5x@nR1 ztAF-l&+1N4^7&R8`0#uxJe83i#Qi6UNo37$?2Gu^?$3qybq8)LHP*5LPJKmoo1TqW z`d#_D4*M)+(|!5=zWKyw!hy=-n7)Kg)rPNv10BS@ogVouqiWvx0zD4v33*($y?jYH ze}_h^RLB7MVr14JG!9u780L?mIS*oB*i?ZW4E{fB!{HmC_-po#f{I-gcivTt6#Xu{ zE~hK2pZ0CCG4XqWPNS19!9siY%opk!aRHsV`ir`>Yt2Fz>TAtNOBH{m8#JMda$-)M zP+U^J$+Jqk_iGzL;I9)=$hPr3X=M%c$HMb;NHr8M&E1%Q zMdyl9Z*oPteQ(qASBh2vG_~}j_4LyO*VA1e${hMQ?NPitN7vj~vN^(Nl)Y1!T%6V= z2Gc8S*F4wmhS-M82yL1G3fpX2!WXZuFxIR*ql_rwom4q1SgEppb$-teYhCBk1%zRy z+Y~K)y?y>LKS$N=jBJno7{<_U%IPE2iER^ceY&FXZA@;n7r~%T$JkN-T#>azD%rn) zob=cs8z$lv$o6^wVEYAc+0}_-bDDw7Hp?WL4mzHq_~8DS>w&3M(X=bi9mCqYb|kwc zkRfe*>7-2G#8ZaLXMosP20mw^TU~4FxX~)ky+$ar)UIv>myE}h!^a{#>NJI zaVF{0Dn`yVf}s~(YEv?8xw*?Sow8IVr-Pfg%~anPt}~9bX|8m$*|l@3#!n2wSoU-1 zu0<=K2AAcuWku*K`3Z~J)ud8IF`JjkJgp2T#0VI<5pzQ+8Vv^9Tf2DmB2RLyV|4>B3Y5M(WF zJYHT35b$ffY+N^2-$zRi4u(kY{AAP%V|8*lRDjVC? zG(^x z`jO1ZltBm)_5@*}Jx>bs<+@f0o(TKS4!fW1X_+ZH$SeTAu$2_3_vQ0#H|DqX*!ZeK zqOh162|TY|vkHbGqbP=<2kb$g`G1zEJ8aH4F$LJGZSU8xq1C}OBThJ$P`oiQ*NI(= z_hvCh__`+4b`xCuDd%VvC9R{V_dcIY>FK;gTWk=!!}td=L?4(qkhtVcetP+g&1od0 zpP%u%nH8Z89}7f;j%}soqRf0~DGm8z0L$@{Yq};Q-%N4Ta_JVnHxsP`)~1BV z5w3CQCv&WxXpW28PaRRhdV>>-Gt^2(g&pMaOis0M4hw32tA>5Ql)i~3nR71iYD+Y_ z-I(gt)@g3;cO|X(?#(O`SuF#w$UH^>}2*09>$uY=;sJR$GG&D zRNZqD9ov=25!LbE@1T=P)zy3l4_*DdYudYj_@54fcgK(SV(fo9s4ZveIo^TtIVKhV z9g|Tyjq8l>0?vD(@eZX(oyN*{*egyH{$qU?LUm|FZkoxIt1{ix5j6e8NGCn!BA~?8 z!WNiO@v`M!c4t3y{MJJw$PNtcm!4jVQOmxE&q}6$(gmfO8{a4zEad%U=7(b=>FGsd zM8nw14-OhfbarO6C;)sMA*M*x01-3?;R*hE?DNa=i`HsYy}(kWzta8$>yW!Cnu{;0dBd(e9o9M6O>XIFxdv7QPwp z(*)ve;k3M(6uc3~-Ekhfukx(!^vuZwZFN!ag^K_9UBa6*El5cSyg2c$cAfNS{Am8n zvtGa}a2IIT0ATB9?uky#@J%H>Hash`8Ve#w?~Rf@vm*Jaji7)R?nra34?_YhHSi^^ z6SVF%mx5c@j1zpxGC}Z?VnLUYWwERcJf>{(AX_qQ+Lf$4b`bZJF)+TFmacy~IJXzT z`~m9jm{>tRG;or>2-XWFDrl$;%HBZmy#9XWHzTEd5vn&KL_KaxQR)@+$@A%37I(r- zN6(bRG|zwTam1Y^6|rh;nd~~P9~@^&^3Rma@045J5|hvM&L@JfX|ogPyXZsN>?F{Cs!t3(u033x?cS%U4?7q~wQp%uoE4clD#y z*ci7WmSPLwk8EJcgqVnl^7|h#oKYVfAPpgY|12=#C{eQ5^HX*w1cZZR_Jz_dmji=} zaUFT~Uj{Jyq}@L<&ZkfkI7|F3aKo*)fP0={jpSX9Y3bmK5+>de@@1B{?FQAr+T`Xq zY=6n>S&wUNh&nz)MaRUm{ML;UW7t7C)k5QfJow-&O}(lT%|lv9Mi^4H0E%QC%s?yU zsSpLyQmE0%!runK?JMHuGjbXONw?Zl3lvvs|KtN2ia1hMp1DPBSK1tV#+u-5cwBPo z5pN$jQZg27rD7g6suCTotGbt%#4|BsCL?XtgShm3WBkf$05{4g;OyaJ>0C!O(%%k! zwjTKF_R%`fP5KwN+6$eJ=34=F~k8G8?G z(w2J+L>o||`63a_+u*QWpGbfJMO2#%JG zSv`q(rRn(C!vi@_6V^zlDyyL=;OYc4^y~gyk|7iBeb^YjO$VZgp9xE))mz5jl8H?q z({ZZ+XG_J*UJZoVyRRQHwrzQP3ahG*VkPam-INj4TCb{0c~2X*4Jb?LLc#^qf9bK3 z?`pc`X~l8#qh;~|qzxoy+j%wd7nM&soSu)#J>uV7#2rC}1HazV%8Lk%EI_`U+YBAU zw*gLIpkL`aBA|cS8>s`dH_9?%qT~RwyM1)%&3>Net|InaG}p_!!PymyHnF#z zzZL;feknpBSz*nY#=7#KnmIUy4)40Wdf`IPFczQv3ZU_HyW3u??`bDUU@rv>Sg|iT zg%Z|5Lq6#so3 zxGBqfcDpp+|JM}Y>fm$OYp}nC(lX_IHnAl6&rWz>P5v%j1BD1cmVH_kRE*Za^L_}02gb|E5V`+R? z;39Z79FLV?gRN`inp83O^$b@)e@>btBMIj+oJKZa;JBsEe4Q;|>__17lP`miaX@cC z8_}D~t1Z*nU?YD9&6jeq`-#u`AJqT#vx$m|3h7K|aYh8RdTJl$owQPz!>WcM`2!hkiv=gJ4H>QEze|$UxnKcse z5ff_To1`}0N>j@Sm{8mepFury4rRyTkKVGL&s>Y=x&&9SELR8PMp8)*k}r~D8xNq( z{uJUYFQ;^3R*JJ$LFFU@yj@v|)z$^^^!MZhtRb<-BMTpy(M}^DY5t|iO@wfGjTfJYbdO|noFpT7*HLtqcI%yd! z6K&?%GoEXIBnY>7&><_kK5R9n`Obg^(ZriIl&kf3rxSh2q~7<+ljj@inZ#C|6Zda% z6rZo`spMGu2SQ&Q;U~h%Th%zHEbtL1@N%Q>>Fm(Eo?t_5tJ+D3*s-);5+(}pP~FTB z3z|M!BaRpDiw6TxZ{a2>Fw@{@0jQDVCy14tK-sU2nJB{R$dqjQFnv!{-^r)j&xVfs zVjP>E4bGxX)XX4yd`iE{#RZaD8;Ch;Q8xd|{6bnCi{*RUG@&baN_1P?L4d#&X{$+OLkb44;pBq&@2!SF$* z@(r`#<_;co1w^NEqC>Z@3uzNkjx8`y!xsyZAQ4*`@bCNsOce~OxrIo=5{6ev@8D?q zT(!BoQ5|U;frgZ8Rcv8E!{z?*;dQAM8)u(}c@0is!le`HJRRbX!ZU`Rw?|BR0=2vi z^Vrbt_TED3#e80(zE|}7dx5vXkL-25LCxj>*~Eu7`m}f>J8SPxY3U@GhB`UnD%sT_ zhIv?xUm;2Q_uoUPzTHt%Ibnqb9CK99WzgR(U*+a zEbIY$0R9+fGMBo^)(+E9$lr#+m&3MuO2a469o@3v+{T&c$xd0%Jys*cN=qg8&-W-V zc2Vc=^2RWjxzIO?fOAHQe^??W6iPHc*E_J#SFIZ8v5QlW8v98q|I3A5p6)(6)7`|m zTG?A$e4-_`EYb`FcVG^zvv)~Jv#ccbb*}@W<>ap11|^S{Nn?oO#Ir(txe&}gXB2g< z5tAz+rnRJI%nvG0vr5D#>?E?*W2fMw#E!D1Uz+>^pHNbTV?GMh17h7Q z4JWCiz@TH=DkOOL)8uE#LL?^(-#g*z6a_FNVGHDS3&z%E`_f?sC?g||Dg1j8 zN}*A~1#Gl9fX$~ig@z7At9-L>A`kk9e+IfgOdLW2OOF1TzBM zx8aDoEIHlTB^*%P0w4XPPa*M(;=;45;^r*1{bx~&%YuP=tXh900lh}^tDQfVgwyAG z*n{Y#|DYCGyNmskRNme_{GJeDxASpO1UqaG`_#iMH;hiy#~pFE9K)={sR}c{RrNmR z168lc)EdXW|M9khH2nmPF&;_2QpXKz;Lc?5X)x+GumBllSFXX)LXSPicvm)wDmgkq zj;n2egNpfnu2o~L7L?vTi8oXd!In1Q$D{aKsT)qdp^K$y5!n4j^?q}qxbMuo_pGLD9HC>inL=Z**-d&u@;I_Qs zGuD`{5BcAow&{hn->e)ne~#F!w>K9#eXEKxrG>j6*GBktVFeEAE{WTE;9m5{`+BMu zVMWrCDBx4>CxHnXF%-^w23a&QR+YHt{s8(c_@|rBqFr%ani|5YLF+%7<`s8+QS^wWEPE#;7DEB;v#_?k?(h+m z*%)o#60ifUNCv1IE`!nww$}|i3Qb@#J(8<(UaJ;-ew+}rd4w(#wmhlg4w=Lwadvf& zAZ!Ye4;7Snf1&K5LZh}gmH=9J<3D&o5E=O+ALn2Y#6)$G(vtLjSr3Uyc5nAu?ic|j zFIVy^&95*w$azyH_lYd1L$#KNL-1iH3BD8vLQ$A&js-=u0I81PM#~Y^8$Ufh_(e8jD2SX(`^~vEM2y52USu)uPbdP0bHg#tmpXmm$*|| z+gfIdJ93TjJ}=+cuQ3$S5rnOl9t>ext#?Ru0H6Ky)kNPh6^#5f?Ef7*-bggS^ZVoT zN<0F#&0!iwhMze0dwOh6;mYykO2Ly!4VO5fFKATF-~QK8q~)@qGNwdo&1ormg{3h8 zS7B!f8gO^q6mYe_@L>evVbQ@JUPQmUI*=dg2oOil-VYJgNRaCG5+aFxruSnYL4PiK zGk(~I!6p=?ZA0$UV`oM+A7a8Zr?82eo4INg%~;0?4Y=Anv%m?Jp$hqAko{$ycpwL# z6Vc`A_34BPId8&}@4*1+8bM453A_94AzsJrwJo#bek@=7yW5`6@Xbg@!`*M=eRh$f z3v^S5ALFsLqcAchj|sgK`Z#(rd_<+}za)sA6H1D+N;1}^F+*mcMMJ4n_>NMUL^C4i z9F_imUKr9|uIl(gg#+%0=*^O6Y^bOoJ!I|A(R3!XdqH64jHg64_<<|u(1V<%6p@iu zdh?{TUb}0bDh=-{6+@RL)Af_P-Ju|^kZ@)+Ask!mGP;bHE-H4Ux=W1}9K`^1A*qaR z-tn}q#pB{8Ljwx0(qa1HPI0UXC0h(3=fzohQMW3#npQXgatqu5`;0^4i3C<>C4v>9 zCk#cj-K9uU4#d1h!H>2b3Xcn-Guq@p6=kWWL%Z6OfpYM*9S(Te4NaFv)_a}7KV&Ju ztFtNDrPMaNj67K$G5=I17sl5A1-9yaB=zwVAdlPi^dI-TJkVJ$BepLOy;!Vv+BB{j zhRA`EW{d)&n>WTbAXxcCYUWI7$rP>=LzUN3;&RqTjyv%1j9 zlIn}r#Y}8b>YDB@?=iB*5A1lvq21~sphOQ<_I2zCX4Ad~Q}O|OYmjZ+iv1$VNn?bEaf?bo zX@fYrUWtg*;BwQ=33it-DDvYs(5`0To_;Ji|B# zou#F(sBKL*=-l2HqLs5=+piw`PAjSce0@4E@F~lM7GJ5{reHzh`^r~O?jNL|SHP>m zJY5^IJo&Wt;t;6r*Xl=R-c_WUHCe+7*N05B?C~ZTQdA5VBuVG5zfCfgsu@8waSl-& zf9sVf4RQ~8%(1Fgp;h;w3dp7{^r0EDspS;V=68Min{*@G$QkNY!+ZL$^bCb>34M29 zIU9)hzTPf0R68_3c7dx~B(z>-mrRDpkA1F5k$CmlRRT)g7!qrrX2dEKe?}9JdRm(m zhj@9B*{jm5`SQA5D%i)cmfxju->!AeKh_L^xZf(SKx>cPlRTiPtL`N|QYcdAuDDSw z6w9T&y86G)-z(c!BOvr9cPZ@_>Kk%*(H)OOeFu36(SL2&eiSshGO0cOVEd}I+f4#p zxT}hX=Gpl-twN3BpX_adqM@%Cl{|P_H8sgllmQ+*4Vxh+` zz&l8Mdspn$rk?-(8yhk7rGMu639G1AI|q76L1=WaT@?q6gg2!ZyQZD^!C%6f{hGh9 zQ|{13NxUR5_0Ze48PChWw(CYU^}uO?%Rjn%5Z1Sv!>4unwwO%uc5tCPnzSrZO&KNe z=oFAGE<(BC$)Gx*eDwGjd;__Iqq)CX5fJ^m*HtJ|0E*nEV*Za^aXF#HR6Wz`jei&pLE^Au9igx!P!j%S71re h5Qj&(g2AzBTKjx4>;F#u2bZ8o@e7mOFk1ka{{Y$U)=&Td diff --git a/PythonPackage/AMR/dist/amr-2.1.1.9147.tar.gz b/PythonPackage/AMR/dist/amr-2.1.1.9147.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..cceae66c4fd4cd4bb6a51411ff175cd4f86b56e9 GIT binary patch literal 10063 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 literal 0 HcmV?d00001 diff --git a/PythonPackage/AMR/setup.py b/PythonPackage/AMR/setup.py index 87949ce57..dc2ecc627 100644 --- a/PythonPackage/AMR/setup.py +++ b/PythonPackage/AMR/setup.py @@ -2,7 +2,7 @@ from setuptools import setup, find_packages setup( name='AMR', - version='2.1.1.9146', + version='2.1.1.9147', packages=find_packages(), install_requires=[ 'rpy2', diff --git a/R/antibiogram.R b/R/antibiogram.R index 0d2ea5166..e122605f2 100755 --- a/R/antibiogram.R +++ b/R/antibiogram.R @@ -38,7 +38,7 @@ #' @param mo_transform a character to transform microorganism input - must be `"name"`, `"shortname"` (default), `"gramstain"`, or one of the column names of the [microorganisms] data set: `r vector_or(colnames(microorganisms), sort = FALSE, quotes = TRUE)`. Can also be `NULL` to not transform the input or `NA` to consider all microorganisms 'unknown'. #' @param ab_transform a character to transform antimicrobial input - must be one of the column names of the [antibiotics] data set (defaults to `"name"`): `r vector_or(colnames(antibiotics), sort = FALSE, quotes = TRUE)`. Can also be `NULL` to not transform the input. #' @param syndromic_group a column name of `x`, or values calculated to split rows of `x`, e.g. by using [ifelse()] or [`case_when()`][dplyr::case_when()]. See *Examples*. -#' @param add_total_n a [logical] to indicate whether total available numbers per pathogen should be added to the table (default is `TRUE`). This will add the lowest and highest number of available isolates per antimicrobial (e.g, if for *E. coli* 200 isolates are available for ciprofloxacin and 150 for amoxicillin, the returned number will be "150-200"). +#' @param add_total_n a [logical] to indicate whether `n_tested` available numbers per pathogen should be added to the table (default is `TRUE`). This will add the lowest and highest number of available isolates per antimicrobial (e.g, if for *E. coli* 200 isolates are available for ciprofloxacin and 150 for amoxicillin, the returned number will be "150-200"). This option is unavailable when `wisca = TRUE`; in that case, use [retrieve_wisca_parameters()] to get the parameters used for WISCA. #' @param only_all_tested (for combination antibiograms): a [logical] to indicate that isolates must be tested for all antimicrobials, see *Details* #' @param digits number of digits to use for rounding the antimicrobial coverage, defaults to 1 for WISCA and 0 otherwise #' @param formatting_type numeric value (1–22 for WISCA, 1-12 for non-WISCA) indicating how the 'cells' of the antibiogram table should be formatted. See *Details* > *Formatting Type* for a list of options. @@ -47,7 +47,7 @@ #' @param minimum the minimum allowed number of available (tested) isolates. Any isolate count lower than `minimum` will return `NA` with a warning. The default number of `30` isolates is advised by the Clinical and Laboratory Standards Institute (CLSI) as best practice, see *Source*. #' @param combine_SI a [logical] to indicate whether all susceptibility should be determined by results of either S, SDD, or I, instead of only S (default is `TRUE`) #' @param sep a separating character for antimicrobial columns in combination antibiograms -#' @param wisca a [logical] to indicate whether a Weighted-Incidence Syndromic Combination Antibiogram (WISCA) must be generated (default is `FALSE`). This will use a Bayesian decision model to estimate regimen coverage probabilities using [Monte Carlo simulations](https://en.wikipedia.org/wiki/Monte_Carlo_method). Set `simulations` to adjust. +#' @param wisca a [logical] to indicate whether a Weighted-Incidence Syndromic Combination Antibiogram (WISCA) must be generated (default is `FALSE`). This will use a Bayesian decision model to estimate regimen coverage probabilities using [Monte Carlo simulations](https://en.wikipedia.org/wiki/Monte_Carlo_method). Set `simulations`, `conf_interval`, and `interval_side` to adjust. #' @param simulations (for WISCA) a numerical value to set the number of Monte Carlo simulations #' @param conf_interval (for WISCA) a numerical value to set confidence interval (default is `0.95`) #' @param interval_side (for WISCA) the side of the confidence interval, either `"two-tailed"` (default), `"left"` or `"right"` @@ -64,7 +64,7 @@ #' #' ### Formatting Type #' -#' The formatting of the 'cells' of the table can be set with the argument `formatting_type`. In these examples, `5` is the antimicrobial coverage (for WISCA: `4-6` indicates the confidence level), `15` the numerator, and `300` the denominator: +#' The formatting of the 'cells' of the table can be set with the argument `formatting_type`. In these examples, `5` is the antimicrobial coverage (`4-6` indicates the confidence level), `15` the number of susceptible isolates, and `300` the number of tested (i.e., available) isolates: #' #' 1. 5 #' 2. 15 @@ -75,13 +75,11 @@ #' 7. 5 (N=300) #' 8. 5% (N=300) #' 9. 5 (15/300) -#' 10. 5% (15/300) - **default for non-WISCA** +#' 10. 5% (15/300) #' 11. 5 (N=15/300) #' 12. 5% (N=15/300) -#' -#' Additional options for WISCA (using `antibiogram(..., wisca = TRUE)` or `wisca()`): #' 13. 5 (4-6) -#' 14. 5% (4-6%) - **default for WISCA** +#' 14. 5% (4-6%) - **default** #' 15. 5 (4-6,300) #' 16. 5% (4-6%,300) #' 17. 5 (4-6,N=300) @@ -91,7 +89,7 @@ #' 21. 5 (4-6,N=15/300) #' 22. 5% (4-6%,N=15/300) #' -#' The default is `14` for WISCA and `10` for non-WISCA, which can be set globally with the package option [`AMR_antibiogram_formatting_type`][AMR-options], e.g. `options(AMR_antibiogram_formatting_type = 5)`. Do note that for WISCA, the numerator and denominator are less useful to report, since these are included in the Bayesian model and apparent from the susceptibility and its confidence level. +#' The default is `14`, which can be set globally with the package option [`AMR_antibiogram_formatting_type`][AMR-options], e.g. `options(AMR_antibiogram_formatting_type = 5)`. Do note that for WISCA, the total numbers of tested and susceptible isolates are less useful to report, since these are included in the Bayesian model and apparent from the susceptibility and its confidence level. #' #' Set `digits` (defaults to `0`) to alter the rounding of the susceptibility percentages. #' @@ -99,7 +97,7 @@ #' #' There are various antibiogram types, as summarised by Klinker *et al.* (2021, \doi{10.1177/20499361211011373}), and they are all supported by [antibiogram()]. #' -#' **Use WISCA whenever possible**, since it provides more precise coverage estimates by accounting for pathogen incidence and antimicrobial susceptibility, as has been shown by Bielicki *et al.* (2020, \doi{10.1001.jamanetworkopen.2019.21124}). See the section *Explaining WISCA* on this page. +#' For clinical coverage estimations, **use WISCA whenever possible**, since it provides more precise coverage estimates by accounting for pathogen incidence and antimicrobial susceptibility, as has been shown by Bielicki *et al.* (2020, \doi{10.1001.jamanetworkopen.2019.21124}). See the section *Explaining WISCA* on this page. Do note that WISCA is pathogen-agnostic, meaning that the outcome is not stratied by pathogen, but rather by syndrome. #' #' 1. **Traditional Antibiogram** #' @@ -174,14 +172,17 @@ #' #' At admission, no pathogen information is available. #' -#' - Action: broad-spectrum coverage is based on local resistance patterns and syndromic antibiograms. +#' - Action: broad-spectrum coverage is based on local resistance patterns and syndromic antibiograms. Using the pathogen-agnostic yet incidence-weighted WISCA is preferred. #' - Code example: #' #' ```r #' antibiogram(your_data, #' antibiotics = selected_regimens, -#' wisca = TRUE, #' mo_transform = NA) # all pathogens set to `NA` +#' +#' # preferred: use WISCA +#' wisca(your_data, +#' antibiotics = selected_regimens) #' ``` #' #' 2. **Refinement with Gram Stain Results** @@ -194,7 +195,6 @@ #' ```r #' antibiogram(your_data, #' antibiotics = selected_regimens, -#' wisca = TRUE, #' mo_transform = "gramstain") # all pathogens set to Gram-pos/Gram-neg #' ``` #' @@ -208,7 +208,6 @@ #' ```r #' antibiogram(your_data, #' antibiotics = selected_regimens, -#' wisca = TRUE, #' mo_transform = "shortname") # all pathogens set to 'G. species', e.g., E. coli #' ``` #' @@ -247,7 +246,7 @@ #' #' @section Explaining WISCA: #' -#' WISCA, as outlined by Bielicki *et al.* (\doi{10.1093/jac/dkv397}), stands for Weighted-Incidence Syndromic Combination Antibiogram, which estimates the probability of adequate empirical antimicrobial regimen coverage for specific infection syndromes. This method leverages a Bayesian hierarchical logistic regression framework with random effects for pathogens and regimens, enabling robust estimates in the presence of sparse data. +#' WISCA, as outlined by Bielicki *et al.* (\doi{10.1093/jac/dkv397}), stands for Weighted-Incidence Syndromic Combination Antibiogram, which estimates the probability of adequate empirical antimicrobial regimen coverage for specific infection syndromes. This method leverages a Bayesian decision model with random effects for pathogen incidence and susceptibility, enabling robust estimates in the presence of sparse data. #' #' The Bayesian model assumes conjugate priors for parameter estimation. For example, the coverage probability \eqn{\theta} for a given antimicrobial regimen is modelled using a Beta distribution as a prior: #' @@ -282,6 +281,7 @@ #' #' By combining empirical data with prior knowledge, WISCA overcomes the limitations of traditional combination antibiograms, offering disease-specific, patient-stratified estimates with robust uncertainty quantification. This tool is invaluable for antimicrobial stewardship programs and empirical treatment guideline refinement. #' +#' **Note:** WISCA never gives an output on the pathogen/species level, as all incidences and susceptibilities are already weighted for all species. #' @source #' * Bielicki JA *et al.* (2016). **Selecting appropriate empirical antibiotic regimens for paediatric bloodstream infections: application of a Bayesian decision model to local and pooled antimicrobial resistance surveillance data** *Journal of Antimicrobial Chemotherapy* 71(3); \doi{10.1093/jac/dkv397} #' * Bielicki JA *et al.* (2020). **Evaluation of the coverage of 3 antibiotic regimens for neonatal sepsis in the hospital setting across Asian countries** *JAMA Netw Open.* 3(2):e1921124; \doi{10.1001.jamanetworkopen.2019.21124} @@ -307,14 +307,12 @@ #' antibiogram(example_isolates, #' antibiotics = aminoglycosides(), #' ab_transform = "atc", -#' mo_transform = "gramstain" -#' ) +#' mo_transform = "gramstain") #' #' antibiogram(example_isolates, #' antibiotics = carbapenems(), #' ab_transform = "name", -#' mo_transform = "name" -#' ) +#' mo_transform = "name") #' #' #' # Combined antibiogram ------------------------------------------------- @@ -322,16 +320,14 @@ #' # combined antibiotics yield higher empiric coverage #' antibiogram(example_isolates, #' antibiotics = c("TZP", "TZP+TOB", "TZP+GEN"), -#' mo_transform = "gramstain" -#' ) +#' mo_transform = "gramstain") #' #' # names of antibiotics do not need to resemble columns exactly: #' antibiogram(example_isolates, #' antibiotics = c("Cipro", "cipro + genta"), #' mo_transform = "gramstain", #' ab_transform = "name", -#' sep = " & " -#' ) +#' sep = " & ") #' #' #' # Syndromic antibiogram ------------------------------------------------ @@ -339,8 +335,7 @@ #' # the data set could contain a filter for e.g. respiratory specimens #' antibiogram(example_isolates, #' antibiotics = c(aminoglycosides(), carbapenems()), -#' syndromic_group = "ward" -#' ) +#' syndromic_group = "ward") #' #' # now define a data set with only E. coli #' ex1 <- example_isolates[which(mo_genus() == "Escherichia"), ] @@ -353,27 +348,24 @@ #' syndromic_group = ifelse(ex1$ward == "ICU", #' "UCI", "No UCI" #' ), -#' language = "es" -#' ) +#' language = "es") #' #' #' # WISCA antibiogram ---------------------------------------------------- #' -#' # can be used for any of the above types - just add `wisca = TRUE` +#' # WISCA are not stratified by species, but rather on syndromes #' antibiogram(example_isolates, #' antibiotics = c("TZP", "TZP+TOB", "TZP+GEN"), -#' mo_transform = "gramstain", -#' wisca = TRUE -#' ) +#' syndromic_group = "ward", +#' wisca = TRUE) #' #' #' # Print the output for R Markdown / Quarto ----------------------------- #' #' ureido <- antibiogram(example_isolates, #' antibiotics = ureidopenicillins(), -#' ab_transform = "name", -#' wisca = TRUE -#' ) +#' syndromic_group = "name", +#' wisca = TRUE) #' #' # in an Rmd file, you would just need to return `ureido` in a chunk, #' # but to be explicit here: @@ -386,14 +378,11 @@ #' #' ab1 <- antibiogram(example_isolates, #' antibiotics = c("AMC", "CIP", "TZP", "TZP+TOB"), -#' mo_transform = "gramstain", -#' wisca = TRUE -#' ) +#' mo_transform = "gramstain") #' ab2 <- antibiogram(example_isolates, #' antibiotics = c("AMC", "CIP", "TZP", "TZP+TOB"), #' mo_transform = "gramstain", -#' syndromic_group = "ward" -#' ) +#' syndromic_group = "ward") #' #' if (requireNamespace("ggplot2")) { #' ggplot2::autoplot(ab1) @@ -413,7 +402,7 @@ antibiogram <- function(x, add_total_n = FALSE, only_all_tested = FALSE, digits = ifelse(wisca, 1, 0), - formatting_type = getOption("AMR_antibiogram_formatting_type", ifelse(wisca, 14, 10)), + formatting_type = getOption("AMR_antibiogram_formatting_type", 14), col_mo = NULL, language = get_AMR_locale(), minimum = 30, @@ -437,7 +426,7 @@ antibiogram.default <- function(x, add_total_n = FALSE, only_all_tested = FALSE, digits = ifelse(wisca, 1, 0), - formatting_type = getOption("AMR_antibiogram_formatting_type", ifelse(wisca, 14, 10)), + formatting_type = getOption("AMR_antibiogram_formatting_type", 14), col_mo = NULL, language = get_AMR_locale(), minimum = 30, @@ -450,6 +439,13 @@ antibiogram.default <- function(x, info = interactive()) { meet_criteria(x, allow_class = "data.frame") x <- ascertain_sir_classes(x, "x") + meet_criteria(wisca, allow_class = "logical", has_length = 1) + if (isTRUE(wisca)) { + if (!missing(mo_transform)) { + warning_("WISCA must be based on the species level as WISCA parameters are based on this. For that reason, `mo_transform` will be ignored.") + } + mo_transform <- function(x) suppressMessages(suppressWarnings(paste(mo_genus(x, keep_synonyms = TRUE, language = NULL), mo_species(x, keep_synonyms = TRUE, language = NULL)))) + } if (!is.function(mo_transform)) { meet_criteria(mo_transform, allow_class = "character", has_length = 1, is_in = c("name", "shortname", "gramstain", colnames(AMR::microorganisms)), allow_NULL = TRUE, allow_NA = TRUE) } @@ -460,8 +456,7 @@ antibiogram.default <- function(x, meet_criteria(add_total_n, allow_class = "logical", has_length = 1) meet_criteria(only_all_tested, allow_class = "logical", has_length = 1) meet_criteria(digits, allow_class = c("numeric", "integer"), has_length = 1, is_finite = TRUE) - meet_criteria(wisca, allow_class = "logical", has_length = 1) - meet_criteria(formatting_type, allow_class = c("numeric", "integer"), has_length = 1, is_in = if (wisca == TRUE) c(1:22) else c(1:12)) + meet_criteria(formatting_type, allow_class = c("numeric", "integer"), has_length = 1, is_in = c(1:22)) meet_criteria(col_mo, allow_class = "character", has_length = 1, allow_NULL = TRUE, is_in = colnames(x)) language <- validate_language(language) meet_criteria(minimum, allow_class = c("numeric", "integer"), has_length = 1, is_positive_or_zero = TRUE, is_finite = TRUE) @@ -587,62 +582,156 @@ antibiogram.default <- function(x, FUN = function(x) x, include_n_rows = TRUE ) + colnames(out)[colnames(out) == "total"] <- "n_tested" + colnames(out)[colnames(out) == "total_rows"] <- "n_total" + counts <- out - wisca_params <- NULL + if (isTRUE(combine_SI)) { + out$n_susceptible <- out$S + out$I + out$SDD + } else { + out$n_susceptible <- out$S + } + if (all(out$n_tested < minimum, na.rm = TRUE) && wisca == FALSE) { + warning_("All combinations had less than `minimum = ", minimum, "` results, returning an empty antibiogram") + return(as_original_data_class(data.frame(), class(out), extra_class = "antibiogram")) + } else if (any(out$n_tested < minimum, na.rm = TRUE)) { + out <- out %pm>% + # also for WISCA, refrain from anything below 15 isolates: + subset(n_tested > 15) + mins <- sum(out$n_tested < minimum, na.rm = TRUE) + if (wisca == FALSE) { + out <- out %pm>% + subset(n_tested >= minimum) + if (isTRUE(info) && mins > 0) { + message_("NOTE: ", mins, " combinations had less than `minimum = ", minimum, "` results and were ignored", add_fn = font_red) + } + } else if (isTRUE(info)) { + warning_("Number of tested isolates per regimen should exceed ", minimum, " for each species. Coverage estimates might be inaccurate.", call = FALSE) + } + } + + if (NROW(out) == 0) { + return(as_original_data_class(data.frame(), class(out), extra_class = "antibiogram")) + } + + out$p_susceptible <- out$n_susceptible / out$n_tested + + # add confidence levels + out$lower_ci <- NA_real_ + out$upper_ci <- NA_real_ + for (r in seq_len(NROW(out))) { + if (!is.na(out$n_susceptible[r]) && !is.na(out$n_tested[r]) && out$n_tested[r] > 0) { + ci <- stats::binom.test(out$n_susceptible[r], out$n_tested[r], conf.level = conf_interval)$conf.int + out$lower_ci[r] <- ci[1] + out$upper_ci[r] <- ci[2] + } + } + + # regroup for summarising + if (isTRUE(has_syndromic_group)) { + colnames(out)[1] <- "syndromic_group" + out <- out %pm>% + pm_group_by(syndromic_group, mo, ab) + } else { + out <- out %pm>% + pm_group_by(mo, ab) + } + + long_numeric <- out %pm>% + pm_summarise(coverage = p_susceptible, + lower_ci = lower_ci, + upper_ci = upper_ci, + n_total = n_total, + n_tested = n_tested, + n_susceptible = n_susceptible) + + wisca_parameters <- data.frame() if (wisca == TRUE) { # WISCA ---- - # set up progress bar - progress <- progress_ticker(n = NROW(out[which(out$total > 0), , drop = FALSE]), - n_min = 10, - print = info, - title = "Calculating beta/gamma parameters for WISCA") - on.exit(close(progress)) + if (isTRUE(has_syndromic_group)) { + colnames(out)[1] <- "syndromic_group" + out_wisca <- out %pm>% + pm_group_by(syndromic_group, ab) + } else { + out_wisca <- out %pm>% + pm_group_by(ab) + } + out_wisca <- out_wisca %pm>% + pm_summarise(coverage = NA_real_, + lower_ci = NA_real_, + upper_ci = NA_real_, + n_total = sum(n_total, na.rm = TRUE), + n_tested = sum(n_tested, na.rm = TRUE), + n_susceptible = sum(n_susceptible, na.rm = TRUE)) + out_wisca$p_susceptible <- out_wisca$n_susceptible / out_wisca$n_tested - out$coverage <- NA_real_ - out$lower_ci <- NA_real_ - out$upper_ci <- NA_real_ + if (isTRUE(has_syndromic_group)) { + out$group <- paste(out$syndromic_group, out$ab) + out_wisca$group <- paste(out_wisca$syndromic_group, out_wisca$ab) + } else { + out$group <- out$ab + out_wisca$group <- out_wisca$ab + } + + # create the WISCA parameters, including our priors/posteriors out$gamma_posterior <- NA_real_ - out$beta_posterior_1 <- NA_real_ - out$beta_posterior_2 <- NA_real_ + out$beta_posterior1 <- NA_real_ + out$beta_posterior2 <- NA_real_ for (i in seq_len(NROW(out))) { - if (out$total[i] == 0) { + if (out$n_tested[i] == 0) { next } - progress$tick() + out_current <- out[i, , drop = FALSE] priors <- calculate_priors(out_current, combine_SI = combine_SI) - out$gamma_posterior[i] = priors$gamma_posterior - out$beta_posterior_1[i] = priors$beta_posterior_1 - out$beta_posterior_2[i] = priors$beta_posterior_2 + out$beta_posterior1[i] = priors$beta_posterior_1 + out$beta_posterior2[i] = priors$beta_posterior_2 + } + + wisca_parameters <- out + + progress <- progress_ticker(n = length(unique(wisca_parameters$group)) * simulations, + n_min = 25, + print = info, + title = paste("Calculating WISCA for", length(unique(wisca_parameters$group)), "regimens")) + on.exit(close(progress)) + + # run WISCA + for (group in unique(wisca_parameters$group)) { + params_current <- wisca_parameters[which(wisca_parameters$group == group), , drop = FALSE] + if (sum(params_current$n_tested, na.rm = TRUE) == 0) { + next + } # Monte Carlo simulation coverage_simulations <- replicate(simulations, { + progress$tick() # simulate pathogen incidence # = Dirichlet (Gamma) parameters random_incidence <- stats::runif(1, min = 0, max = 1) simulated_incidence <- stats::qgamma( p = random_incidence, - shape = priors$gamma_posterior, + shape = params_current$gamma_posterior, scale = 1 ) # normalise - simulated_incidence <- simulated_incidence / sum(simulated_incidence) + simulated_incidence <- simulated_incidence / sum(simulated_incidence, na.rm = TRUE) # simulate susceptibility # = Beta parameters random_susceptibity <- stats::runif(1, min = 0, max = 1) simulated_susceptibility <- stats::qbeta( p = random_susceptibity, - shape1 = priors$beta_posterior_1, - shape2 = priors$beta_posterior_2 + shape1 = params_current$beta_posterior1, + shape2 = params_current$beta_posterior2 ) - sum(simulated_incidence * simulated_susceptibility) + sum(simulated_incidence * simulated_susceptibility, na.rm = TRUE) }) # calculate coverage statistics @@ -656,72 +745,22 @@ antibiogram.default <- function(x, } coverage_ci <- unname(stats::quantile(coverage_simulations, probs = probs)) - out$coverage[i] <- coverage_mean - out$lower_ci[i] <- coverage_ci[1] - out$upper_ci[i] <- coverage_ci[2] + out_wisca$coverage[which(out_wisca$group == group)] <- coverage_mean + out_wisca$lower_ci[which(out_wisca$group == group)] <- coverage_ci[1] + out_wisca$upper_ci[which(out_wisca$group == group)] <- coverage_ci[2] } # remove progress bar from console close(progress) - } - - if (isTRUE(combine_SI)) { - out$numerator <- out$S + out$I + out$SDD - } else { - out$numerator <- out$S - } - if (all(out$total < minimum, na.rm = TRUE) && wisca == FALSE) { - warning_("All combinations had less than `minimum = ", minimum, "` results, returning an empty antibiogram") - return(as_original_data_class(data.frame(), class(out), extra_class = "antibiogram")) - } else if (any(out$total < minimum, na.rm = TRUE)) { - out <- out %pm>% - # also for WISCA, refrain from anything below 15 isolates: - subset(total > 15) - mins <- sum(out$total < minimum, na.rm = TRUE) - if (wisca == FALSE) { - out <- out %pm>% - subset(total >= minimum) - if (isTRUE(info) && mins > 0) { - message_("NOTE: ", mins, " combinations had less than `minimum = ", minimum, "` results and were ignored", add_fn = font_red) - } - } else if (isTRUE(info)) { - warning_("Number of tested isolates per regimen should exceed ", minimum, ". Coverage estimates will be inaccurate for ", mins, " regimen", ifelse(mins == 1, "", "s"), ".", call = FALSE) - } - } - - if (NROW(out) == 0) { - return(as_original_data_class(data.frame(), class(out), extra_class = "antibiogram")) - } - - # regroup for summarising - if (isTRUE(has_syndromic_group)) { - colnames(out)[1] <- "syndromic_group" - out <- out %pm>% - pm_group_by(syndromic_group, mo, ab) - } else { - out <- out %pm>% - pm_group_by(mo, ab) - } - - if (wisca == TRUE) { - long_numeric <- out %pm>% - pm_summarise(coverage = coverage, - lower_ci = lower_ci, - upper_ci = upper_ci, - n_tested = total, - n_total = total_rows, - n_susceptible = numerator, - p_susceptible = numerator / total, - gamma_posterior = gamma_posterior, - beta_posterior1 = beta_posterior_1, - beta_posterior2 = beta_posterior_2) - } else { - long_numeric <- out %pm>% - pm_summarise(coverage = numerator / total, - numerator = numerator, - total = total) + + # prepare for definitive output + out <- out_wisca + wisca_parameters <- wisca_parameters[, colnames(wisca_parameters)[!colnames(wisca_parameters) %in% c(levels(NA_sir_), "lower_ci", "upper_ci", "group")], drop = FALSE] } out$digits <- digits # since pm_sumarise() cannot work with an object outside the current frame + if (isFALSE(wisca)) { + out$coverage <- out$p_susceptible + } # formatting type: # 1. 5 @@ -746,24 +785,28 @@ antibiogram.default <- function(x, # 20. 5% (4-6%,15/300) # 21. 5 (4-6,N=15/300) # 22. 5% (4-6%,N=15/300) - if (formatting_type == 1) out <- out %pm>% pm_summarise(out_value = round((numerator / total) * 100, digits = digits)) - if (formatting_type == 2) out <- out %pm>% pm_summarise(out_value = numerator) - if (formatting_type == 3) out <- out %pm>% pm_summarise(out_value = total) - if (formatting_type == 4) out <- out %pm>% pm_summarise(out_value = paste0(numerator, "/", total)) - if (formatting_type == 5) out <- out %pm>% pm_summarise(out_value = paste0(round((numerator / total) * 100, digits = digits), " (", total, ")")) - if (formatting_type == 6) out <- out %pm>% pm_summarise(out_value = paste0(round((numerator / total) * 100, digits = digits), "% (", total, ")")) - if (formatting_type == 7) out <- out %pm>% pm_summarise(out_value = paste0(round((numerator / total) * 100, digits = digits), " (N=", total, ")")) - if (formatting_type == 8) out <- out %pm>% pm_summarise(out_value = paste0(round((numerator / total) * 100, digits = digits), "% (N=", total, ")")) - if (formatting_type == 9) out <- out %pm>% pm_summarise(out_value = paste0(round((numerator / total) * 100, digits = digits), " (", numerator, "/", total, ")")) - if (formatting_type == 10) out <- out %pm>% pm_summarise(out_value = paste0(round((numerator / total) * 100, digits = digits), "% (", numerator, "/", total, ")")) - if (formatting_type == 11) out <- out %pm>% pm_summarise(out_value = paste0(round((numerator / total) * 100, digits = digits), " (N=", numerator, "/", total, ")")) - if (formatting_type == 12) out <- out %pm>% pm_summarise(out_value = paste0(round((numerator / total) * 100, digits = digits), "% (N=", numerator, "/", total, ")")) + if (formatting_type == 1) out <- out %pm>% pm_summarise(out_value = round(coverage * 100, digits = digits)) + if (formatting_type == 2) out <- out %pm>% pm_summarise(out_value = n_susceptible) + if (formatting_type == 3) out <- out %pm>% pm_summarise(out_value = n_tested) + if (formatting_type == 4) out <- out %pm>% pm_summarise(out_value = paste0(n_susceptible, "/", n_tested)) + if (formatting_type == 5) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), " (", n_tested, ")")) + if (formatting_type == 6) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), "% (", n_tested, ")")) + if (formatting_type == 7) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), " (N=", n_tested, ")")) + if (formatting_type == 8) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), "% (N=", n_tested, ")")) + if (formatting_type == 9) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), " (", n_susceptible, "/", n_tested, ")")) + if (formatting_type == 10) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), "% (", n_susceptible, "/", n_tested, ")")) + if (formatting_type == 11) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), " (N=", n_susceptible, "/", n_tested, ")")) + if (formatting_type == 12) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), "% (N=", n_susceptible, "/", n_tested, ")")) if (formatting_type == 13) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), " (", round(lower_ci * 100, digits = digits), "-", round(upper_ci * 100, digits = digits), ")")) if (formatting_type == 14) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), "% (", round(lower_ci * 100, digits = digits), "-", round(upper_ci * 100, digits = digits), "%)")) - if (formatting_type == 15) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), " (", round(lower_ci * 100, digits = digits), "-", round(upper_ci * 100, digits = digits), ",", total, ")")) - if (formatting_type == 16) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), "% (", round(lower_ci * 100, digits = digits), "-", round(upper_ci * 100, digits = digits), "%,", total, ")")) - if (formatting_type == 17) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), " (", round(lower_ci * 100, digits = digits), "-", round(upper_ci * 100, digits = digits), ",N=", total, ")")) - if (formatting_type == 18) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), "% (", round(lower_ci * 100, digits = digits), "-", round(upper_ci * 100, digits = digits), "%,N=", total, ")")) + if (formatting_type == 15) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), " (", round(lower_ci * 100, digits = digits), "-", round(upper_ci * 100, digits = digits), ",", n_tested, ")")) + if (formatting_type == 16) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), "% (", round(lower_ci * 100, digits = digits), "-", round(upper_ci * 100, digits = digits), "%,", n_tested, ")")) + if (formatting_type == 17) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), " (", round(lower_ci * 100, digits = digits), "-", round(upper_ci * 100, digits = digits), ",N=", n_tested, ")")) + if (formatting_type == 18) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), "% (", round(lower_ci * 100, digits = digits), "-", round(upper_ci * 100, digits = digits), "%,N=", n_tested, ")")) + if (formatting_type == 19) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), " (", round(lower_ci * 100, digits = digits), "-", round(upper_ci * 100, digits = digits), ",", n_susceptible, "/", n_tested, ")")) + if (formatting_type == 20) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), "% (", round(lower_ci * 100, digits = digits), "-", round(upper_ci * 100, digits = digits), "%,", n_susceptible, "/", n_tested, ")")) + if (formatting_type == 21) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), " (", round(lower_ci * 100, digits = digits), "-", round(upper_ci * 100, digits = digits), ",N=", n_susceptible, "/", n_tested, ")")) + if (formatting_type == 22) out <- out %pm>% pm_summarise(out_value = paste0(round(coverage * 100, digits = digits), "% (", round(lower_ci * 100, digits = digits), "-", round(upper_ci * 100, digits = digits), "%,N=", n_susceptible, "/", n_tested, ")")) # transform names of antibiotics ab_naming_function <- function(x, t, l, s) { @@ -792,11 +835,18 @@ antibiogram.default <- function(x, # transform long to wide long_to_wide <- function(object) { + if (wisca == TRUE) { + # column `mo` has already been removed, but we create here a surrogate to make the stats::reshape() work since it needs an identifier + object$mo <- 1 #seq_len(NROW(object)) + } object <- object %pm>% # an unclassed data.frame is required for stats::reshape() as.data.frame(stringsAsFactors = FALSE) %pm>% stats::reshape(direction = "wide", idvar = "mo", timevar = "ab", v.names = "out_value") colnames(object) <- gsub("^out_value?[.]", "", colnames(object)) + if (wisca == TRUE) { + object <- object[, colnames(object)[colnames(object) != "mo"], drop = FALSE] + } return(object) } @@ -818,33 +868,46 @@ antibiogram.default <- function(x, ) } } - # sort rows - new_df <- new_df %pm>% pm_arrange(mo, syndromic_group) - # sort columns - new_df <- new_df[, c("syndromic_group", "mo", sort(colnames(new_df)[!colnames(new_df) %in% c("syndromic_group", "mo")])), drop = FALSE] - colnames(new_df)[1:2] <- translate_AMR(c("Syndromic Group", "Pathogen"), language = language) + if (wisca == TRUE) { + # sort rows + new_df <- new_df %pm>% pm_arrange(syndromic_group) + # sort columns + new_df <- new_df[, c("syndromic_group", sort(colnames(new_df)[colnames(new_df) != "syndromic_group"])), drop = FALSE] + colnames(new_df)[1] <- translate_AMR("Syndromic Group", language = language) + } else { + # sort rows + new_df <- new_df %pm>% pm_arrange(mo, syndromic_group) + # sort columns + new_df <- new_df[, c("syndromic_group", "mo", sort(colnames(new_df)[!colnames(new_df) %in% c("syndromic_group", "mo")])), drop = FALSE] + colnames(new_df)[1:2] <- translate_AMR(c("Syndromic Group", "Pathogen"), language = language) + } } else { new_df <- long_to_wide(out) - # sort rows - new_df <- new_df %pm>% pm_arrange(mo) - # sort columns - new_df <- new_df[, c("mo", sort(colnames(new_df)[colnames(new_df) != "mo"])), drop = FALSE] - colnames(new_df)[1] <- translate_AMR("Pathogen", language = language) + if (wisca == TRUE) { + # sort columns + new_df <- new_df[, c(sort(colnames(new_df))), drop = FALSE] + } else { + # sort rows + new_df <- new_df %pm>% pm_arrange(mo) + # sort columns + new_df <- new_df[, c("mo", sort(colnames(new_df)[colnames(new_df) != "mo"])), drop = FALSE] + colnames(new_df)[1] <- translate_AMR("Pathogen", language = language) + } } - # add total N if indicated - if (isTRUE(add_total_n)) { + # add n_tested N if indicated + if (isTRUE(add_total_n) && isFALSE(wisca)) { if (isTRUE(has_syndromic_group)) { n_per_mo <- counts %pm>% pm_group_by(mo, .syndromic_group) %pm>% - pm_summarise(paste0(min(total, na.rm = TRUE), "-", max(total, na.rm = TRUE))) + pm_summarise(paste0(min(n_tested, na.rm = TRUE), "-", max(n_tested, na.rm = TRUE))) colnames(n_per_mo) <- c("mo", "syn", "count") count_group <- n_per_mo$count[match(paste(new_df[[2]], new_df[[1]]), paste(n_per_mo$mo, n_per_mo$syn))] edit_col <- 2 } else { n_per_mo <- counts %pm>% pm_group_by(mo) %pm>% - pm_summarise(paste0(min(total, na.rm = TRUE), "-", max(total, na.rm = TRUE))) + pm_summarise(paste0(min(n_tested, na.rm = TRUE), "-", max(n_tested, na.rm = TRUE))) colnames(n_per_mo) <- c("mo", "count") count_group <- n_per_mo$count[match(new_df[[1]], n_per_mo$mo)] edit_col <- 1 @@ -862,6 +925,7 @@ antibiogram.default <- function(x, out <- as_original_data_class(new_df, class(x), extra_class = "antibiogram") rownames(out) <- NULL + rownames(wisca_parameters) <- NULL rownames(long_numeric) <- NULL structure(out, @@ -869,7 +933,9 @@ antibiogram.default <- function(x, combine_SI = combine_SI, wisca = wisca, conf_interval = conf_interval, - long_numeric = as_original_data_class(long_numeric, class(out)) + formatting_type = formatting_type, + wisca_parameters = as_original_data_class(wisca_parameters, class(x)), + long_numeric = as_original_data_class(long_numeric, class(x)) ) } @@ -883,7 +949,7 @@ antibiogram.grouped_df <- function(x, add_total_n = FALSE, only_all_tested = FALSE, digits = ifelse(wisca, 1, 0), - formatting_type = getOption("AMR_antibiogram_formatting_type", ifelse(wisca, 14, 10)), + formatting_type = getOption("AMR_antibiogram_formatting_type", 14), col_mo = NULL, language = get_AMR_locale(), minimum = 30, @@ -929,6 +995,7 @@ antibiogram.grouped_df <- function(x, conf_interval = conf_interval, interval_side = interval_side, info = i == 1 && info == TRUE) + new_wisca_parameters <- attributes(new_out)$wisca_parameters new_long_numeric <- attributes(new_out)$long_numeric if (i == 1) progress$tick() @@ -938,8 +1005,10 @@ antibiogram.grouped_df <- function(x, } # remove first column 'Pathogen' (in whatever language) - new_out <- new_out[, -1, drop = FALSE] - new_long_numeric <- new_long_numeric[, -1, drop = FALSE] + if (isFALSE(wisca)) { + new_out <- new_out[, -1, drop = FALSE] + new_long_numeric <- new_long_numeric[, -1, drop = FALSE] + } # add group names to data set for (col in rev(seq_len(NCOL(groups) - 1))) { @@ -947,6 +1016,12 @@ antibiogram.grouped_df <- function(x, col_value <- groups[i, col, drop = TRUE] new_out[, col_name] <- col_value new_out <- new_out[, c(col_name, setdiff(names(new_out), col_name))] # set place to 1st col + + if (isTRUE(wisca)) { + new_wisca_parameters[, col_name] <- col_value + new_wisca_parameters <- new_wisca_parameters[, c(col_name, setdiff(names(new_wisca_parameters), col_name))] # set place to 1st col + } + new_long_numeric[, col_name] <- col_value new_long_numeric <- new_long_numeric[, c(col_name, setdiff(names(new_long_numeric), col_name))] # set place to 1st col } @@ -954,9 +1029,11 @@ antibiogram.grouped_df <- function(x, if (i == 1) { # the first go out <- new_out + wisca_parameters <- new_wisca_parameters long_numeric <- new_long_numeric } else { out <- rbind_AMR(out, new_out) + wisca_parameters <- rbind_AMR(wisca_parameters, new_wisca_parameters) long_numeric <- rbind_AMR(long_numeric, new_long_numeric) } } @@ -968,6 +1045,8 @@ antibiogram.grouped_df <- function(x, combine_SI = isTRUE(combine_SI), wisca = isTRUE(wisca), conf_interval = conf_interval, + formatting_type = formatting_type, + wisca_parameters = as_original_data_class(wisca_parameters, class(x)), long_numeric = as_original_data_class(long_numeric, class(x))) } @@ -975,7 +1054,6 @@ antibiogram.grouped_df <- function(x, #' @rdname antibiogram wisca <- function(x, antibiotics = where(is.sir), - mo_transform = "shortname", ab_transform = "name", syndromic_group = NULL, add_total_n = FALSE, @@ -988,10 +1066,11 @@ wisca <- function(x, combine_SI = TRUE, sep = " + ", simulations = 1000, + conf_interval = 0.95, + interval_side = "two-tailed", info = interactive()) { antibiogram(x = x, antibiotics = antibiotics, - mo_transform = mo_transform, ab_transform = ab_transform, syndromic_group = syndromic_group, add_total_n = add_total_n, @@ -1005,6 +1084,8 @@ wisca <- function(x, sep = sep, wisca = TRUE, simulations = simulations, + conf_interval = conf_interval, + interval_side = interval_side, info = info) } @@ -1013,25 +1094,18 @@ wisca <- function(x, #' @rdname antibiogram retrieve_wisca_parameters <- function(wisca_model, ...) { stop_ifnot(isTRUE(attributes(wisca_model)$wisca), "This function only applies to WISCA models. Use `wisca()` or `antibiogram(..., wisca = TRUE)` to create a WISCA model.") - attributes(wisca_model)$long_numeric + attributes(wisca_model)$wisca_parameters } calculate_priors <- function(data, combine_SI = TRUE) { - if (combine_SI == TRUE && "I" %in% colnames(data)) { - data$S <- data$S + data$I - } - if (combine_SI == TRUE && "SDD" %in% colnames(data)) { - data$S <- data$S + data$SDD - } - # Pathogen incidence (Dirichlet distribution) gamma_prior <- rep(1, length(unique(data$mo))) # Dirichlet prior - gamma_posterior <- gamma_prior + data$total_rows # Posterior parameters + gamma_posterior <- gamma_prior + data$n_total # Posterior parameters # Regimen susceptibility (Beta distribution) beta_prior <- rep(1, length(unique(data$mo))) # Beta prior - r <- data$S # Number of pathogens tested susceptible - n <- data$total # Total tested + r <- data$n_susceptible # Number of pathogens tested susceptible + n <- data$n_tested # n_tested tested beta_posterior_1 <- beta_prior + r # Posterior alpha beta_posterior_2 <- beta_prior + (n - r) # Posterior beta @@ -1048,8 +1122,10 @@ tbl_sum.antibiogram <- function(x, ...) { dims <- paste(format(NROW(x), big.mark = ","), AMR_env$cross_icon, format(NCOL(x), big.mark = ",")) if (isTRUE(attributes(x)$wisca)) { names(dims) <- paste0("An Antibiogram (WISCA / ", attributes(x)$conf_interval * 100, "% CI)") + } else if (isTRUE(attributes(x)$formatting_type >= 13)) { + names(dims) <- paste0("An Antibiogram (non-WISCA / ", attributes(x)$conf_interval * 100, "% CI)") } else { - names(dims) <- "An Antibiogram (non-WISCA)" + names(dims) <- paste0("An Antibiogram (non-WISCA)") } dims } diff --git a/R/ggplot_sir.R b/R/ggplot_sir.R index 82402528a..27deb9768 100755 --- a/R/ggplot_sir.R +++ b/R/ggplot_sir.R @@ -244,7 +244,7 @@ ggplot_sir <- function(data, theme_sir() if (fill == "interpretation") { - p <- p + scale_sir_colours(aesthetics = "fill", colours = colours) + p <- suppressWarnings(p + scale_sir_colours(aesthetics = "fill", colours = colours)) } if (identical(position, "fill")) { diff --git a/R/plotting.R b/R/plotting.R index 3960851e0..691f99407 100755 --- a/R/plotting.R +++ b/R/plotting.R @@ -50,11 +50,11 @@ #' @details #' ### The `scale_*_mic()` Functions #' -#' The functions [scale_x_mic()], [scale_y_mic()], [scale_colour_mic()], and [scale_fill_mic()] functions allow to plot the [mic][as.mic()] class (MIC values) on a continuous scale. They allow to rescale the MIC range, and retain the signs in MIC values if desired. Missing intermediate log2 levels will be plotted too. +#' The functions [scale_x_mic()], [scale_y_mic()], [scale_colour_mic()], and [scale_fill_mic()] functions allow to plot the [mic][as.mic()] class (MIC values) on a continuous, logarithmic scale. They also allow to rescale the MIC range with an 'inside' or 'outside' range if required, and retain the signs in MIC values if desired. Missing intermediate log2 levels will be plotted too. #' #' ### The `scale_*_sir()` Functions #' -#' The functions [scale_x_sir()], [scale_colour_sir()], and [scale_fill_sir()] functions allow to plot the [sir][as.sir()] class (S/I/R values). They can translate the S/I/R values to any of the `r length(AMR:::LANGUAGES_SUPPORTED)` supported languages, and set colour-blind friendly colours to the `colour` and `fill` aesthetics. +#' The functions [scale_x_sir()], [scale_colour_sir()], and [scale_fill_sir()] functions allow to plot the [sir][as.sir()] class in the right order (`r paste(levels(NA_sir_), collapse = " < ")`). At default, they translate the S/I/R values to an interpretative text ("Susceptible", "Resistant", etc.) in any of the `r length(AMR:::LANGUAGES_SUPPORTED)` supported languages (use `language = NULL` to keep S/I/R). Also, except for [scale_x_sir()], they set colour-blind friendly colours to the `colour` and `fill` aesthetics. #' #' ### Additional `ggplot2` Functions #' @@ -68,7 +68,7 @@ #' #' The interpretation of "I" will be named "Increased exposure" for all EUCAST guidelines since 2019, and will be named "Intermediate" in all other cases. #' -#' For interpreting MIC values as well as disk diffusion diameters, supported guidelines to be used as input for the `guideline` argument are: `r vector_and(AMR::clinical_breakpoints$guideline, quotes = TRUE, reverse = TRUE)`. Simply using `"CLSI"` or `"EUCAST"` as input will automatically select the latest version of that guideline. +#' For interpreting MIC values as well as disk diffusion diameters, the default guideline is `r AMR::clinical_breakpoints$guideline[1]`, unless the package option [`AMR_guideline`][AMR-options] is set. See [as.sir()] for more information. #' @name plot #' @rdname plot #' @return The `autoplot()` functions return a [`ggplot`][ggplot2::ggplot()] model that is extendible with any `ggplot2` function. @@ -231,7 +231,8 @@ create_scale_mic <- function(aest, keep_operators, mic_range, ...) { ggplot_fn <- getExportedValue(paste0("scale_", aest, "_continuous"), ns = asNamespace("ggplot2")) args <- list(...) - args[c("trans", "transform", "transform_df", "breaks", "labels", "limits")] <- NULL + # do not take these arguments into account, as they will be overwritten and seem to allow weird behaviour + args[c("aesthetics", "trans", "transform", "transform_df", "breaks", "labels", "limits")] <- NULL scale <- do.call(ggplot_fn, args) scale$transform <- function(x) { @@ -294,8 +295,8 @@ scale_colour_mic <- function(keep_operators = "edges", mic_range = NULL, ...) { } #' @export -#' @inheritParams as.mic #' @rdname plot +#' @usage NULL scale_color_mic <- scale_colour_mic #' @export @@ -307,32 +308,27 @@ scale_fill_mic <- function(keep_operators = "edges", mic_range = NULL, ...) { create_scale_mic("fill", keep_operators = keep_operators, mic_range = mic_range, ...) } -create_scale_sir <- function(aest, colours_SIR, language, eucast_I, ...) { - ggplot_fn <- getExportedValue(paste0("scale_", aest, "_discrete"), - ns = asNamespace("ggplot2")) +create_scale_sir <- function(aesthetics, colours_SIR, language, eucast_I, ...) { args <- list(...) - args[c("aesthetics", "value", "labels", "limits")] <- NULL + args[c("value", "labels", "limits")] <- NULL - if (aest == "x") { + if (identical(aesthetics, "x")) { ggplot_fn <- ggplot2::scale_x_discrete - args <- c(args, - list(limits = base::force)) } else { ggplot_fn <- ggplot2::scale_discrete_manual args <- c(args, - list(aesthetics = aest, + list(aesthetics = aesthetics, values = c(S = colours_SIR[1], SDD = colours_SIR[2], I = colours_SIR[2], R = colours_SIR[3], - NI = "grey30"), - limits = base::force)) + NI = "grey30"))) } scale <- do.call(ggplot_fn, args) scale$labels <- function(x) { - stop_ifnot(all(x %in% levels(NA_sir_)), - "Apply `scale_", aest, "_sir()` to a variable of class 'sir', see `?as.sir`.", + stop_ifnot(all(x %in% c(levels(NA_sir_), NA)), + "Apply `scale_", aesthetics[1], "_sir()` to a variable of class 'sir', see `?as.sir`.", call = FALSE) x <- as.character(as.sir(x)) if (!is.null(language)) { @@ -351,7 +347,7 @@ create_scale_sir <- function(aest, colours_SIR, language, eucast_I, ...) { } scale$limits <- function(x, ...) { # force SIR in the right order - x[match(x, levels(NA_sir_))] + as.character(sort(factor(x, levels = levels(NA_sir_)))) } scale @@ -366,7 +362,7 @@ scale_x_sir <- function(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3)) language <- validate_language(language) meet_criteria(eucast_I, allow_class = "logical", has_length = 1) - create_scale_sir("x", colours_SIR = colours_SIR, language = language, eucast_I = eucast_I, ...) + create_scale_sir(aesthetics = "x", colours_SIR = colours_SIR, language = language, eucast_I = eucast_I) } #' @rdname plot @@ -378,9 +374,21 @@ scale_colour_sir <- function(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3)) language <- validate_language(language) meet_criteria(eucast_I, allow_class = "logical", has_length = 1) - create_scale_sir("colour", colours_SIR = colours_SIR, language = language, eucast_I = eucast_I, ...) + args <- list(...) + args$colours_SIR <- colours_SIR + args$language <- language + args$eucast_I <- eucast_I + if (is.null(args$aesthetics)) { + args$aesthetics <- "colour" + } + do.call(create_scale_sir, args) } +#' @export +#' @rdname plot +#' @usage NULL +scale_color_sir <- scale_colour_sir + #' @rdname plot #' @export scale_fill_sir <- function(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), @@ -390,7 +398,14 @@ scale_fill_sir <- function(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), meet_criteria(colours_SIR, allow_class = "character", has_length = c(1, 3)) language <- validate_language(language) meet_criteria(eucast_I, allow_class = "logical", has_length = 1) - create_scale_sir("fill", colours_SIR = colours_SIR, language = language, eucast_I = eucast_I, ...) + args <- list(...) + args$colours_SIR <- colours_SIR + args$language <- language + args$eucast_I <- eucast_I + if (is.null(args$aesthetics)) { + args$aesthetics <- "fill" + } + do.call(create_scale_sir, args) } #' @method plot mic @@ -400,7 +415,7 @@ scale_fill_sir <- function(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), plot.mic <- function(x, mo = NULL, ab = NULL, - guideline = "EUCAST", + guideline = getOption("AMR_guideline", "EUCAST"), main = deparse(substitute(x)), ylab = translate_AMR("Frequency", language = language), xlab = translate_AMR("Minimum Inhibitory Concentration (mg/L)", language = language), @@ -489,7 +504,7 @@ plot.mic <- function(x, barplot.mic <- function(height, mo = NULL, ab = NULL, - guideline = "EUCAST", + guideline = getOption("AMR_guideline", "EUCAST"), main = deparse(substitute(height)), ylab = translate_AMR("Frequency", language = language), xlab = translate_AMR("Minimum Inhibitory Concentration (mg/L)", language = language), @@ -530,7 +545,7 @@ barplot.mic <- function(height, autoplot.mic <- function(object, mo = NULL, ab = NULL, - guideline = "EUCAST", + guideline = getOption("AMR_guideline", "EUCAST"), title = deparse(substitute(object)), ylab = translate_AMR("Frequency", language = language), xlab = translate_AMR("Minimum Inhibitory Concentration (mg/L)", language = language), @@ -640,7 +655,7 @@ plot.disk <- function(x, xlab = translate_AMR("Disk diffusion diameter (mm)", language = language), mo = NULL, ab = NULL, - guideline = "EUCAST", + guideline = getOption("AMR_guideline", "EUCAST"), colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), language = get_AMR_locale(), expand = TRUE, @@ -727,7 +742,7 @@ barplot.disk <- function(height, xlab = translate_AMR("Disk diffusion diameter (mm)", language = language), mo = NULL, ab = NULL, - guideline = "EUCAST", + guideline = getOption("AMR_guideline", "EUCAST"), colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), language = get_AMR_locale(), expand = TRUE, @@ -766,7 +781,7 @@ autoplot.disk <- function(object, title = deparse(substitute(object)), ylab = translate_AMR("Frequency", language = language), xlab = translate_AMR("Disk diffusion diameter (mm)", language = language), - guideline = "EUCAST", + guideline = getOption("AMR_guideline", "EUCAST"), colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), language = get_AMR_locale(), expand = TRUE, @@ -1268,6 +1283,11 @@ scale_sir_colours <- function(..., ggplot2::scale_discrete_manual(aesthetics = aesthetics, values = cols, limits = force) } +#' @export +#' @rdname plot +#' @usage NULL +scale_sir_colors <- scale_sir_colours + #' @rdname plot #' @export theme_sir <- function() { diff --git a/R/sir.R b/R/sir.R index 14942c623..737b82601 100755 --- a/R/sir.R +++ b/R/sir.R @@ -43,7 +43,7 @@ #' @param ab a vector (or column name) with [character]s that can be coerced to a valid antimicrobial drug code with [as.ab()] #' @param uti (Urinary Tract Infection) a vector (or column name) with [logical]s (`TRUE` or `FALSE`) to specify whether a UTI specific interpretation from the guideline should be chosen. For using [as.sir()] on a [data.frame], this can also be a column containing [logical]s or when left blank, the data set will be searched for a column 'specimen', and rows within this column containing 'urin' (such as 'urine', 'urina') will be regarded isolates from a UTI. See *Examples*. #' @inheritParams first_isolate -#' @param guideline defaults to EUCAST `r max(as.integer(gsub("[^0-9]", "", subset(AMR::clinical_breakpoints, guideline %like% "EUCAST")$guideline)))` (the latest implemented EUCAST guideline in the [AMR::clinical_breakpoints] data set), but can be set with the package option [`AMR_guideline`][AMR-options]. Currently supports EUCAST (`r min(as.integer(gsub("[^0-9]", "", subset(AMR::clinical_breakpoints, guideline %like% "EUCAST")$guideline)))`-`r max(as.integer(gsub("[^0-9]", "", subset(AMR::clinical_breakpoints, guideline %like% "EUCAST")$guideline)))`) and CLSI (`r min(as.integer(gsub("[^0-9]", "", subset(AMR::clinical_breakpoints, guideline %like% "CLSI")$guideline)))`-`r max(as.integer(gsub("[^0-9]", "", subset(AMR::clinical_breakpoints, guideline %like% "CLSI")$guideline)))`), see *Details*. +#' @param guideline defaults to `r AMR::clinical_breakpoints$guideline[1]` (the latest implemented EUCAST guideline in the [AMR::clinical_breakpoints] data set), but can be set with the package option [`AMR_guideline`][AMR-options]. Currently supports EUCAST (`r min(as.integer(gsub("[^0-9]", "", subset(AMR::clinical_breakpoints, guideline %like% "EUCAST")$guideline)))`-`r max(as.integer(gsub("[^0-9]", "", subset(AMR::clinical_breakpoints, guideline %like% "EUCAST")$guideline)))`) and CLSI (`r min(as.integer(gsub("[^0-9]", "", subset(AMR::clinical_breakpoints, guideline %like% "CLSI")$guideline)))`-`r max(as.integer(gsub("[^0-9]", "", subset(AMR::clinical_breakpoints, guideline %like% "CLSI")$guideline)))`), see *Details*. #' @param conserve_capped_values a [logical] to indicate that MIC values starting with `">"` (but not `">="`) must always return "R" , and that MIC values starting with `"<"` (but not `"<="`) must always return "S" #' @param add_intrinsic_resistance *(only useful when using a EUCAST guideline)* a [logical] to indicate whether intrinsic antibiotic resistance must also be considered for applicable bug-drug combinations, meaning that e.g. ampicillin will always return "R" in *Klebsiella* species. Determination is based on the [intrinsic_resistant] data set, that itself is based on `r format_eucast_version_nr(3.3)`. #' @param include_screening a [logical] to indicate that clinical breakpoints for screening are allowed - the default is `FALSE`. Can also be set with the package option [`AMR_include_screening`][AMR-options]. @@ -1361,7 +1361,7 @@ as_sir_method <- function(method_short, mo = vectorise_log_entry(mo_current, length(rows)), host = vectorise_log_entry(host_current, length(rows)), method = vectorise_log_entry(method_coerced, length(rows)), - input = vectorise_log_entry(as.double(values), length(rows)), + input = vectorise_log_entry(as.character(values), length(rows)), outcome = vectorise_log_entry(NA_sir_, length(rows)), notes = vectorise_log_entry("NO BREAKPOINT AVAILABLE", length(rows)), guideline = vectorise_log_entry(guideline_coerced, length(rows)), @@ -1430,10 +1430,18 @@ as_sir_method <- function(method_short, if (any(breakpoints_current$site %like% "screen", na.rm = TRUE) | any(breakpoints_current$ref_tbl %like% "screen", na.rm = TRUE)) { notes_current <- c(notes_current, "Some screening breakpoints were applied - use `include_screening = FALSE` to prevent this") } + if (method == "mic" && conserve_capped_values == TRUE && any(as.character(values) %like% "^[<][0-9]")) { + notes_current <- c(notes_current, "MIC values 'lower than' are all considered 'S' since conserve_capped_values = TRUE") + } + if (method == "mic" && conserve_capped_values == TRUE && any(as.character(values) %like% "^[>][0-9]")) { + notes_current <- c(notes_current, "MIC values 'greater than' are all considered 'R' since conserve_capped_values = TRUE") + } if (method == "mic") { new_sir <- case_when_AMR( is.na(values) ~ NA_sir_, + conserve_capped_values == TRUE & as.character(values) %like% "^[<][0-9]" ~ as.sir("S"), + conserve_capped_values == TRUE & as.character(values) %like% "^[>][0-9]" ~ as.sir("R"), values <= breakpoints_current$breakpoint_S ~ as.sir("S"), guideline_coerced %like% "EUCAST" & values > breakpoints_current$breakpoint_R ~ as.sir("R"), guideline_coerced %like% "CLSI" & values >= breakpoints_current$breakpoint_R ~ as.sir("R"), @@ -1471,7 +1479,7 @@ as_sir_method <- function(method_short, mo = vectorise_log_entry(breakpoints_current[, "mo", drop = TRUE], length(rows)), host = vectorise_log_entry(breakpoints_current[, "host", drop = TRUE], length(rows)), method = vectorise_log_entry(method_coerced, length(rows)), - input = vectorise_log_entry(as.double(values), length(rows)), + input = vectorise_log_entry(as.character(values), length(rows)), outcome = vectorise_log_entry(as.sir(new_sir), length(rows)), notes = vectorise_log_entry(paste0(font_stripstyle(notes_current), collapse = "\n"), length(rows)), guideline = vectorise_log_entry(guideline_coerced, length(rows)), diff --git a/R/sysdata.rda b/R/sysdata.rda index 8b1f0b08aeea93eed02b4a5e59efa8fb64312ffb..a9c65754ea3e286a72d89920fb7d85136ed86c81 100755 GIT binary patch delta 86299 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
40(Zzj<}c@ex}#etz_I$NKJ)_bivX* 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 O4GD_^000000a;pm7wIkl delta 86008 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\preformatted{antibiogram(your_data, antibiotics = selected_regimens, - wisca = TRUE, mo_transform = NA) # all pathogens set to `NA` + +# preferred: use WISCA +wisca(your_data, + antibiotics = selected_regimens) }\if{html}{\out{}} } \item \strong{Refinement with Gram Stain Results} @@ -1862,7 +1866,6 @@ When a blood culture becomes positive, the Gram stain provides an initial and cr \if{html}{\out{
}}\preformatted{antibiogram(your_data, antibiotics = selected_regimens, - wisca = TRUE, mo_transform = "gramstain") # all pathogens set to Gram-pos/Gram-neg }\if{html}{\out{
}} } @@ -1875,7 +1878,6 @@ After cultivation of the pathogen, full pathogen identification allows precise t \if{html}{\out{
}}\preformatted{antibiogram(your_data, antibiotics = selected_regimens, - wisca = TRUE, mo_transform = "shortname") # all pathogens set to 'G. species', e.g., E. coli }\if{html}{\out{
}} } @@ -1919,7 +1921,7 @@ You can also use functions from specific 'table reporting' packages to transform \section{Explaining WISCA}{ -WISCA, as outlined by Bielicki \emph{et al.} (\doi{10.1093/jac/dkv397}), stands for Weighted-Incidence Syndromic Combination Antibiogram, which estimates the probability of adequate empirical antimicrobial regimen coverage for specific infection syndromes. This method leverages a Bayesian hierarchical logistic regression framework with random effects for pathogens and regimens, enabling robust estimates in the presence of sparse data. +WISCA, as outlined by Bielicki \emph{et al.} (\doi{10.1093/jac/dkv397}), stands for Weighted-Incidence Syndromic Combination Antibiogram, which estimates the probability of adequate empirical antimicrobial regimen coverage for specific infection syndromes. This method leverages a Bayesian decision model with random effects for pathogen incidence and susceptibility, enabling robust estimates in the presence of sparse data. The Bayesian model assumes conjugate priors for parameter estimation. For example, the coverage probability \eqn{\theta} for a given antimicrobial regimen is modelled using a Beta distribution as a prior: @@ -1953,6 +1955,8 @@ Stratified results can be provided based on covariates such as age, sex, and cli \deqn{\text{OR}_{\text{covariate}} = \frac{\exp(\beta_{\text{covariate}})}{\exp(\beta_0)}} By combining empirical data with prior knowledge, WISCA overcomes the limitations of traditional combination antibiograms, offering disease-specific, patient-stratified estimates with robust uncertainty quantification. This tool is invaluable for antimicrobial stewardship programs and empirical treatment guideline refinement. + +\strong{Note:} WISCA never gives an output on the pathogen/species level, as all incidences and susceptibilities are already weighted for all species. } \examples{ @@ -1970,14 +1974,12 @@ antibiogram(example_isolates, antibiogram(example_isolates, antibiotics = aminoglycosides(), ab_transform = "atc", - mo_transform = "gramstain" -) + mo_transform = "gramstain") antibiogram(example_isolates, antibiotics = carbapenems(), ab_transform = "name", - mo_transform = "name" -) + mo_transform = "name") # Combined antibiogram ------------------------------------------------- @@ -1985,16 +1987,14 @@ antibiogram(example_isolates, # combined antibiotics yield higher empiric coverage antibiogram(example_isolates, antibiotics = c("TZP", "TZP+TOB", "TZP+GEN"), - mo_transform = "gramstain" -) + mo_transform = "gramstain") # names of antibiotics do not need to resemble columns exactly: antibiogram(example_isolates, antibiotics = c("Cipro", "cipro + genta"), mo_transform = "gramstain", ab_transform = "name", - sep = " & " -) + sep = " & ") # Syndromic antibiogram ------------------------------------------------ @@ -2002,8 +2002,7 @@ antibiogram(example_isolates, # the data set could contain a filter for e.g. respiratory specimens antibiogram(example_isolates, antibiotics = c(aminoglycosides(), carbapenems()), - syndromic_group = "ward" -) + syndromic_group = "ward") # now define a data set with only E. coli ex1 <- example_isolates[which(mo_genus() == "Escherichia"), ] @@ -2016,27 +2015,24 @@ antibiogram(ex1, syndromic_group = ifelse(ex1$ward == "ICU", "UCI", "No UCI" ), - language = "es" -) + language = "es") # WISCA antibiogram ---------------------------------------------------- -# can be used for any of the above types - just add `wisca = TRUE` +# WISCA are not stratified by species, but rather on syndromes antibiogram(example_isolates, antibiotics = c("TZP", "TZP+TOB", "TZP+GEN"), - mo_transform = "gramstain", - wisca = TRUE -) + syndromic_group = "ward", + wisca = TRUE) # Print the output for R Markdown / Quarto ----------------------------- ureido <- antibiogram(example_isolates, antibiotics = ureidopenicillins(), - ab_transform = "name", - wisca = TRUE -) + syndromic_group = "name", + wisca = TRUE) # in an Rmd file, you would just need to return `ureido` in a chunk, # but to be explicit here: @@ -2049,14 +2045,11 @@ if (requireNamespace("knitr")) { ab1 <- antibiogram(example_isolates, antibiotics = c("AMC", "CIP", "TZP", "TZP+TOB"), - mo_transform = "gramstain", - wisca = TRUE -) + mo_transform = "gramstain") ab2 <- antibiogram(example_isolates, antibiotics = c("AMC", "CIP", "TZP", "TZP+TOB"), mo_transform = "gramstain", - syndromic_group = "ward" -) + syndromic_group = "ward") if (requireNamespace("ggplot2")) { ggplot2::autoplot(ab1) @@ -7339,6 +7332,7 @@ THE PART HEREAFTER CONTAINS CONTENTS FROM FILE 'man/plot.Rd': \alias{scale_fill_mic} \alias{scale_x_sir} \alias{scale_colour_sir} +\alias{scale_color_sir} \alias{scale_fill_sir} \alias{plot.mic} \alias{autoplot.mic} @@ -7349,6 +7343,7 @@ THE PART HEREAFTER CONTAINS CONTENTS FROM FILE 'man/plot.Rd': \alias{facet_sir} \alias{scale_y_percent} \alias{scale_sir_colours} +\alias{scale_sir_colors} \alias{theme_sir} \alias{labels_sir_count} \title{Plotting Helpers for AMR Data Analysis} @@ -7359,8 +7354,6 @@ scale_y_mic(keep_operators = "edges", mic_range = NULL, ...) scale_colour_mic(keep_operators = "edges", mic_range = NULL, ...) -scale_color_mic(keep_operators = "edges", mic_range = NULL, ...) - scale_fill_mic(keep_operators = "edges", mic_range = NULL, ...) scale_x_sir(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), @@ -7375,7 +7368,8 @@ scale_fill_sir(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), language = get_AMR_locale(), eucast_I = getOption("AMR_guideline", "EUCAST") == "EUCAST", ...) -\method{plot}{mic}(x, mo = NULL, ab = NULL, guideline = "EUCAST", +\method{plot}{mic}(x, mo = NULL, ab = NULL, + guideline = getOption("AMR_guideline", "EUCAST"), main = deparse(substitute(x)), ylab = translate_AMR("Frequency", language = language), xlab = translate_AMR("Minimum Inhibitory Concentration (mg/L)", language = @@ -7385,8 +7379,9 @@ scale_fill_sir(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), breakpoint_type = getOption("AMR_breakpoint_type", "human"), ...) \method{autoplot}{mic}(object, mo = NULL, ab = NULL, - guideline = "EUCAST", title = deparse(substitute(object)), - ylab = translate_AMR("Frequency", language = language), + guideline = getOption("AMR_guideline", "EUCAST"), + title = deparse(substitute(object)), ylab = translate_AMR("Frequency", + language = language), xlab = translate_AMR("Minimum Inhibitory Concentration (mg/L)", language = language), colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), language = get_AMR_locale(), expand = TRUE, @@ -7396,7 +7391,7 @@ scale_fill_sir(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), \method{plot}{disk}(x, main = deparse(substitute(x)), ylab = translate_AMR("Frequency", language = language), xlab = translate_AMR("Disk diffusion diameter (mm)", language = language), - mo = NULL, ab = NULL, guideline = "EUCAST", + mo = NULL, ab = NULL, guideline = getOption("AMR_guideline", "EUCAST"), colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), language = get_AMR_locale(), expand = TRUE, include_PKPD = getOption("AMR_include_PKPD", TRUE), @@ -7405,8 +7400,9 @@ scale_fill_sir(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), \method{autoplot}{disk}(object, mo = NULL, ab = NULL, title = deparse(substitute(object)), ylab = translate_AMR("Frequency", language = language), xlab = translate_AMR("Disk diffusion diameter (mm)", - language = language), guideline = "EUCAST", colours_SIR = c("#3CAEA3", - "#F6D55C", "#ED553B"), language = get_AMR_locale(), expand = TRUE, + language = language), guideline = getOption("AMR_guideline", "EUCAST"), + colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), + language = get_AMR_locale(), expand = TRUE, include_PKPD = getOption("AMR_include_PKPD", TRUE), breakpoint_type = getOption("AMR_breakpoint_type", "human"), ...) @@ -7499,12 +7495,12 @@ Especially the \verb{scale_*_mic()} functions are relevant wrappers to plot MIC \details{ \subsection{The \verb{scale_*_mic()} Functions}{ -The functions \code{\link[=scale_x_mic]{scale_x_mic()}}, \code{\link[=scale_y_mic]{scale_y_mic()}}, \code{\link[=scale_colour_mic]{scale_colour_mic()}}, and \code{\link[=scale_fill_mic]{scale_fill_mic()}} functions allow to plot the \link[=as.mic]{mic} class (MIC values) on a continuous scale. They allow to rescale the MIC range, and retain the signs in MIC values if desired. Missing intermediate log2 levels will be plotted too. +The functions \code{\link[=scale_x_mic]{scale_x_mic()}}, \code{\link[=scale_y_mic]{scale_y_mic()}}, \code{\link[=scale_colour_mic]{scale_colour_mic()}}, and \code{\link[=scale_fill_mic]{scale_fill_mic()}} functions allow to plot the \link[=as.mic]{mic} class (MIC values) on a continuous, logarithmic scale. They also allow to rescale the MIC range with an 'inside' or 'outside' range if required, and retain the signs in MIC values if desired. Missing intermediate log2 levels will be plotted too. } \subsection{The \verb{scale_*_sir()} Functions}{ -The functions \code{\link[=scale_x_sir]{scale_x_sir()}}, \code{\link[=scale_colour_sir]{scale_colour_sir()}}, and \code{\link[=scale_fill_sir]{scale_fill_sir()}} functions allow to plot the \link[=as.sir]{sir} class (S/I/R values). They can translate the S/I/R values to any of the 20 supported languages, and set colour-blind friendly colours to the \code{colour} and \code{fill} aesthetics. +The functions \code{\link[=scale_x_sir]{scale_x_sir()}}, \code{\link[=scale_colour_sir]{scale_colour_sir()}}, and \code{\link[=scale_fill_sir]{scale_fill_sir()}} functions allow to plot the \link[=as.sir]{sir} class in the right order (S < SDD < I < R < NI). At default, they translate the S/I/R values to an interpretative text ("Susceptible", "Resistant", etc.) in any of the 20 supported languages (use \code{language = NULL} to keep S/I/R). Also, except for \code{\link[=scale_x_sir]{scale_x_sir()}}, they set colour-blind friendly colours to the \code{colour} and \code{fill} aesthetics. } \subsection{Additional \code{ggplot2} Functions}{ @@ -7520,7 +7516,7 @@ This package contains more functions that extend the \code{ggplot2} package, to The interpretation of "I" will be named "Increased exposure" for all EUCAST guidelines since 2019, and will be named "Intermediate" in all other cases. -For interpreting MIC values as well as disk diffusion diameters, supported guidelines to be used as input for the \code{guideline} argument are: "EUCAST 2024", "EUCAST 2023", "EUCAST 2022", "EUCAST 2021", "EUCAST 2020", "EUCAST 2019", "EUCAST 2018", "EUCAST 2017", "EUCAST 2016", "EUCAST 2015", "EUCAST 2014", "EUCAST 2013", "EUCAST 2012", "EUCAST 2011", "CLSI 2024", "CLSI 2023", "CLSI 2022", "CLSI 2021", "CLSI 2020", "CLSI 2019", "CLSI 2018", "CLSI 2017", "CLSI 2016", "CLSI 2015", "CLSI 2014", "CLSI 2013", "CLSI 2012", and "CLSI 2011". Simply using \code{"CLSI"} or \code{"EUCAST"} as input will automatically select the latest version of that guideline. +For interpreting MIC values as well as disk diffusion diameters, the default guideline is EUCAST 2024, unless the package option \code{\link[=AMR-options]{AMR_guideline}} is set. See \code{\link[=as.sir]{as.sir()}} for more information. } } \examples{ diff --git a/data-raw/translations.tsv b/data-raw/translations.tsv index 3546c1a57..f56f3a622 100644 --- a/data-raw/translations.tsv +++ b/data-raw/translations.tsv @@ -6,8 +6,8 @@ Coagulase-positive Staphylococcus TRUE TRUE FALSE TRUE 凝固酶阳性葡萄球 Beta-haemolytic Streptococcus TRUE TRUE FALSE TRUE β-溶血性链球菌 Beta-hemolytický streptokok Beta-haemolytiske streptokokker Beta-hemolytische Streptococcus Beeta-hemolyyttinen streptokokki Streptococcus Bêta-hémolytique Beta-hämolytischer Streptococcus Β-αιμολυτικός στρεπτόκοκκος Streptococcus Beta-emolitico ベータ溶血性レンサ球菌 Beta-hemolytiske streptokokker Streptococcus beta-hemolityczny Streptococcus Beta-hemolítico Streptococ beta-hemolitic Бета-гемолитический стрептококк Streptococcus Beta-hemolítico Beta-hemolytiska streptokocker Beta-hemolitik Streptokok Бета-гемолітичний стрептокок unknown Gram-negatives TRUE TRUE FALSE TRUE 不明革兰氏阴性菌 neznámé gramnegativní ukendte Gram-negative onbekende Gram-negatieven tuntemattomat gramnegatiiviset Gram négatifs inconnus unbekannte Gramnegativen άγνωστοι αρνητικοί κατά Gram Gram negativi sconosciuti 不明なグラム陰性菌 ukjent Gram-negative Nieznane bakterie Gram-ujemne Gram negativos desconhecidos Gram-negative necunoscute неизвестные грамотрицательные Gram negativos desconocidos okända gramnegativa bakterier bilinmeyen Gram-negatifler невідомі грамнегативні unknown Gram-positives TRUE TRUE FALSE TRUE 不明革兰氏阳性菌 neznámé grampozitivní ukendte Gram-positive onbekende Gram-positieven tuntemattomat grampositiiviset Gram positifs inconnus unbekannte Grampositiven άγνωστοι θετικοί κατά Gram Gram positivi sconosciuti 未知のグラム陽性菌 ukjent Gram-positive Nieznane bakterie Gram-dodatnie Gram positivos desconhecidos Gram-pozitive necunoscute неизвестные грамположительные Gram positivos desconocidos okända Gram-positiva bilinmeyen Gram-pozitifler невідомі грампозитивні -unknown anaerobic Gram-negatives TRUE TRUE FALSE TRUE ukendte anaerobe Gram-negative onbekende anaerobe Gram-negatieven unbekannte anaerobe Gramnegativen -unknown anaerobic Gram-positives TRUE TRUE FALSE TRUE ukendte anaerobe Gram-positive onbekende anaerobe Gram-positieven unbekannte anaerobe Grampositiven +unknown anaerobic Gram-negatives TRUE FALSE FALSE FALSE 未知的厌氧革兰氏阴性菌 Neznámé anaerobní Gram-negativní bakterie Ukendte anaerobe Gram-negative Onbekende anaerobe Gram-negatieven Tuntemattomat anaerobiset gramnegatiivit Anaérobies à Gram négatif inconnues Unbekannte anaerobe Gram-negative Άγνωστοι αναερόβιοι Gram-αρνητικοί Sconosciuti anaerobi Gram-negativi 未知の嫌気性グラム陰性菌 Ukjente anaerobe Gram-negative Nieznane beztlenowe Gram-ujemne Anaeróbios Gram-negativos desconhecidos Necunoscuți anaerobi Gram-negativi Некоторые анаэробные Грам-отрицательные Desconocidos anaerobios Gram-negativos Okända anaeroba gramnegativa Bilinmeyen anaerobik Gram-negatif Невідомі анаеробні Грам-негативні +unknown anaerobic Gram-positives TRUE FALSE FALSE FALSE 未知的厌氧革兰氏阳性菌 Neznámé anaerobní Gram-pozitivní bakterie Ukendte anaerobe Gram-positive Onbekende anaerobe Gram-positieven Tuntemattomat anaerobiset grampositiiviset Anaérobies à Gram positif inconnues Unbekannte anaerobe Gram-positive Άγνωστοι αναερόβιοι Gram-θετικοί Sconosciuti anaerobi Gram-positivi 未知の嫌気性グラム陽性菌 Ukjente anaerobe Gram-positive Nieznane beztlenowe Gram-dodatnie Anaeróbios Gram-positivos desconhecidos Necunoscuți anaerobi Gram-pozitivi Некоторые анаэробные Грам-положительные Desconocidos anaerobios Gram-positivos Okända anaeroba grampositiva Bilinmeyen anaerobik Gram-pozitif Невідомі анаеробні Грам-позитивні unknown protozoan TRUE TRUE FALSE TRUE 未知原生动物 neznámý prvok ukendt protozo onbekend protozoön tuntematon alkueläin protozoaire inconnu unbekanntes Protozoon άγνωστο πρωτόζωο protozoo sconosciuto 未知の原生動物 ukjent protozo nieznany pierwotniak protozoário desconhecido protozoar necunoscut неизвестное простейшее protozoo desconocido okänd protozo bilinmeyen protozoa невідоме найпростіше unknown fungus TRUE TRUE FALSE TRUE 未知真菌 neznámé houby ukendt svamp onbekende schimmel tuntematon sieni champignon inconnu unbekannter Pilze άγνωστος μύκητας fungo sconosciuto 未知真菌 ukjent sopp Nieznany grzyb fungo desconhecido ciuperci necunoscute неизвестный грибок hongo desconocido Okänd svamp bilinmeyen mantar невідомий гриб unknown yeast TRUE TRUE FALSE TRUE 未知酵母菌 neznámé kvasinky ukendt gær onbekende gist tuntematon hiiva levure inconnue unbekannte Hefe άγνωστος ζυμομύκητας lievito sconosciuto 未知酵母 ukjent gjær Nieznany drożdżak levedura desconhecida drojdie necunoscută неизвестные дрожжи levadura desconocida Okänd jäst bilinmeyen maya невідомі дріжджі @@ -39,13 +39,13 @@ vegetative TRUE TRUE FALSE FALSE 无性系 vegetativní vegetativ vegetatief kas ([([ ]*?)Group TRUE TRUE FALSE FALSE ([([]*?)组 \\1Skupina \\1Gruppe \\1Groep \\1Ryhmä \\1Groupe \\1Gruppe ([([ ]*;)ομάδα \\1Gruppo \\1グループ \\1Gruppe ([([ ]*?)Grupa \\1Grupo \\1Grup \\1Группа \\1Grupo \\1Grupp ([([ ]*?)Grup \\1Група no .*growth FALSE FALSE FALSE FALSE 无.*生长 žádný .*růst ingen .*vækst geen .*groei ei .*kasvua pas .*croissance keine(|n|m|r|s)|nicht .*wachstum όχι .*αύξηση sem .*crescimento 成長なし nei .*vekst brak .*wzrostu sem .*crescimento fără creștere отсутствие.*роста no .*crecimientonon ingen .*tillväxt büyüme yok відсутність .*росту no|not FALSE FALSE FALSE FALSE 不|不 ne nej|ikke geen|niet ei non keine? no|not sem no|ない nei|ikke nie|nie sem nu нет? no|sin nej|inte hayır|değil|hayir|degil ні -Intermediate TRUE FALSE FALSE FALSE 中级 Meziprodukt Mellemliggende Intermediair Väliaikainen Mittlere Ενδιάμεση 中間体 Mellomliggende Pośrednia Intermediar Intermedio Mellanliggande Orta seviye Знижена чутливість -Susceptible, incr. exp. FALSE TRUE FALSE FALSE 易感,暴露增加 Vnímavý, zvýš. expozice Modtagelig, øget eksp. Gevoelig bij verh. blootstelling Altis, lisääntynyt altist. Empfindlich, erh Belastung Ευάλωτος, αυξημένη έκθεση 感受性、曝露量増加 Mottakelig, økt eksp. Podatne, zwiększone narażenie Susceptibil, exp. crescută Susceptible, mayor exposición Mottaglig, inkr. exponering Duyarlı, enk. maruziyet Чутливий до підвищеної експозиції -susceptible, incr. exp. FALSE TRUE FALSE FALSE 易感,接触增加 náchylná,zvýš. Expozice modtagelig, øget eksp. gevoelig bij verh. blootstelling altis, lisääntynyt altist. empfindlich, erh Belastung Ευαίσθητος, αυξημένη έκθεση 影響を受けやすい、露出が増える mottakelig, økt eksp. podatny, zwiększone narażenie susceptibil, exp. crescută susceptible, mayor exposición mottaglig, inkr. exponering duyarlı, enk. maruziyet чутливий до підвищеної експозиції -Susceptible TRUE FALSE FALSE FALSE 易受影响 Susceptible Modtagelig Gevoelig Altis Empfindlich Ευαίσθητο 影響を受けやすい Mottakelig Podatny Susceptibil Susceptible Mottaglig Duyarlı Чутливий -Incr. exposure TRUE FALSE FALSE FALSE 暴露增加 zvýšená expozice Øget eksponering 'Incr. exposure' Lisääntynyt altistuminen Empfindlich, erh Belastung Αυξημένη έκθεση 曝露量増加 Økt eksp. Większe narażenie Exp. crescută Mayor exposición Inkr. exponering Enk. maruziyet Підвищена експозиція -Resistant TRUE FALSE FALSE FALSE 耐药性 Rezistentní Resistent Resistent Kestävä Resistent Ανθεκτικός 耐性 Resistent Odporny Rezistent Resistente Resistent Dayanıklı Стійкий -Not interpretable TRUE FALSE FALSE FALSE 无法解释 Nelze interpretovat Ufortolkelig Niet interpreteerbaar Ei tulkittavissa Non interprétable Nicht interpretierbar Μη ερμηνεύσιμο Non interpretabile 解釈不可 Utolkelig ikke Niemożliwe do interpretacji Neinterpretabil Непереводимо No interpretable Inte tolkningsbar Yorumlanamaz Непридатний до інтерпретації +Intermediate TRUE FALSE FALSE FALSE 中级 Meziprodukt Mellemliggende Intermediair Väliaikainen Intermédiaire Mittlere Ενδιάμεση Intermedio 中間体 Mellomliggende Pośrednia Intermediário Intermediar Проміжний Intermedio Mellanliggande Orta seviye Знижена чутливість +Susceptible, incr. exp. FALSE TRUE FALSE FALSE 易感,暴露增加 Vnímavý, zvýšená expozice Modtagelig, øget eksponering Gevoelig bij verhoogde blootstelling Altis, lisääntynyt altistuminen Sensible, exposition accrue Empfindlich, erhöhte Belastung Ευάλωτος, αυξημένη έκθεση Sensibile, esposizione aumentata 感受性、曝露量増加 Mottakelig, økt eksponering Podatne, zwiększone narażenie Suscetível, exposição aumentada Susceptibil, expunere crescută Чутливий, підвищена експозиція Susceptible, mayor exposición Mottaglig, ökad exponering Duyarlı, artmış maruziyet Чутливий до підвищеної експозиції +susceptible, incr. exp. FALSE TRUE FALSE FALSE 易感,接触增加 Vnímavý, zvýšená expozice Modtagelig, øget eksponering Gevoelig bij verhoogde blootstelling Altis, lisääntynyt altistuminen Sensible, exposition accrue Empfindlich, erhöhte Belastung Ευαίσθητος, αυξημένη έκθεση Sensibile, esposizione aumentata 影響を受けやすい、露出が増える Mottakelig, økt eksponering Podatne, zwiększone narażenie Suscetível, exposição aumentada Susceptibil, expunere crescută Чутливий, підвищена експозиція Susceptible, mayor exposición Mottaglig, ökad exponering Duyarlı, artmış maruziyet Чутливий до підвищеної експозиції +Susceptible TRUE FALSE FALSE FALSE 易受影响 Vnímavý Modtagelig Gevoelig Altis Sensible Empfindlich Ευαίσθητο Sensibile 影響を受けやすい Mottakelig Podatny Suscetível Susceptibil Чутливий Susceptible Mottaglig Duyarlı Чутливий +Incr. exposure TRUE FALSE FALSE FALSE 暴露增加 Zvýšená expozice Øget eksponering Verhoogde blootstelling Lisääntynyt altistuminen Exposition accrue Erhöhte Belastung Αυξημένη έκθεση Esposizione aumentata 曝露量増加 Økt eksponering Większe narażenie Exposição aumentada Expunere crescută Підвищена експозиція Mayor exposición Ökad exponering Artmış maruziyet Підвищена експозиція +Resistant TRUE FALSE FALSE FALSE 耐药性 Rezistentní Resistent Resistent Kestävä Résistant Resistent Ανθεκτικός Resistente 耐性 Resistent Odporny Resistente Rezistent Стійкий Resistente Resistent Dayanıklı Стійкий +Not interpretable TRUE FALSE FALSE FALSE 无法解释 Nelze interpretovat Ufortolkelig Niet interpreteerbaar Ei tulkittavissa Non interprétable Nicht interpretierbar Μη ερμηνεύσιμο Non interpretabile 解釈不可 Utolkelig ikke Niemożliwe do interpretacji Não interpretável Neinterpretabil Непереводимо No interpretable Inte tolkningsbar Yorumlanamaz Непридатний до інтерпретації antibiotic TRUE TRUE FALSE FALSE 抗生素 antibiotikum antibiotikum antibioticum antibiootti antibiotique Antibiotikum αντιβιοτικό antibiotico 抗生物質 Antibiotikum antybiotyk antibiótico antibiotic антибиотик antibiótico antibiotika Antibiyotik антибіотик Antibiotic TRUE TRUE FALSE FALSE 抗生素 Antibiotikum Antibiotikum Antibioticum Antibiootti Antibiotique Antibiotikum Αντιβιοτικό Antibiotico 抗生物質 Antibiotikum Antybiotyk Antibiótico Antibiotic Антибиотик Antibiótico Antibiotika Antibiyotik Антибіотик Drug TRUE TRUE FALSE FALSE 药物 Lék Lægemiddel Middel Lääke Médicament Medikament Φάρμακο Droga 薬剤 Legemiddel Lek Droga Medicament Лекарство Fármaco Läkemedel İlaç Лікарський засіб diff --git a/man/antibiogram.Rd b/man/antibiogram.Rd index 570b3aec7..92cc38625 100644 --- a/man/antibiogram.Rd +++ b/man/antibiogram.Rd @@ -21,18 +21,19 @@ antibiogram(x, antibiotics = where(is.sir), mo_transform = "shortname", ab_transform = "name", syndromic_group = NULL, add_total_n = FALSE, only_all_tested = FALSE, digits = ifelse(wisca, 1, 0), - formatting_type = getOption("AMR_antibiogram_formatting_type", - ifelse(wisca, 14, 10)), col_mo = NULL, language = get_AMR_locale(), - minimum = 30, combine_SI = TRUE, sep = " + ", wisca = FALSE, - simulations = 1000, conf_interval = 0.95, interval_side = "two-tailed", + formatting_type = getOption("AMR_antibiogram_formatting_type", 14), + col_mo = NULL, language = get_AMR_locale(), minimum = 30, + combine_SI = TRUE, sep = " + ", wisca = FALSE, simulations = 1000, + conf_interval = 0.95, interval_side = "two-tailed", info = interactive()) -wisca(x, antibiotics = where(is.sir), mo_transform = "shortname", - ab_transform = "name", syndromic_group = NULL, add_total_n = FALSE, - only_all_tested = FALSE, digits = 1, +wisca(x, antibiotics = where(is.sir), ab_transform = "name", + syndromic_group = NULL, add_total_n = FALSE, only_all_tested = FALSE, + digits = 1, formatting_type = getOption("AMR_antibiogram_formatting_type", 14), col_mo = NULL, language = get_AMR_locale(), minimum = 30, combine_SI = TRUE, sep = " + ", simulations = 1000, + conf_interval = 0.95, interval_side = "two-tailed", info = interactive()) retrieve_wisca_parameters(wisca_model, ...) @@ -55,7 +56,7 @@ retrieve_wisca_parameters(wisca_model, ...) \item{syndromic_group}{a column name of \code{x}, or values calculated to split rows of \code{x}, e.g. by using \code{\link[=ifelse]{ifelse()}} or \code{\link[dplyr:case_when]{case_when()}}. See \emph{Examples}.} -\item{add_total_n}{a \link{logical} to indicate whether total available numbers per pathogen should be added to the table (default is \code{TRUE}). This will add the lowest and highest number of available isolates per antimicrobial (e.g, if for \emph{E. coli} 200 isolates are available for ciprofloxacin and 150 for amoxicillin, the returned number will be "150-200").} +\item{add_total_n}{a \link{logical} to indicate whether \code{n_tested} available numbers per pathogen should be added to the table (default is \code{TRUE}). This will add the lowest and highest number of available isolates per antimicrobial (e.g, if for \emph{E. coli} 200 isolates are available for ciprofloxacin and 150 for amoxicillin, the returned number will be "150-200"). This option is unavailable when \code{wisca = TRUE}; in that case, use \code{\link[=retrieve_wisca_parameters]{retrieve_wisca_parameters()}} to get the parameters used for WISCA.} \item{only_all_tested}{(for combination antibiograms): a \link{logical} to indicate that isolates must be tested for all antimicrobials, see \emph{Details}} @@ -73,7 +74,7 @@ retrieve_wisca_parameters(wisca_model, ...) \item{sep}{a separating character for antimicrobial columns in combination antibiograms} -\item{wisca}{a \link{logical} to indicate whether a Weighted-Incidence Syndromic Combination Antibiogram (WISCA) must be generated (default is \code{FALSE}). This will use a Bayesian decision model to estimate regimen coverage probabilities using \href{https://en.wikipedia.org/wiki/Monte_Carlo_method}{Monte Carlo simulations}. Set \code{simulations} to adjust.} +\item{wisca}{a \link{logical} to indicate whether a Weighted-Incidence Syndromic Combination Antibiogram (WISCA) must be generated (default is \code{FALSE}). This will use a Bayesian decision model to estimate regimen coverage probabilities using \href{https://en.wikipedia.org/wiki/Monte_Carlo_method}{Monte Carlo simulations}. Set \code{simulations}, \code{conf_interval}, and \code{interval_side} to adjust.} \item{simulations}{(for WISCA) a numerical value to set the number of Monte Carlo simulations} @@ -108,7 +109,7 @@ For estimating antimicrobial coverage, especially when creating a WISCA, the out The numeric values of an antibiogram are stored in a long format as the \link[=attributes]{attribute} \code{long_numeric}. You can retrieve them using \code{attributes(x)$long_numeric}, where \code{x} is the outcome of \code{\link[=antibiogram]{antibiogram()}} or \code{\link[=wisca]{wisca()}}. This is ideal for e.g. advanced plotting. \subsection{Formatting Type}{ -The formatting of the 'cells' of the table can be set with the argument \code{formatting_type}. In these examples, \code{5} is the antimicrobial coverage (for WISCA: \code{4-6} indicates the confidence level), \code{15} the numerator, and \code{300} the denominator: +The formatting of the 'cells' of the table can be set with the argument \code{formatting_type}. In these examples, \code{5} is the antimicrobial coverage (\code{4-6} indicates the confidence level), \code{15} the number of susceptible isolates, and \code{300} the number of tested (i.e., available) isolates: \enumerate{ \item 5 \item 15 @@ -119,13 +120,11 @@ The formatting of the 'cells' of the table can be set with the argument \code{fo \item 5 (N=300) \item 5\% (N=300) \item 5 (15/300) -\item 5\% (15/300) - \strong{default for non-WISCA} +\item 5\% (15/300) \item 5 (N=15/300) \item 5\% (N=15/300) - -Additional options for WISCA (using \code{antibiogram(..., wisca = TRUE)} or \code{wisca()}): \item 5 (4-6) -\item 5\% (4-6\%) - \strong{default for WISCA} +\item 5\% (4-6\%) - \strong{default} \item 5 (4-6,300) \item 5\% (4-6\%,300) \item 5 (4-6,N=300) @@ -136,7 +135,7 @@ Additional options for WISCA (using \code{antibiogram(..., wisca = TRUE)} or \co \item 5\% (4-6\%,N=15/300) } -The default is \code{14} for WISCA and \code{10} for non-WISCA, which can be set globally with the package option \code{\link[=AMR-options]{AMR_antibiogram_formatting_type}}, e.g. \code{options(AMR_antibiogram_formatting_type = 5)}. Do note that for WISCA, the numerator and denominator are less useful to report, since these are included in the Bayesian model and apparent from the susceptibility and its confidence level. +The default is \code{14}, which can be set globally with the package option \code{\link[=AMR-options]{AMR_antibiogram_formatting_type}}, e.g. \code{options(AMR_antibiogram_formatting_type = 5)}. Do note that for WISCA, the total numbers of tested and susceptible isolates are less useful to report, since these are included in the Bayesian model and apparent from the susceptibility and its confidence level. Set \code{digits} (defaults to \code{0}) to alter the rounding of the susceptibility percentages. } @@ -145,7 +144,7 @@ Set \code{digits} (defaults to \code{0}) to alter the rounding of the susceptibi There are various antibiogram types, as summarised by Klinker \emph{et al.} (2021, \doi{10.1177/20499361211011373}), and they are all supported by \code{\link[=antibiogram]{antibiogram()}}. -\strong{Use WISCA whenever possible}, since it provides more precise coverage estimates by accounting for pathogen incidence and antimicrobial susceptibility, as has been shown by Bielicki \emph{et al.} (2020, \doi{10.1001.jamanetworkopen.2019.21124}). See the section \emph{Explaining WISCA} on this page. +For clinical coverage estimations, \strong{use WISCA whenever possible}, since it provides more precise coverage estimates by accounting for pathogen incidence and antimicrobial susceptibility, as has been shown by Bielicki \emph{et al.} (2020, \doi{10.1001.jamanetworkopen.2019.21124}). See the section \emph{Explaining WISCA} on this page. Do note that WISCA is pathogen-agnostic, meaning that the outcome is not stratied by pathogen, but rather by syndrome. \enumerate{ \item \strong{Traditional Antibiogram} @@ -215,13 +214,16 @@ In clinical practice, antimicrobial coverage decisions evolve as more microbiolo At admission, no pathogen information is available. \itemize{ -\item Action: broad-spectrum coverage is based on local resistance patterns and syndromic antibiograms. +\item Action: broad-spectrum coverage is based on local resistance patterns and syndromic antibiograms. Using the pathogen-agnostic yet incidence-weighted WISCA is preferred. \item Code example: \if{html}{\out{
}}\preformatted{antibiogram(your_data, antibiotics = selected_regimens, - wisca = TRUE, mo_transform = NA) # all pathogens set to `NA` + +# preferred: use WISCA +wisca(your_data, + antibiotics = selected_regimens) }\if{html}{\out{
}} } \item \strong{Refinement with Gram Stain Results} @@ -233,7 +235,6 @@ When a blood culture becomes positive, the Gram stain provides an initial and cr \if{html}{\out{
}}\preformatted{antibiogram(your_data, antibiotics = selected_regimens, - wisca = TRUE, mo_transform = "gramstain") # all pathogens set to Gram-pos/Gram-neg }\if{html}{\out{
}} } @@ -246,7 +247,6 @@ After cultivation of the pathogen, full pathogen identification allows precise t \if{html}{\out{
}}\preformatted{antibiogram(your_data, antibiotics = selected_regimens, - wisca = TRUE, mo_transform = "shortname") # all pathogens set to 'G. species', e.g., E. coli }\if{html}{\out{
}} } @@ -290,7 +290,7 @@ You can also use functions from specific 'table reporting' packages to transform \section{Explaining WISCA}{ -WISCA, as outlined by Bielicki \emph{et al.} (\doi{10.1093/jac/dkv397}), stands for Weighted-Incidence Syndromic Combination Antibiogram, which estimates the probability of adequate empirical antimicrobial regimen coverage for specific infection syndromes. This method leverages a Bayesian hierarchical logistic regression framework with random effects for pathogens and regimens, enabling robust estimates in the presence of sparse data. +WISCA, as outlined by Bielicki \emph{et al.} (\doi{10.1093/jac/dkv397}), stands for Weighted-Incidence Syndromic Combination Antibiogram, which estimates the probability of adequate empirical antimicrobial regimen coverage for specific infection syndromes. This method leverages a Bayesian decision model with random effects for pathogen incidence and susceptibility, enabling robust estimates in the presence of sparse data. The Bayesian model assumes conjugate priors for parameter estimation. For example, the coverage probability \eqn{\theta} for a given antimicrobial regimen is modelled using a Beta distribution as a prior: @@ -324,6 +324,8 @@ Stratified results can be provided based on covariates such as age, sex, and cli \deqn{\text{OR}_{\text{covariate}} = \frac{\exp(\beta_{\text{covariate}})}{\exp(\beta_0)}} By combining empirical data with prior knowledge, WISCA overcomes the limitations of traditional combination antibiograms, offering disease-specific, patient-stratified estimates with robust uncertainty quantification. This tool is invaluable for antimicrobial stewardship programs and empirical treatment guideline refinement. + +\strong{Note:} WISCA never gives an output on the pathogen/species level, as all incidences and susceptibilities are already weighted for all species. } \examples{ @@ -341,14 +343,12 @@ antibiogram(example_isolates, antibiogram(example_isolates, antibiotics = aminoglycosides(), ab_transform = "atc", - mo_transform = "gramstain" -) + mo_transform = "gramstain") antibiogram(example_isolates, antibiotics = carbapenems(), ab_transform = "name", - mo_transform = "name" -) + mo_transform = "name") # Combined antibiogram ------------------------------------------------- @@ -356,16 +356,14 @@ antibiogram(example_isolates, # combined antibiotics yield higher empiric coverage antibiogram(example_isolates, antibiotics = c("TZP", "TZP+TOB", "TZP+GEN"), - mo_transform = "gramstain" -) + mo_transform = "gramstain") # names of antibiotics do not need to resemble columns exactly: antibiogram(example_isolates, antibiotics = c("Cipro", "cipro + genta"), mo_transform = "gramstain", ab_transform = "name", - sep = " & " -) + sep = " & ") # Syndromic antibiogram ------------------------------------------------ @@ -373,8 +371,7 @@ antibiogram(example_isolates, # the data set could contain a filter for e.g. respiratory specimens antibiogram(example_isolates, antibiotics = c(aminoglycosides(), carbapenems()), - syndromic_group = "ward" -) + syndromic_group = "ward") # now define a data set with only E. coli ex1 <- example_isolates[which(mo_genus() == "Escherichia"), ] @@ -387,27 +384,24 @@ antibiogram(ex1, syndromic_group = ifelse(ex1$ward == "ICU", "UCI", "No UCI" ), - language = "es" -) + language = "es") # WISCA antibiogram ---------------------------------------------------- -# can be used for any of the above types - just add `wisca = TRUE` +# WISCA are not stratified by species, but rather on syndromes antibiogram(example_isolates, antibiotics = c("TZP", "TZP+TOB", "TZP+GEN"), - mo_transform = "gramstain", - wisca = TRUE -) + syndromic_group = "ward", + wisca = TRUE) # Print the output for R Markdown / Quarto ----------------------------- ureido <- antibiogram(example_isolates, antibiotics = ureidopenicillins(), - ab_transform = "name", - wisca = TRUE -) + syndromic_group = "name", + wisca = TRUE) # in an Rmd file, you would just need to return `ureido` in a chunk, # but to be explicit here: @@ -420,14 +414,11 @@ if (requireNamespace("knitr")) { ab1 <- antibiogram(example_isolates, antibiotics = c("AMC", "CIP", "TZP", "TZP+TOB"), - mo_transform = "gramstain", - wisca = TRUE -) + mo_transform = "gramstain") ab2 <- antibiogram(example_isolates, antibiotics = c("AMC", "CIP", "TZP", "TZP+TOB"), mo_transform = "gramstain", - syndromic_group = "ward" -) + syndromic_group = "ward") if (requireNamespace("ggplot2")) { ggplot2::autoplot(ab1) diff --git a/man/plot.Rd b/man/plot.Rd index 82c62a602..6f6ad6e09 100644 --- a/man/plot.Rd +++ b/man/plot.Rd @@ -9,6 +9,7 @@ \alias{scale_fill_mic} \alias{scale_x_sir} \alias{scale_colour_sir} +\alias{scale_color_sir} \alias{scale_fill_sir} \alias{plot.mic} \alias{autoplot.mic} @@ -19,6 +20,7 @@ \alias{facet_sir} \alias{scale_y_percent} \alias{scale_sir_colours} +\alias{scale_sir_colors} \alias{theme_sir} \alias{labels_sir_count} \title{Plotting Helpers for AMR Data Analysis} @@ -29,8 +31,6 @@ scale_y_mic(keep_operators = "edges", mic_range = NULL, ...) scale_colour_mic(keep_operators = "edges", mic_range = NULL, ...) -scale_color_mic(keep_operators = "edges", mic_range = NULL, ...) - scale_fill_mic(keep_operators = "edges", mic_range = NULL, ...) scale_x_sir(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), @@ -45,7 +45,8 @@ scale_fill_sir(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), language = get_AMR_locale(), eucast_I = getOption("AMR_guideline", "EUCAST") == "EUCAST", ...) -\method{plot}{mic}(x, mo = NULL, ab = NULL, guideline = "EUCAST", +\method{plot}{mic}(x, mo = NULL, ab = NULL, + guideline = getOption("AMR_guideline", "EUCAST"), main = deparse(substitute(x)), ylab = translate_AMR("Frequency", language = language), xlab = translate_AMR("Minimum Inhibitory Concentration (mg/L)", language = @@ -55,8 +56,9 @@ scale_fill_sir(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), breakpoint_type = getOption("AMR_breakpoint_type", "human"), ...) \method{autoplot}{mic}(object, mo = NULL, ab = NULL, - guideline = "EUCAST", title = deparse(substitute(object)), - ylab = translate_AMR("Frequency", language = language), + guideline = getOption("AMR_guideline", "EUCAST"), + title = deparse(substitute(object)), ylab = translate_AMR("Frequency", + language = language), xlab = translate_AMR("Minimum Inhibitory Concentration (mg/L)", language = language), colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), language = get_AMR_locale(), expand = TRUE, @@ -66,7 +68,7 @@ scale_fill_sir(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), \method{plot}{disk}(x, main = deparse(substitute(x)), ylab = translate_AMR("Frequency", language = language), xlab = translate_AMR("Disk diffusion diameter (mm)", language = language), - mo = NULL, ab = NULL, guideline = "EUCAST", + mo = NULL, ab = NULL, guideline = getOption("AMR_guideline", "EUCAST"), colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), language = get_AMR_locale(), expand = TRUE, include_PKPD = getOption("AMR_include_PKPD", TRUE), @@ -75,8 +77,9 @@ scale_fill_sir(colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), \method{autoplot}{disk}(object, mo = NULL, ab = NULL, title = deparse(substitute(object)), ylab = translate_AMR("Frequency", language = language), xlab = translate_AMR("Disk diffusion diameter (mm)", - language = language), guideline = "EUCAST", colours_SIR = c("#3CAEA3", - "#F6D55C", "#ED553B"), language = get_AMR_locale(), expand = TRUE, + language = language), guideline = getOption("AMR_guideline", "EUCAST"), + colours_SIR = c("#3CAEA3", "#F6D55C", "#ED553B"), + language = get_AMR_locale(), expand = TRUE, include_PKPD = getOption("AMR_include_PKPD", TRUE), breakpoint_type = getOption("AMR_breakpoint_type", "human"), ...) @@ -169,12 +172,12 @@ Especially the \verb{scale_*_mic()} functions are relevant wrappers to plot MIC \details{ \subsection{The \verb{scale_*_mic()} Functions}{ -The functions \code{\link[=scale_x_mic]{scale_x_mic()}}, \code{\link[=scale_y_mic]{scale_y_mic()}}, \code{\link[=scale_colour_mic]{scale_colour_mic()}}, and \code{\link[=scale_fill_mic]{scale_fill_mic()}} functions allow to plot the \link[=as.mic]{mic} class (MIC values) on a continuous scale. They allow to rescale the MIC range, and retain the signs in MIC values if desired. Missing intermediate log2 levels will be plotted too. +The functions \code{\link[=scale_x_mic]{scale_x_mic()}}, \code{\link[=scale_y_mic]{scale_y_mic()}}, \code{\link[=scale_colour_mic]{scale_colour_mic()}}, and \code{\link[=scale_fill_mic]{scale_fill_mic()}} functions allow to plot the \link[=as.mic]{mic} class (MIC values) on a continuous, logarithmic scale. They also allow to rescale the MIC range with an 'inside' or 'outside' range if required, and retain the signs in MIC values if desired. Missing intermediate log2 levels will be plotted too. } \subsection{The \verb{scale_*_sir()} Functions}{ -The functions \code{\link[=scale_x_sir]{scale_x_sir()}}, \code{\link[=scale_colour_sir]{scale_colour_sir()}}, and \code{\link[=scale_fill_sir]{scale_fill_sir()}} functions allow to plot the \link[=as.sir]{sir} class (S/I/R values). They can translate the S/I/R values to any of the 20 supported languages, and set colour-blind friendly colours to the \code{colour} and \code{fill} aesthetics. +The functions \code{\link[=scale_x_sir]{scale_x_sir()}}, \code{\link[=scale_colour_sir]{scale_colour_sir()}}, and \code{\link[=scale_fill_sir]{scale_fill_sir()}} functions allow to plot the \link[=as.sir]{sir} class in the right order (S < SDD < I < R < NI). At default, they translate the S/I/R values to an interpretative text ("Susceptible", "Resistant", etc.) in any of the 20 supported languages (use \code{language = NULL} to keep S/I/R). Also, except for \code{\link[=scale_x_sir]{scale_x_sir()}}, they set colour-blind friendly colours to the \code{colour} and \code{fill} aesthetics. } \subsection{Additional \code{ggplot2} Functions}{ @@ -190,7 +193,7 @@ This package contains more functions that extend the \code{ggplot2} package, to The interpretation of "I" will be named "Increased exposure" for all EUCAST guidelines since 2019, and will be named "Intermediate" in all other cases. -For interpreting MIC values as well as disk diffusion diameters, supported guidelines to be used as input for the \code{guideline} argument are: "EUCAST 2024", "EUCAST 2023", "EUCAST 2022", "EUCAST 2021", "EUCAST 2020", "EUCAST 2019", "EUCAST 2018", "EUCAST 2017", "EUCAST 2016", "EUCAST 2015", "EUCAST 2014", "EUCAST 2013", "EUCAST 2012", "EUCAST 2011", "CLSI 2024", "CLSI 2023", "CLSI 2022", "CLSI 2021", "CLSI 2020", "CLSI 2019", "CLSI 2018", "CLSI 2017", "CLSI 2016", "CLSI 2015", "CLSI 2014", "CLSI 2013", "CLSI 2012", and "CLSI 2011". Simply using \code{"CLSI"} or \code{"EUCAST"} as input will automatically select the latest version of that guideline. +For interpreting MIC values as well as disk diffusion diameters, the default guideline is EUCAST 2024, unless the package option \code{\link[=AMR-options]{AMR_guideline}} is set. See \code{\link[=as.sir]{as.sir()}} for more information. } } \examples{ diff --git a/tests/testthat/test-ggplot_sir.R b/tests/testthat/test-ggplot_sir.R index afbe4ac94..0a3d66130 100644 --- a/tests/testthat/test-ggplot_sir.R +++ b/tests/testthat/test-ggplot_sir.R @@ -121,13 +121,13 @@ if (AMR:::pkg_is_available("dplyr", min_version = "1.0.0", also_load = TRUE) && # support for manual colours expect_inherits( - (ggplot(data.frame( + suppressWarnings((ggplot(data.frame( x = c("Value1", "Value2", "Value3"), y = c(1, 2, 3), z = c("Value4", "Value5", "Value6") )) + geom_col(aes(x = x, y = y, fill = z)) + - scale_sir_colours(Value4 = "S", Value5 = "I", Value6 = "R"))$data, + scale_sir_colours(aesthetics = "fill", Value4 = "S", Value5 = "I", Value6 = "R"))$data), "data.frame" ) }