Learn R Programming

⚠️There's a newer version (0.4.9) of this package.Take me there.

survminer: Survival Analysis and Visualization

The survminer R package provides functions for facilitating survival analysis and visualization. The current version contains three main functions including:

  • ggsurvplot(): Draws survival curves with the 'number at risk' table.

  • ggcoxzph(): Graphical test of proportional hazards.

  • ggcoxfunctional(): Displays graphs of continuous explanatory variable against martingale residuals of null cox proportional hazards model. It helps to properly choose the functional form of continuous variable in cox model.

Find out more at http://www.sthda.com/english/rpkgs/survminer/, and check out the documentation and usage examples of each of the functions in survminer package.

Installation and loading

Install from CRAN as follow:

install.packages("survminer")

Or, install the latest version from GitHub:

# Install
if(!require(devtools)) install.packages("devtools")
devtools::install_github("kassambara/survminer", build_vignettes = FALSE)

Load survminer:

library("survminer")
# Loading required package: ggplot2

ggsurvplot: Drawing survival curves

Fitting survival curves

require("survival")
# Loading required package: survival
fit <- survfit(Surv(time, status) ~ sex, data = lung)

Basic plots

ggsurvplot(fit)

Customized survival curves

ggsurvplot(fit,  size = 1,  # change line size
           palette = c("#E7B800", "#2E9FDF"), # custom color palettes
           conf.int = TRUE, # Add confidence interval
           pval = TRUE, # Add p-value
           risk.table = TRUE, # Add risk table
           risk.table.col = "strata", # Risk table color by groups
           legend.labs = c("Male", "Female"), # Change legend labels
           risk.table.height = 0.25, # Useful to change when you have multiple groups
           ggtheme = theme_bw() # Change ggplot2 theme
           )

Note that, additional arguments are available to customize the main title, axis labels, the font style, axis limits, legends and the number at risk table.

More customized survival curves

Focus on xlim and break.by.time parameters which do not change the calculations of estimates of survival surves. Also note risk.table.y.text.col = TRUE and risk.table.y.text = FALSE that provide bars instead of names in text annotations of the legend of risk table.

ggsurvplot(
   fit,                     # survfit object with calculated statistics.
   risk.table = TRUE,       # show risk table.
   pval = TRUE,             # show p-value of log-rank test.
   conf.int = TRUE,         # show confidence intervals for 
                            # point estimaes of survival curves.
   xlim = c(0,500),         # present narrower X axis, but not affect
                            # survival estimates.
   xlab = "Time in days",   # customize X axis label.
   break.time.by = 100,     # break X axis in time intervals by 500.
   ggtheme = theme_light(), # customize plot and risk table with a theme.
 risk.table.y.text.col = T, # colour risk table text annotations.
  risk.table.y.text = FALSE # show bars instead of names in text annotations
                            # in legend of risk table
)

Uber customized survival curves

ggsurvplot(
   fit,                     # survfit object with calculated statistics.
   risk.table = TRUE,       # show risk table.
   pval = TRUE,             # show p-value of log-rank test.
   conf.int = TRUE,         # show confidence intervals for 
                            # point estimaes of survival curves.
   xlim = c(0,500),         # present narrower X axis, but not affect
                            # survival estimates.
   xlab = "Time in days",   # customize X axis label.
   break.time.by = 100,     # break X axis in time intervals by 500.
   ggtheme = theme_light(), # customize plot and risk table with a theme.
  risk.table.y.text.col = T,# colour risk table text annotations.
  risk.table.y.text = FALSE,# show bars instead of names in text annotations
                            # in legend of risk table.
  ncensor.plot = TRUE,      # plot the number of censored subjects at time t
  conf.int.style = "step",  # customize style of confidence intervals
  surv.median.line = "hv",  # add the median survival pointer.
  legend.labs = 
    c("Male", "Female"),    # change legend labels.
  palette = 
    c("#E7B800", "#2E9FDF") # custom color palettes.
)

Blog posts

Copy Link

Version

Install

install.packages('survminer')

Monthly Downloads

46,429

Version

0.2.4

License

GPL-2

Maintainer

Alboukadel Kassambara

Last Published

December 11th, 2016

Functions in survminer (0.2.4)

surv_cutpoint

Determine the Optimal Cutpoint for Continuous Variables
ggcoxzph

Graphical Test of Proportional Hazards with ggplot2
theme_classic2

ggplot2 classic theme with axis lines
surv_summary

Nice Summary of a Survival Curve
ggcoxfunctional

Functional Form of Continuous Variable in Cox Proportional Hazards Model
ggsurvplot

Drawing Survival Curves Using ggplot2
ggcoxdiagnostics

Diagnostic Plots for Cox Proportional Hazards Model with ggplot2