knitr::opts_chunk$set(echo = TRUE, warning = FALSE, message = FALSE,
                       fig.width = 7, fig.height = 4.5)

library(readxl)
library(dplyr)
library(ggplot2)
library(scales)
library(tidyr)

# --- Carga única de los datos para todo el documento ---
datos <- read_excel("Base de datos.xlsx", sheet = "Breast_Cancer")
names(datos) <- trimws(names(datos))

# Tema general para los gráficos del tablero
tema_dashboard <- theme_minimal(base_size = 12) +
  theme(plot.title = element_text(face = "bold"))

1. Descripción de los datos

Fuente de los datos

El conjunto de datos utilizado en este tablero corresponde a “Breast Cancer Dataset”, publicado en Kaggle por Reihane Namdari y construido a partir de información del SEER Program (Surveillance, Epidemiology, and End Results) del National Cancer Institute de Estados Unidos. El SEER recopila datos clínicos y demográficos de pacientes diagnosticados con cáncer en distintos registros regionales de EE. UU.

Muestra

  • Número de observaciones (pacientes): 4.024 registros.
  • Número de variables: 16 (una variable identifica el estado del paciente y las 15 restantes son características clínicas y demográficas).
  • Valores faltantes: prácticamente no hay datos perdidos; la única variable con valores faltantes es Grade, con 19 registros sin dato (0,47 % del total).
  • Todos los pacientes de la muestra corresponden a mujeres diagnosticadas con cáncer de mama infiltrante, con estadios T1-T4, N1-N3 y estadio general (6th Stage) IIA a IIIC.
# Dimensiones de la muestra
dim(datos)
## [1] 4024   16
# Vista general de la estructura de las variables
glimpse(datos)
## Rows: 4,024
## Columns: 16
## $ Age                      <dbl> 68, 50, 58, 58, 47, 51, 51, 40, 40, 69, 68, 4…
## $ Race                     <chr> "White", "White", "White", "White", "White", …
## $ `Marital Status`         <chr> "Married", "Married", "Divorced", "Married", …
## $ `T Stage`                <chr> "T1", "T2", "T3", "T1", "T2", "T1", "T1", "T2…
## $ `N Stage`                <chr> "N1", "N2", "N3", "N1", "N1", "N1", "N1", "N1…
## $ `6th Stage`              <chr> "IIA", "IIIA", "IIIC", "IIA", "IIB", "IIA", "…
## $ differentiate            <chr> "Poorly differentiated", "Moderately differen…
## $ Grade                    <dbl> 3, 2, 2, 3, 3, 2, 1, 2, 3, 1, 2, 3, 3, 3, 2, …
## $ `A Stage`                <chr> "Regional", "Regional", "Regional", "Regional…
## $ `Tumor Size`             <dbl> 4, 35, 63, 18, 41, 20, 8, 30, 103, 32, 13, 59…
## $ `Estrogen Status`        <chr> "Positive", "Positive", "Positive", "Positive…
## $ `Progesterone Status`    <chr> "Positive", "Positive", "Positive", "Positive…
## $ `Regional Node Examined` <dbl> 24, 14, 14, 2, 3, 18, 11, 9, 20, 21, 9, 11, 1…
## $ `Reginol Node Positive`  <dbl> 1, 5, 7, 1, 1, 2, 1, 1, 18, 12, 1, 3, 3, 7, 1…
## $ `Survival Months`        <dbl> 60, 62, 75, 84, 50, 89, 54, 14, 70, 92, 64, 9…
## $ Status                   <chr> "Alive", "Alive", "Alive", "Alive", "Alive", …

Descripción de las variables

