Terlipressin — Liver Transplant
  • Summary
  • REDCap Variables
  • Derived Variables
  • EFU Variables
  • Analysis

On this page

  • Scope
  • Data Handling Notes
  • Table Helper
  • EFU Data Import
    • Join QC
  • Derived Variables
    • Listing status: index hospitalization vs EFU
  • Table 1 — Demographics by efu_listingstatus
  • Table 2 — EFU Summary by listed_transplant
  • Table 3 — EFU Summary by efu_listingstatus
  • Session Info

Liver Transplant — Analysis

Author

Tianqi Ouyang

Published

September 15, 2026

Scope

Extended follow-up (EFU) of the HARMONY terlipressin cohort. The analytic cohort is every patient in the locked master dataset (final_master_01282026.xlsx, n = 243) who has an EFU record in the site-submitted files under Extended Data Collection/Finalized Files/09SEP2026/ (13 site CSVs, 222 rows).

Table Cohort Column (stratifier) Rows
1 — Demographics EFU patients efu_listingstatus (listed for LT at any point) Baseline demographics, prior complications, admission / day-0 labs & scores, treatment characteristics, HRS response
2 — EFU summary EFU patients listed_transplant (index-hospitalization listing, shared pipeline) All EFU outcome fields
3 — EFU summary EFU patients efu_listingstatus All EFU outcome fields except the stratifier

Data Handling Notes

Topic Handling in this analysis
Study IDs EFU files format Yale IDs as YAL-00N; the master uses Yale-N. Both sides are joined on a normalized key (upper-case prefix + integer).
Cohort size 222 EFU rows → 221 analyzable patients: one CCF row has an ID that is not in the locked master; the 22 CSF master patients have no EFU file. The cohort n is computed, not hard-coded.
Day-0 MAP map_day0_avg = mean of map_terli_day0_time0..3 after recoding 0 (not measured) to NA.
Albumin during therapy albumintotal_terli_dayN = grams given on day N; the requested albumintotal_terli_dayX row is the shared total_albumin (sum over days 0–13; nothing is recorded after Discont_Day). alb_terli_dayN is serum albumin and is not used.
Below-detection labs One efu_lttbili value is a <x.x string; readr::parse_number() keeps the limit value.
Missing stratifier One patient has no efu_listingstatus; Tables 1 and 3 use n = 220, Table 2 uses n = 221.

Table Helper

Tables use the shared pipeline’s create_table_one(): tableone::CreateTableOne() → print() → write.csv(), with the same printed matrix returned as a knitr::kable(), so the web table and the CSV are identical. Conventions (tableone defaults, matching every earlier Table 1 CSV in the registry): continuous variables as median [IQR] with the Kruskal-Wallis rank-sum test (test = nonnorm; equivalent to Mann-Whitney for two groups); categorical variables as n (%) with the chi-squared test (continuity-corrected for 2 × 2). Missing is the percentage of the cohort with a missing value.

EFU Data Import

Each site returned one CSV. All files share the same 42 columns (subjectid + 41 EFU fields; see the EFU Variables page). The files contain no dates — only REDCap-calculated day counts from the index admission — so nothing patient-identifying is loaded beyond the study ID used for the join.

Show EFU import and ID normalization
efu_dir <- "/Users/to909/Partners HealthCare Dropbox/Tianqi Ouyang/Extended Data Collection/Finalized Files/09SEP2026"

# Study IDs differ in formatting between REDCap exports (e.g. `YAL-003` in the
# EFU file vs `Yale-3` in the master). Normalize both sides to
# `<UPPERCASE PREFIX>-<integer>` before joining.
norm_id <- function(x) {
  x      <- str_trim(x)
  prefix <- toupper(str_extract(x, "^[A-Za-z]+"))
  prefix <- if_else(prefix == "YAL", "YALE", prefix)
  number <- as.integer(str_extract(x, "[0-9]+$"))
  paste0(prefix, "-", number)
}

# Field types from the EFU data dictionary
efu_yesno <- c(
  "codestatus", "efu_readmit", "efu_readmit_cirrhosiscomp", "efu_readmitaki",
  "efu_status", "efu_rrt", "efu_listingstatus", "efu_listing", "efu_lt",
  "efu_slkt", "efu_kal", "efu_ltrrt", "efu_90_rrt", "efu_90lt_rrt",
  "efu_180_rrt", "efu_180lt_rrt", "efu_1yr_rrt", "efu_1yrlt_rrt"
)
efu_numeric <- c(
  "efu_daysreadmit", "efu_readmitscr", "efu_dayslastencounter", "efu_daysdod",
  "efu_daysrrtstart", "efu_dayslisting", "efu_dayswlremoval", "efu_dayslt",
  "efu_dayskal", "efu_ltna", "efu_lttbili", "efu_ltscr", "efu_lt_albumin",
  "efu_lt_inr", "efu_90_scr", "efu_90_readmit", "efu_90lt_scr", "efu_180_scr",
  "efu_180_readmit", "efu_180lt_scr", "efu_1yr_scr", "efu_1yr_readmit",
  "efu_1yrlt_scr"
)

