Preliminares
Para este ejercicio, se utilizaron los resultados
obtenidos en la Actividad 2, que se enfocaron
a corregir los problemas con el dataset Heart Disease
UCI, para el cual se realizó lo siguiente:
- Exploración inicial: se verificó la estructura
(
str), resumen estadístico
(summary,
skim) y duplicados. Se detectaron valores
ausentes en algunas variables.
- Conversión de tipos de datos: se transformaron
variables categóricas y lógicas a
factores para su correcta interpretación en R.
- Imputación de valores faltantes: Se aplicó
imputación múltiple mediante el paquete
mice, generando 5
datasets y eligiendo el segundo.
- Tratamiento de valores atípicos: se identificaron
outliers en variables numéricas y se
aplicó winsorización (1% y 99%).
- Normalización y consistencia: se
estandarizaron los valores de texto, verificaron
niveles de factores y creó variable binaria
disease.
Estructura del dataframe
A continuación se presenta el detalle de estructura del dataframe
Heart Disease UCI, para verificar la asignación
correcta del tipo de dato.
str(heart)
## 'data.frame': 920 obs. of 17 variables:
## $ X : int 1 2 3 4 5 6 7 8 9 10 ...
## $ id : int 1 2 3 4 5 6 7 8 9 10 ...
## $ age : int 63 67 67 37 41 56 62 57 63 53 ...
## $ sex : chr "Male" "Male" "Male" "Male" ...
## $ dataset : chr "Cleveland" "Cleveland" "Cleveland" "Cleveland" ...
## $ cp : chr "typical angina" "asymptomatic" "asymptomatic" "non-anginal" ...
## $ trestbps: num 145 160 120 130 130 ...
## $ chol : num 233 286 229 250 204 236 268 354 254 203 ...
## $ fbs : logi TRUE FALSE FALSE FALSE FALSE FALSE ...
## $ restecg : chr "lv hypertrophy" "lv hypertrophy" "lv hypertrophy" "normal" ...
## $ thalch : num 150 108 129 187 172 178 160 163 147 155 ...
## $ exang : logi FALSE TRUE TRUE FALSE FALSE FALSE ...
## $ oldpeak : num 1.98 1.5 1.98 1.98 1.4 ...
## $ slope : chr "downsloping" "flat" "flat" "downsloping" ...
## $ ca : int 0 3 2 0 0 0 2 0 1 0 ...
## $ thal : chr "fixed defect" "normal" "reversable defect" "normal" ...
## $ num : int 0 2 1 0 0 0 3 0 2 1 ...
Se obtiene un resumen de las variables que conforman
el dataframe:
| id |
Identificador único del paciente |
| age |
Edad del paciente en años |
| sex |
Género del paciente (Male/Female) |
| dataset |
Fuente del registro (Cleveland, Hungary, etc.) |
| cp |
Tipo de dolor de pecho |
| trestbps |
Presión arterial en reposo (mm Hg) |
| chol |
Colesterol sérico (mg/dl) |
| fbs |
Azúcar en sangre en ayunas > 120 mg/dl |
| restecg |
Resultado del electrocardiograma en reposo |
| thalch |
Frecuencia cardíaca máxima alcanzada |
| exang |
Angina inducida por ejercicio |
| oldpeak |
Depresión del ST inducida por ejercicio |
| slope |
Pendiente del segmento ST |
| ca |
Número de vasos principales coloreados por
fluoroscopia |
| thal |
Resultado de la prueba de talio |
| num |
Diagnóstico de enfermedad cardíaca (0–4) |
Se muestran las primeras observaciones de la
tabla:
| 1 |
1 |
63 |
Male |
Cleveland |
typical angina |
145.000 |
233 |
TRUE |
lv hypertrophy |
150 |
FALSE |
1.9826 |
downsloping |
0 |
fixed defect |
0 |
| 2 |
2 |
67 |
Male |
Cleveland |
asymptomatic |
159.652 |
286 |
FALSE |
lv hypertrophy |
108 |
TRUE |
1.5000 |
flat |
3 |
normal |
2 |
| 3 |
3 |
67 |
Male |
Cleveland |
asymptomatic |
120.000 |
229 |
FALSE |
lv hypertrophy |
129 |
TRUE |
1.9826 |
flat |
2 |
reversable defect |
1 |
| 4 |
4 |
37 |
Male |
Cleveland |
non-anginal |
130.000 |
250 |
FALSE |
normal |
187 |
FALSE |
1.9826 |
downsloping |
0 |
normal |
0 |
| 5 |
5 |
41 |
Female |
Cleveland |
atypical angina |
130.000 |
204 |
FALSE |
lv hypertrophy |
172 |
FALSE |
1.4000 |
upsloping |
0 |
normal |
0 |
| 6 |
6 |
56 |
Male |
Cleveland |
atypical angina |
120.000 |
236 |
FALSE |
normal |
178 |
FALSE |
0.8000 |
upsloping |
0 |
normal |
0 |
Vamos a realizar el resumen numérico de cada
variable del dataframe:
## Error in table(names(candidates))[["tested"]]: subíndice fuera de los límites
Descriptive Statistics
N: 920
|
age |
chol |
oldpeak |
thalch |
trestbps |
|
Mean |
53.51 |
214.84 |
0.77 |
136.81 |
131.59 |
|
Std.Dev |
9.42 |
76.70 |
0.83 |
25.41 |
16.24 |
|
Min |
28.00 |
86.60 |
-0.98 |
82.66 |
100.35 |
|
Q1 |
47.00 |
177.00 |
0.00 |
119.00 |
120.00 |
|
Median |
54.00 |
223.00 |
0.50 |
139.00 |
130.00 |
|
Q3 |
60.00 |
269.00 |
1.55 |
156.00 |
140.00 |
|
Max |
77.00 |
359.40 |
1.98 |
195.34 |
159.65 |
|
MAD |
9.64 |
68.20 |
0.74 |
28.17 |
14.83 |
|
IQR |
13.00 |
92.00 |
1.52 |
37.00 |
20.00 |
|
CV |
0.18 |
0.36 |
1.08 |
0.19 |
0.12 |
|
Skewness |
-0.20 |
-0.36 |
0.31 |
-0.09 |
0.14 |
|
SE.Skewness |
0.08 |
0.08 |
0.08 |
0.08 |
0.08 |
|
Kurtosis |
-0.39 |
-0.67 |
-1.44 |
-0.72 |
-0.82 |
|
N.Valid |
920 |
920 |
920 |
920 |
920 |
|
N |
920 |
920 |
920 |
920 |
920 |
|
Pct.Valid |
100.00 |
100.00 |
100.00 |
100.00 |
100.00 |
Generated by summarytools 1.1.4 (R version 4.5.1)
2025-11-11
De la tabla anterior, podemos obtener lo
siguiente:
Análisis detallado de variables
numéricas del dataset heart
|
Variable
|
Media_Mediana
|
Rango_IQR
|
Variabilidad
|
Forma_Distribucion
|
Observaciones
|
|
age
|
Media: 53.51, Mediana: 56 → distribución ligeramente sesgada a la
izquierda
|
Rango: 47–60, IQR: 13 → dispersión moderada
|
CV: 0.18 → baja variabilidad relativa
|
Skewness: -0.20, Kurtosis: -0.39 → distribución casi simétrica, menos
concentración en la media
|
Distribución centrada en adultos de edad media. No hay extremos
clínicamente preocupantes.
|
|
chol
|
Media: 214.84, Mediana: 223 → leve sesgo negativo
|
Rango: 177–269, IQR: 92 → alta dispersión con valores extremos
|
CV: 0.36 → variabilidad alta
|
Skewness: -0.36, Kurtosis: -0.67 → leve sesgo negativo, distribución más
plana
|
Colesterol moderado en promedio, pero con amplia dispersión. Revisar
valores extremos.
|
|
oldpeak
|
Media: 0.77, Mediana: 0.50 → fuerte sesgo positivo
|
Rango: 0.00–1.55, IQR: 1.52 → dispersión alta con acumulación en cero
|
CV: 1.08 → variabilidad extrema
|
Skewness: 0.31, Kurtosis: -1.44 → leve sesgo positivo, distribución muy
plana
|
La mayoría de los pacientes no presenta depresión ST, pero algunos
tienen valores elevados.
|
|
thalach
|
Media: 136.81, Mediana: 139 → leve sesgo negativo
|
Rango: 119–156, IQR: 37 → buena dispersión
|
CV: 0.19 → variabilidad moderada
|
Skewness: -0.09, Kurtosis: -0.72 → casi simétrica, leve concentración en
la media
|
Frecuencia cardíaca dentro de rangos funcionales, con algunos pacientes
por debajo del promedio.
|
|
trestbps
|
Media: 131.59, Mediana: 130 → leve sesgo positivo
|
Rango: 120–140, IQR: 20 → dispersión moderada
|
CV: 0.12 → baja variabilidad
|
Skewness: 0.14, Kurtosis: -0.82 → leve sesgo positivo, distribución más
plana
|
Presión arterial en reposo ligeramente elevada en promedio, con casos
que podrían indicar hipertensión.
|
Gráficas y análisis por
variables
Variable Edad
(age)