# Variable Tipo Descripción Valores / rango
1 Age Numérica (entera) Edad del paciente en años al momento del diagnóstico 30 - 69 años (media ≈ 54)
2 Race Categórica Raza del paciente White, Black, Other
3 Marital Status Categórica Estado civil del paciente Married, Divorced, Single, Widowed, Separated
4 T Stage Categórica (ordinal) Estadio del tumor (tamaño/extensión local), clasificación TNM T1, T2, T3, T4
5 N Stage Categórica (ordinal) Estadio ganglionar (nódulos linfáticos afectados), clasificación TNM N1, N2, N3
6 6th Stage Categórica (ordinal) Estadio combinado del cáncer según la 6ª edición del AJCC IIA, IIB, IIIA, IIIB, IIIC
7 differentiate Categórica (ordinal) Grado de diferenciación del tejido tumoral Well differentiated, Moderately differentiated, Poorly differentiated, Undifferentiated
8 Grade Numérica / ordinal Grado histológico del tumor (versión numérica de differentiate) 1, 2, 3 (19 valores faltantes)
9 A Stage Categórica (binaria) Extensión anatómica del cáncer Regional, Distant
10 Tumor Size Numérica (entera) Tamaño del tumor en milímetros 1 - 140 mm (media ≈ 30,5)
11 Estrogen Status Categórica (binaria) Presencia de receptores de estrógeno en el tumor Positive, Negative
12 Progesterone Status Categórica (binaria) Presencia de receptores de progesterona en el tumor Positive, Negative
13 Regional Node Examined Numérica (entera) Número de ganglios linfáticos regionales examinados 1 - 61 (media ≈ 14,4)
14 Reginol Node Positive Numérica (entera) Número de ganglios linfáticos regionales positivos (con cáncer) 1 - 46 (media ≈ 4,2)
15 Survival Months Numérica (entera) Meses de supervivencia del paciente desde el diagnóstico hasta el fin del seguimiento 1 - 107 meses (media ≈ 71,3)
16 Status Categórica (binaria) — variable de interés/desenlace Estado vital del paciente al final del seguimiento Alive (3.408 = 84,7 %), Dead (616 = 15,3 %)

Nota: la variable Status se considera el desenlace principal del estudio (evento de interés: fallecimiento del paciente), mientras que el resto de variables corresponden a características clínicas, demográficas y patológicas que pueden asociarse con dicho desenlace.


2. Análisis univariado

En esta sección se describe la distribución individual de las variables numéricas y categóricas más relevantes del conjunto de datos Breast_Cancer (n = 4.024 pacientes).

2.1 Variables numéricas

vars_num <- c("Age", "Tumor Size", "Regional Node Examined",
              "Reginol Node Positive", "Survival Months")

resumen_num <- datos %>%
  summarise(across(all_of(vars_num),
                    list(media = ~mean(.x, na.rm = TRUE),
                         mediana = ~median(.x, na.rm = TRUE),
                         de = ~sd(.x, na.rm = TRUE),
                         min = ~min(.x, na.rm = TRUE),
                         max = ~max(.x, na.rm = TRUE))))

resumen_num
ggplot(datos, aes(x = Age)) +
  geom_histogram(binwidth = 3, fill = "red", color = "white") +
  labs(title = "Distribución de la edad de las pacientes",
       x = "Edad (años)", y = "Frecuencia") +
  tema_dashboard

ggplot(datos, aes(x = `Tumor Size`)) +
  geom_histogram(binwidth = 5, fill = "#e34a33", color = "white") +
  labs(title = "Distribución del tamaño del tumor",
       x = "Tamaño del tumor (mm)", y = "Frecuencia") +
  tema_dashboard

ggplot(datos, aes(x = `Survival Months`)) +
  geom_histogram(binwidth = 6, fill = "#31a354", color = "white") +
  labs(title = "Distribución de los meses de supervivencia",
       x = "Meses de supervivencia", y = "Frecuencia") +
  tema_dashboard

ggplot(datos, aes(x = `Reginol Node Positive`)) +
  geom_histogram(binwidth = 2, fill = "#756bb1", color = "white") +
  labs(title = "Distribución de ganglios regionales positivos",
       x = "N.º de ganglios positivos", y = "Frecuencia") +
  tema_dashboard