efu_raw <- list.files(efu_dir, pattern = "_09092026\\.csv$", full.names = TRUE) %>%
  set_names(~ str_remove(basename(.x), "_09092026\\.csv$")) %>%
  map_dfr(
    ~ read_csv(.x, col_types = cols(.default = col_character()), show_col_types = FALSE),
    .id = "efu_center"
  ) %>%
  mutate(
    id_key = norm_id(subjectid),
    across(all_of(efu_yesno), as.integer),
    # parse_number() keeps below-detection strings such as "<0.2" (-> 0.2)
    across(all_of(efu_numeric), readr::parse_number)
  ) %>%
  select(-subjectid)

master <- master %>% mutate(id_key = norm_id(subjectid))

efu_cohort <- master %>%
  inner_join(efu_raw, by = "id_key")

Join QC

Show join QC
qc <- tibble(
  check = c(
    "EFU rows (all site files)",
    "EFU rows matched to master",
    "EFU rows NOT in master",
    "Master patients (n)",
    "Master patients without EFU data",
    "Analytic cohort (EFU patients)"
  ),
  n = c(
    nrow(efu_raw),
    sum(efu_raw$id_key %in% master$id_key),
    sum(!efu_raw$id_key %in% master$id_key),
    nrow(master),
    sum(!master$id_key %in% efu_raw$id_key),
    nrow(efu_cohort)
  )
)
knitr::kable(qc, caption = "EFU vs master join")
EFU vs master join
check n
EFU rows (all site files) 222
EFU rows matched to master 221
EFU rows NOT in master 1
Master patients (n) 243
Master patients without EFU data 22
Analytic cohort (EFU patients) 221
Show per-site join status
bind_rows(
  efu_raw %>%
    mutate(status = if_else(id_key %in% master$id_key, "matched", "not in master")) %>%
    count(site_file = efu_center, status),
  master %>%
    filter(!id_key %in% efu_raw$id_key) %>%
    mutate(site_file = "(no EFU file)", status = "master only") %>%
    count(site_file, status)
) %>%
  pivot_wider(names_from = status, values_from = n, values_fill = 0) %>%
  knitr::kable(caption = "Rows per site file by join status (MCX = Mayo + MCM)")
Rows per site file by join status (MCX = Mayo + MCM)
site_file matched not in master master only
BID 14 0 0
BSW 15 0 0
CCF 40 1 0
CPM 2 0 0
INU 23 0 0
MCX 43 0 0
MGH 33 0 0
MMC 4 0 0
NWM 15 0 0
OCH 9 0 0
PEN 13 0 0
UNM 5 0 0
YAL 5 0 0
(no EFU file) 0 0 22

Derived Variables

Show derived variables
t1_numeric <- c(
  "age", "admit_meld_3", "day0_meld_3", "baseline_scr_new", "baseline_scr",
  "tbili_admit", "inr_admit", "sodium_admit", "albumin_admit", "map_day0_avg",
  "aclf_grade", "clif_c_score", "Discont_Day", "total_albumin",
  "totalalbumin_before_terli", "albvolume_before_terli"
)

efu_cohort <- efu_cohort %>%
  mutate(
    # Average of the four day-0 MAP readings. A recorded 0 mmHg is a
    # "not measured" placeholder, so it is set to NA before averaging.
    across(
      c(map_terli_day0_time0, map_terli_day0_time1,
        map_terli_day0_time2, map_terli_day0_time3),
      ~ na_if(as.numeric(.x), 0)
    ),
    map_day0_avg = rowMeans(
      across(c(map_terli_day0_time0, map_terli_day0_time1,
               map_terli_day0_time2, map_terli_day0_time3)),
      na.rm = TRUE
    ),
    map_day0_avg = if_else(is.nan(map_day0_avg), NA_real_, map_day0_avg),
    across(all_of(t1_numeric), as.numeric)
  )

tibble(
  `map_day0_avg` = c("non-missing", "readings used per patient (median)"),
  value = c(
    sum(!is.na(efu_cohort$map_day0_avg)),
    median(rowSums(!is.na(efu_cohort[, paste0("map_terli_day0_time", 0:3)])))
  )
) %>% knitr::kable()
map_day0_avg value
non-missing 221
readings used per patient (median) 4

Listing status: index hospitalization vs EFU

listed_transplant (shared pipeline: lt_eval == 2 | lteval_listingstatus == 1) captures listing during the index hospitalization; efu_listingstatus captures listing at any point through 1 year.

Show cross-tabulation
with(efu_cohort,
     table(listed_transplant = listed_transplant,
           efu_listingstatus = efu_listingstatus, useNA = "ifany")) %>%
  knitr::kable(caption = "Rows: listed_transplant; columns: efu_listingstatus (NA = missing)")
