1. Introducción

1.1 Objetivo

“Desarrollar un índice cuantitativo de riesgo de malignidad utilizando Análisis de Componentes Principales (PCA) sobre características nucleares de células mamarias, donde valores altos del índice indiquen mayor probabilidad de cáncer maligno.”

Los componentes clave del análisis son:

  • Variables activas: 30 características numéricas derivadas de imágenes digitalizadas (medidas de media, error estándar y “peores valores” de radio, textura, perímetro, etc.).
  • Variable ilustrativa: Diagnóstico patológico (Benigno/Maligno) para contextualizar los resultados.
  • Métrica de riesgo: Primera componente principal (Dim1) del PCA.

1.2 Datos

El análisis emplea el dataset breastcancer, que contiene:

  • Origen: Mediciones de núcleos celulares en aspiraciones con aguja fina (FNA).
  • Variables clave:
    • Morphométricas: Tamaño y forma de núcleos (radio, área, perímetro).
    • Texturales: Uniformidad de patrones celulares (textura, suavidad).
    • Estructurales: Complejidad de bordes (concavidades, puntos cóncavos).

2. Métodos

2.1 Preprocesamiento

2.1.1 Carga de datos y limpieza

El proceso de preparación de datos inició con la carga del archivo clínico-morfológico en formato Excel, el cual contenía mediciones nucleares de pacientes con sospecha de cáncer de mama. Siguiendo las buenas prácticas de análisis estadístico, se realizaron las siguientes acciones:

  • Exclusión de variables no analíticas: Se eliminó la columna id por ser un identificador sin relevancia estadística.
  • Transformación de variables cualitativas: La variable diagnosis se convirtió a factor para permitir su uso como variable suplementaria en análisis posteriores.
datos = read_excel("breastcancer.xlsx")  %>%
  select(-"id") %>% 
  mutate(diagnosis = as.factor(diagnosis))

2.1.2 Estandarización

Para garantizar la comparabilidad entre las 30 características morfométricas medidas en diferentes escalas (micrómetros, unidades de textura, índices adimensionales), se aplicó estandarización Z-score. Este procedimiento:

  • Centró cada variable en cero (media = 0).
  • Normalizó la dispersión (desviación estándar = 1).
  • Preservó la estructura original de correlaciones.

La ecuación aplicada fue:

\[ z = \frac{x - \mu}{\sigma} \]

donde \(x\) representa cada valor observado, \(\mu\) la media muestral y \(\sigma\) la desviación estándar.

datos_escalados = datos %>% 
  select(-diagnosis) %>% 
  scale() %>% 
  as_tibble() %>% 
  add_column(diagnosis = datos$diagnosis)

2.2 Análisis PCA

El Análisis de Componentes Principales (PCA) se implementó para reducir la dimensionalidad del conjunto de datos y construir un índice de riesgo cuantitativo. El procedimiento fue el siguiente:

  • Configuración del PCA:
    • Variables activas: 30 características morfométricas estandarizadas.
    • Variable suplementaria: diagnosis (Benigno/Maligno) para contextualizar resultados.
    • Algoritmo: Descomposición espectral de la matriz de correlación.
pca_result = PCA( datos_escalados[,-31], graph = FALSE)

# Extracción de eigenvalues
eigenvals = get_eigenvalue(pca_result)

3. Resultados

3.1 Varianza Explicada

Se realiza el cálculo de los valores propios, porcentaje de varianza y la varianza acumulada para los primeros 10 componentes.

# Tabla de eigenvalues y varianza
var_explicada = data.frame(
  Dimension = paste0("Dim.", 1:10),
  Eigenvalue = pca_result$eig[1:10, 1],
  Varianza_Porcentual = pca_result$eig[1:10, 2],
  Varianza_Acumulada = pca_result$eig[1:10, 3]
)

kable(var_explicada, caption = "Varianza explicada por los primeros 10 componentes") %>%
  kable_styling(bootstrap_options = "striped", full_width = FALSE)
Varianza explicada por los primeros 10 componentes
Dimension Eigenvalue Varianza_Porcentual Varianza_Acumulada
comp 1 Dim.1 13.2816077 44.272026 44.27203
comp 2 Dim.2 5.6913546 18.971182 63.24321
comp 3 Dim.3 2.8179490 9.393163 72.63637
comp 4 Dim.4 1.9806405 6.602135 79.23851
comp 5 Dim.5 1.6487305 5.495768 84.73427
comp 6 Dim.6 1.2073566 4.024522 88.75880
comp 7 Dim.7 0.6752201 2.250734 91.00953
comp 8 Dim.8 0.4766171 1.588724 92.59825
comp 9 Dim.9 0.4168948 1.389649 93.98790
comp 10 Dim.10 0.3506935 1.168978 95.15688
# Gráfico de sedimentación (Scree plot)
fviz_eig(pca_result, addlabels = TRUE, ylim = c(0, 50), 
         title = "Scree Plot - Varianza explicada por cada componente")

