The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
trialdiff is a clinical-trial data-cut change
detection and downstream impact assessment framework for R,
designed for the pharmaverse ecosystem.
Existing tools tell you that two datasets differ.
trialdiff answers the clinical-programming question that
follows:
What changed, what does the change represent, and which downstream analyses or outputs might be affected?
It does this in five transparent, composable layers:
| Layer | Function | Purpose |
|---|---|---|
| Compare | compare_cut() |
Added/removed/modified observations and schema changes |
| Classify | classify_changes() |
Rule-based clinical change taxonomy |
| Trace | define_lineage(), trace_dependencies(),
lineage_from_metadata(),
output_registry() |
Explicit data lineage graph |
| Assess | assess_impact() |
Definitely / potentially / unlikely impact |
| Report | report_diff() |
HTML, Quarto and machine-readable JSON |
Everything is deterministic. There is no machine learning, and no statistical impact is ever claimed - analyses are flagged for review and rerun.
# From r-universe (includes Windows/macOS binaries)
install.packages(
"trialdiff",
repos = c(
hirujan = "https://hirujan-r.r-universe.dev",
CRAN = "https://cloud.r-project.org"
)
)
# Or from GitHub
# install.packages("remotes")
remotes::install_github("Hirujan-R/trialdiff")library(trialdiff)
diff <- compare_cut(
old = adsl_cut1,
new = adsl_cut2,
by = "USUBJID",
dataset = "ADSL"
)
classified <- classify_changes(diff)
impact <- assess_impact(classified, adsl_adlb_lineage)
report_diff(diff, impact = impact, output = "report.html")A treatment assignment change (TRT01P = "Placebo" ->
"Drug A") is detected, classified as a treatment-assignment
change, traced through
ADSL.TRT01P -> ADLB.TRT01P -> lab summary -> MMRM -> efficacy table,
and every downstream object is flagged for review with a rationale.
diffdf?diffdf (and waldo) are excellent low-level
comparison tools, and trialdiff deliberately does not
reinvent them. trialdiff adds the layers that are specific
to clinical programming:
It can even delegate the low-level comparison itself:
compare_cut(..., backend = "diffdf") uses
diffdf to detect differences and translates the result into
the same tdiff object.
vignette("trialdiff") - getting started.vignette("change-classification") - the rule
system.vignette("lineage-and-impact") - lineage and
impact.vignette("ecosystem") - relationship to
diffdf, admiral, metacore,
cards, tern, SAS PROC COMPARE and
others.vignette("case-study") - end-to-end walkthrough on
public pharmaverseadam data.A full proposal covering the problem statement, ecosystem/gap analysis, novelty assessment, architecture, testing and roadmap is available in the project proposal.
Please note that the trialdiff project is released with
a Contributor
Code of Conduct. By contributing you agree to abide by its
terms.
MIT (c) Hirujan Rangaraj. No proprietary or real patient data is included; all example datasets are synthetic.
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.