r4subtrace is the traceability engine in the R4SUB ecosystem. It quantifies end-to-end traceability between clinical submission artifacts — ADaM outputs ↔︎ derivations ↔︎ SDTM sources ↔︎ specs ↔︎ code — and converts trace evidence into standardized R4SUB evidence rows.
Can we prove where each analysis variable came from, and can a reviewer follow it?
Installation
Development version:
pak::pak(c("R4SUB/r4subcore", "R4SUB/r4subtrace"))
Traceability Levels
| L0 |
None |
No linkage available |
| L1 |
Spec-only |
ADaM spec defines derivation, no code mapping |
| L2 |
Spec + source |
ADaM variable mapped to SDTM variables/domains |
| L3 |
Spec + code |
Mapping with high confidence or derivation text |
Trace Indicators
TRACE_VAR_COVERAGE_L2PLUS |
Proportion of ADaM variables with L2+ trace |
TRACE_VAR_COVERAGE_L3PLUS |
Proportion with L3+ trace |
TRACE_ORPHAN_VAR_COUNT |
ADaM variables with no SDTM mapping |
TRACE_AMBIGUOUS_MAPPING_COUNT |
Variables mapped to multiple SDTM sources |
TRACE_MEAN_TRACE_LEVEL |
Mean trace level across all ADaM variables |
Design Principles
-
Graph-first: traceability is a graph problem
-
Evidence-first: all conclusions are backed by explicit evidence rows
-
Tool-agnostic: ingest mappings from any source format
-
Reviewer-centric: emphasize explainability, not just metrics