Sys.setlocale("LC_ALL", "es_ES.UTF-8")
[1] "LC_COLLATE=es_ES.UTF-8;LC_CTYPE=es_ES.UTF-8;LC_MONETARY=es_ES.UTF-8;LC_NUMERIC=C;LC_TIME=es_ES.UTF-8"

El objetivo de esta actividad es la aplicación práctica de los conceptos explicados durante la semana 26 del Máster..

La actividad consiste en elegir solo 1 de los siguientes conjuntos de datos, realizar un ANÁLISIS DE SUPERVIVENCIA y comentar los resultados.

  • data(melanom), library(ISWR) # contiene la base de datos
  • data(lung), library(survival), library(survminer)

Se escoge el set de datos Lung

Análisis de Supervivencia: Modelos de Cox y Kaplan-Meier

Este documento analiza la supervivencia de pacientes con cáncer de pulmón avanzado utilizando el dataset lung del paquete survival. Se presentan modelos de Kaplan-Meier y Cox, con visualizaciones y explicaciones detalladas.

Carga de paquetes y datos

# Cargar datos
data("lung", package = "survival")
df <- lung # Guardamos los datos en una variable

Volver al inicio

Descripción del conjunto de datos

# Mostrar primeras filas con formato atractivo
head(df) %>%
kable(format = "html") %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE, position = "center", font_size = 12)
inst time status age sex ph.ecog ph.karno pat.karno meal.cal wt.loss
3 306 2 74 1 1 90 100 1175 NA
3 455 2 68 1 0 90 90 1225 15
3 1010 1 56 1 0 90 90 NA 15
5 210 2 57 1 1 90 60 1150 11
1 883 2 60 1 0 100 90 NA 0
12 1022 1 74 1 1 50 80 513 0

Preprocesamiento de datos

# Eliminamos la variable inst (Código institucional, irrelevante para el análisis)
df$inst <- NULL

# Convertimos variables categóricas
category_cols <- c("sex", "ph.ecog")
for (col in category_cols) {
  df[[col]] <- as.factor(df[[col]])
}
# Modificamos la variable status (1: censurado -> 0, 2: fallecido -> 1)
df$status <- as.numeric(recode(df$status, '1' = "0", '2' = "1"))

# Convertimos el tiempo a meses
df$time_en_meses <- df$time / 30

Supervivencia Global con Kaplan-Meier

# Creamos el objeto de supervivencia
surv_obj <- Surv(time = df$time_en_meses, event = df$status)

# Modelo de Kaplan-Meier
fit <- survfit(surv_obj ~ 1, data = df)

# Gráfico de supervivencia
g <- ggsurvplot(fit,
                data = df,
                conf.int = TRUE,
                pval = TRUE,
                ggtheme = theme_minimal(),
                palette = "Dark2",
                title = "Curva de Supervivencia Global",
                xlab = "Tiempo (meses)",
                ylab = "Probabilidad de Supervivencia")

g

Supervivencia por Sexo

# Ajustamos modelo de Kaplan-Meier por sexo
fit_sex <- survfit(surv_obj ~ sex, data = df)

# Gráfico de supervivencia por sexo
g_sex <- ggsurvplot(fit_sex,
                    data = df,
                    pval = TRUE,
                    conf.int = TRUE,
                    legend.title = "Sexo",
                    legend.labs = c("Hombre", "Mujer"),
                    ggtheme = theme_minimal(),
                    palette = c("#E69F00", "#56B4E9"),
                    title = "Supervivencia por Sexo",
                    xlab = "Tiempo (meses)",
                    ylab = "Probabilidad de Supervivencia")

g_sex

Modelos de Cox

Regresion de Cox Univariable

# Modelo de Cox univariable para sexo
cox_model <- coxph(surv_obj ~ sex, data = df)
summary_cox <- summary(cox_model)

# Extraer resultados relevantes
cox_results <- data.frame(
  Variable = "Sexo (Mujer vs. Hombre)",
  HR = round(summary_cox$coefficients[, "exp(coef)"], 2),
  CI_Lower = round(summary_cox$conf.int[, "lower .95"], 2),
  CI_Upper = round(summary_cox$conf.int[, "upper .95"], 2),
  p_value = round(summary_cox$coefficients[, "Pr(>|z|)"], 4)
)

# Presentar resultados en tabla atractiva
cox_results %>% kable(format = "html", caption = "Resultados del Modelo de Cox Univariable") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), font_size = 12) %>%
  column_spec(1, bold = TRUE, color = "#E69F00")
Resultados del Modelo de Cox Univariable
Variable HR CI_Lower CI_Upper p_value
Sexo (Mujer vs. Hombre) 0.59 0.42 0.82 0.0015

Interpretacion de los Resultados

  • HR = 0.59: Las mujeres tienen un 41% menos riesgo de fallecer en comparación con los hombres.
  • Intervalo de confianza (0.42 - 0.82): Indica precisión de la estimación.
  • p-valor = 0.0015: Sugiere una diferencia estadísticamente significativa en la supervivencia entre sexos.

Regresión de Cox Multivariable

# Modelo de Cox con múltiples covariables
cox_multivar <- coxph(surv_obj ~ age + sex + ph.karno + ph.ecog + wt.loss, data = df)
sum_cox_multi <- summary(cox_multivar)

# Extraer resuitados clave
cox_multivar_results <- data.frame(
  Variable = rownames(sum_cox_multi$coefficients),
  HR = round(sum_cox_multi$coefficients[, "exp(coef)"], 2),
  CI_Lower = round(sum_cox_multi$conf.int[, "lower .95"], 2),
  CI_Upper = round(sum_cox_multi$conf.int[, "upper .95"], 2),
  p_value = round(sum_cox_multi$coefficients[, "Pr(>|z|)"], 4)
)

# Presentar tabla atractiva
cox_multivar_results %>% kable(format = "html", caption = "Resultados del Modelo de Cox Multivariable") %>%
                                 kable_styling(bootstrap_options = c("striped", "hover"), font_size = 12) %>%
                                 column_spec(1, bold = TRUE, color = "#56B4E9")
Resultados del Modelo de Cox Multivariable
Variable HR CI_Lower CI_Upper p_value
age age 1.01 1.00 1.03 0.1318
sex2 sex2 0.54 0.38 0.76 0.0005
ph.karno ph.karno 1.02 1.00 1.04 0.1262
ph.ecog1 ph.ecog1 1.96 1.20 3.19 0.0067
ph.ecog2 ph.ecog2 4.29 2.01 9.16 0.0002
ph.ecog3 ph.ecog3 14.74 1.72 126.05 0.0140
wt.loss wt.loss 0.99 0.98 1.00 0.1628

Interpretación del Modelo Multivariable

  • Edad (HR > 1): Aumento de edad se asocia con mayor riesgo de fallecimiento.
  • Sex (HR < 1): Las mujeres presentan menor riesgo que los hombres.
  • Estado funcional (ph.karno y ph.ecog): Factores críticos en la supervivencia

Conclusión

El análisis de supervivencia muestra diferencias significativas por sexo y otros factores. La regresión de Cox multivariable confirma la importancia de edad, estado funcional y pérdida de peso en la predicción de la supervivencia en pacientes con cáncer de pulmón avanzado.

Volver al inicio