Librería

ggsurvfit

Datos de muestra

Las curvas de Kaplan-Meier muestran la probabilidad de supervivencia a lo largo del tiempo, por lo que son el gráfico más habitual en el análisis de supervivencia y en los ensayos clínicos. La curva desciende cada vez que ocurre un evento (por ejemplo, un fallecimiento), lo que le da su característica forma escalonada, y permite comparar la supervivencia de varios grupos.

En este tutorial vamos a utilizar el conjunto de datos lung del paquete survival, que contiene el tiempo de supervivencia de pacientes con cáncer de pulmón avanzado. Los datos necesitan una columna con el tiempo (time, en días), una columna con el estado (status, donde 1 significa censurado y 2 fallecido) y, opcionalmente, una variable de grupo, como sex, que convertimos en un factor con etiquetas descriptivas.

# install.packages("survival")
library(survival)

df <- lung
df$sex <- factor(df$sex, levels = c(1, 2),
                 labels = c("Hombre", "Mujer"))

Curva de Kaplan-Meier

La forma más sencilla de dibujar curvas de Kaplan-Meier con ggplot2 es el paquete ggsurvfit. Primero, estima la curva de supervivencia con survfit2, pasando una fórmula con el tiempo y el estado dentro de Surv, y luego pasa el resultado a ggsurvfit. Usa ~ 1 para estimar una única curva para todos los pacientes.

# install.packages("ggsurvfit")
library(ggsurvfit)

survfit2(Surv(time, status) ~ 1, data = df) |>
  ggsurvfit()

Curva de supervivencia de Kaplan-Meier en R con ggplot2

Ten en cuenta que survfit2 funciona igual que la función survfit del paquete survival, pero guarda información adicional que ggsurvfit utiliza para etiquetar el gráfico.

Curvas de Kaplan-Meier por grupo

Curvas de Kaplan-Meier por grupo en ggplot2

Para comparar la supervivencia de varios grupos pasa la variable de grupo a la parte derecha de la fórmula. Se creará una curva para cada grupo, con un color diferente y una leyenda.

survfit2(Surv(time, status) ~ sex, data = df) |>
  ggsurvfit()

Intervalos de confianza y marcas de censura

El paquete ggsurvfit proporciona funciones para añadir elementos al gráfico como si fueran capas de ggplot2. add_confidence_interval añade los intervalos de confianza de cada curva como un área sombreada y add_censor_mark marca las observaciones censuradas, esto es, los pacientes que salieron del estudio sin experimentar el evento.

survfit2(Surv(time, status) ~ sex, data = df) |>
  ggsurvfit() +
  add_confidence_interval() +
  add_censor_mark()

Curvas de Kaplan-Meier con intervalos de confianza y marcas de censura en ggplot2

Tabla de riesgo

La tabla de pacientes en riesgo, que se muestra debajo del gráfico, indica cuántos pacientes siguen en el estudio en cada momento. Añádela con add_risktable, que además permite elegir los estadísticos a mostrar con risktable_stats.

survfit2(Surv(time, status) ~ sex, data = df) |>
  ggsurvfit() +
  add_confidence_interval() +
  add_censor_mark() +
  add_risktable()

Curvas de Kaplan-Meier con la tabla de pacientes en riesgo en ggplot2

Mediana de supervivencia y p-valor

add_quantile dibuja las líneas hasta la mediana de supervivencia (el momento en el que la probabilidad de supervivencia es del 50%) y add_pvalue añade el p-valor del test log-rank, que compara la supervivencia de los grupos.

survfit2(Surv(time, status) ~ sex, data = df) |>
  ggsurvfit() +
  add_confidence_interval() +
  add_quantile(y_value = 0.5, linetype = "dotted") +
  add_pvalue(location = "annotation", x = 800)

Curvas de Kaplan-Meier con la mediana de supervivencia y el p-valor del test log-rank en ggplot2

Personalización adicional

Curvas de Kaplan-Meier personalizadas en ggplot2

Como la salida de ggsurvfit es un objeto de ggplot2 puedes personalizarla con las funciones habituales. Cambia los colores de las curvas con scale_color_manual y los de los intervalos de confianza con scale_fill_manual, muestra la supervivencia como porcentaje con scales::percent y cambia el tema y los títulos de los ejes.

survfit2(Surv(time, status) ~ sex, data = df) |>
  ggsurvfit(linewidth = 1) +
  add_confidence_interval() +
  add_censor_mark() +
  scale_color_manual(values = c("#264653", "#E76F51")) +
  scale_fill_manual(values = c("#264653", "#E76F51")) +
  scale_y_continuous(labels = scales::percent, limits = c(0, 1)) +
  theme_minimal() +
  theme(legend.position = "bottom") +
  labs(x = "Días", y = "Supervivencia global")

Curvas de Kaplan-Meier en R base

Si prefieres los gráficos de R base también puedes dibujar la salida de la función survfit del paquete survival con la función plot, personalizando los tipos de línea y los colores de cada grupo. Si necesitas mostrar los hazard ratios de un modelo de regresión de Cox puedes utilizar un forest plot.

fit <- survfit(Surv(time, status) ~ sex, data = df)

plot(fit, col = c("#264653", "#E76F51"), lwd = 2,
     xlab = "Días", ylab = "Supervivencia global")
legend("topright", legend = levels(df$sex),
       col = c("#264653", "#E76F51"), lwd = 2)
MASTER - STATISTICS DOT COM

Master Statistics

Aprende estadística desde lo básico hasta técnicas avanzadas, explicado con claridad

Ir al sitio
R PACKAGES IO

R Packages

Explora y descubre miles de paquetes, funciones y datasets de R

Ir al sitio

También te puede interesar