Interpretación:

  • La edad de las pacientes oscila entre 30 y 69 años, con una media de 54 años y una distribución relativamente simétrica (leve asimetría negativa), lo que indica que la mayoría de los casos se concentra entre los 47 y 61 años.
  • El tamaño del tumor presenta una fuerte asimetría positiva (la mayoría de los tumores son pequeños, entre 1 y 40 mm), con una media de 30,5 mm y una cola larga hacia tumores de mayor tamaño (hasta 140 mm), lo cual es típico en variables clínicas de este tipo.
  • Los meses de supervivencia muestran una distribución asimétrica hacia la izquierda (mediana de 73 meses, mayor que la media de 71,3), es decir, la mayoría de las pacientes tiene tiempos de seguimiento largos, con relativamente pocos casos de seguimiento corto.
  • El número de ganglios positivos es la variable más asimétrica (asimetría ≈ 2,7): la mayoría de las pacientes tiene 1 o 2 ganglios positivos, y solo unos pocos casos alcanzan valores altos (hasta 46), lo que sugiere la presencia de valores extremos (posibles casos de enfermedad más avanzada).

2.2 Variables categóricas

ggplot(datos, aes(x = Status, fill = Status)) +
  geom_bar() +
  geom_text(stat = "count", aes(label = percent(after_stat(count)/sum(after_stat(count)))),
            vjust = -0.4) +
  scale_fill_manual(values = c("Alive" = "#2c7fb8", "Dead" = "#de2d26")) +
  labs(title = "Estado vital de las pacientes", x = "Estado", y = "N.º de pacientes") +
  tema_dashboard +
  theme(legend.position = "none")

ggplot(datos, aes(x = reorder(Race, Race, function(x) -length(x)))) +
  geom_bar(fill = "#41ab5d") +
  labs(title = "Distribución por raza", x = "Raza", y = "N.º de pacientes") +
  tema_dashboard

ggplot(datos, aes(x = `T Stage`)) +
  geom_bar(fill = "#fd8d3c") +
  labs(title = "Distribución por estadio del tumor (T Stage)",
       x = "T Stage", y = "N.º de pacientes") +
  tema_dashboard

library(tidyr)
datos %>%
  select(`Estrogen Status`, `Progesterone Status`) %>%
  pivot_longer(everything(), names_to = "Receptor", values_to = "Estado") %>%
  ggplot(aes(x = Receptor, fill = Estado)) +
  geom_bar(position = "fill") +
  scale_y_continuous(labels = percent) +
  labs(title = "Estado de receptores hormonales",
       x = "", y = "Porcentaje de pacientes") +
  tema_dashboard

Interpretación:

  • El 84,7 % de las pacientes se encuentra viva (Status = Alive) al final del seguimiento y el 15,3 % falleció (Status = Dead), lo que refleja una base de datos con una tasa de mortalidad relativamente baja, típica de cáncer de mama detectado en estadios tempranos/regionales.
  • La mayoría de las pacientes son de raza blanca (84,8 %), seguidas de otras razas (8,0 %) y raza negra (7,2 %), por lo que cualquier conclusión basada en raza debe tomarse con cautela dado el desbalance de la muestra.
  • En cuanto al estadio del tumor (T Stage), predominan los estadios T2 (44,4 %) y T1 (39,8 %), mientras que los estadios más avanzados T3 (13,2 %) y T4 (2,5 %) son minoritarios, lo que indica que la mayoría de los diagnósticos se dieron en etapas relativamente tempranas.
  • Respecto a los receptores hormonales, el 93,3 % de los tumores son positivos para receptores de estrógeno y el 82,7 % para receptores de progesterona, lo que sugiere que la mayoría de los tumores en esta muestra son hormono-dependientes (relevante para el pronóstico y el tipo de tratamiento).

3. Análisis bivariado

