Skip to contents

Cohort 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-23

Infusion 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-01

3. 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          0

Summarise 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           0

Publication-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_*