3.1 Fitting a Survival Model to Simulated Data

This section details how the language for statistical programming ’R’ (R Development Core Team 2011) can be used to fit a Cox proportional hazards model to simulated data.

The following Rscript code was used to generate the results presented in Section 2.2.4:

  #!/usr/bin/Rscript
  library(survival)
  
  # Set parameter values
  n_components <- 1000
  n_hours_observed <- 45
  failure_rate <- 1/60
  a1 <- 0.05
  a2 <- 0.1
  
  # Generate simulated data
  observations <- matrix(0,n_components*n_hours_observed,5)
  colnames(observations) <- c(start’,stop’,z1’,z2’,failure’)
  row <- 0
  for (c in 1:n_components) {
      for (h in 1:n_hours_observed) {
       row <- row+1
       start <- h-1
   stop <- h
   z1 <- abs(rnorm(1,0,10))
   z2 <- runif(1,0,5)
   if (failure_rate*exp(a1*z1+a2*z2) >= runif(1)) {
      # failure occured
      observations[row,] = c(start,stop,z1,z2,1)
      break
   } else {
      observations[row,] = c(start,stop,z1,z2,0)
   }
      }
  }
  observations <- as.data.frame(observations)
  
  # Fit a Cox proportional hazards model to the data
  fitted_model <- coxph(Surv(start,stop,failure) ~ z1 + z2,
                          data=observations[1:row,])
  
  # Print summary of fitted model
  summary(fitted_model)
  
  # Create a data frame with covariate values to use when
  # plotting the estimated survival function
  attach(observations)
  observations.eliminated_covariates <- data.frame(z1=0,z2=0)
  detach()
  
  # Plot the survival function
  png(filename="data_fitting_example.png",width=800,height=600)
  plot(survfit(fitted_model, newdata=observations.eliminated_covariates),
       xlab="Hours of observation",
       ylab="Proportion not failed")
  dev.off()