Se puede observar que hay una distribución centrada
en adultos de edad media, con leve sesgo negativo.
Dispersión moderada y sin valores
extremos clínicamente preocupantes.
Variable: Colesterol
(chol)


Se puede observar que la variable Colesterol tiene
amplia dispersión y valores extremos
con un leve sesgo negativo, pero clínicamente relevante
por los valores altos.
Variable: Depresión ST
(oldpeak)


Se puede observar que la variable tiene una fuerte
dispersión con acumulación en cero, tiene un
sesgo positivo y valores clínicamente relevantes en el
extremo superior.
Variable Frecuencia
cardíaca máxima (thalch)


Se puede observar que la variable tiene una distribución casi
simétrica, con buena dispersión. Algunos
pacientes presentan valores bajos que podrían indicar
baja capacidad funcional.
Variable Presión arterial
en reposo (trestbps)


Se puede observar que la variable un leve sesgo
positivo, con valores elevados que podrían
indicar hipertensión, con dispersión
moderada y concentración en la media.
Resumen de variables
categóricas
La función dfSummary() del paquete
summarytools genera un resumen completo y
visualmente atractivo de todas las variables en un data frame,
incluyendo estadísticas, tipos de datos, valores únicos, valores
faltantes y gráficos embebidos.
De esta
tabla, se puede indicar lo siguiente:
|
Variable
|
Categorías
|
Observaciones
|
|
sex
|
Female: 21.1%, Male: 78.9%
|
Distribución sesgada hacia hombres, importante para análisis por sexo.
|
|
dataset
|
Cleveland: 33%, Hungary: 31.8%, Switzerland: 13.4%, VA: 21.7%
|
Datos provienen de cuatro fuentes, útil para análisis por centro.
|
|
cp
|
Asymptomatic: 53.9%, Atypical angina: 18.9%, Non-anginal: 22.2%, Typical
angina: 5%
|
Mayoría asintomática, relevante para diagnóstico clínico.
|
|
fbs
|
FALSE: 83.6%, TRUE: 16.4%
|
La mayoría no tiene azúcar en ayunas elevada.
|
|
restecg
|
Normal: 60.1%, LV hypertrophy: 20.4%, ST-T abnormality: 19.5%
|
Predominio de ECG normal, pero con presencia de anomalías.
|
|
exang
|
FALSE: 59.6%, TRUE: 40.4%
|
40% presentan angina inducida por ejercicio.
|
|
slope
|
Flat: 54.6%, Upsloping: 35.8%, Downsloping: 9.7%
|
Predominio de pendiente plana, relevante para esfuerzo cardíaco.
|
|
ca
|
0: 63.2%, 1: 11.1%, 2: 16.8%, 3: 8.9%
|
Mayoría sin vasos coloreados, pero presencia de obstrucciones.
|
|
thal
|
Reversable defect: 43.4%, Normal: 34.3%, Fixed defect: 22.3%
|
Distribución equilibrada entre tipos de defecto.
|
|
num
|
0: 44.7%, 1: 28.8%, 2: 11.8%, 3: 11.6%, 4: 3%
|
Distribución escalonada de severidad de enfermedad cardíaca.
|
Vamos ahora a obtener las tablas de frecuencia, para
las variables categóricas:
Tablas de
frecuencia
Frecuencia de: sex
Frequencies
.y
Type: Factor
| Female |
194 |
21.09 |
21.09 |
21.09 |
21.09 |
| Male |
726 |
78.91 |
100.00 |
78.91 |
100.00 |
|
0 |
|
|
0.00 |
100.00 |
| Total |
920 |
100.00 |
100.00 |
100.00 |
100.00 |
Frecuencia de: dataset
Frequencies
.y
Type: Factor
| Cleveland |
304 |
33.04 |
33.04 |
33.04 |
33.04 |
| Hungary |
293 |
31.85 |
64.89 |
31.85 |
64.89 |
| Switzerland |
123 |
13.37 |
78.26 |
13.37 |
78.26 |
| VA Long Beach |
200 |
21.74 |
100.00 |
21.74 |
100.00 |
|
0 |
|
|
0.00 |
100.00 |
| Total |
920 |
100.00 |
100.00 |
100.00 |
100.00 |
Frecuencia de: cp
Frequencies
.y
Type: Factor
| asymptomatic |
496 |
53.91 |
53.91 |
53.91 |
53.91 |
| atypical angina |
174 |
18.91 |
72.83 |
18.91 |
72.83 |
| non-anginal |
204 |
22.17 |
95.00 |
22.17 |
95.00 |
| typical angina |
46 |
5.00 |
100.00 |
5.00 |
100.00 |
|
0 |
|
|
0.00 |
100.00 |
| Total |
920 |
100.00 |
100.00 |
100.00 |
100.00 |
Frecuencia de: fbs
Frequencies
.y
Type: Factor
| FALSE |
769 |
83.59 |
83.59 |
83.59 |
83.59 |
| TRUE |
151 |
16.41 |
100.00 |
16.41 |
100.00 |
|
0 |
|
|
0.00 |
100.00 |
| Total |
920 |
100.00 |
100.00 |
100.00 |
100.00 |
Frecuencia de: restecg
Frequencies
.y
Type: Factor
| lv hypertrophy |
188 |
20.43 |
20.43 |
20.43 |
20.43 |
| normal |
553 |
60.11 |
80.54 |
60.11 |
80.54 |
| st-t abnormality |
179 |
19.46 |
100.00 |
19.46 |
100.00 |
|
0 |
|
|
0.00 |
100.00 |
| Total |
920 |
100.00 |
100.00 |
100.00 |
100.00 |
Frecuencia de: exang
Frequencies
.y
Type: Factor
| FALSE |
548 |
59.57 |
59.57 |
59.57 |
59.57 |
| TRUE |
372 |
40.43 |
100.00 |
40.43 |
100.00 |
|
0 |
|
|
0.00 |
100.00 |
| Total |
920 |
100.00 |
100.00 |
100.00 |
100.00 |
Frecuencia de: slope
Frequencies
.y
Type: Factor
| downsloping |
89 |
9.67 |
9.67 |
9.67 |
9.67 |
| flat |
502 |
54.57 |
64.24 |
54.57 |
64.24 |
| upsloping |
329 |
35.76 |
100.00 |
35.76 |
100.00 |
|
0 |
|
|
0.00 |
100.00 |
| Total |
920 |
100.00 |
100.00 |
100.00 |
100.00 |
Frecuencia de: ca
Frequencies
.y
Type: Factor
| 0 |
581 |
63.15 |
63.15 |
63.15 |
63.15 |
| 1 |
102 |
11.09 |
74.24 |
11.09 |
74.24 |
| 2 |
155 |
16.85 |
91.09 |
16.85 |
91.09 |
| 3 |
82 |
8.91 |
100.00 |
8.91 |
100.00 |
|
0 |
|
|
0.00 |
100.00 |
| Total |
920 |
100.00 |
100.00 |
100.00 |
100.00 |
Frecuencia de: thal
Frequencies
.y
Type: Factor
| fixed defect |
205 |
22.28 |
22.28 |
22.28 |
22.28 |
| normal |
316 |
34.35 |
56.63 |
34.35 |
56.63 |
| reversable defect |
399 |
43.37 |
100.00 |
43.37 |
100.00 |
|
0 |
|
|
0.00 |
100.00 |
| Total |
920 |
100.00 |
100.00 |
100.00 |
100.00 |
Frecuencia de: num
Frequencies
.y
Type: Factor
| 0 |
411 |
44.67 |
44.67 |
44.67 |
44.67 |
| 1 |
265 |
28.80 |
73.48 |
28.80 |
73.48 |
| 2 |
109 |
11.85 |
85.33 |
11.85 |
85.33 |
| 3 |
107 |
11.63 |
96.96 |
11.63 |
96.96 |
| 4 |
28 |
3.04 |
100.00 |
3.04 |
100.00 |
|
0 |
|
|
0.00 |
100.00 |
| Total |
920 |
100.00 |
100.00 |
100.00 |
100.00 |
Comparaciones entre variables, por
sexo y diagnóstico
Agregaciones visuales que
revelan comportamientos interesantes en el dataset
HEART
**1. Promedios agrupados por sexo y
diagnóstico