Rows: listed_transplant; columns: efu_listingstatus (NA = missing)
0 1 NA
0 126 22 1
1 10 62 0

Table 1 — Demographics by efu_listingstatus

Cohort: EFU patients with a non-missing efu_listingstatus. Continuous variables are median [IQR] (Kruskal-Wallis / Mann-Whitney, test = nonnorm); categorical are n (%) (chi-squared).

Show Table 1 code
t1_all_vars <- c(
  "age", "sex_male", "race", "cirrhosis_etiology",
  "he_previous_comp", "ascites_previous_comp", "refascites_previous_comp",
  "sbp_previous_comp", "nonsbp_previous_comp", "phtn_bleed_previous_comp",
  "hcc_previous_comp", "tips_previous_comp", "aki_previous_90days",
  "mido_preadmission", "oct_before_terli", "pressors_aki",
  "admit_meld_3", "day0_meld_3", "baseline_scr_new", "baseline_scr",
  "tbili_admit", "inr_admit", "sodium_admit", "albumin_admit",
  "map_day0_avg",
  "aclf_grade", "clif_c_score", "icu_admit",
  "criteria_1", "criteria_2", "criteria_3", "criteria_4",
  "terli_route_day0", "Discont_Day", "total_albumin",
  "albumin_before_terli", "totalalbumin_before_terli", "albvolume_before_terli",
  "hrs_responders", "hrs_responders_cat_2"
)
t1_cat_vars <- setdiff(t1_all_vars, t1_numeric)

t1_data <- efu_cohort %>% filter(!is.na(efu_listingstatus))

