 Zu den Inhalten springen

## R code for chapter 2

 The prodint() function used throughout this chapter for product integration requires two arguments: a vector of time points and a function. prodint <- function(time.points, A) { times <- c(0, sort(unique(time.points))) S <- prod(1 - diff(apply(X = matrix(times), MARGIN = 1, FUN = A))) return(S) } A.exp is a function which computes the cumulative hazard with hazard(t) = 0.9 using a vector of time points that you have to enter. A.exp <- function(time.point) { return(0.9 * time.point) } The first example (p. 12) uses a sequence of timepoints between 0 and 1. times <- seq(0, 1, 0.001) prodint(times, A.exp) exp(-0.9 * max(times)) The next example uses a vector of uniformly distributed random numbers. prodint(runif(n = 1000, min = 0, max = 1), A.exp) Creation of a similar function for Weibull distributed survival times. A.weibull <- function(time.point){ return(2 * time.point^0.25) prodint(times, A.weibull) ## True result exp(-2 * max(times)^0.25) } ## finer grid of time points prodint(seq(0, 1, 0.000001), A.weibull) Simulate some event times with constant hazard equal to 0.9. event.times <- rexp(100,0.9) Computing survival function S(t) with survfit function, which is part of the survival package. library(survival) fit.surv <- survfit(Surv(event.times) ~ 1) Compute the Nelson-Aalen estimator based on what survfit returns. A <- function(time.point) { sum(fit.surv\$n.event[fit.surv\$time <= time.point]/ fit.surv\$n.risk[fit.surv\$time <= time.point]) } One can see that using product integration leads to the same result. prodint(event.times[event.times <= 1], A) Computation of the empirical survival function: sum(event.times > 1) / length(event.times) Now, we simulate censoring times following a uniform distribution. cens.times <- runif(100,0,5) Next, we take the minimum of the event times and the censoring times. obs.times <- pmin(event.times, cens.times) and with their help we create an event indicator event.times <= cens.times Survival probability estimate: fit.surv <- survfit(Surv(obs.times, event.times <= cens.times) ~ 1) with product integration prodint(obs.times[obs.times<=1], A) estimate at time 1 using survfit S <- fit.surv\$surv S[fit.surv\$time <= 1][length(S[fit.surv\$time <= 1])] Figure 2.3: nt counting process nt <- cumsum(fit.surv\$n.event) Function that computes the compensator integral2 <- function(x) { tmp <- rep(0,length(x)) for(i in 1:length(x)){ if(x[i]<=min(fit.surv\$time)){ tmp[i] <- x[i] * fit.surv\$n.risk } else{ if(x[i]>=max(fit.surv\$time)){ tmp[i] <- sum(diff(c(0,fit.surv\$time)) * fit.surv\$n.risk) } else{ bla <- diff(c(0,fit.surv\$time)[c(0,fit.surv\$time) < x[i]]) tmp[i] <- sum(bla * fit.surv\$n.risk[1:length(bla)]) + (x[i]-max(fit.surv\$time[fit.surv\$time
Director 