## ---- include = FALSE--------------------------------------------------------- knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ## ----setup-------------------------------------------------------------------- # install.packages("CondiS", dependencies = c("survival", "caret")) library(CondiS) ## ----message=FALSE, warning=FALSE, fig.height=5, fig.width=7------------------ library(kernlab) library(purrr) library(tidyverse) library(survival) data(cancer, package="survival") status <- pmax(rotterdam$recur, rotterdam$death) rfstime <- with(rotterdam, ifelse(recur==1, rtime, dtime)) rotterdam <- rotterdam[2:11] rotterdam$status = status rotterdam$rfstime = rfstime fit <- survfit(Surv(rfstime, status) ~ 1, data = rotterdam) # Obtain the imputed survival time pred_time = CondiS(rfstime, status) rotterdam$pred_time = pred_time rotterdam$status2 = rep(1,length(status)) fit_2 <- survfit(Surv(pred_time, status2) ~ 1, data = rotterdam) # Visualization library(survminer) combined <- list(Censored = fit, CondiS = fit_2) ggsurvplot( combined, data = rotterdam, combine = TRUE, censor = TRUE, risk.table = TRUE, palette = "jco" ) ## ----------------------------------------------------------------------------- covariates = rotterdam[,1:10] # Update the imputed survival time pred_time_2 = CondiS_X(pred_time, status, covariates) rotterdam$pred_time_2 = pred_time_2 ## ----------------------------------------------------------------------------- # Pre-process the data library(caret) preproc <- preProcess(rotterdam[,1:10], method = c('center', 'scale')) trainPreProc <- predict(preproc, rotterdam[,1:10]) train_control <- trainControl(method = "repeatedcv") # Train-test split set.seed(42) smp_size <- floor(0.75 * nrow(rotterdam)) train_ind <- sample(seq_len(nrow(rotterdam)), size = smp_size) train <- rotterdam[train_ind, ] test <- rotterdam[-train_ind, ] fit_svm = train( pred_time ~ .-status-status2-rfstime-pred_time, data = train, method = "svmRadial", trControl = train_control, na.action = na.omit ) pred_svm = predict(fit_svm, test) # Mean absolute error (MAE) calc_MAE <- function(actual,predicted) { error <- actual - predicted mean(abs(error)) } ## In the testing set: # The MAE of CondiS-imputed survival time and SVM-predicted survival time is: calc_MAE(test$pred_time,pred_svm) # The MAE of the CondiS-X-imputed survival time and the SVM-predicted survival time is: calc_MAE(test$pred_time_2,pred_svm)