Interpretación:
Comparación de promedios por sexo
|
Variable
|
Mujeres
|
Hombres
|
Interpretación
|
|
age
|
Menor promedio
|
Mayor promedio
|
Las mujeres tienden a ser diagnosticadas más jóvenes.
|
|
chol
|
Más alto
|
Más bajo
|
Mayor colesterol en mujeres, posible riesgo metabólico.
|
|
oldpeak
|
Más bajo
|
Más alto
|
Menor isquemia inducida por ejercicio en mujeres.
|
|
thalach
|
Más alto
|
Más bajo
|
Mejor capacidad funcional en mujeres.
|
|
trestbps
|
Similar
|
Ligeramente mayor
|
Posible mayor prevalencia de hipertensión en hombres.
|
Comparación de promedios por diagnóstico
|
Variable
|
Tendencia
|
Interpretación
|
|
age
|
Ligeramente creciente
|
Pacientes más graves tienden a ser mayores.
|
|
chol
|
Irregular, sin patrón claro
|
El colesterol no discrimina bien entre niveles de diagnóstico.
|
|
oldpeak
|
Aumenta con el diagnóstico
|
Mayor isquemia en casos más severos.
|
|
thalach
|
Disminuye con el diagnóstico
|
Menor capacidad funcional en pacientes más graves.
|
|
trestbps
|
Ligeramente creciente
|
Mayor presión arterial en diagnósticos altos.
|
2. Boxplots por tipo de dolor
de pecho (cp) y angina inducida (exang)