create_table_one(
  all_vars = t1_all_vars,
  cat_vars = t1_cat_vars,
  data     = t1_data,
  strata   = "efu_listingstatus",
  output   = "tables/table1_demographics_efu_listingstatus.csv",
  caption  = "Table 1 - Demographics by efu_listingstatus (0 = never listed, 1 = listed at any point)"
)
Table 1 - Demographics by efu_listingstatus (0 = never listed, 1 = listed at any point)
level Overall 0 1 p test Missing
n 220 136 84
age (median [IQR]) 57.70 [50.25, 64.12] 56.85 [47.70, 64.30] 59.20 [53.77, 63.95] 0.160 nonnorm 0.0
sex_male (%) 0 84 (38.2) 46 (33.8) 38 (45.2) 0.121 0.0
1 136 (61.8) 90 (66.2) 46 (54.8)
race (%) 1 188 (86.2) 113 (84.3) 75 (89.3) 0.371 0.9
2 6 (2.8) 4 (3.0) 2 (2.4)
3 3 (1.4) 1 (0.7) 2 (2.4)
4 21 (9.6) 16 (11.9) 5 (6.0)
cirrhosis_etiology (%) 1 122 (55.5) 88 (64.7) 34 (40.5) 0.003 0.0
2 41 (18.6) 18 (13.2) 23 (27.4)
3 5 (2.3) 4 (2.9) 1 (1.2)
4 13 (5.9) 9 (6.6) 4 (4.8)
5 13 (5.9) 5 (3.7) 8 (9.5)
6 26 (11.8) 12 (8.8) 14 (16.7)
he_previous_comp (%) 0 94 (43.1) 65 (48.5) 29 (34.5) 0.059 0.9
1 124 (56.9) 69 (51.5) 55 (65.5)
ascites_previous_comp (%) 0 30 (13.6) 23 (16.9) 7 (8.3) 0.110 0.0
1 190 (86.4) 113 (83.1) 77 (91.7)
refascites_previous_comp (%) 0 81 (44.3) 58 (53.7) 23 (30.7) 0.003 16.8
1 102 (55.7) 50 (46.3) 52 (69.3)
sbp_previous_comp (%) 0 179 (82.1) 115 (85.2) 64 (77.1) 0.184 0.9
1 39 (17.9) 20 (14.8) 19 (22.9)
nonsbp_previous_comp (%) 0 166 (78.3) 103 (78.6) 63 (77.8) 1.000 3.6
1 46 (21.7) 28 (21.4) 18 (22.2)
phtn_bleed_previous_comp (%) 0 166 (75.8) 104 (77.0) 62 (73.8) 0.704 0.5
1 53 (24.2) 31 (23.0) 22 (26.2)
hcc_previous_comp (%) 0 203 (92.7) 129 (95.6) 74 (88.1) 0.073 0.5
1 16 (7.3) 6 (4.4) 10 (11.9)
tips_previous_comp (%) 0 201 (91.4) 123 (90.4) 78 (92.9) 0.709 0.0
1 19 (8.6) 13 (9.6) 6 (7.1)
aki_previous_90days (%) 0 124 (57.1) 78 (58.2) 46 (55.4) 0.793 1.4
1 93 (42.9) 56 (41.8) 37 (44.6)
mido_preadmission (%) 0 138 (65.7) 96 (73.3) 42 (53.2) 0.005 4.5
1 72 (34.3) 35 (26.7) 37 (46.8)
oct_before_terli (%) 0 108 (49.3) 63 (46.7) 45 (53.6) 0.393 0.5
1 111 (50.7) 72 (53.3) 39 (46.4)
pressors_aki (%) 0 198 (91.7) 124 (93.9) 74 (88.1) 0.207 1.8
1 18 (8.3) 8 (6.1) 10 (11.9)
admit_meld_3 (median [IQR]) 31.00 [26.75, 36.00] 31.00 [27.00, 36.25] 31.00 [26.00, 36.00] 0.655 nonnorm 0.0
day0_meld_3 (median [IQR]) 35.00 [28.00, 39.00] 36.00 [28.00, 40.00] 34.00 [28.00, 39.00] 0.411 nonnorm 22.7
baseline_scr_new (median [IQR]) 1.10 [0.87, 1.49] 1.07 [0.80, 1.42] 1.25 [0.92, 1.59] 0.046 nonnorm 0.0
baseline_scr (median [IQR]) 1.24 [0.88, 1.73] 1.18 [0.82, 1.68] 1.33 [1.00, 1.78] 0.165 nonnorm 0.5
tbili_admit (median [IQR]) 4.75 [2.30, 14.32] 5.55 [2.38, 18.88] 3.55 [2.00, 7.10] 0.035 nonnorm 3.6
inr_admit (median [IQR]) 1.80 [1.50, 2.40] 1.80 [1.44, 2.40] 1.78 [1.50, 2.22] 0.817 nonnorm 3.2
sodium_admit (median [IQR]) 132.00 [127.00, 135.00] 133.00 [127.50, 135.50] 132.00 [127.00, 135.00] 0.902 nonnorm 4.1
albumin_admit (median [IQR]) 3.00 [2.65, 3.60] 2.90 [2.50, 3.50] 3.20 [2.70, 3.80] 0.010 nonnorm 4.1
map_day0_avg (median [IQR]) 77.79 [72.65, 82.83] 78.25 [74.17, 83.56] 76.15 [70.98, 81.42] 0.033 nonnorm 0.0
aclf_grade (median [IQR]) 2.00 [2.00, 3.00] 2.00 [2.00, 3.00] 2.00 [1.75, 3.00] 0.638 nonnorm 0.0
clif_c_score (median [IQR]) 41.05 [36.15, 47.64] 41.27 [36.78, 48.24] 40.54 [35.28, 46.76] 0.145 nonnorm 4.1
icu_admit (%) 0 100 (45.7) 61 (45.2) 39 (46.4) 0.968 0.5
1 119 (54.3) 74 (54.8) 45 (53.6)
criteria_1 (%) 0 195 (88.6) 118 (86.8) 77 (91.7) 0.371 0.0
1 25 (11.4) 18 (13.2) 7 (8.3)
criteria_2 (%) 0 129 (58.6) 80 (58.8) 49 (58.3) 1.000 0.0
1 91 (41.4) 56 (41.2) 35 (41.7)
criteria_3 (%) 0 212 (96.4) 129 (94.9) 83 (98.8) 0.249 0.0
1 8 (3.6) 7 (5.1) 1 (1.2)
criteria_4 (%) 0 209 (95.0) 126 (92.6) 83 (98.8) 0.086 0.0
1 11 (5.0) 10 (7.4) 1 (1.2)
terli_route_day0 (%) 1 185 (84.1) 112 (82.4) 73 (86.9) 0.480 0.0
2 35 (15.9) 24 (17.6) 11 (13.1)
Discont_Day (median [IQR]) 3.00 [2.00, 5.25] 3.00 [2.00, 5.00] 4.00 [2.00, 6.00] 0.883 nonnorm 0.0
total_albumin (median [IQR]) 50.00 [0.00, 125.00] 50.00 [0.00, 115.62] 75.00 [21.88, 150.00] 0.071 nonnorm 0.0
albumin_before_terli (%) 0 20 (9.1) 15 (11.0) 5 (6.0) 0.302 0.0
1 200 (90.9) 121 (89.0) 79 (94.0)
totalalbumin_before_terli (median [IQR]) 225.00 [131.25, 350.00] 225.00 [150.00, 362.50] 200.00 [112.50, 321.25] 0.176 nonnorm 9.5
albvolume_before_terli (median [IQR]) 900.00 [600.00, 1500.00] 900.00 [600.00, 1575.00] 800.00 [550.00, 1400.00] 0.449 nonnorm 14.1
hrs_responders (%) 0 99 (45.0) 61 (44.9) 38 (45.2) 0.413 0.0
1 54 (24.5) 37 (27.2) 17 (20.2)
2 67 (30.5) 38 (27.9) 29 (34.5)
hrs_responders_cat_2 (%) 0 99 (45.0) 61 (44.9) 38 (45.2) 1.000 0.0
1 121 (55.0) 75 (55.1) 46 (54.8)

