The hardware and bandwidth for this mirror is donated by dogado GmbH, the Webhosting and Full Service-Cloud Provider. Check out our Wordpress Tutorial.
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[@]dogado.de.
rwevalidate validates an
already-instantiated patient cohort on an OMOP CDM
database for real-world-evidence (RWE) use, and produces a structured
HTML + JSON report aligned with FDA RWE guidance (Relevance and
Reliability) and the HARPER protocol framework. It does
not generate cohorts – the cohort definition (SQL or
ATLAS) stays upstream.
The code below is not executed when the vignette is built (it needs a live database); it is the exact sequence you would run against your own CDM.
Before pointing the package at a real CDM, you can see it run end to
end on a small synthetic one. example_cdm() builds a tiny
OMOP CDM (10 patients, one heart-failure cohort) in an in-memory DuckDB
database and returns a live connection. This is the only chunk in this
article that actually runs, and it needs the duckdb
package.
library(rwevalidate)
con <- example_cdm()
out <- validate_cohort(
cdm_schema = "main",
cohort_table = "cohort",
cohort_id = 1,
con = con,
vocab_schema = "main",
output_dir = tempfile("rwe_demo_"),
render_html = FALSE
)
#> ℹ Running attrition audit (Module 2)...
#> ℹ Running temporal data density (Module 3)...
#> Module 1 (concept coverage) skipped; supply `concept_ids` to enable.
#> Module 4 (covariate feasibility) skipped; supply `comparator_id` to enable.
#> ✔ Validation complete: 0 fail, 0 warn across 2 checks.
out$report$check_summary
#> section status maps_to
#> 1 Cohort Attrition pass HARPER Sec.5 / RECORD-PE Item 6
#> 2 Temporal Data Density pass FDA Reliability - data accrual
#> detail
#> 1 All checks passed.
#> 2 All checks passed.
cdm_disconnect(con)The fixture is entirely synthetic and contains no real patient data. Everything below shows how to run the same call against your own OMOP CDM.
cdm_connect() opens a PostgreSQL connection and verifies
the required clinical tables exist in cdm_schema before
returning.
library(rwevalidate)
con <- cdm_connect(
host = "localhost",
port = 5432,
dbname = "your_db",
user = "your_user",
password = "your_password",
cdm_schema = "mimic_cdm"
)Many CDM builds are split-schema: clinical tables in
one schema and the vocabulary (concept,
concept_ancestor) in another. Pass the vocabulary schema
via vocab_schema (default "vocab").
rwevalidate reads a cohort table with the columns
subject_id, cohort_definition_id,
cohort_start_date, cohort_end_date. For
example, a heart-failure cohort using SNOMED concept 316139 and its
descendants:
DBI::dbExecute(con, "
CREATE TABLE results.my_cohort AS
SELECT person_id AS subject_id, 1 AS cohort_definition_id,
MIN(condition_start_date) AS cohort_start_date,
MAX(condition_end_date) AS cohort_end_date
FROM mimic_cdm.condition_occurrence
WHERE condition_concept_id IN (
SELECT descendant_concept_id FROM vocab.concept_ancestor
WHERE ancestor_concept_id = 316139)
GROUP BY person_id")validate_cohort() runs the modules and writes the
report. Supply an open con or the connection arguments
directly.
results <- validate_cohort(
cdm_schema = "mimic_cdm",
cohort_table = "results.my_cohort",
cohort_id = 1,
concept_ids = 316139, # enables Module 1 (concept coverage)
comparator_id = 2, # enables Module 4 (covariate feasibility)
vocab_schema = "vocab",
output_dir = "./validation_report",
con = con
)This writes validation_report.html and
validation_results.json to output_dir, and
returns a list with results (per-module output),
report (paths + traffic-light summary), and
flags.
Each module is also callable on its own when you only need one view.
run_attrition(con, "mimic_cdm", "results.my_cohort", cohort_id = 1,
vocab_schema = "vocab")
run_density(con, "mimic_cdm", "results.my_cohort", cohort_id = 1)
run_concepts(con, "mimic_cdm", "results.my_cohort", cohort_id = 1,
concept_ids = 316139, vocab_schema = "vocab")
run_covariates(con, "mimic_cdm", "results.my_cohort", cohort_id = 1,
comparator_id = 2, vocab_schema = "vocab")Every check returns "pass" (green), "warn"
(amber), or "fail" (red). Thresholds are documented
arguments – for example prior-observation coverage warns below 70% and
fails below 50%, and covariates with |SMD| > 0.1 are
flagged as imbalanced. Tune them to your study’s requirements.
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.
Health stats visible at Monitor.