En esta sección se exploran relaciones entre pares de variables: correlaciones de Pearson entre variables numéricas y pruebas chi-cuadrado de independencia entre variables categóricas, acompañadas de gráficos bivariados.

library(reshape2)  # para dar formato largo a la matriz de correlación

3.1 Correlación de Pearson (variables numéricas)

vars_num <- c("Age", "Tumor Size", "Regional Node Examined",
              "Reginol Node Positive", "Survival Months")

matriz_cor <- cor(datos[vars_num], method = "pearson", use = "complete.obs")
matriz_cor_larga <- melt(matriz_cor)

ggplot(matriz_cor_larga, aes(x = Var1, y = Var2, fill = value)) +
  geom_tile(color = "white") +
  geom_text(aes(label = round(value, 2)), size = 3.5) +
  scale_fill_gradient2(low = "#2166ac", mid = "white", high = "#b2182b",
                        midpoint = 0, limits = c(-1, 1), name = "r de Pearson") +
  labs(title = "Matriz de correlación de Pearson", x = "", y = "") +
  tema_dashboard +
  theme(axis.text.x = element_text(angle = 40, hjust = 1))

ggplot(datos, aes(x = `Regional Node Examined`, y = `Reginol Node Positive`)) +
  geom_jitter(alpha = 0.3, color = "#2c7fb8") +
  geom_smooth(method = "lm", color = "#de2d26", se = FALSE) +
  labs(title = "Ganglios examinados vs. ganglios positivos",
       x = "N.º de ganglios regionales examinados",
       y = "N.º de ganglios regionales positivos") +
  tema_dashboard

cor.test(datos$`Regional Node Examined`, datos$`Reginol Node Positive`,
          method = "pearson")
## 
##  Pearson's product-moment correlation
## 
## data:  datos$`Regional Node Examined` and datos$`Reginol Node Positive`
## t = 28.64, df = 4022, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.3855844 0.4369221
## sample estimates:
##       cor 
## 0.4115797
cor.test(datos$`Tumor Size`, datos$`Reginol Node Positive`, method = "pearson")
## 
##  Pearson's product-moment correlation
## 
## data:  datos$`Tumor Size` and datos$`Reginol Node Positive`
## t = 15.84, df = 4022, p-value < 2.2e-16
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  0.2130178 0.2711901
## sample estimates:
##       cor 
## 0.2423217
cor.test(datos$`Tumor Size`, datos$`Survival Months`, method = "pearson")
## 
##  Pearson's product-moment correlation
## 
## data:  datos$`Tumor Size` and datos$`Survival Months`
## t = -5.5321, df = 4022, p-value = 3.365e-08
## alternative hypothesis: true correlation is not equal to 0
## 95 percent confidence interval:
##  -0.11748466 -0.05615314
## sample estimates:
##         cor 
## -0.08690124

Interpretación:

  • La correlación más fuerte se observa entre el número de ganglios examinados y el número de ganglios positivos (r = 0,412; p < 0,001): a mayor número de ganglios revisados, mayor es la probabilidad de encontrar ganglios afectados, lo cual es esperable desde el punto de vista clínico.
  • El tamaño del tumor también se correlaciona de forma positiva y significativa con el número de ganglios positivos (r = 0,242; p < 0,001), sugiriendo que tumores más grandes tienden a asociarse con mayor compromiso ganglionar.
  • El tamaño del tumor se correlaciona de forma negativa y débil con los meses de supervivencia (r = -0,087; p < 0,001): tumores más grandes se asocian levemente con menor tiempo de supervivencia, aunque el efecto por sí solo es pequeño.
  • La edad no muestra correlaciones relevantes con el resto de variables numéricas (todas las r están por debajo de 0,08 en valor absoluto), indicando que la edad no es, de forma aislada, un buen predictor lineal del tamaño del tumor, los ganglios afectados o la supervivencia en esta muestra.
  • En general, las correlaciones observadas son de magnitud baja a moderada, lo que sugiere que ninguna variable numérica por sí sola explica gran parte del comportamiento de las demás; esto es consistente con la naturaleza multifactorial del pronóstico en cáncer de mama.

