Code
data(rmb_datasets, package = "rmb")
rmb_datasets$study_design[rmb_datasets$object == "unos"]
#> [1] "Registry-based cohort of pediatric kidney transplant recipients from the UNOS database."This article fits a Cox proportional hazards model to pediatric kidney transplant recipients in the UNOS registry, comparing post-transplant mortality between living-donor and cadaveric recipients (RMB2e Chapter 6).
Kidney transplantation offers superior outcomes compared to long-term dialysis for children with end-stage renal disease. Living-donor transplants are hypothesized to have better outcomes than cadaveric transplants due to shorter cold ischemic time, better HLA matching opportunities, and planned surgery timing. The UNOS (United Network for Organ Sharing) registry provides observational data on outcomes for all US transplant recipients, enabling registry-based Cox regression adjusted for recipient and donor characteristics (RMB2e Ch. 6).
data(rmb_datasets, package = "rmb")
rmb_datasets$study_design[rmb_datasets$object == "unos"]
#> [1] "Registry-based cohort of pediatric kidney transplant recipients from the UNOS database."Is living-donor transplant associated with lower post-transplant mortality compared to cadaveric transplant in pediatric kidney recipients?
set.seed(42)
dag <- ggdag::dagify(
mort ~ txtype + age + agedon + cold + rej,
labels = c(
mort = "Post-transplant mortality",
txtype = "Living vs cadaveric",
age = "Age",
agedon = "Donor age",
cold = "Cold ischemic time",
rej = "Rejection 1yr"
),
exposure = "txtype",
outcome = "mort"
)
ggdag::ggdag(dag, use_labels = "label", text = FALSE) +
ggdag::theme_dag_blank() +
ggplot2::labs(title = "UNOS: Causal DAG")
data(unos, package = "rmb")
dat <- unos
dim(dat)
#> [1] 9775 25
summary(haven::zap_labels(dat[c("death", "fu", "txtype", "age", "age_don", "cold_isc", "trtrej1y")]))
#> death fu txtype age
#> Min. :0.00000 Min. : 0.000 Min. :0.0000 Min. : 0.00
#> 1st Qu.:0.00000 1st Qu.: 1.096 1st Qu.:0.0000 1st Qu.: 8.00
#> Median :0.00000 Median : 3.115 Median :0.0000 Median :13.00
#> Mean :0.04757 Mean : 3.888 Mean :0.4734 Mean :11.65
#> 3rd Qu.:0.00000 3rd Qu.: 5.978 3rd Qu.:1.0000 3rd Qu.:16.00
#> Max. :1.00000 Max. :12.532 Max. :1.0000 Max. :18.00
#> NAs :9
#> age_don cold_isc trtrej1y
#> Min. : 0.0 Min. : 0.00 Length :9775
#> 1st Qu.:21.0 1st Qu.: 1.00 N.unique : 3
#> Median :33.0 Median : 7.00 N.blank :3797
#> Mean :31.3 Mean :10.86 Min.nchar: 0
#> 3rd Qu.:41.0 3rd Qu.:19.00 Max.nchar: 1
#> Max. :73.0 Max. :72.00
#> NAs :113 NAs :2250A Cox proportional hazards model is fitted with post-transplant death as the event, using follow-up time fu (years) and adjusting for transplant type, recipient age, donor age, cold ischemic time, and first-year rejection (RMB2e Ch. 6).
formula_main <- survival::Surv(fu, death) ~ txtype + age + age_don + cold_isc + trtrej1y
formula_main
#> survival::Surv(fu, death) ~ txtype + age + age_don + cold_isc +
#> trtrej1ywith(dat, table(txtype, death))
#> death
#> txtype 0 1
#> 0 4971 177
#> 1 4339 288
with(dat, prop.table(table(txtype, death), margin = 1))
#> death
#> txtype 0 1
#> 0 0.96561772 0.03438228
#> 1 0.93775665 0.06224335
with(dat, tapply(fu, txtype, summary))
#> $`0`
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 0.000 1.112 3.277 4.020 6.041 12.288
#>
#> $`1`
#> Min. 1st Qu. Median Mean 3rd Qu. Max.
#> 0.000 1.077 3.033 3.741 5.644 12.532dat$txtype_plot <- factor(
dat$txtype,
levels = c(0, 1),
labels = c("Cadaveric", "Living donor")
)
km_fit <- survival::survfit(survival::Surv(fu, death) ~ txtype_plot, data = dat)
survminer::ggsurvplot(
km_fit,
data = dat,
title = "UNOS: Post-transplant survival by donor type",
xlab = "Years post-transplant",
ylab = "Survival probability",
legend.title = NULL,
ggtheme = ggplot2::theme_minimal(),
palette = c("#1b9e77", "#d95f02"),
conf.int = FALSE,
censor = TRUE
)
fit <- survival::coxph(formula_main, data = dat, ties = "breslow")
summary(fit)
#> Call:
#> survival::coxph(formula = formula_main, data = dat, ties = "breslow")
#>
#> n= 7480, number of events= 356
#> (2295 observations deleted due to missingness)
#>
#> coef exp(coef) se(coef) z Pr(>|z|)
#> txtype 0.427718 1.533754 0.173946 2.459 0.0139 *
#> age -0.024218 0.976073 0.010121 -2.393 0.0167 *
#> age_don -0.004403 0.995606 0.004190 -1.051 0.2933
#> cold_isc 0.001525 1.001526 0.006589 0.231 0.8169
#> trtrej1yN -1.390479 0.248956 0.136596 -10.179 <2e-16 ***
#> trtrej1yY -1.112252 0.328818 0.129839 -8.566 <2e-16 ***
#> ---
#> Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
#>
#> exp(coef) exp(-coef) lower .95 upper .95
#> txtype 1.5338 0.6520 1.0907 2.1568
#> age 0.9761 1.0245 0.9569 0.9956
#> age_don 0.9956 1.0044 0.9875 1.0038
#> cold_isc 1.0015 0.9985 0.9887 1.0145
#> trtrej1yN 0.2490 4.0168 0.1905 0.3254
#> trtrej1yY 0.3288 3.0412 0.2549 0.4241
#>
#> Concordance= 0.737 (se = 0.014 )
#> Likelihood ratio test= 169.5 on 6 df, p=<2e-16
#> Wald test = 171.3 on 6 df, p=<2e-16
#> Score (logrank) test = 192.4 on 6 df, p=<2e-16ph_test <- survival::cox.zph(fit)
ph_test
#> chisq df p
#> txtype 2.012 1 0.156
#> age 18.326 1 1.9e-05
#> age_don 5.298 1 0.021
#> cold_isc 0.899 1 0.343
#> trtrej1y 74.617 2 < 2e-16
#> GLOBAL 96.653 6 < 2e-16| term | hazard_ratio | conf_low | conf_high | p_value | |
|---|---|---|---|---|---|
| txtype | txtype | 1.534 | 1.091 | 2.157 | 0.014 |
| age | age | 0.976 | 0.957 | 0.996 | 0.017 |
| age_don | age_don | 0.996 | 0.987 | 1.004 | 0.293 |
| cold_isc | cold_isc | 1.002 | 0.989 | 1.015 | 0.817 |
| trtrej1yN | trtrej1yN | 0.249 | 0.190 | 0.325 | 0.000 |
| trtrej1yY | trtrej1yY | 0.329 | 0.255 | 0.424 | 0.000 |
Living-donor transplantation is associated with lower post-transplant mortality compared to cadaveric transplantation after adjustment for recipient age, donor age, cold ischemic time, and first-year rejection, consistent with known biological and logistical advantages of living donation (RMB2e Ch. 6). Rejection within the first year is a strong predictor of subsequent mortality, underscoring the prognostic importance of early immune events. Cold ischemic time reflects graft quality at implantation and is an important modifiable predictor that differs between transplant types.