39  Survival Analysis

39.1 Reading and cleaning data

Code
df_mbu <-
    readxl::read_xlsx("C:/Dataset/mbu.xlsx") %>% 
    janitor::clean_names() %>% 
    select(
        -c(pt_name, ip, diag1, diag2, diag3, address, 
              disweight, field1, del_date_time)) %>% 
    filter(
        (outcome %in% c("Died", "Discharged")) & 
        (wt < 8 & wt >= 1) & 
        (age < 29) & 
        (sex != "Missing") & 
        (place != "Missing") &
        (apgar1 < 11) &
        (apgar2 < 11) & 
        (!is.na(adm_date_time)) & 
        (!is.na(dis_date_time)) &
        (del != "Missing")) %>% 
    rename(apgar5 = apgar2,
           del_mode = del) %>% 
    mutate(gestage = ifelse(gestage > 50 | gestage < 26, NA, gestage),
           place = ifelse(place == "Self", "Home", place),
           place = ifelse(
               place == "Maternity Home", "Clinic/Hospital", place),
           across(c(sex, place), ~as.factor(.)),
           place = fct_relevel(
               place, c("KATH", "Clinic/Hospital", "Home")),
           died = outcome == "Died",
           adm_dura_hrs = difftime(
               dis_date_time, adm_date_time, units = "hours") %>% 
               as.numeric(),
           adm_dura_hrs = ifelse(
               adm_dura_hrs < 0 | adm_dura_hrs > 1040, NA, adm_dura_hrs),
           adm_year = format(adm_date_time, "%Y"),
           outcome = factor(outcome, levels = c("Discharged","Died")),
           del_mode = ifelse(
               del_mode %in% c("Forceps", "Vacuum"), 
               "Assisted VD", del_mode) %>% 
               factor(levels = c("SVD", "C/S", "Assisted VD"))) %>% 
    select(-c(adm_date_time, dis_date_time)) %>% 
    filter(adm_year != "2012" & !is.na(adm_dura_hrs))

39.2 Labelling data

Code
labelled::var_label(df_mbu) <-
    list(
        wt = "Weight in kgs",
        age = "Age in days",
        sex = "Sex",
        place = "Place of delivery",
        apgar1 = "First minute APGAR",
        apgar1 = "First minute APGAR",
        apgar5 = "Fifth minute APGAR",
        outcome = "Outcome",
        del_mode = "Mode of delivery",
        gestage = "Gestational age",
        died = "Baby died",
        adm_dura_hrs = "Duration of admission",
        adm_year = "Year of admission"
    )

39.3 Summarizing data

Code
df_mbu %>% 
    summarytools::dfSummary(graph.col = F, labels.col = FALSE)
Data Frame Summary  
df_mbu  
Dimensions: 7502 x 12  
Duplicates: 11  

-------------------------------------------------------------------------------------------
No   Variable       Stats / Values              Freqs (% of Valid)     Valid      Missing  
---- -------------- --------------------------- ---------------------- ---------- ---------
1    wt             Mean (sd) : 2.7 (0.9)       50 distinct values     7502       0        
     [numeric]      min < med < max:                                   (100.0%)   (0.0%)   
                    1 < 2.8 < 6.6                                                          
                    IQR (CV) : 1.4 (0.3)                                                   

2    age            Mean (sd) : 0.8 (1.3)       21 distinct values     7502       0        
     [numeric]      min < med < max:                                   (100.0%)   (0.0%)   
                    0 < 1 < 28                                                             
                    IQR (CV) : 1 (1.7)                                                     

3    sex            1. Female                   3292 (43.9%)           7502       0        
     [factor]       2. Male                     4210 (56.1%)           (100.0%)   (0.0%)   

4    place          1. KATH                     5605 (74.7%)           7502       0        
     [factor]       2. Clinic/Hospital          1826 (24.3%)           (100.0%)   (0.0%)   
                    3. Home                       71 ( 0.9%)                               