📥 Download CSV — Table 1

Table 2 — EFU Summary by listed_transplant

Cohort: all EFU patients. efu_days* fields are days from index admission.

Show Table 2 code
efu_vars <- c(
  "efu_readmit", "efu_daysreadmit", "efu_readmit_cirrhosiscomp", "efu_readmitaki",
  "efu_readmitscr", "efu_status", "efu_dayslastencounter", "efu_daysdod",
  "efu_rrt", "efu_daysrrtstart", "efu_listingstatus", "efu_dayslisting",
  "efu_listing", "efu_dayswlremoval", "efu_lt", "efu_dayslt", "efu_slkt",
  "efu_kal", "efu_dayskal", "efu_ltrrt", "efu_ltna", "efu_lttbili", "efu_ltscr",
  "efu_lt_albumin", "efu_lt_inr", "efu_90_scr", "efu_90_rrt", "efu_90_readmit",
  "efu_90lt_scr", "efu_90lt_rrt", "efu_180_scr", "efu_180_rrt", "efu_180_readmit",
  "efu_180lt_scr", "efu_180lt_rrt", "efu_1yr_scr", "efu_1yr_rrt", "efu_1yr_readmit",
  "efu_1yrlt_scr", "efu_1yrlt_rrt"
)
efu_cat_vars <- intersect(efu_vars, efu_yesno)