3.2 Pruebas chi-cuadrado (variables categóricas)

tabla1 <- table(datos$Status, datos$`Estrogen Status`)
tabla1
##        
##         Negative Positive
##   Alive      161     3247
##   Dead       108      508
chisq.test(tabla1)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  tabla1
## X-squared = 135.16, df = 1, p-value < 2.2e-16
tabla2 <- table(datos$Status, datos$`T Stage`)
chisq.test(tabla2)
## 
##  Pearson's Chi-squared test
## 
## data:  tabla2
## X-squared = 103.48, df = 3, p-value < 2.2e-16
tabla3 <- table(datos$Status, datos$`N Stage`)
chisq.test(tabla3)
## 
##  Pearson's Chi-squared test
## 
## data:  tabla3
## X-squared = 269.93, df = 2, p-value < 2.2e-16
tabla4 <- table(datos$`Estrogen Status`, datos$`Progesterone Status`)
chisq.test(tabla4)
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  tabla4
## X-squared = 1054.8, df = 1, p-value < 2.2e-16
ggplot(datos, aes(x = `Estrogen Status`, fill = Status)) +
  geom_bar(position = "fill") +
  scale_y_continuous(labels = scales::percent) +
  scale_fill_manual(values = c("Alive" = "#2c7fb8", "Dead" = "#de2d26")) +
  labs(title = "Estado vital según receptor de estrógeno",
       x = "Estado del receptor de estrógeno", y = "Porcentaje de pacientes") +
  tema_dashboard

ggplot(datos, aes(x = `N Stage`, fill = Status)) +
  geom_bar(position = "fill") +
  scale_y_continuous(labels = scales::percent) +
  scale_fill_manual(values = c("Alive" = "#2c7fb8", "Dead" = "#de2d26")) +
  labs(title = "Estado vital según estadio ganglionar (N Stage)",
       x = "N Stage", y = "Porcentaje de pacientes") +
  tema_dashboard

Interpretación:

  • Existe una asociación estadísticamente significativa entre Status y Estrogen Status (χ² = 135,16; g.l. = 1; p < 0,001): las pacientes con receptor de estrógeno negativo presentan una proporción de fallecimiento notablemente mayor que aquellas con receptor positivo, aunque la fuerza de la asociación (V de Cramér ≈ 0,18) es moderada-baja.
  • Status también está significativamente asociado con el estadio del tumor (T Stage) (χ² = 103,48; p < 0,001) y, de forma más marcada, con el estadio ganglionar (N Stage) (χ² = 269,93; p < 0,001; V de Cramér ≈ 0,26), siendo esta última la asociación más fuerte entre las variables categóricas analizadas: a mayor estadio ganglionar, mayor proporción de pacientes fallecidas.
  • Los receptores de estrógeno y progesterona están fuertemente asociados entre sí (χ² = 1.054,84; p < 0,001; V de Cramér ≈ 0,51): la gran mayoría de los tumores con receptor de estrógeno positivo también son positivos para progesterona, lo cual es consistente con la biología conocida de los tumores hormono-dependientes.
  • En conjunto, estos resultados sugieren que el estadio ganglionar y el estado de los receptores hormonales son las variables categóricas más relevantes para explicar diferencias en el estado vital de las pacientes, más que variables demográficas como raza o estado civil (que también resultaron significativas, pero con asociaciones muy débiles, V de Cramér < 0,10).

3.3 Gráficos bivariados adicionales (numérica vs. categórica)

ggplot(datos, aes(x = Status, y = `Survival Months`, fill = Status)) +
  geom_boxplot() +
  scale_fill_manual(values = c("Alive" = "#2c7fb8", "Dead" = "#de2d26")) +
  labs(title = "Meses de supervivencia según estado vital",
       x = "Estado", y = "Meses de supervivencia") +
  tema_dashboard +
  theme(legend.position = "none")