5    apgar1         Mean (sd) : 5.5 (2.1)       11 distinct values     7502       0        
     [numeric]      min < med < max:                                   (100.0%)   (0.0%)   
                    0 < 6 < 10                                                             
                    IQR (CV) : 3 (0.4)                                                     

6    apgar5         Mean (sd) : 7.3 (1.7)       1 :   25 ( 0.3%)       7502       0        
     [numeric]      min < med < max:            2 :   86 ( 1.1%)       (100.0%)   (0.0%)   
                    1 < 8 < 10                  3 :  183 ( 2.4%)                           
                    IQR (CV) : 3 (0.2)          4 :  284 ( 3.8%)                           
                                                5 :  596 ( 7.9%)                           
                                                6 :  878 (11.7%)                           
                                                7 : 1305 (17.4%)                           
                                                8 : 1898 (25.3%)                           
                                                9 : 2061 (27.5%)                           
                                                10 :  186 ( 2.5%)                          

7    outcome        1. Discharged               6336 (84.5%)           7502       0        
     [factor]       2. Died                     1166 (15.5%)           (100.0%)   (0.0%)   

8    del_mode       1. SVD                      3596 (47.9%)           7502       0        
     [factor]       2. C/S                      3731 (49.7%)           (100.0%)   (0.0%)   
                    3. Assisted VD               175 ( 2.3%)                               

9    gestage        Mean (sd) : 37.1 (3.9)      23 distinct values     4793       2709     
     [numeric]      min < med < max:                                   (63.9%)    (36.1%)  
                    26 < 38 < 48                                                           
                    IQR (CV) : 6 (0.1)                                                     

10   died           1. FALSE                    6336 (84.5%)           7502       0        
     [logical]      2. TRUE                     1166 (15.5%)           (100.0%)   (0.0%)   

11   adm_dura_hrs   Mean (sd) : 153.7 (150.7)   4632 distinct values   7502       0        
     [numeric]      min < med < max:                                   (100.0%)   (0.0%)   
                    0 < 117.4 < 1040                                                       
                    IQR (CV) : 127.2 (1)                                                   

12   adm_year       1. 2013                     2344 (31.2%)           7502       0        
     [character]    2. 2014                     2455 (32.7%)           (100.0%)   (0.0%)   
                    3. 2015                     1657 (22.1%)                               
                    4. 2016                     1046 (13.9%)                               
-------------------------------------------------------------------------------------------

39.4 Summarizing by outcome

Code
# gtsummary::theme_gtsummary_compact()
df_mbu %>% 
    gtsummary::tbl_summary(
        by = outcome,
        percent = "row",
        digits = list(gtsummary::all_categorical()~ c(0,1),
                      gtsummary::all_continuous()~0,
                      wt ~ 1)
    ) %>% 
    gtsummary::modify_spanning_header(
        gtsummary::all_stat_cols() ~ "Outcome"
        ) %>% 
    gtsummary::add_overall() %>%   
    gtsummary::add_p(
        pvalue_fun = ~ gtsummary::style_pvalue(.x, digits = 3)) %>% 
    gtsummary::bold_p() %>% 
    gtsummary::bold_labels()
Characteristic Overall
N = 7,5021
Outcome
p-value2
Discharged
N = 6,3361
Died
N = 1,1661
Weight in kgs 2.8 (1.9, 3.3) 2.8 (2.0, 3.3) 2.3 (1.3, 3.0) <0.001
Age in days 1 (0, 1) 1 (0, 1) 1 (0, 1) 0.499
Sex


0.257
    Female 3,292 (100.0%) 2,798 (85.0%) 494 (15.0%)
    Male 4,210 (100.0%) 3,538 (84.0%) 672 (16.0%)
Place of delivery


<0.001
    KATH 5,605 (100.0%) 4,952 (88.3%) 653 (11.7%)
    Clinic/Hospital 1,826 (100.0%) 1,325 (72.6%) 501 (27.4%)
    Home 71 (100.0%) 59 (83.1%) 12 (16.9%)