create_table_one(
  all_vars = efu_vars,
  cat_vars = efu_cat_vars,
  data     = efu_cohort,
  strata   = "listed_transplant",
  output   = "tables/table2_efu_listed_transplant.csv",
  caption  = "Table 2 - EFU outcomes by listed_transplant (0 = not listed during index hospitalization, 1 = listed)"
)
Table 2 - EFU outcomes by listed_transplant (0 = not listed during index hospitalization, 1 = listed)
level Overall 0 1 p test Missing
n 221 149 72
efu_readmit (%) 0 108 (49.1) 77 (52.0) 31 (43.1) 0.269 0.5
1 112 (50.9) 71 (48.0) 41 (56.9)
efu_daysreadmit (median [IQR]) 48.00 [29.00, 90.00] 47.00 [26.00, 98.00] 50.00 [35.00, 89.00] 0.506 nonnorm 49.3
efu_readmit_cirrhosiscomp (%) 0 30 (26.8) 10 (14.1) 20 (48.8) <0.001 49.3
1 82 (73.2) 61 (85.9) 21 (51.2)
efu_readmitaki (%) 0 70 (62.5) 43 (60.6) 27 (65.9) 0.723 49.3
1 42 (37.5) 28 (39.4) 14 (34.1)
efu_readmitscr (median [IQR]) 1.90 [1.35, 2.83] 1.92 [1.38, 2.86] 1.72 [1.35, 2.81] 0.482 nonnorm 51.1
efu_status (%) 0 134 (61.8) 108 (74.0) 26 (36.6) <0.001 1.8
1 83 (38.2) 38 (26.0) 45 (63.4)
efu_dayslastencounter (median [IQR]) 731.50 [83.50, 953.75] 316.00 [36.25, 778.00] 866.00 [664.50, 1106.50] <0.001 nonnorm 43.0
efu_daysdod (median [IQR]) 36.50 [19.25, 117.25] 38.00 [18.00, 97.00] 34.00 [23.00, 185.00] 0.846 nonnorm 39.4
efu_rrt (%) 0 180 (84.1) 125 (87.4) 55 (77.5) 0.094 3.2
1 34 (15.9) 18 (12.6) 16 (22.5)
efu_daysrrtstart (median [IQR]) 18.50 [13.00, 48.75] 23.00 [14.00, 54.00] 16.00 [11.00, 40.00] 0.320 nonnorm 81.0
efu_listingstatus (%) 0 136 (61.8) 126 (85.1) 10 (13.9) <0.001 0.5
1 84 (38.2) 22 (14.9) 62 (86.1)
efu_dayslisting (median [IQR]) 12.00 [6.00, 38.00] 51.00 [22.25, 138.75] 11.00 [6.00, 25.50] 0.002 nonnorm 61.5
efu_listing (%) 0 142 (68.3) 123 (89.8) 19 (26.8) <0.001 5.9
1 66 (31.7) 14 (10.2) 52 (73.2)
efu_dayswlremoval (median [IQR]) 32.50 [17.50, 79.25] 46.50 [30.00, 171.50] 28.50 [15.75, 51.75] 0.179 nonnorm 83.7
efu_lt (%) 0 153 (70.8) 133 (91.7) 20 (28.2) <0.001 2.3
1 63 (29.2) 12 (8.3) 51 (71.8)
efu_dayslt (median [IQR]) 30.00 [15.00, 67.50] 162.50 [107.00, 188.75] 24.00 [13.50, 40.00] <0.001 nonnorm 71.5
efu_slkt (%) 0 50 (79.4) 9 (75.0) 41 (80.4) 0.985 71.5
1 13 (20.6) 3 (25.0) 10 (19.6)
efu_kal (%) 0 56 (86.2) 12 (92.3) 44 (84.6) 0.788 70.6
1 9 (13.8) 1 (7.7) 8 (15.4)
efu_dayskal (median [IQR]) 44.00 [27.00, 349.00] 16.00 [16.00, 16.00] 175.00 [30.00, 366.25] 0.121 nonnorm 95.9
efu_ltrrt (%) 0 42 (65.6) 10 (76.9) 32 (62.7) 0.526 71.0
1 22 (34.4) 3 (23.1) 19 (37.3)
efu_ltna (median [IQR]) 136.00 [133.00, 140.00] 136.00 [134.00, 139.50] 136.00 [133.00, 140.00] 0.712 nonnorm 71.9
efu_lttbili (median [IQR]) 3.90 [2.38, 12.35] 2.80 [1.90, 3.90] 4.20 [2.65, 13.80] 0.103 nonnorm 71.9
efu_ltscr (median [IQR]) 1.90 [1.56, 3.12] 1.74 [1.32, 2.86] 2.50 [1.57, 3.11] 0.357 nonnorm 71.9
efu_lt_albumin (median [IQR]) 3.35 [3.00, 3.88] 2.70 [2.30, 3.60] 3.40 [3.05, 3.85] 0.076 nonnorm 71.9
efu_lt_inr (median [IQR]) 1.70 [1.50, 2.18] 1.70 [1.50, 1.77] 1.70 [1.50, 2.20] 0.677 nonnorm 71.9
efu_90_scr (median [IQR]) 1.51 [1.10, 2.12] 1.56 [1.10, 2.14] 1.46 [1.14, 2.08] 0.955 nonnorm 48.4
efu_90_rrt (%) 0 143 (92.3) 89 (92.7) 54 (91.5) 1.000 29.9
1 12 (7.7) 7 (7.3) 5 (8.5)
efu_90_readmit (median [IQR]) 1.00 [0.00, 1.00] 0.00 [0.00, 1.00] 1.00 [0.00, 1.00] 0.265 nonnorm 29.4
efu_90lt_scr (median [IQR]) 1.55 [1.19, 2.17] 1.56 [1.36, 2.49] 1.55 [1.19, 1.98] 0.468 nonnorm 73.3
efu_90lt_rrt (%) 0 54 (88.5) 12 (85.7) 42 (89.4) 1.000 72.4
1 7 (11.5) 2 (14.3) 5 (10.6)
efu_180_scr (median [IQR]) 1.33 [1.04, 2.13] 1.19 [0.94, 1.96] 1.66 [1.20, 2.20] 0.029 nonnorm 56.1
efu_180_rrt (%) 0 140 (95.9) 86 (97.7) 54 (93.1) 0.342 33.9
1 6 (4.1) 2 (2.3) 4 (6.9)
efu_180_readmit (median [IQR]) 1.00 [0.00, 2.00] 1.00 [0.00, 2.00] 1.00 [0.00, 2.00] 0.431 nonnorm 31.7
efu_180lt_scr (median [IQR]) 1.50 [1.12, 2.08] 1.40 [1.25, 2.02] 1.53 [1.11, 2.07] 0.967 nonnorm 74.7
efu_180lt_rrt (%) 0 56 (91.8) 13 (92.9) 43 (91.5) 1.000 72.4
1 5 (8.2) 1 (7.1) 4 (8.5)
efu_1yr_scr (median [IQR]) 1.40 [1.08, 1.88] 1.32 [1.04, 1.87] 1.45 [1.13, 2.02] 0.270 nonnorm 59.3
efu_1yr_rrt (%) 0 133 (95.7) 84 (96.6) 49 (94.2) 0.826 37.1
1 6 (4.3) 3 (3.4) 3 (5.8)
efu_1yr_readmit (median [IQR]) 1.00 [0.00, 3.00] 1.00 [0.00, 3.00] 1.00 [0.00, 3.00] 0.737 nonnorm 34.4
efu_1yrlt_scr (median [IQR]) 1.43 [1.20, 1.91] 1.40 [1.20, 1.72] 1.43 [1.20, 2.00] 0.577 nonnorm 76.5
efu_1yrlt_rrt (%) 0 55 (94.8) 13 (100.0) 42 (93.3) 0.806 73.8
1 3 (5.2) 0 (0.0) 3 (6.7)

📥 Download CSV — Table 2

Table 3 — EFU Summary by efu_listingstatus

Cohort: EFU patients with a non-missing efu_listingstatus. Same rows as Table 2 minus the stratifier.

Show Table 3 code
t3_vars <- setdiff(efu_vars, "efu_listingstatus")

