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 datosdata(lung), library(survival),
library(survminer)Se escoge el set de datos Lung
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.
# Cargar datos
data("lung", package = "survival")
df <- lung # Guardamos los datos en una variable
# 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 |
# 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
# 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
# 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
# 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")
| Variable | HR | CI_Lower | CI_Upper | p_value |
|---|---|---|---|---|
| Sexo (Mujer vs. Hombre) | 0.59 | 0.42 | 0.82 | 0.0015 |
# 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")
| 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 |
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.