Interpretación:
Frecuencia cardíaca máxima según angina inducida
|
Grupo
|
Mediana_thalach
|
Dispersión
|
Interpretación
|
|
Sin angina inducida (FALSE)
|
Más alta
|
Amplia
|
Mejor capacidad funcional, mayor tolerancia al ejercicio.
|
|
Con angina inducida (TRUE)
|
Más baja
|
Estrecha
|
Menor tolerancia al esfuerzo, posible isquemia inducida.
|
Colesterol según tipo de dolor de pecho
|
Tipo_dolor
|
Mediana_chol
|
Dispersión
|
Interpretación
|
|
Asintomático
|
Más alta
|
Muy amplia
|
Colesterol elevado sin síntomas, posible riesgo silencioso.
|
|
Angina atípica
|
Moderada
|
Estrecha
|
Perfil más homogéneo, menos extremos.
|
|
No anginoso
|
Similar a atípica
|
Estrecha
|
Colesterol controlado, pero no necesariamente sin riesgo.
|
|
Angina típica
|
Más baja
|
Estrecha
|
Menor colesterol, pero con síntomas evidentes de enfermedad cardíaca.
|
3. Dispersión entre variables
numéricas coloreada por diagnóstico


Interpretación:
Relación entre edad y colesterol por diagnóstico
|
Diagnóstico
|
Patrón_visual
|
Interpretación
|
|
0 (sin enfermedad)
|
Dispersos en todo el rango de edad y colesterol
|
Edad y colesterol no predicen ausencia de enfermedad.
|
|
1–2
|
Agrupados en colesterol medio (200–250)
|
Zona de transición entre salud y enfermedad.
|
|
3–4
|
Más frecuentes en colesterol alto (>250) y edad mayor
|
Perfil clínico de mayor riesgo: edad avanzada y colesterol elevado.
|
Relación entre frecuencia cardíaca y depresión ST por diagnóstico
|
Diagnóstico
|
Patrón_visual
|
Interpretación
|
|
0 (sin enfermedad)
|
Alta thalch, baja oldpeak
|
Buen rendimiento cardíaco, sin signos de isquemia.
|
|
1–2
|
Distribución intermedia
|
Posible deterioro funcional incipiente.
|
|
3–4
|
Baja thalch, alta oldpeak
|
Perfil de alto riesgo: menor capacidad funcional y mayor isquemia.
|
- No hay correlación lineal entre
edad y colesterol, pero los pacientes
con diagnóstico más severo tienden a tener
ambos valores elevados.
- Diagnóstico 0 aparece en todos los rangos, lo que
indica que ni edad ni colesterol por
sí solos son suficientes para
descartar enfermedad.
- Diagnóstico 4 se concentra en pacientes
mayores con colesterol alto, lo que refuerza
su valor como marcador de riesgo.
- A medida que aumenta la depresión ST
(oldpeak), disminuye la frecuencia
cardíaca máxima (thalch), especialmente en diagnósticos
más severos.
- Diagnóstico 0 se concentra en la zona
funcionalmente saludable: alta thalch, baja
oldpeak.
- Diagnóstico 4 se agrupa en la zona de mayor
riesgo: baja thalch, alta
oldpeak.
Colección de visualizaciones con
ggplot para el dataset
HEART
DISTRIBUCIONES
Histograma de
edad