create_table_one(
  all_vars = t3_vars,
  cat_vars = intersect(t3_vars, efu_yesno),
  data     = t1_data,
  strata   = "efu_listingstatus",
  output   = "tables/table3_efu_efu_listingstatus.csv",
  caption  = "Table 3 - EFU outcomes by efu_listingstatus (0 = never listed, 1 = listed at any point)"
)
Table 3 - EFU outcomes by efu_listingstatus (0 = never listed, 1 = listed at any point)
level Overall 0 1 p test Missing
n 220 136 84
efu_readmit (%) 0 107 (48.9) 76 (56.3) 31 (36.9) 0.008 0.5
1 112 (51.1) 59 (43.7) 53 (63.1)
efu_daysreadmit (median [IQR]) 48.00 [29.00, 90.00] 53.00 [32.50, 114.00] 43.00 [29.00, 84.00] 0.258 nonnorm 49.1
efu_readmit_cirrhosiscomp (%) 0 30 (26.8) 9 (15.3) 21 (39.6) 0.007 49.1
1 82 (73.2) 50 (84.7) 32 (60.4)
efu_readmitaki (%) 0 70 (62.5) 39 (66.1) 31 (58.5) 0.525 49.1
1 42 (37.5) 20 (33.9) 22 (41.5)
efu_readmitscr (median [IQR]) 1.90 [1.35, 2.83] 2.02 [1.44, 3.17] 1.68 [1.34, 2.54] 0.150 nonnorm 50.9
efu_status (%) 0 133 (61.6) 107 (80.5) 26 (31.3) <0.001 1.8
1 83 (38.4) 26 (19.5) 57 (68.7)
efu_dayslastencounter (median [IQR]) 731.50 [83.50, 953.75] 121.00 [29.50, 747.50] 842.00 [650.50, 1096.50] <0.001 nonnorm 42.7
efu_daysdod (median [IQR]) 37.00 [20.00, 123.00] 37.50 [18.75, 97.75] 36.00 [27.00, 185.00] 0.780 nonnorm 39.5
efu_rrt (%) 0 179 (84.0) 119 (90.8) 60 (73.2) 0.001 3.2
1 34 (16.0) 12 (9.2) 22 (26.8)
efu_daysrrtstart (median [IQR]) 18.50 [13.00, 48.75] 17.00 [13.50, 38.50] 23.00 [12.00, 49.50] 0.875 nonnorm 80.9
efu_dayslisting (median [IQR]) 12.00 [6.00, 38.00] 1437.00 [1437.00, 1437.00] 12.00 [6.00, 38.00] 0.087 nonnorm 61.4
efu_listing (%) 0 141 (68.1) 124 (99.2) 17 (20.7) <0.001 5.9
1 66 (31.9) 1 (0.8) 65 (79.3)
efu_dayswlremoval (median [IQR]) 32.50 [17.50, 79.25] 11.00 [11.00, 11.00] 33.00 [20.00, 81.50] 0.178 nonnorm 83.6
efu_lt (%) 0 152 (70.7) 131 (99.2) 21 (25.3) <0.001 2.3
1 63 (29.3) 1 (0.8) 62 (74.7)
efu_dayslt (median [IQR]) 30.00 [15.00, 67.50] 40.00 [40.00, 40.00] 28.50 [15.00, 70.75] 0.660 nonnorm 71.4
efu_slkt (%) 0 50 (79.4) 1 (100.0) 49 (79.0) 1.000 71.4
1 13 (20.6) 0 (0.0) 13 (21.0)
efu_kal (%) 0 56 (86.2) 2 (66.7) 54 (87.1) 0.885 70.5
1 9 (13.8) 1 (33.3) 8 (12.9)
efu_dayskal (median [IQR]) 44.00 [27.00, 349.00] 306.00 [306.00, 306.00] 37.50 [26.00, 366.25] 0.699 nonnorm 95.9
efu_ltrrt (%) 0 42 (65.6) 1 (50.0) 41 (66.1) 1.000 70.9
1 22 (34.4) 1 (50.0) 21 (33.9)
efu_ltna (median [IQR]) 136.00 [133.00, 140.00] 135.00 [135.00, 135.00] 136.00 [133.00, 140.00] 0.674 nonnorm 71.8
efu_lttbili (median [IQR]) 3.90 [2.38, 12.35] 8.60 [8.60, 8.60] 3.80 [2.30, 12.90] 0.485 nonnorm 71.8
efu_ltscr (median [IQR]) 1.90 [1.56, 3.12] 3.26 [3.26, 3.26] 1.90 [1.56, 3.09] 0.328 nonnorm 71.8
efu_lt_albumin (median [IQR]) 3.35 [3.00, 3.88] 2.50 [2.50, 2.50] 3.40 [3.00, 3.90] 0.251 nonnorm 71.8
efu_lt_inr (median [IQR]) 1.70 [1.50, 2.18] 1.70 [1.70, 1.70] 1.70 [1.50, 2.20] 0.978 nonnorm 71.8
efu_90_scr (median [IQR]) 1.51 [1.10, 2.12] 1.49 [1.10, 2.04] 1.54 [1.14, 2.21] 0.696 nonnorm 48.2
efu_90_rrt (%) 0 143 (92.3) 80 (95.2) 63 (88.7) 0.227 29.5
1 12 (7.7) 4 (4.8) 8 (11.3)
efu_90_readmit (median [IQR]) 1.00 [0.00, 1.00] 0.00 [0.00, 1.00] 1.00 [0.00, 1.75] 0.005 nonnorm 29.1
efu_90lt_scr (median [IQR]) 1.55 [1.19, 2.17] 1.60 [1.60, 1.60] 1.54 [1.18, 2.18] 0.814 nonnorm 73.2
efu_90lt_rrt (%) 0 54 (88.5) 3 (100.0) 51 (87.9) 1.000 72.3
1 7 (11.5) 0 (0.0) 7 (12.1)
efu_180_scr (median [IQR]) 1.33 [1.04, 2.13] 1.23 [0.95, 1.83] 1.59 [1.09, 2.20] 0.078 nonnorm 55.9
efu_180_rrt (%) 0 140 (95.9) 76 (98.7) 64 (92.8) 0.165 33.6
1 6 (4.1) 1 (1.3) 5 (7.2)
efu_180_readmit (median [IQR]) 1.00 [0.00, 2.00] 0.00 [0.00, 1.25] 1.00 [0.00, 2.00] 0.010 nonnorm 31.4
efu_180lt_scr (median [IQR]) 1.50 [1.12, 2.08] 1.20 [1.04, 1.36] 1.50 [1.14, 2.09] 0.310 nonnorm 74.5
efu_180lt_rrt (%) 0 56 (91.8) 4 (100.0) 52 (91.2) 1.000 72.3
1 5 (8.2) 0 (0.0) 5 (8.8)
efu_1yr_scr (median [IQR]) 1.40 [1.08, 1.88] 1.31 [1.03, 1.66] 1.41 [1.13, 1.98] 0.159 nonnorm 59.1
efu_1yr_rrt (%) 0 133 (95.7) 76 (98.7) 57 (91.9) 0.126 36.8
1 6 (4.3) 1 (1.3) 5 (8.1)
efu_1yr_readmit (median [IQR]) 1.00 [0.00, 3.00] 1.00 [0.00, 2.00] 1.00 [0.00, 3.00] 0.144 nonnorm 34.1
efu_1yrlt_scr (median [IQR]) 1.43 [1.20, 1.91] 1.34 [1.27, 1.41] 1.43 [1.20, 1.93] 0.568 nonnorm 76.4
efu_1yrlt_rrt (%) 0 55 (94.8) 4 (100.0) 51 (94.4) 1.000 73.6
1 3 (5.2) 0 (0.0) 3 (5.6)

