“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:
El análisis emplea el dataset breastcancer, que contiene:
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:
id por ser un identificador sin relevancia
estadística.diagnosis se convirtió a factor para permitir su
uso como variable suplementaria en análisis posteriores.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:
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.
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:
diagnosis (Benigno/Maligno)
para contextualizar resultados.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)| 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.
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)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.
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.
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:
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
El Dim1 (eje horizontal) actúa como claro discriminador, donde:
Valores positivos → mayor probabilidad de malignidad
Valores negativos → mayor probabilidad de benignidad
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.
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"))| 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.
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
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.