1
0
mirror of https://github.com/msberends/AMR.git synced 2026-03-11 15:47:54 +01:00
Commit Graph

133 Commits

Author SHA1 Message Date
Matthijs Berends
9af726dcaa mdro(): infer base drug resistance from drug+inhibitor combination co… (#263)
* mdro(): infer base drug resistance from drug+inhibitor combination columns (#209)

When a base beta-lactam column (e.g., piperacillin/PIP) is absent but a
corresponding drug+inhibitor combination (e.g., piperacillin/tazobactam/TZP)
is present and resistant, resistance in the base drug is now correctly
inferred. This is clinically sound: resistance in a combination implies the
inhibitor provided no benefit, so the base drug is also resistant.

Susceptibility in a combination is NOT propagated to the base drug (the
inhibitor may be responsible for susceptibility), so only R values are
inferred; missing base drugs remain NA otherwise.

Implementation details:
- Uses AB_BETALACTAMS_WITH_INHIBITOR to identify all beta-lactam+inhibitor
  combinations present in the user's data
- Derives base drug AB codes by stripping the "/inhibitor" part from names
- Creates synthetic proxy columns (.sir_proxy_<AB>) in x, set to "R" when
  any matching combination is R, otherwise NA
- Proxy columns are added to cols_ab before drug variable assignment,
  so all existing guideline logic benefits without any changes
- Multiple combos for the same base drug are OR-ed (any R → R)
- Adds internal ab_without_inhibitor() helper for the name->base mapping
- Verbose mode reports which combinations are used for inference

Bumps version: 3.0.1.9028 -> 3.0.1.9029

https://claude.ai/code/session_01Cp154UtssHg84bw38xiiTG

* Add sir.R/mic.R fixes and mdro() unit tests; bump to 3.0.1.9030

R/sir.R (line 571):
  Guard purely numeric strings (e.g. "1", "8") from the Unicode letter
  filter. Values matching the broad SIR regex but consisting only of digits
  must not be stripped; add `x %unlike% "^[0-9+]$"` predicate.

R/mic.R (lines 220-222):
  Preserve the letter 'e' during Unicode-letter removal so that MIC values
  in scientific notation (e.g. "1e-3", "2.5e-2") survive the cleaning step.
  - Line 220: [\\p{L}] → [^e\\P{L}]  (remove all letters except 'e')
  - Line 222: [^0-9.><= -]+ → [^0-9e.><= -]+  (allow 'e' in whitelist)

tests/testthat/test-mdro.R:
  New tests for the drug+inhibitor inference added in the previous commit
  (issue #209):
  - TZP=R with no PIP column → PIP inferred R → MDRO class elevated
  - TZP=S with no PIP column → proxy col is NA (not S) → class lower
  - verbose mode emits "Inferring resistance" message
  - AMC=R with no AMX column runs without error (Enterococcus faecium)

https://claude.ai/code/session_01Cp154UtssHg84bw38xiiTG

* Fix version to single bump (9029) and update CLAUDE.md versioning rules

CLAUDE.md: Rewrite the "Version and date bump" subsection to document that:
- Exactly ONE version bump is allowed per PR (PRs are squash-merged into one
  commit on the default branch, so one commit = one version increment)
- The correct version is computed from git history:
    currentversion="${currenttag}.$((commits_since_tag + 9001 + 1))"
  with the +1 accounting for the PR's own squash commit not yet on the
  default branch
- Fall back to incrementing DESCRIPTION's version by 1 if git describe fails
- The Date: field tracks the date of the *last* PR commit (updated each time)

DESCRIPTION / NEWS.md: Correct the version from 3.0.1.9030 back to 3.0.1.9029.
Two version bumps were made across two commits in this PR; since it will be
squash-merged as one commit only one bump is correct. Also update Date to
today (2026-03-07).

https://claude.ai/code/session_01Cp154UtssHg84bw38xiiTG

* Fix stats::setNames, test accessor bug, and version script verification

R/mdro.R:
  Qualify setNames() as stats::setNames() in the drug+inhibitor inference
  block to satisfy R CMD CHECK's global-function checks.

tests/testthat/test-mdro.R:
  mdro() with verbose=FALSE returns an atomic ordered factor, not a
  data.frame. Fix three test errors introduced in the previous commit:
  - Line 320: result_no_pip$MDRO -> result_no_pip (factor, no $ accessor)
  - Line 328: result_tzp_s$MDRO / result_no_pip$MDRO -> direct factor refs
  - Line 347: expect_inherits(..., "data.frame") -> c("factor","ordered")
  Also fix the comment on line 347 to match the actual return type.

Version: confirmed at 3.0.1.9029 (no further bump; one bump already made
this PR). git describe failed (no tags in dev environment) — fallback
applies. The +1 in CLAUDE.md's formula is correct for tagged repos:
currentcommit + 9001 + 1 = 27 + 9001 + 1 = 9029 ✓

https://claude.ai/code/session_01Cp154UtssHg84bw38xiiTG

* Fix unit tests: use mrgn guideline and expect_message() for proxy tests

Three failures corrected:

1. Classification tests (lines 321, 329): The EUCAST guideline for
   P. aeruginosa already has OR logic (PIP OR TZP), so TZP=R alone
   satisfies it regardless of whether the PIP proxy exists. Switch to
   guideline="mrgn": the MRGN 4MRGN criterion for P. aeruginosa
   requires PIP=R explicitly (lines 1488-1496 of mdro.R), with no TZP
   fallback. Without the proxy: PIP missing -> not 4MRGN -> level 1.
   With the proxy (TZP=R infers PIP=R): 4MRGN reached -> level 3.
   The TZP=S case leaves proxy=NA, so PIP is still absent effectively
   -> level 1, which is < level 3 as expected.

2. Verbose/message test (line 335): message_() routes through message()
   to stderr, not cat() to stdout. expect_output() only captures stdout
   so it always saw nothing. Fix: use expect_message() instead, and
   remove the inner suppressMessages() that was swallowing the message
   before expect_message() could capture it.

Also trim two stale lines left over from the old expect_output block.

https://claude.ai/code/session_01Cp154UtssHg84bw38xiiTG

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-03-07 18:06:55 +01:00
c0a394008e (v3.0.1.9027) Fixes #252 and add documentation update regarding #253 2026-03-06 13:10:33 +01:00
b6211931f8 (v3.0.1.9022) add ceftibuten/avibactam (CTA), kasugamycin (KAS), ostreogrycin (OST), thiostrepton (THS), xeruborbactam (XER), zorbamycin (ZOR) 2026-03-03 15:41:08 +01:00
ba4c159154 (v3.0.1.9019) Wildtype/Non-wildtype support, and start with interpretive_rules()
Fixes #246
Fixes #254
Fixes #255
Fixes #256
2026-02-08 23:15:40 +01:00
2df2911cf4 (v3.0.1.9018) fixes #249
updates AB groups
2026-01-16 10:57:03 +01:00
4d7c4ca52c (v3.0.0.9027) skimr update and as.ab warning - fixes #234, fixes #232 2025-09-10 13:32:52 +02:00
72db2b2562 (v3.0.0.9003) eucast_rules fix, new tidymodels integration 2025-06-13 14:03:21 +02:00
38cebc1541 (v2.1.1.9279) fix documentation, add foreign S3 exports to functions 2025-05-16 16:55:29 +02:00
ea443f7483 (v2.1.1.9247) CLSI/EUCAST 2025! 2025-04-20 12:55:31 +02:00
40d7a971c3 (v2.1.1.9236) documentation 2025-04-12 11:46:42 +02:00
36fd99e1f4 (v2.1.1.9235) New website! 2025-04-08 15:54:30 +01:00
1fdab84103 (v2.1.1.9233) chore: make all argument texts full sentences 2025-03-31 14:53:24 +02:00
63099cd81e (v2.1.1.9232) is.mic() iteration, documentation cleanup 2025-03-31 10:51:31 +02:00
e6f88241b2 (v2.1.1.9225) fix geom_hline()/_vline() in MIC plotting, add EUCAT 1.2 in full, add London contribs, fix mo codes, add Kleb pneu complex 2025-03-26 17:19:17 +01:00
43660f2b18 (v2.1.1.9221) allow combined numeric MIC values 2025-03-20 21:47:45 +01:00
a7ef22a21e (v2.1.1.9194) new argument for missing R breakpoints - updated from WHONET 2025-03-12 16:24:38 +01:00
9a9468fa84 (v2.1.1.9182) fix AMR selectors for tidymodels, add unit tests 2025-03-03 12:59:27 +01:00
07efc292bc (v2.1.1.9163) cleanup 2025-02-27 14:04:29 +01:00
aa8f6af185 (v2.1.1.9155) new mic_p50() and mic_p90() - updated AMR intro 2025-02-23 11:18:08 +01:00
abb5602532 (v2.1.1.9153) mic plot fix 2025-02-22 21:26:38 +01:00
671d657fd8 (v2.1.1.9152) MIC plot fix 2025-02-18 08:07:02 +01:00
07757c933c (v2.1.1.9144) new MIC scales and fix for rescale_mic() 2025-02-11 08:48:37 +01:00
Edwin van Leeuwen
1697ad37ce feat: Remove leading equal signs before mic levels (#181) 2025-01-16 11:57:25 +01:00
a558f4c121 (v2.1.1.9080) fix rescale_mic() for an outside MIC range 2024-09-24 22:39:40 +02:00
640888f408 (v2.1.1.9064) update all microbial taxonomy, add mycobank, big documentation update 2024-07-16 14:53:17 +02:00
af74e1d4f2 (v2.1.1.9041) antibiotics update 2024-06-08 17:35:25 +02:00
d4490c7f25 fix sorting of MICs, MIC autoplot titles 2024-05-30 15:50:17 +02:00
c3ce1b551d rename limit_mic_range() to rescale_mic() 2024-05-24 15:07:41 +02:00
2899b3c840 new mo_group_members() 2024-04-19 10:18:21 +02:00
94e9a4d99b update MIC implementation 2024-04-07 20:22:59 +02:00
0039cb05d6 update MIC comparisons 2024-04-05 16:44:43 +02:00
7be4dabbc0 support veterinary MIC/disk translation 2024-02-24 15:16:52 +01:00
83e92fd88c docu fix 2023-12-04 08:19:02 +01:00
c7461766ce Remove RSI from package, add extra MIC scale functions 2023-12-03 11:34:48 +01:00
6f417d0ef2 add scale_x_mic() 2023-12-03 01:06:00 +01:00
4c11a7bd9c v2.1.1 2023-10-22 15:51:27 +02:00
ca72a646d0 scientific notation for MICs 2023-10-20 15:45:00 +02:00
7cda9e575b prepare for CRAN 2023-10-20 14:51:48 +02:00
7dc96794be fix rounding MICs on R-devel 2023-07-20 08:24:27 +02:00
acb534102b new species groups, updated clinical breakpoints 2023-07-08 17:30:05 +02:00
9591688811 documentation update 2023-05-27 10:39:22 +02:00
dad25302f2 make rsi work in more cases, documentation update 2023-02-22 14:38:57 +01:00
1a0dc4bf46 revert back to pre-antibiogram 2023-02-09 13:07:39 +01:00
9e99e66f01 use dplyr where available, new antibiogram() for WISCA, fixed Salmonella Typhi/Paratyphi 2023-02-06 11:57:22 +01:00
19fd0ef121 sort sir history 2023-01-23 15:01:21 +01:00
Dr. Matthijs Berends
98e62c9af2 Replace RSI with SIR 2023-01-21 23:47:20 +01:00
f619fb683b support new mo codes 2022-12-27 15:16:15 +01:00
ba51c2d92f add column to as.mic() and as.disk() warnings 2022-11-28 19:39:52 +01:00
f6862a139d expert rules 12.0 2022-11-14 15:20:39 +01:00
85e2fbe4a3 remove warnings from unit tests 2022-10-19 11:47:57 +02:00