📥 Download CSV — Table 3

Session Info

Show session info
sessionInfo()
R version 4.4.2 (2024-10-31)
Platform: aarch64-apple-darwin20
Running under: macOS 26.4.1

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRblas.0.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.4-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.0

locale:
[1] C

time zone: America/New_York
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] tableone_0.13.2 readxl_1.4.3    lubridate_1.9.4 forcats_1.0.0  
 [5] stringr_1.5.1   dplyr_1.1.4     purrr_1.0.2     readr_2.1.5    
 [9] tidyr_1.3.1     tibble_3.2.1    ggplot2_3.5.1   tidyverse_2.0.0

loaded via a namespace (and not attached):
 [1] utf8_1.2.4        generics_0.1.3    class_7.3-22      stringi_1.8.4    
 [5] lattice_0.22-6    hms_1.1.3         digest_0.6.37     magrittr_2.0.3   
 [9] evaluate_1.0.1    grid_4.4.2        timechange_0.3.0  fastmap_1.2.0    
[13] cellranger_1.1.0  jsonlite_1.8.9    Matrix_1.7-1      e1071_1.7-16     
[17] DBI_1.2.3         survival_3.7-0    fansi_1.0.6       scales_1.3.0     
[21] labelled_2.13.0   cli_3.6.3         crayon_1.5.3      mitools_2.4      
[25] rlang_1.1.4       bit64_4.5.2       munsell_0.5.1     splines_4.4.2    
[29] withr_3.0.2       yaml_2.3.10       parallel_4.4.2    tools_4.4.2      
[33] tzdb_0.4.0        colorspace_2.1-1  vctrs_0.6.5       R6_2.5.1         
[37] zoo_1.8-12        proxy_0.4-27      lifecycle_1.0.4   bit_4.5.0.1      
[41] htmlwidgets_1.6.4 MASS_7.3-61       vroom_1.6.5       pkgconfig_2.0.3  
[45] pillar_1.9.0      gtable_0.3.6      glue_1.8.0        Rcpp_1.1.0       
[49] haven_2.5.4       xfun_0.57         tidyselect_1.2.1  knitr_1.51       
[53] htmltools_0.5.8.1 survey_4.4-2      rmarkdown_2.30    compiler_4.4.2