Cohort Utilization & Cost Enrichment
Source:vignettes/cohort-utilization.Rmd
cohort-utilization.RmdCohort Utilization & Cost Enrichment
In Health Economics and Outcomes Research (HEOR) and Real-World Evidence (RWE), evaluating Healthcare Resource Utilization (HCRU) and direct medical costs requires capturing granular patient encounters across multiple care settings (inpatient, outpatient, emergency, pharmacy, diagnostics, procedures, and financial claims).
Following the DARWIN EU / OHDSI package ecosystem
standards (CohortConstructor, PatientProfiles,
CohortCharacteristics), omopHeor provides
a pipe-friendly, 3-layer architecture for cohort construction,
in-database column enrichment, and standardized reporting.
3-Layer Architecture Overview
┌────────────────────────────────────────────────────────────────────────────────────────┐
│ OMOP CDM DATABASE │
│ (visit_occurrence, provider, drug_exposure, procedure_occurrence, measurement, cost) │
└────────────────────────────────────────────────────────────────────────────────────────┘
│
┌────────────────────────────┼────────────────────────────┐
▼ ▼ ▼
1. Episode Constructors 2. Cohort Enrichers 3. Summarisation & Reporting
(CohortConstructor Style) (PatientProfiles Style) (CohortCharacteristics Style)
───────────────────────── ─────────────────────── ────────────────────────────
Standalone episode cohorts Appends windowed metric Standardised result objects
in write schema: columns in-database: for publication tables:
• computeHospitalization* • addInpatients() • summariseUtilization()
• computeInfusionCohorts() • addEmergencyCare() • summariseCosts()
• addOutpatientVisits() • tableUtilization()
• addPrescriptions() • tableCosts()
• addProcedures() • plotUtilization()
• addCosts() • plotCosts()
• addVisits() (composite)
1. Setup & CDM Connection
We initialize an OMOP CDM reference (such as the mock omopHeor test database):
library(omopHeor)
library(dplyr)
library(omopgenerics)
# Connect to OMOP CDM
cdm <- mockOmopHeor()2. Layer 1: Care Episode Cohort Constructors
(CohortConstructor Style)
Care episode constructors collapse contiguous or overlapping raw encounters into discrete hospitalization or infusion therapy episodes and register them in the database write schema.
Hospitalization & Readmission Episodes
# Construct collapsed hospitalization episodes and 30-day readmissions
cdm$hosp_episodes <- computeHospitalizationCohorts(
cdm = cdm,
name = "hosp_episodes",
visitConceptIds = c(9201L, 8717L, 581379L),
icuConceptIds = 32037L,
readmissionWindow = 30L
)
# Inspect cohort entries
cdm$hosp_episodes |>
dplyr::collect()
#> # A tibble: 4 × 4
#> cohort_definition_id subject_id cohort_start_date cohort_end_date
#> <int> <int> <date> <date>
#> 1 1 1 2010-02-01 2010-02-05
#> 2 1 1 2010-02-20 2010-02-23
#> 3 1 2 2010-03-10 2010-03-15
#> 4 2 1 2010-02-20 2010-02-23Infusion Administration Episodes
# Construct parenteral/intravenous infusion therapy episodes
cdm$infusion_episodes <- computeInfusionCohorts(
cdm = cdm,
name = "infusion_episodes",
routeConceptIds = c(4171047L) # Intravenous
)
cdm$infusion_episodes |>
dplyr::collect()
#> # A tibble: 1 × 4
#> cohort_definition_id subject_id cohort_start_date cohort_end_date
#> <int> <int> <date> <date>
#> 1 1 1 2010-03-01 2010-03-013. Layer 2: In-Database Cohort Enrichment
(PatientProfiles Style)
Cohort enricher functions take an existing study cohort, execute
database-side joins across configurable temporal windows (e.g., baseline
[-365, -1], 1-year follow-up [0, 365], or full
follow-up [0, Inf]), and append metric columns without
dropping zero-utilization subjects.
Modular Enricher Pipeline
# Pipe study cohort through all domain enrichers with fixed and open-ended windows
cdm$study_enriched <- cdm$target_cohort |>
addInpatients(
window = list(baseline = c(-365, -1), followup = c(0, 365), all_followup = c(0, Inf)),
readmissions = TRUE,
stratifySpecialty = TRUE,
specialties = list(cardiology = 38004453L)
) |>
addEmergencyCare(
window = list(baseline = c(-365, -1), followup = c(0, 365), all_followup = c(0, Inf))
) |>
addOutpatientVisits(
window = list(baseline = c(-365, -1), followup = c(0, 365), all_followup = c(0, Inf)),
stratifySpecialty = TRUE,
includeEmergency = FALSE
) |>
addPrescriptions(
window = list(baseline = c(-365, -1), followup = c(0, 365), all_followup = c(0, Inf)),
daysSupply = TRUE,
pdc = TRUE
) |>
addProcedures(
window = list(baseline = c(-365, -1), followup = c(0, 365), all_followup = c(0, Inf))
) |>
addCosts(
window = list(baseline = c(-365, -1), followup = c(0, 365), all_followup = c(0, Inf)),
costField = "total_paid",
name = "study_enriched"
)
# Inspect enriched columns
colnames(cdm$study_enriched)
#> [1] "cohort_definition_id"
#> [2] "subject_id"
#> [3] "cohort_start_date"
#> [4] "cohort_end_date"
#> [5] "inpatient_admissions_baseline"
#> [6] "inpatient_los_days_baseline"
#> [7] "icu_admissions_baseline"
#> [8] "icu_los_days_baseline"
#> [9] "readmissions_30d_baseline"
#> [10] "readmissions_90d_baseline"
#> [11] "cardiology_inpatient_admissions_baseline"
#> [12] "inpatient_mean_los_days_baseline"
#> [13] "icu_mean_los_days_baseline"
#> [14] "inpatient_admissions_followup"
#> [15] "inpatient_los_days_followup"
#> [16] "icu_admissions_followup"
#> [17] "icu_los_days_followup"
#> [18] "readmissions_30d_followup"
#> [19] "readmissions_90d_followup"
#> [20] "cardiology_inpatient_admissions_followup"
#> [21] "inpatient_mean_los_days_followup"
#> [22] "icu_mean_los_days_followup"
#> [23] "inpatient_admissions_all_followup"
#> [24] "inpatient_los_days_all_followup"
#> [25] "icu_admissions_all_followup"
#> [26] "icu_los_days_all_followup"
#> [27] "readmissions_30d_all_followup"
#> [28] "readmissions_90d_all_followup"
#> [29] "cardiology_inpatient_admissions_all_followup"
#> [30] "inpatient_mean_los_days_all_followup"
#> [31] "icu_mean_los_days_all_followup"
#> [32] "emergency_visits_baseline"
#> [33] "emergency_visits_followup"
#> [34] "emergency_visits_all_followup"
#> [35] "gp_visits_baseline"
#> [36] "specialist_visits_baseline"
#> [37] "other_outpatient_visits_baseline"
#> [38] "gp_visits_followup"
#> [39] "specialist_visits_followup"
#> [40] "other_outpatient_visits_followup"
#> [41] "gp_visits_all_followup"
#> [42] "specialist_visits_all_followup"
#> [43] "other_outpatient_visits_all_followup"
#> [44] "rx_fills_baseline"
#> [45] "days_supply_baseline"
#> [46] "infusions_baseline"
#> [47] "pdc_baseline"
#> [48] "rx_fills_followup"
#> [49] "days_supply_followup"
#> [50] "infusions_followup"
#> [51] "pdc_followup"
#> [52] "rx_fills_all_followup"
#> [53] "days_supply_all_followup"
#> [54] "infusions_all_followup"
#> [55] "pdc_all_followup"
#> [56] "lab_tests_count_baseline"
#> [57] "procedures_count_baseline"
#> [58] "lab_tests_count_followup"
#> [59] "procedures_count_followup"
#> [60] "lab_tests_count_all_followup"
#> [61] "procedures_count_all_followup"
#> [62] "cost_inpatient_baseline"
#> [63] "cost_outpatient_baseline"
#> [64] "cost_drug_baseline"
#> [65] "cost_procedure_baseline"
#> [66] "cost_total_baseline"
#> [67] "cost_inpatient_followup"
#> [68] "cost_outpatient_followup"
#> [69] "cost_drug_followup"
#> [70] "cost_procedure_followup"
#> [71] "cost_total_followup"
#> [72] "cost_inpatient_all_followup"
#> [73] "cost_outpatient_all_followup"
#> [74] "cost_drug_all_followup"
#> [75] "cost_procedure_all_followup"
#> [76] "cost_total_all_followup"All-In-One Multi-Setting Visits with addVisits()
To extract Inpatient, Outpatient, and Emergency utilization in a single step with unified specialty stratification:
cdm$visits_enriched <- cdm$target_cohort |>
addVisits(
window = list(baseline = c(-365, -1), all_followup = c(0, Inf)),
settings = c("inpatient", "outpatient", "emergency"),
stratifySpecialty = TRUE,
specialties = list(
oncology = c(38004507L, 38004006L),
cardiology = 38004453L
),
readmissions = TRUE,
name = "visits_enriched"
)
colnames(cdm$visits_enriched)
#> [1] "cohort_definition_id"
#> [2] "subject_id"
#> [3] "cohort_start_date"
#> [4] "cohort_end_date"
#> [5] "inpatient_admissions_baseline"
#> [6] "inpatient_los_days_baseline"
#> [7] "icu_admissions_baseline"
#> [8] "icu_los_days_baseline"
#> [9] "readmissions_30d_baseline"
#> [10] "readmissions_90d_baseline"
#> [11] "oncology_inpatient_admissions_baseline"
#> [12] "cardiology_inpatient_admissions_baseline"
#> [13] "inpatient_mean_los_days_baseline"
#> [14] "icu_mean_los_days_baseline"
#> [15] "inpatient_admissions_all_followup"
#> [16] "inpatient_los_days_all_followup"
#> [17] "icu_admissions_all_followup"
#> [18] "icu_los_days_all_followup"
#> [19] "readmissions_30d_all_followup"
#> [20] "readmissions_90d_all_followup"
#> [21] "oncology_inpatient_admissions_all_followup"
#> [22] "cardiology_inpatient_admissions_all_followup"
#> [23] "inpatient_mean_los_days_all_followup"
#> [24] "icu_mean_los_days_all_followup"
#> [25] "gp_visits_baseline"
#> [26] "specialist_visits_baseline"
#> [27] "other_outpatient_visits_baseline"
#> [28] "oncology_visits_baseline"
#> [29] "cardiology_visits_baseline"
#> [30] "gp_visits_all_followup"
#> [31] "specialist_visits_all_followup"
#> [32] "other_outpatient_visits_all_followup"
#> [33] "oncology_visits_all_followup"
#> [34] "cardiology_visits_all_followup"
#> [35] "emergency_visits_baseline"
#> [36] "oncology_emergency_visits_baseline"
#> [37] "cardiology_emergency_visits_baseline"
#> [38] "emergency_visits_all_followup"
#> [39] "oncology_emergency_visits_all_followup"
#> [40] "cardiology_emergency_visits_all_followup"4. Layer 3: Analytics & Reporting
(CohortCharacteristics Style)
We aggregate patient-level utilization and costs into DARWIN EU
standardized summarised_result objects compatible with
visOmopResults.
Summarise Care Utilization
utilSummary <- summariseUtilization(
cohort = cdm$study_enriched,
strata = list("cohort_definition_id"),
estimates = c("mean", "sd", "median", "q25", "q75", "min", "max")
)
# View standardised result structure
utilSummary |>
dplyr::select("strata_name", "strata_level", "variable_name", "estimate_name", "estimate_value") |>
utils::head(10)
#> # A tibble: 10 × 5
#> strata_name strata_level variable_name estimate_name estimate_value
#> <chr> <chr> <chr> <chr> <chr>
#> 1 overall overall number records count 2
#> 2 overall overall number subjects count 2
#> 3 overall overall inpatient_admissions_b… mean 0
#> 4 overall overall inpatient_admissions_b… sd 0
#> 5 overall overall inpatient_admissions_b… median 0
#> 6 overall overall inpatient_admissions_b… q25 0
#> 7 overall overall inpatient_admissions_b… q75 0
#> 8 overall overall inpatient_admissions_b… min 0
#> 9 overall overall inpatient_admissions_b… max 0
#> 10 overall overall inpatient_los_days_bas… mean 0Summarise Direct Medical Costs
costSummary <- summariseCosts(
cohort = cdm$study_enriched,
strata = list("cohort_definition_id"),
estimates = c("mean", "sd", "median", "q25", "q75", "min", "max")
)
costSummary |>
dplyr::select("strata_name", "strata_level", "variable_name", "estimate_name", "estimate_value") |>
utils::head(8)
#> # A tibble: 8 × 5
#> strata_name strata_level variable_name estimate_name estimate_value
#> <chr> <chr> <chr> <chr> <chr>
#> 1 overall overall number records count 2
#> 2 overall overall number subjects count 2
#> 3 overall overall cost_inpatient_baseline mean 0
#> 4 overall overall cost_inpatient_baseline sd 0
#> 5 overall overall cost_inpatient_baseline median 0
#> 6 overall overall cost_inpatient_baseline q25 0
#> 7 overall overall cost_inpatient_baseline q75 0
#> 8 overall overall cost_inpatient_baseline min 0Publication-Ready GT & Flextable Output
tableUtilization() and tableCosts()
integrate with visOmopResults::visOmopTable() to format
publication-grade summary tables:
# Format summary table with concise estimate strings
tableUtilization(
result = utilSummary,
estimateName = c(
"Mean (SD)" = "<mean> (<sd>)",
"Median [Q25 - Q75]" = "<median> [<q25> - <q75>]"
),
header = c("cohort_name")
)| Data source | Cohort definition id | Variable name | Variable level | Estimate name |
Cohort name
|
|---|---|---|---|---|---|
| cohort_1 | |||||
| An OMOP CDM database | overall | number records | – | count | 2 |
| number subjects | – | count | 2 | ||
| inpatient_admissions_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| inpatient_los_days_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| icu_admissions_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| icu_los_days_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| readmissions_30d_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| readmissions_90d_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| cardiology_inpatient_admissions_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| inpatient_mean_los_days_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| icu_mean_los_days_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| inpatient_admissions_followup | – | Mean (SD) | 1.50 (0.71) | ||
| Median [Q25 - Q75] | 1.50 [1.25 - 1.75] | ||||
| min | 1.00 | ||||
| max | 2.00 | ||||
| inpatient_los_days_followup | – | Mean (SD) | 6.00 (1.41) | ||
| Median [Q25 - Q75] | 6.00 [5.50 - 6.50] | ||||
| min | 5.00 | ||||
| max | 7.00 | ||||
| icu_admissions_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0.50 [0.25 - 0.75] | ||||
| min | 0.00 | ||||
| max | 1.00 | ||||
| icu_los_days_followup | – | Mean (SD) | 1.00 (1.41) | ||
| Median [Q25 - Q75] | 1.00 [0.50 - 1.50] | ||||
| min | 0.00 | ||||
| max | 2.00 | ||||
| readmissions_30d_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0.50 [0.25 - 0.75] | ||||
| min | 0.00 | ||||
| max | 1.00 | ||||
| readmissions_90d_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0.50 [0.25 - 0.75] | ||||
| min | 0.00 | ||||
| max | 1.00 | ||||
| cardiology_inpatient_admissions_followup | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| inpatient_mean_los_days_followup | – | Mean (SD) | 4.25 (1.06) | ||
| Median [Q25 - Q75] | 4.25 [3.88 - 4.62] | ||||
| min | 3.50 | ||||
| max | 5.00 | ||||
| icu_mean_los_days_followup | – | Mean (SD) | 1.00 (1.41) | ||
| Median [Q25 - Q75] | 1.00 [0.50 - 1.50] | ||||
| min | 0.00 | ||||
| max | 2.00 | ||||
| inpatient_admissions_all_followup | – | Mean (SD) | 1.50 (0.71) | ||
| Median [Q25 - Q75] | 1.50 [1.25 - 1.75] | ||||
| min | 1.00 | ||||
| max | 2.00 | ||||
| inpatient_los_days_all_followup | – | Mean (SD) | 6.00 (1.41) | ||
| Median [Q25 - Q75] | 6.00 [5.50 - 6.50] | ||||
| min | 5.00 | ||||
| max | 7.00 | ||||
| icu_admissions_all_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0.50 [0.25 - 0.75] | ||||
| min | 0.00 | ||||
| max | 1.00 | ||||
| icu_los_days_all_followup | – | Mean (SD) | 1.00 (1.41) | ||
| Median [Q25 - Q75] | 1.00 [0.50 - 1.50] | ||||
| min | 0.00 | ||||
| max | 2.00 | ||||
| readmissions_30d_all_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0.50 [0.25 - 0.75] | ||||
| min | 0.00 | ||||
| max | 1.00 | ||||
| readmissions_90d_all_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0.50 [0.25 - 0.75] | ||||
| min | 0.00 | ||||
| max | 1.00 | ||||
| cardiology_inpatient_admissions_all_followup | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| inpatient_mean_los_days_all_followup | – | Mean (SD) | 4.25 (1.06) | ||
| Median [Q25 - Q75] | 4.25 [3.88 - 4.62] | ||||
| min | 3.50 | ||||
| max | 5.00 | ||||
| icu_mean_los_days_all_followup | – | Mean (SD) | 1.00 (1.41) | ||
| Median [Q25 - Q75] | 1.00 [0.50 - 1.50] | ||||
| min | 0.00 | ||||
| max | 2.00 | ||||
| emergency_visits_baseline | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| emergency_visits_followup | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0 [0 - 0] | ||||
| min | 0 | ||||
| max | 0 | ||||
| emergency_visits_all_followup | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0 [0 - 0] | ||||
| min | 0 | ||||
| max | 0 | ||||
| gp_visits_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0 [0 - 0] | ||||
| min | 0 | ||||
| max | 0 | ||||
| specialist_visits_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0 [0 - 0] | ||||
| min | 0 | ||||
| max | 0 | ||||
| other_outpatient_visits_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0 [0 - 0] | ||||
| min | 0 | ||||
| max | 0 | ||||
| gp_visits_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| specialist_visits_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| other_outpatient_visits_followup | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0 [0 - 0] | ||||
| min | 0 | ||||
| max | 0 | ||||
| gp_visits_all_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| specialist_visits_all_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| other_outpatient_visits_all_followup | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0 [0 - 0] | ||||
| min | 0 | ||||
| max | 0 | ||||
| rx_fills_baseline | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| days_supply_baseline | – | Mean (SD) | 15.00 (21.21) | ||
| Median [Q25 - Q75] | 15.00 [7.50 - 22.50] | ||||
| min | 0.00 | ||||
| max | 30.00 | ||||
| infusions_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0 [0 - 0] | ||||
| min | 0 | ||||
| max | 0 | ||||
| pdc_baseline | – | Mean (SD) | 0.04 (0.06) | ||
| Median [Q25 - Q75] | 0.04 [0.02 - 0.06] | ||||
| min | 0.00 | ||||
| max | 0.08 | ||||
| rx_fills_followup | – | Mean (SD) | 1.50 (0.71) | ||
| Median [Q25 - Q75] | 2 [1 - 2] | ||||
| min | 1 | ||||
| max | 2 | ||||
| days_supply_followup | – | Mean (SD) | 30.50 (0.71) | ||
| Median [Q25 - Q75] | 30.50 [30.25 - 30.75] | ||||
| min | 30.00 | ||||
| max | 31.00 | ||||
| infusions_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| pdc_followup | – | Mean (SD) | 0.08 (0.00) | ||
| Median [Q25 - Q75] | 0.08 [0.08 - 0.08] | ||||
| min | 0.08 | ||||
| max | 0.08 | ||||
| rx_fills_all_followup | – | Mean (SD) | 1.50 (0.71) | ||
| Median [Q25 - Q75] | 2 [1 - 2] | ||||
| min | 1 | ||||
| max | 2 | ||||
| days_supply_all_followup | – | Mean (SD) | 30.50 (0.71) | ||
| Median [Q25 - Q75] | 30.50 [30.25 - 30.75] | ||||
| min | 30.00 | ||||
| max | 31.00 | ||||
| infusions_all_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| pdc_all_followup | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| lab_tests_count_baseline | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| procedures_count_baseline | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| lab_tests_count_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| procedures_count_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| lab_tests_count_all_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| procedures_count_all_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| 1 | number records | – | count | 2 | |
| number subjects | – | count | 2 | ||
| inpatient_admissions_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| inpatient_los_days_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| icu_admissions_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| icu_los_days_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| readmissions_30d_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| readmissions_90d_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| cardiology_inpatient_admissions_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| inpatient_mean_los_days_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| icu_mean_los_days_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| inpatient_admissions_followup | – | Mean (SD) | 1.50 (0.71) | ||
| Median [Q25 - Q75] | 1.50 [1.25 - 1.75] | ||||
| min | 1.00 | ||||
| max | 2.00 | ||||
| inpatient_los_days_followup | – | Mean (SD) | 6.00 (1.41) | ||
| Median [Q25 - Q75] | 6.00 [5.50 - 6.50] | ||||
| min | 5.00 | ||||
| max | 7.00 | ||||
| icu_admissions_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0.50 [0.25 - 0.75] | ||||
| min | 0.00 | ||||
| max | 1.00 | ||||
| icu_los_days_followup | – | Mean (SD) | 1.00 (1.41) | ||
| Median [Q25 - Q75] | 1.00 [0.50 - 1.50] | ||||
| min | 0.00 | ||||
| max | 2.00 | ||||
| readmissions_30d_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0.50 [0.25 - 0.75] | ||||
| min | 0.00 | ||||
| max | 1.00 | ||||
| readmissions_90d_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0.50 [0.25 - 0.75] | ||||
| min | 0.00 | ||||
| max | 1.00 | ||||
| cardiology_inpatient_admissions_followup | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| inpatient_mean_los_days_followup | – | Mean (SD) | 4.25 (1.06) | ||
| Median [Q25 - Q75] | 4.25 [3.88 - 4.62] | ||||
| min | 3.50 | ||||
| max | 5.00 | ||||
| icu_mean_los_days_followup | – | Mean (SD) | 1.00 (1.41) | ||
| Median [Q25 - Q75] | 1.00 [0.50 - 1.50] | ||||
| min | 0.00 | ||||
| max | 2.00 | ||||
| inpatient_admissions_all_followup | – | Mean (SD) | 1.50 (0.71) | ||
| Median [Q25 - Q75] | 1.50 [1.25 - 1.75] | ||||
| min | 1.00 | ||||
| max | 2.00 | ||||
| inpatient_los_days_all_followup | – | Mean (SD) | 6.00 (1.41) | ||
| Median [Q25 - Q75] | 6.00 [5.50 - 6.50] | ||||
| min | 5.00 | ||||
| max | 7.00 | ||||
| icu_admissions_all_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0.50 [0.25 - 0.75] | ||||
| min | 0.00 | ||||
| max | 1.00 | ||||
| icu_los_days_all_followup | – | Mean (SD) | 1.00 (1.41) | ||
| Median [Q25 - Q75] | 1.00 [0.50 - 1.50] | ||||
| min | 0.00 | ||||
| max | 2.00 | ||||
| readmissions_30d_all_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0.50 [0.25 - 0.75] | ||||
| min | 0.00 | ||||
| max | 1.00 | ||||
| readmissions_90d_all_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0.50 [0.25 - 0.75] | ||||
| min | 0.00 | ||||
| max | 1.00 | ||||
| cardiology_inpatient_admissions_all_followup | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| inpatient_mean_los_days_all_followup | – | Mean (SD) | 4.25 (1.06) | ||
| Median [Q25 - Q75] | 4.25 [3.88 - 4.62] | ||||
| min | 3.50 | ||||
| max | 5.00 | ||||
| icu_mean_los_days_all_followup | – | Mean (SD) | 1.00 (1.41) | ||
| Median [Q25 - Q75] | 1.00 [0.50 - 1.50] | ||||
| min | 0.00 | ||||
| max | 2.00 | ||||
| emergency_visits_baseline | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| emergency_visits_followup | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0 [0 - 0] | ||||
| min | 0 | ||||
| max | 0 | ||||
| emergency_visits_all_followup | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0 [0 - 0] | ||||
| min | 0 | ||||
| max | 0 | ||||
| gp_visits_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0 [0 - 0] | ||||
| min | 0 | ||||
| max | 0 | ||||
| specialist_visits_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0 [0 - 0] | ||||
| min | 0 | ||||
| max | 0 | ||||
| other_outpatient_visits_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0 [0 - 0] | ||||
| min | 0 | ||||
| max | 0 | ||||
| gp_visits_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| specialist_visits_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| other_outpatient_visits_followup | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0 [0 - 0] | ||||
| min | 0 | ||||
| max | 0 | ||||
| gp_visits_all_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| specialist_visits_all_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| other_outpatient_visits_all_followup | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0 [0 - 0] | ||||
| min | 0 | ||||
| max | 0 | ||||
| rx_fills_baseline | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| days_supply_baseline | – | Mean (SD) | 15.00 (21.21) | ||
| Median [Q25 - Q75] | 15.00 [7.50 - 22.50] | ||||
| min | 0.00 | ||||
| max | 30.00 | ||||
| infusions_baseline | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0 [0 - 0] | ||||
| min | 0 | ||||
| max | 0 | ||||
| pdc_baseline | – | Mean (SD) | 0.04 (0.06) | ||
| Median [Q25 - Q75] | 0.04 [0.02 - 0.06] | ||||
| min | 0.00 | ||||
| max | 0.08 | ||||
| rx_fills_followup | – | Mean (SD) | 1.50 (0.71) | ||
| Median [Q25 - Q75] | 2 [1 - 2] | ||||
| min | 1 | ||||
| max | 2 | ||||
| days_supply_followup | – | Mean (SD) | 30.50 (0.71) | ||
| Median [Q25 - Q75] | 30.50 [30.25 - 30.75] | ||||
| min | 30.00 | ||||
| max | 31.00 | ||||
| infusions_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| pdc_followup | – | Mean (SD) | 0.08 (0.00) | ||
| Median [Q25 - Q75] | 0.08 [0.08 - 0.08] | ||||
| min | 0.08 | ||||
| max | 0.08 | ||||
| rx_fills_all_followup | – | Mean (SD) | 1.50 (0.71) | ||
| Median [Q25 - Q75] | 2 [1 - 2] | ||||
| min | 1 | ||||
| max | 2 | ||||
| days_supply_all_followup | – | Mean (SD) | 30.50 (0.71) | ||
| Median [Q25 - Q75] | 30.50 [30.25 - 30.75] | ||||
| min | 30.00 | ||||
| max | 31.00 | ||||
| infusions_all_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| pdc_all_followup | – | Mean (SD) | 0.00 (0.00) | ||
| Median [Q25 - Q75] | 0.00 [0.00 - 0.00] | ||||
| min | 0.00 | ||||
| max | 0.00 | ||||
| lab_tests_count_baseline | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| procedures_count_baseline | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| lab_tests_count_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| procedures_count_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| lab_tests_count_all_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 | ||||
| procedures_count_all_followup | – | Mean (SD) | 0.50 (0.71) | ||
| Median [Q25 - Q75] | 0 [0 - 1] | ||||
| min | 0 | ||||
| max | 1 |
5. Visualizing Care Utilization & Costs
(visOmopResults Style)
CohortUtilisation and CohortCosts provide
plotUtilization() and plotCosts() for rapid
exploratory and publication visualization, leveraging standard
visOmopResults ggplot themes and facets.
Bar Plots for Care Utilization
plotUtilization(
result = utilSummary,
metric = "inpatient_admissions",
plotType = "barplot"
)
Box Plots for Direct Medical Costs
plotCosts(
result = costSummary,
costColumn = "cost_total",
plotType = "boxplot"
)
6. Summary Matrix Mapping
| Domain | Metrics Extracted | Function Responsible | Output Columns |
|---|---|---|---|
| [Inpatient] | Admissions, ICU, LOS, Readmissions, Specialties |
addInpatients()
(addHospitalizations()) |
inpatient_admissions_*,
inpatient_los_days_*, icu_admissions_*,
readmissions_30d_*,
{specialty}_inpatient_admissions_*
|
| [Emergency] | ER Visits & Specialist Acute Care |
addEmergencyCare()
(addEmergency()) |
emergency_visits_*,
{specialty}_emergency_visits_*
|
| [Outpatient] | GP, Specialist, Other Visits, Specialties | addOutpatientVisits() |
gp_visits_*,
specialist_visits_*,
other_outpatient_visits_*,
{specialty}_visits_*
|
| [Multi-Setting] | Inpatient + Outpatient + Emergency Visits | addVisits() |
Combined Inpatient, Outpatient, Emergency columns |
| [Pharmacy] | Rx Fills, Days Supply, PDC, Infusions | addPrescriptions() |
rx_fills_*, days_supply_*,
pdc_*, infusions_*
|
| [Diagnostics/Proc] | Labs, Imaging, Procedures | addProcedures() |
lab_tests_count_*,
procedures_count_*
|
| [Direct Costs] | Inpatient, Outpatient, Drug, Total | addCosts() |
cost_inpatient_*,
cost_outpatient_*, cost_drug_*,
cost_total_*
|