Interpretación: La mayoría de los
pacientes tienen entre 50 y 60
años, lo que indica que la enfermedad cardíaca
se concentra en adultos mayores.
Boxplot de colesterol por
sexo

Interpretación: Las mujeres
presentan una mediana de colesterol más alta y
mayor dispersión, lo que puede indicar mayor
riesgo metabólico.
RELACIONES
Dispersión: edad vs frecuencia
cardíaca máxima

Interpretación: Se observa una ligera
tendencia negativa, a mayor edad,
menor frecuencia cardíaca máxima alcanzada, lo que
refleja deterioro funcional.
Dispersión: colesterol vs
oldpeak

Interpretación: No hay una relación
clara, pero algunos pacientes con colesterol
alto también presentan mayor depresión ST, lo
que podría indicar riesgo combinado.
COMPARACIONES
Barras: tipo de dolor de pecho
(cp)

Interpretación: La mayoría de los
pacientes son asintomáticos, lo que sugiere que muchos
casos de enfermedad cardíaca no presentan dolor
típico.
Barras: pendiente del segmento
ST (slope) por diagnóstico

Interpretación: Los pacientes con
pendiente descendente (downsloping) están más
asociados a diagnósticos severos, lo que
refuerza su valor como indicador clínico.
Conclusiones
El análisis exploratorio del dataset
HEART revela patrones clínicamente
relevantes que permiten caracterizar
perfiles de riesgo cardiovascular en función
de diferentes variables:
- Edad y sexo muestran
diferencias significativas: los
hombres tienden a presentar mayor presión
arterial y depresión ST (oldpeak), mientras
que las mujeres exhiben niveles más
altos de colesterol y frecuencia
cardíaca máxima (thalach), lo que sugiere
distintos mecanismos de riesgo entre
géneros.
- El diagnóstico (num) se asocia
fuertemente con variables funcionales: a
mayor severidad, se observa menor
thalach y mayor oldpeak, lo que indica
deterioro en la capacidad de respuesta
al ejercicio y mayor isquemia
inducida.
- El tipo de dolor de pecho (cp) y la angina
inducida (exang) permiten segmentar
clínicamente a los pacientes: los
asintomáticos presentan colesterol elevado sin
síntomas, mientras que quienes desarrollan angina
inducida muestran menor frecuencia cardíaca,
lo que refuerza la necesidad de pruebas
funcionales.
- Las relaciones entre variables
como edad vs colesterol y thalach vs
oldpeak no son lineales, pero sí
permiten identificar zonas de riesgo clínico,
especialmente en diagnósticos 3 y 4.
En conjunto, estos hallazgos respaldan el uso
de variables como thalach,
oldpeak, cp y exang
como indicadores funcionales clave en la
evaluación de enfermedad cardíaca, y
sugieren que el colesterol, aunque
relevante, debe interpretarse en
contexto.