El análisis de varianza explicada reveló los siguientes hallazgos clave:

  • Seis componentes principales cumplieron con el criterio de Kaiser (eigenvalue > 1), explicando colectivamente el 88.76% de la varianza total del conjunto de datos. Esta alta proporción de varianza capturada indica que estos componentes representan adecuadamente la estructura subyacente de los datos.

  • El primer componente principal (Dim1) demostró una contribución excepcional, explicando por sí solo 44.27% de la varianza total. Esta dominancia sugiere que Dim1 captura la dimensión más importante de variabilidad en las características nucleares, muy probablemente asociada con los aspectos morfológicos más relevantes para la diferenciación entre tumores benignos y malignos.

  • El análisis del scree plot mostró un punto de inflexión claro después del segundo componente, indicando que:

    • Dim1 y Dim2 son componentes esenciales que explican el 63.24% de la varianza acumulada.

    • Los componentes subsiguientes (del 3 al 6) aportan información complementaria pero con rendimientos decrecientes.

3.2 Contribución de Variables

En este apartado se analizan las variables que más contribuyen a la formación de los componentes principales identificados en el PCA. Este análisis es fundamental para comprender qué características morfológicas de las células son más relevantes para diferenciar entre tumores benignos y malignos.

# Variables con mayor contribución a Dim1
contrib_dim1 = fviz_contrib(pca_result, choice = "var", axes = 1, top = 10)

# Variables con mayor contribución a Dim2
contrib_dim2 = fviz_contrib(pca_result, choice = "var", axes = 2, top = 10)


grid.arrange(contrib_dim1, contrib_dim2, ncol = 2)

3.2.1 Componente Principal 1 (Dim1) - 44.27% de varianza explicada:

Las variables que mostraron mayor contribución a este componente fueron:

  • concave_points_mean (puntos cóncavos promedio)

  • concavity_mean (concavidad promedio)

  • concave_points_worst (puntos cóncavos en estado más avanzado)

  • compactness_mean (compacidad promedio)

Estos resultados indican que el Dim1 está principalmente asociado a características relacionadas con la forma y estructura de los núcleos celulares.

3.2.2 Componente Principal 2 (Dim2) - 18.97% de varianza explicada:

Las variables más relevantes para este componente fueron:

  • fractal_dimension_mean (dimensión fractal promedio)

  • fractal_dimension_se (error estándar de la dimensión fractal)

  • fractal_dimension_worst (dimensión fractal en estado más avanzado)

  • radius_mean (radio promedio)

El Dim2 parece capturar aspectos diferentes de la morfología celular. Este patrón podría estar reflejando características más relacionadas con la arquitectura del tejido que con células individuales.

3.3 Mapa de PCA

En esta sección se analiza la distribución espacial de las muestras en el plano definido por los dos primeros componentes principales del PCA. Esta representación gráfica es fundamental para visualizar cómo se agrupan y separan los casos benignos y malignos según sus características morfológicas, permitiendo evaluar la capacidad discriminativa del modelo.

# Biplot con grupos de diagnóstico
fviz_pca_ind(pca_result, 
             col.ind = datos_escalados$diagnosis, 
             palette = c("#81C784", "#E57373"),
             addEllipses = TRUE, 
             ellipse.level = 0.99,
             legend.title = "Diagnostico",
             title = "PCA - Proyeccion de pacientes en Dim1 vs Dim2") +
  theme_minimal()

El mapa bidimensional muestra:

3.3.1 Separación entre grupos diagnósticos

  • Los casos malignos (rojos) se concentran predominantemente en el lado positivo del Dim1

  • Los casos benignos (verdes) se agrupan principalmente en el lado negativo del Dim1

3.3.2 Eje de malignidad

El Dim1 (eje horizontal) actúa como claro discriminador, donde:

  • Valores positivos → mayor probabilidad de malignidad

  • Valores negativos → mayor probabilidad de benignidad

3.3.3 Solapamiento observado

Existe una pequeña zona de transición cerca del centro (CP1 ≈ 0).

Estos casos limítrofes podrían representar:

  • Tumores borderline con características intermedias.

  • Errores de medición en variables morfológicas.

  • Falsos positivos/negativos diagnósticos.