First minute APGAR 6 (4, 7) 6 (4, 7) 4 (2, 6) <0.001
Fifth minute APGAR 8 (6, 9) 8 (7, 9) 6 (4, 7) <0.001
Mode of delivery


<0.001
    SVD 3,596 (100.0%) 2,907 (80.8%) 689 (19.2%)
    C/S 3,731 (100.0%) 3,270 (87.6%) 461 (12.4%)
    Assisted VD 175 (100.0%) 159 (90.9%) 16 (9.1%)
Gestational age 38 (34, 40) 38 (35, 40) 35 (31, 40) <0.001
    Unknown 2,709 2,159 550
Baby died 1,166 (100.0%) 0 (0.0%) 1,166 (100.0%) <0.001
Duration of admission 117 (60, 187) 130 (76, 196) 32 (11, 76) <0.001
Year of admission


<0.001
    2013 2,344 (100.0%) 1,909 (81.4%) 435 (18.6%)
    2014 2,455 (100.0%) 2,121 (86.4%) 334 (13.6%)
    2015 1,657 (100.0%) 1,424 (85.9%) 233 (14.1%)
    2016 1,046 (100.0%) 882 (84.3%) 164 (15.7%)
1 Median (Q1, Q3); n (%)
2 Wilcoxon rank sum test; Pearson’s Chi-squared test

39.5 Overall Kaplan-Meier survival

Code
km1 <- 
    df_mbu %>% 
    survival::survfit(
        survival::Surv(event = died, time = adm_dura_hrs) ~ 1, 
        data = .)
km1
Call: survfit(formula = survival::Surv(event = died, time = adm_dura_hrs) ~ 
    1, data = .)

        n events median 0.95LCL 0.95UCL
[1,] 7502   1166     NA     922      NA
Code
km1 %>% broom::tidy()
# A tibble: 4,632 × 8
     time n.risk n.event n.censor estimate std.error conf.high conf.low
    <dbl>  <dbl>   <dbl>    <dbl>    <dbl>     <dbl>     <dbl>    <dbl>
 1 0        7502       8        8    0.999  0.000377     1.00     0.998
 2 0.0167   7486       1        0    0.999  0.000400     1.00     0.998
 3 0.0833   7485       1        0    0.999  0.000422     0.999    0.998
 4 0.167    7484       2        1    0.998  0.000462     0.999    0.997
 5 0.2      7481       0        1    0.998  0.000462     0.999    0.997
 6 0.333    7480       1        0    0.998  0.000481     0.999    0.997
 7 0.383    7479       1        0    0.998  0.000499     0.999    0.997
 8 0.5      7478       3        1    0.998  0.000551     0.999    0.997
 9 0.6      7474       1        0    0.998  0.000567     0.999    0.996
10 0.667    7473       2        0    0.997  0.000597     0.999    0.996
# ℹ 4,622 more rows
Code
km1 %>% 
    survminer::ggsurvplot(
        data = df_mbu,
        pval = T,
        risk.table = T, 
        censor = F,
        font.x = c(10, "bold.italic", "red"),
        font.y = c(10, "bold.italic", "darkred"),
        font.tickslab = c(10, "plain", "darkgreen"),
        tables.theme = survminer::theme_cleantable())