ggplot(datos, aes(x = `T Stage`, y = `Tumor Size`, fill = `T Stage`)) +
  geom_boxplot() +
  labs(title = "Tamaño del tumor según estadio T",
       x = "T Stage", y = "Tamaño del tumor (mm)") +
  tema_dashboard +
  theme(legend.position = "none")

Interpretación:

  • Las pacientes que fallecieron (Dead) muestran una mediana de supervivencia mucho menor (44 meses) que las que continúan vivas (Alive, mediana de 77 meses), con mayor dispersión en el grupo de fallecidas, lo cual es coherente con la definición de la variable.
  • El tamaño del tumor aumenta progresivamente con el estadio T: la mediana pasa de 15 mm en T1 a 30 mm en T2, 65 mm en T3 y 52,5 mm en T4, confirmando que la clasificación T Stage refleja adecuadamente el tamaño físico del tumor (con una leve excepción en T4, donde el estadio ya no depende solo del tamaño sino también de la invasión a estructuras cercanas).

4. Conclusiones y recomendaciones

Conclusiones

  1. Perfil general de la muestra. La base de datos incluye 4.024 pacientes con cáncer de mama infiltrante, en su mayoría mujeres de raza blanca (84,8 %), casadas (65,7 %), con una edad promedio de 54 años. La mayoría de los diagnósticos corresponde a estadios tempranos del tumor (T1-T2: 84,2 % de los casos) y estadio ganglionar N1 (67,9 %), lo que indica que la base recoge predominantemente casos detectados en etapas relativamente favorables.

  2. Baja mortalidad relativa. El 84,7 % de las pacientes seguía viva (Alive) al final del periodo de seguimiento y solo el 15,3 % había fallecido (Dead), con una mediana de supervivencia de 73 meses para el total de la muestra (77 meses en el grupo Alive vs. 44 meses en el grupo Dead).

  3. Los receptores hormonales son un factor relevante. El 93,3 % de los tumores fueron positivos para receptor de estrógeno y el 82,7 % para receptor de progesterona; ambos indicadores están fuertemente asociados entre sí (V de Cramér ≈ 0,51) y, a su vez, significativamente asociados con el estado vital (Status), con menor mortalidad en pacientes con receptores positivos. Esto es coherente con la evidencia clínica de que los tumores hormono-dependientes suelen responder mejor a la terapia hormonal.

  4. El estadio ganglionar (N Stage) es la variable categórica más asociada al desenlace. La prueba chi-cuadrado mostró la asociación más fuerte entre todas las variables categóricas analizadas (χ² = 269,93; p < 0,001; V de Cramér ≈ 0,26), confirmando que a mayor compromiso ganglionar, mayor proporción de pacientes fallecidas. El estadio del tumor (T Stage) también resultó significativo, aunque con una asociación algo más débil.

  5. Las correlaciones numéricas son de magnitud baja a moderada. La relación más fuerte se dio entre el número de ganglios examinados y el número de ganglios positivos (r = 0,412), seguida por tamaño del tumor y ganglios positivos (r = 0,242). La edad no mostró correlaciones relevantes con ninguna otra variable numérica, lo que sugiere que, en esta muestra, la edad por sí sola no es un buen predictor lineal del pronóstico.

  6. El tamaño del tumor crece de forma consistente con el estadio T, validando la coherencia interna de la variable T Stage como reflejo directo del tamaño físico del tumor, salvo en el estadio T4, donde otros criterios (invasión local) también entran en juego.

  7. Variables demográficas con asociación débil. Raza y estado civil mostraron asociaciones estadísticamente significativas con Status, pero de magnitud muy baja (V de Cramér < 0,10 en ambos casos), por lo que su valor predictivo individual sobre el desenlace es limitado en comparación con variables clínicas como el estadio ganglionar o los receptores hormonales.