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.