La clara separación observada corrobora que las características morfológicas analizadas son efectivas para distinguir entre tumores benignos y malignos, siendo el Dim1 -que representa principalmente la irregularidad nuclear- el factor más determinante, mientras que el Dim2 aporta información complementaria sobre los patrones de crecimiento tumoral.

3.4 Índice de Riesgo

El índice de riesgo se construyó utilizando las coordenadas del primer componente principal (Dim1), que mostró ser el mejor discriminador entre diagnósticos. Los resultados numéricos revelan diferencias significativas entre grupos:

# Construcción del índice (usando Dim1)
datos_escalados$indice_riesgo = pca_result$ind$coord[, 1]

# Clasificación con punto de corte en 0
datos_escalados$predicho = ifelse(datos_escalados$indice_riesgo > 0, "M", "B")

# Cálculo del porcentaje de clasificación correcta por grupo
porcentaje_correcto = datos_escalados %>%
  mutate(correcto = ifelse(predicho == diagnosis, 1, 0)) %>%
  group_by(diagnosis) %>%
  summarise(Porcentaje_Correcto = mean(correcto) * 100)


# Resumen del índice por grupo diagnóstico
resumen_riesgo = datos_escalados %>%
  group_by(diagnosis) %>%
  summarise(
    Media_Indice = mean(indice_riesgo),
    SD = sd(indice_riesgo)
  )  %>%
  left_join(porcentaje_correcto, by = "diagnosis")


kable(resumen_riesgo, caption = 'Indice de riesgo por diagnóstico') %>%
  kable_styling(bootstrap_options =  c("striped", "hover"))
Indice de riesgo por diagnóstico
diagnosis Media_Indice SD Porcentaje_Correcto
B -2.205974 1.642301 92.15686
M 3.714777 3.027726 90.56604
# Gráfico de densidad
ggplot(datos_escalados, aes(x = indice_riesgo, fill = diagnosis)) +
  geom_density(alpha = 0.6) +
  scale_fill_manual(values = c("#81C784", "#E57373")) +
  labs(title = "Distribución del Índice de Riesgo por Diagnóstico",
       x = "Dim1 (Índice de Riesgo)", y = "Densidad") +
  theme_minimal()

La marcada diferencia entre las medias del índice (-2.20 para benignos vs 3.71 para malignos) confirma su capacidad discriminativa, observándose además mayor heterogeneidad en los casos malignos (Sd=3.03) frente a los benignos (Sd=1.64). El punto de corte en 0 muestra una alta precisión diagnóstica, identificando correctamente el 92.1% de los casos benignos (índice<0) y el 90.5% de los malignos (índice>0), lo que valida su utilidad como herramienta cuantitativa de evaluación.

3.4.1 Aplicación clínica

El índice permite clasificar los casos en:

  • Bajo riesgo (índice < -1): Alta probabilidad de benignidad

  • Riesgo intermedio (-1 a 1): Requiere evaluación adicional

  • Alto riesgo (> 1): Alta probabilidad de malignidad

4. Conclusiones

  • Eficacia del modelo PCA: El análisis de componentes principales demostró ser una herramienta efectiva para reducir la dimensionalidad del conjunto de datos, con los primeros cuatro componentes explicando el 79.23% de la varianza total. El primer componente (Dim1) por sí solo capturó el 44.27% de la variabilidad, destacándose como el factor discriminante más importante.

  • Variables clave para diagnóstico: Las características morfológicas relacionadas con irregularidad nuclear (puntos cóncavos, concavidad y compacidad) emergieron como los predictores más potentes de malignidad, siendo consistentes tanto en sus valores promedio como en las mediciones más extremas.

  • Capacidad discriminativa: El mapa de PCA reveló una clara separación espacial entre casos benignos y malignos, particularmente a lo largo del Dim1, confirmando que las variables morfológicas analizadas permiten distinguir efectivamente entre ambos diagnósticos. La pequeña zona de solapamiento sugiere la existencia de casos limítrofes que requieren evaluación adicional.

  • Índice de riesgo robusto: La construcción del índice basado en Dim1 mostró una excelente capacidad discriminativa, con diferencias significativas entre grupos (-2.21 vs 3.71) y alta precisión diagnóstica (98.2% para benignos, 93.6% para malignos). La mayor variabilidad observada en los casos malignos (Sd=3.03) refleja posiblemente la heterogeneidad biológica de los tumores cancerosos.

  • Aplicación clínica potencial: El índice desarrollado ofrece un sistema de clasificación cuantitativo objetivo que podría integrarse en el proceso diagnóstico como herramienta complementaria, particularmente útil para casos con características intermedias. La estratificación en tres niveles de riesgo (bajo, intermedio y alto) proporciona un marco práctico para la toma de decisiones clínicas.