Warning in .pvalue(fit, data = data, method = method, pval = pval, pval.coord = pval.coord, : There are no survival curves to be compared. 
 This is a null model.

39.6 Kaplan-Meier survival by sex

Code
km_by_sex <- 
    df_mbu %>% 
    survival::survfit(
        survival::Surv(
            event = died, time = adm_dura_hrs) ~ sex, data = .)

km_by_sex
Call: survfit(formula = survival::Surv(event = died, time = adm_dura_hrs) ~ 
    sex, data = .)

              n events median 0.95LCL 0.95UCL
sex=Female 3292    494     NA     751      NA
sex=Male   4210    672     NA     871      NA
Code
km_by_sex %>% broom::tidy() %>% arrange(time)
# A tibble: 5,577 × 9
     time n.risk n.event n.censor estimate std.error conf.high conf.low strata  
    <dbl>  <dbl>   <dbl>    <dbl>    <dbl>     <dbl>     <dbl>    <dbl> <chr>   
 1 0        3292       3        2    0.999  0.000526     1        0.998 sex=Fem…
 2 0        4210       5        6    0.999  0.000531     1.00     0.998 sex=Male
 3 0.0167   3287       1        0    0.999  0.000608     1.00     0.998 sex=Fem…
 4 0.0833   4199       1        0    0.999  0.000582     1.00     0.997 sex=Male
 5 0.167    3286       0        1    0.999  0.000608     1.00     0.998 sex=Fem…
 6 0.167    4198       2        0    0.998  0.000673     0.999    0.997 sex=Male
 7 0.2      3285       0        1    0.999  0.000608     1.00     0.998 sex=Fem…
 8 0.333    3284       1        0    0.998  0.000680     1.00     0.997 sex=Fem…
 9 0.383    3283       1        0    0.998  0.000745     1.00     0.997 sex=Fem…
10 0.5      3282       1        0    0.998  0.000805     0.999    0.996 sex=Fem…
# ℹ 5,567 more rows

39.7 Weekly survival

Code
summary(km_by_sex, times = seq(0, 1040, by = 24*7))
Call: survfit(formula = survival::Surv(event = died, time = adm_dura_hrs) ~ 
    sex, data = .)

                sex=Female 
 time n.risk n.event survival  std.err lower 95% CI upper 95% CI
    0   3292       3    0.999 0.000526        0.998        1.000
  168   1087     423    0.851 0.006897        0.838        0.865
  336    348      33    0.803 0.010707        0.782        0.824
  504    175      12    0.770 0.013998        0.743        0.797
  672     83       9    0.709 0.023494        0.665        0.757
  840     24      14    0.557 0.041019        0.483        0.644
 1008      1       0    0.557 0.041019        0.483        0.644

                sex=Male 
 time n.risk n.event survival  std.err lower 95% CI upper 95% CI
    0   4210       5    0.999 0.000531        0.998        1.000
  168   1186     585    0.839 0.006366        0.827        0.851
  336    296      49    0.777 0.010880        0.756        0.799
  504    140      17    0.717 0.017530        0.683        0.752
  672     79       6    0.672 0.024214        0.626        0.721
  840     31       8    0.580 0.036905        0.512        0.657
 1008      4       2    0.520 0.054000        0.425        0.638
Code
km_by_sex %>% 
    survminer::ggsurvplot(
        data = df_mbu,
        pval = T,
        risk.table = T, 
        censor = F,
        font.x = c(10, "bold.italic", "red"),
        font.y = c(10, "bold.italic", "darkred"),
        font.tickslab = c(10, "plain", "darkgreen"),
        tables.theme = survminer::theme_cleantable(),
        conf.int=T,
        tables.height = 0.2,
        break.x.by = 24*7,
        legend.title = "",
        surv.scale = "percent")

39.8 Cox’s regression

Code
cox_by_sex <- 
    df_mbu %>% 
    survival::coxph(
        survival::Surv(
            event = died, time = adm_dura_hrs) ~ sex, data = .)

summary(cox_by_sex)
Call:
survival::coxph(formula = survival::Surv(event = died, time = adm_dura_hrs) ~ 
    sex, data = .)

  n= 7502, number of events= 1166 

           coef exp(coef) se(coef)     z Pr(>|z|)  
sexMale 0.12604   1.13433  0.05935 2.124   0.0337 *
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

        exp(coef) exp(-coef) lower .95 upper .95
sexMale     1.134     0.8816      1.01     1.274

Concordance= 0.516  (se = 0.008 )
Likelihood ratio test= 4.54  on 1 df,   p=0.03
Wald test            = 4.51  on 1 df,   p=0.03
Score (logrank) test = 4.52  on 1 df,   p=0.03

39.8.1 Univariate Cox regression

Code
cox_by_sex %>% 
    gtsummary::tbl_regression(
    exponentiate = TRUE,
    pvalue_fun = ~ gtsummary::style_pvalue(.x, digits = 3)
) %>% 
    gtsummary::bold_labels() %>% 
    gtsummary::bold_p() %>% 
    gtsummary::modify_caption("Univariate Cox regression with sex")
Univariate Cox regression with sex
Characteristic HR1 95% CI1 p-value
Sex


    Female — —
    Male 1.13 1.01, 1.27 0.034
1 HR = Hazard Ratio, CI = Confidence Interval

39.8.2 Univariate Cox regression multiple variables at a time

Code
df_mbu %>% 
    gtsummary::tbl_uvregression(
        include = -outcome,
        method = survival::coxph, 
        y = survival::Surv(event = died, time = adm_dura_hrs),
        exponentiate = TRUE, 
        pvalue_fun = ~ gtsummary::style_pvalue(.x, digits = 3)) %>% 
    gtsummary::bold_p() %>% 
    gtsummary::bold_labels()
Characteristic N HR1 95% CI1 p-value
Weight in kgs 7,502 0.66 0.61, 0.70 <0.001
Age in days 7,502 1.00 0.96, 1.05 0.839
Sex 7,502


    Female
— —
    Male
1.13 1.01, 1.27 0.034
Place of delivery 7,502


    KATH
— —
    Clinic/Hospital
2.29 2.03, 2.57 <0.001
    Home
1.57 0.89, 2.78 0.122
First minute APGAR 7,502 0.72 0.70, 0.74 <0.001
Fifth minute APGAR 7,502 0.66 0.64, 0.68 <0.001
Mode of delivery 7,502


    SVD
— —
    C/S
0.64 0.57, 0.72 <0.001
    Assisted VD
0.53 0.33, 0.88 0.013
Gestational age 4,793 0.90 0.88, 0.91 <0.001
Year of admission 7,502


    2013
— —
    2014
0.77 0.67, 0.89 <0.001
    2015
0.72 0.61, 0.84 <0.001
    2016
0.84 0.70, 1.01 0.063
1 HR = Hazard Ratio, CI = Confidence Interval

39.8.3 Multivariate Cox regression

Code
cox_1 <- 
    df_mbu %>% 
    select(-c(outcome, gestage)) %>% 
    survival::coxph(
        survival::Surv(event = died, time = adm_dura_hrs) ~ ., 
        data = .)

cox_2 <- 
    df_mbu %>% 
    select(-c(outcome)) %>% 
    survival::coxph(
        survival::Surv(event = died, time = adm_dura_hrs) ~ ., 
        data = .)

39.9 Checking the model

Code
performance::performance(cox_1)
Response residuals not available to calculate mean square error. (R)MSE
  is probably not reliable.
Warning: Can't calculate weighted residuals from model.
# Indices of model performance

AIC       |      AICc |       BIC | Nagelkerke's R2 |  RMSE | Sigma
-------------------------------------------------------------------
18651.333 | 18651.375 | 18734.408 |           0.139 | 0.413 | 0.000
Code
performance::performance(cox_2)
Response residuals not available to calculate mean square error. (R)MSE
  is probably not reliable.
Warning: Can't calculate weighted residuals from model.
# Indices of model performance

AIC      |     AICc |      BIC | Nagelkerke's R2 |  RMSE | Sigma
----------------------------------------------------------------
9244.289 | 9244.365 | 9328.463 |           0.135 | 0.377 | 0.000

39.10 Compare two multivariate models: Obviously second is better than first

Code
performance::compare_performance(cox_1, cox_2)
When comparing models, please note that probably not all models were fit
  from same data.
# Comparison of Model Performance Indices

Name  | Model |   AIC (weights) |  AICc (weights) |   BIC (weights)
-------------------------------------------------------------------
cox_1 | coxph | 18651.3 (<.001) | 18651.4 (<.001) | 18734.4 (<.001)
cox_2 | coxph |  9244.3 (>.999) |  9244.4 (>.999) |  9328.5 (>.999)

Name  | Nagelkerke's R2 |  RMSE | Sigma
---------------------------------------
cox_1 |           0.139 | 0.413 | 0.000
cox_2 |           0.135 | 0.377 | 0.000

39.11 Checking for proportional hazard assumption

Significant p-values indicates Proportional Hazard assumption violated

Code
cox_1 %>% survival::cox.zph()
            chisq df       p
wt        0.00917  1  0.9237
age       8.38652  1  0.0038
sex       2.54003  1  0.1110
place     6.94463  2  0.0310
apgar1   30.05277  1 4.2e-08
apgar5   38.45559  1 5.6e-10
del_mode  2.09712  2  0.3504
adm_year 10.39820  3  0.0155
GLOBAL   72.90917 12 9.1e-11

Residuals falling outside the standard error margins indicates Proportional Hazard assumption violated. These violations will have to be dealt with.

Code
cox_1 %>% survival::cox.zph() %>% survminer::ggcoxzph()
Warning in regularize.values(x, y, ties, missing(ties), na.rm = na.rm):
collapsing to unique 'x' values

39.12 Combining Univariate and multivariate Cox regression

39.12.1 Without gestational age

Code
cox_1A <-
    df_mbu %>% 
    select(-c(outcome, gestage)) %>%
    gtsummary::tbl_uvregression(
        method = survival::coxph, 
        y = survival::Surv(event = died, time = adm_dura_hrs),
        exponentiate = TRUE, 
        pvalue_fun = ~ gtsummary::style_pvalue(.x, digits = 3)) %>% 
    gtsummary::bold_labels() %>% 
    gtsummary::bold_p()

cox_1B <- 
    df_mbu %>% 
    select(-c(outcome, gestage)) %>% 
    survival::coxph(
        survival::Surv(
            event = died, time = adm_dura_hrs) ~ ., data = .) %>% 
    gtsummary::tbl_regression(
        exponentiate = TRUE,
        pvalue_fun = ~ gtsummary::style_pvalue(.x, digits = 3)) %>% 
    gtsummary::bold_labels() %>% 
    gtsummary::bold_p()

gtsummary::tbl_merge(
    tbls = list(cox_1A, cox_1B),
    tab_spanner = c("Univariate", "Multivariate")) %>% 
    gtsummary::modify_caption(
        "Combined Univariate and Multivariate Cox regression with sex")
Combined Univariate and Multivariate Cox regression with sex
Characteristic
Univariate
Multivariate
N HR1 95% CI1 p-value HR1 95% CI1 p-value
Weight in kgs 7,502 0.66 0.61, 0.70 <0.001 0.70 0.66, 0.75 <0.001
Age in days 7,502 1.00 0.96, 1.05 0.839 1.01 0.97, 1.06 0.558
Sex 7,502





    Female
— —
— —
    Male
1.13 1.01, 1.27 0.034 1.17 1.04, 1.31 0.010
Place of delivery 7,502





    KATH
— —
— —
    Clinic/Hospital
2.29 2.03, 2.57 <0.001 1.85 1.64, 2.09 <0.001
    Home
1.57 0.89, 2.78 0.122 1.39 0.78, 2.47 0.261
First minute APGAR 7,502 0.72 0.70, 0.74 <0.001 0.96 0.90, 1.01 0.113
Fifth minute APGAR 7,502 0.66 0.64, 0.68 <0.001 0.69 0.66, 0.74 <0.001
Mode of delivery 7,502





    SVD
— —
— —
    C/S
0.64 0.57, 0.72 <0.001 1.20 1.06, 1.36 0.005
    Assisted VD
0.53 0.33, 0.88 0.013 0.92 0.56, 1.51 0.738
Year of admission 7,502





    2013
— —
— —
    2014
0.77 0.67, 0.89 <0.001 0.74 0.64, 0.85 <0.001
    2015
0.72 0.61, 0.84 <0.001 0.82 0.69, 0.96 0.017
    2016
0.84 0.70, 1.01 0.063 0.93 0.77, 1.12 0.464
1 HR = Hazard Ratio, CI = Confidence Interval

39.12.2 With gestational age

Code
cox_2A <-
    df_mbu %>% 
    select(-c(outcome)) %>%
    gtsummary::tbl_uvregression(
        method = survival::coxph, 
        y = survival::Surv(event = died, time = adm_dura_hrs),
        exponentiate = TRUE, 
        pvalue_fun = ~ gtsummary::style_pvalue(.x, digits = 3)) %>% 
    gtsummary::bold_labels() %>% 
    gtsummary::bold_p()

cox_2B <- 
    df_mbu %>% 
    select(-c(outcome)) %>% 
    survival::coxph(
        survival::Surv(
            event = died, time = adm_dura_hrs) ~ ., data = .) %>% 
    gtsummary::tbl_regression(
        pvalue_fun = ~ gtsummary::style_pvalue(.x, digits = 3),
        exponentiate = TRUE) %>% 
    gtsummary::bold_labels() %>% 
    gtsummary::bold_p()

gtsummary::tbl_merge(
    tbls = list(cox_2A, cox_2B),
    tab_spanner = c("Univariate", "Multivariate")) %>% 
    gtsummary::modify_caption(
        "Combined Univariate and Multivariate Cox regression with sex")
Combined Univariate and Multivariate Cox regression with sex
Characteristic
Univariate
Multivariate
N HR1 95% CI1 p-value HR1 95% CI1 p-value
Weight in kgs 7,502 0.66 0.61, 0.70 <0.001 0.69 0.59, 0.81 <0.001
Age in days 7,502 1.00 0.96, 1.05 0.839 1.03 0.99, 1.08 0.163
Sex 7,502





    Female
— —
— —
    Male
1.13 1.01, 1.27 0.034 1.09 0.93, 1.28 0.299
Place of delivery 7,502





    KATH
— —
— —
    Clinic/Hospital
2.29 2.03, 2.57 <0.001 1.60 1.34, 1.93 <0.001
    Home
1.57 0.89, 2.78 0.122 1.29 0.64, 2.61 0.475
First minute APGAR 7,502 0.72 0.70, 0.74 <0.001 0.97 0.90, 1.05 0.457
Fifth minute APGAR 7,502 0.66 0.64, 0.68 <0.001 0.67 0.62, 0.73 <0.001
Mode of delivery 7,502





    SVD
— —
— —
    C/S
0.64 0.57, 0.72 <0.001 1.22 1.03, 1.45 0.025
    Assisted VD
0.53 0.33, 0.88 0.013 1.36 0.74, 2.51 0.324
Gestational age 4,793 0.90 0.88, 0.91 <0.001 0.97 0.94, 1.00 0.048
Year of admission 7,502





    2013
— —
— —
    2014
0.77 0.67, 0.89 <0.001 0.74 0.59, 0.92 0.007
    2015
0.72 0.61, 0.84 <0.001 0.90 0.71, 1.14 0.376
    2016
0.84 0.70, 1.01 0.063 1.04 0.80, 1.34 0.787
1 HR = Hazard Ratio, CI = Confidence Interval

39.13 Plotting coefficients

Code
df_mbu %>% 
    select(-c(outcome)) %>% 
    survival::coxph(
        survival::Surv(event = died, time = adm_dura_hrs) ~ ., 
        data = .) %>% 
    sjPlot::plot_model(
        value.offset = 0.4,show.values = T, show.p = T) +
    geom_hline(yintercept = 1, alpha =.5, color = 'grey45') +
    labs(
        title = "Coefficients Plot of Hazard Ratios", 
        y = "Hazard ratio (95%CI)") +
    theme_minimal() +
    scale_y_log10(limits = c(0.4, 5))
Scale for y is already present.
Adding another scale for y, which will replace the existing scale.