# Simulation of survival times

library(survobj)
library(survival)

## Introduction

Following Bender, Augustin, and Blettner (2003) and Leemis (1987), simulation of survival times is possible if there is function that invert the cumulative hazard ($$H^{-1}$$), Random survival times for a baseline distribution can be generated from an uniform distribution between 0-1 $$U$$ as: $T = H^{-1}(-log(U))$ For a survival distribution object, this can be accomplished with the function rsurv(s_object, n) which will generate n number of random draws from the distribution s_object. All objects of the s_distribution family implements a function that inverts the survival time with the function invCum_Hfx()

The function ggplot_survival_random() helps to graph Kaplan-Meier graphs and cumulative hazard of simulated times from the distribution

s_obj <- s_exponential(fail = 0.4, t = 2)
ggplot_survival_random(s_obj, timeto =2, subjects = 1000, nsim= 10, alpha = 0.3)

## Generation of Proportional Hazard times

Survival times with hazard proportional to the baseline hazard can be simulated $T = H^{-1}\left(\frac{-log(U)}{HR}\right)$ where $$HR$$ is a hazard ratio.

The function rsurv_hr(s_object, hr) can generate random number with hazards proportionals to the baseline hazard. The function produce as many numbers as the length of the hr vector. for example:

s_obj <- s_exponential(fail = 0.4, t = 2)
group <- c(rep(0,500), rep(1,500))
hr_vector <- c(rep(1,500),rep(2,500))
times <- rsurvhr(s_obj, hr_vector)
plot(survfit(Surv(times)~group), xlim=c(0,5))

The function ggplot_survival_hr() can plot simulated data under proportional hazard assumption.

s_obj <- s_exponential(fail = 0.4, t = 2)
ggplot_survival_hr(s_obj, hr = 2, nsim = 10, subjects = 1000, timeto = 5)

## Generation of Acceleration Failure Times

Survival times with accelerated failure time to the baseline hazard can be simulated $T = \frac{H^{-1}(-log(U))}{AFT}$ where $$AFT$$ is a acceleration factor, meaning for example an AFT of 2 have events two times quicker than the baseline

The function rsurv_aft(s_object, aft) can generate random numbers accelerated by an AFT factor. The function produce as many numbers as the length of the aft vector. for example:

s_obj <- s_lognormal(scale = 2, shape = 0.5)
ggplot_survival_aft(s_obj, aft = 2, nsim = 10, subjects = 1000, timeto = 5)

In this example, the scale parameter of the Log-Normal distribution represents the mean time and it this simulation and accelerated factor of 2 move the average median from 2 to 1

If the proportional hazard and the accelerated failure is combined and accelerated hazard time is generated. This can be accomplished with the function rsurvah() function and the ggplot_random_ah() functions

## References

Bender, R., Thomas Augustin, and Maria Blettner. 2003. “Generating Survival Times to Simulate Cox Proportional Hazards Models.” Universitätsbibliothek Der Ludwig-Maximilians-Universität München. https://doi.org/10.5282/UBM/EPUB.1716.
Leemis, Lawrence M. 1987. “Variate Generation for Accelerated Life and Proportional Hazards Models.” Operations Research 35 (6): 892–94.