Curso: Análisis de datos con lenguaje R
(básico)
Instructor: Enrique Escalante Notario
Dataset: UCI Heart Disease
El análisis de datos clínicos permite transformar mediciones y características de los pacientes en evidencia útil para reconocer patrones y estudiar posibles factores asociados con una condición de salud. En este proyecto se analiza el conjunto de datos UCI Heart Disease, con el propósito de identificar variables relacionadas con la presencia de enfermedad cardiaca y construir modelos estadísticos que permita estimar su probabilidad a partir de la información disponible.
El trabajo se desarrolló en R, utilizando sus herramientas para
organizar, limpiar, transformar, visualizar y analizar los datos de
manera reproducible. El proceso incluyó la revisión y depuración de la
base original, el análisis exploratorio, la aplicación de métodos
inferenciales para seleccionar variables relevantes y, finalmente, la
construcción de modelos de regresión. Se utilizó una regresión lineal
múltiple para estudiar la frecuencia cardiaca máxima
(max_hr) y regresión logística múltiple para modelar la
presencia de enfermedad cardiaca (ahd).
Más que establecer una regla de diagnóstico, el proyecto busca mostrar cómo distintas etapas del análisis estadístico pueden integrarse para obtener conclusiones sustentadas en los datos. Por ello, sus resultados tienen un alcance académico y deben interpretarse como evidencia de asociación dentro del conjunto de datos estudiado.
El conjunto de datos UCI Heart Disease reúne información
clínica y demográfica de pacientes evaluados por posible enfermedad
cardiaca. Entre las variables disponibles se encuentran la edad, el
sexo, el tipo de dolor torácico, la presión arterial en reposo, el
colesterol, la frecuencia cardiaca máxima, la angina inducida por
ejercicio y distintos resultados de pruebas cardiovasculares. La
variable objetivo es AHD, que clasifica a cada paciente
según la ausencia (No) o presencia (Yes) de
enfermedad cardiaca.
El problema de interés consiste en estudiar cuáles de estas características presentan mayor relación con la presencia de enfermedad cardiaca y determinar si consideradas conjuntamente, permiten construir un modelo estadístico útil para estimar su probabilidad. Para ello, se exploraron inicialmente las variables de manera descriptiva y gráfica, y posteriormente se evaluaron sus asociaciones mediante herramientas inferenciales y procedimientos de selección de variables.
Dado que AHD es una variable categórica binaria, su
modelado se realizó mediante regresión logística. De manera
complementaria, se utilizó max_hr, una variable numérica
continua, como respuesta en un modelo de regresión lineal múltiple para
estudiar qué características se relacionan con la frecuencia cardiaca
máxima. El propósito de ambos análisis es académico y no pretende
establecer relaciones causales ni constituir un procedimiento de
diagnóstico clínico.
El archivo original Heart Disease contiene 303 observaciones correspondientes a pacientes y 14 variables de interés clínico y demográfico, además de una columna auxiliar utilizada como índice. Cada fila representa a un paciente y la información disponible combina variables numéricas y categóricas.
Entre las variables numéricas se encuentran la edad
(Age), presión arterial en reposo (RestBP),
colesterol sérico (Chol), frecuencia cardiaca máxima
alcanzada (MaxHR) y depresión del segmento ST inducida por
ejercicio (Oldpeak). También se incluye Ca,
que representa el número de vasos principales observados mediante
fluoroscopía y puede considerarse una variable numérica discreta u
ordinal.
Las variables categóricas incluyen el sexo (Sex), tipo
de dolor torácico (ChestPain), glucosa en ayunas
(Fbs), resultado electrocardiográfico en reposo
(RestECG), angina inducida por ejercicio
(ExAng), pendiente del segmento ST (Slope) y
resultado asociado con talasemia (Thal).
La variable objetivo es AHD, de naturaleza categórica
binaria, que indica ausencia (No) o presencia
(Yes) de enfermedad cardiaca. Durante la preparación de los
datos se identificaron valores faltantes y, después del proceso de
limpieza, se trabajó con 297 pacientes con información completa.
El desarrollo del proyecto se organizó tomando como referencia la metodología CRISP-DM, que permite estructurar un análisis de datos en etapas relacionadas entre sí y revisar decisiones anteriores cuando los resultados hacen necesario realizar ajustes.
Comprensión del problema. Se definió como objetivo
estudiar las variables asociadas con la presencia de enfermedad
cardiaca, utilizando AHD como variable de respuesta.
Comprensión de los datos. Se importó la base original, se revisaron sus dimensiones, estructura y tipos de variables, y se identificaron valores faltantes, posibles inconsistencias y características relevantes de cada variable.
Preparación de los datos. Se eliminaron registros incompletos y columnas que no aportaban información al análisis, se estandarizaron nombres y categorías y se generaron nuevas variables que facilitaron la exploración y el modelado.
Modelado. A partir del análisis exploratorio e
inferencial se seleccionaron variables candidatas para dos tipos de
modelos. Se construyó una regresión lineal múltiple para explicar
max_hr y modelos de regresión logística múltiple para
estudiar la probabilidad de presencia de enfermedad cardiaca, la cual es
la variable ahd.
Evaluación. Los modelos obtenidos se compararon e interpretaron para determinar qué variables contribuían al modelo y valorar su capacidad para representar la información observada.
Despliegue y comunicación. Finalmente, el proceso, los resultados, las visualizaciones y las conclusiones se integraron en un informe reproducible elaborado en R Markdown para su publicación en RPubs.
Estas etapas no se consideraron independientes: la exploración permitió detectar aspectos que requirieron nuevas transformaciones, mientras que los resultados inferenciales orientaron la selección de variables para el modelado. Seguir una metodología de este tipo permite mantener una secuencia lógica, documentar las decisiones tomadas y hacer que el análisis sea reproducible.
La Actividad 1 se centró en revisar la calidad de la base original Heart Disease y preparar una versión adecuada para los análisis posteriores. El archivo inicial contenía 303 registros. Se inspeccionaron la estructura y los tipos de variables, los nombres de las columnas, la presencia de valores faltantes, posibles duplicados y otras inconsistencias.
Se identificaron seis observaciones con información faltante, cuatro
en la variable ca y dos en thal. Debido a que
representaban una proporción pequeña del total, se decidió eliminar
estos registros y trabajar únicamente con casos completos, obteniéndose
una base de 297 pacientes. También se eliminó la columna que funcionaba
únicamente como conteo de las observaciones y se estandarizaron los
nombres de las variables para facilitar su manipulación en R.
Además, algunas variables fueron transformadas para mejorar su
interpretación y utilización en los análisis. El sexo y la presencia de
enfermedad cardiaca (ahd) se expresaron mediante categorías
descriptivas; se creó una versión binaria de la variable objetivo
(ahd_binaria) y se construyó una variable de grupos de
edad. Estas decisiones permitieron obtener una base consistente, sin
valores faltantes y con variables apropiadas para las etapas
exploratoria, inferencial y de modelado.
En la Actividad 2 se realizó un análisis exploratorio de las 297 observaciones de la base limpia. Para las variables numéricas se calcularon medidas descriptivas como media, mediana, desviación estándar, mínimo y máximo, complementadas con histogramas y diagramas de caja. En las variables categóricas se estudiaron las frecuencias absolutas y relativas de sus diferentes niveles.
La variable objetivo presentó una distribución relativamente
equilibrada: 160 pacientes (53.9 %) fueron clasificados sin enfermedad
cardiaca y 137 (46.1 %) con enfermedad. Posteriormente, las variables
numéricas y categóricas se analizaron agrupándolas según
ahd, lo que permitió observar diferencias entre ambos
grupos y detectar características potencialmente asociadas con la
presencia de enfermedad.
Los diagramas de caja también permitieron identificar observaciones potencialmente atípicas en algunas variables numéricas. Estos valores fueron conservados, ya que podían corresponder a mediciones clínicas reales y su identificación gráfica, por sí sola, no era suficiente para justificar su eliminación.
Finalmente, se exploraron relaciones entre las variables mediante
comparaciones gráficas y análisis de correlación. Se observaron patrones
particularmente notorios en variables como la frecuencia cardiaca máxima
(max_hr), la depresión del segmento ST
(oldpeak), la angina inducida por ejercicio
(ex_ang), el tipo de dolor torácico, el número de vasos
principales (ca) y thal. Estos resultados se
consideraron evidencia exploratoria y sirvieron como punto de partida
para el posterior análisis inferencial y la selección de variables.
A partir del análisis exploratorio se seleccionaron las visualizaciones que muestran con mayor claridad la distribución de la variable objetivo y algunas de las diferencias observadas entre los pacientes con y sin enfermedad cardiaca.
library(tidyverse)
heart_eda <- read.csv("a2_Chacon_Richar_eda.csv")
ggplot(heart_eda, aes(x = ahd)) +
geom_bar() +
labs(
title = "Distribución de la presencia de enfermedad cardiaca",
x = "Presencia de enfermedad cardiaca",
y = "Número de pacientes"
) +
theme_minimal()
La variable objetivo presenta una distribución relativamente
equilibrada. De los 297 pacientes, 160 (53.9 %) se clasificaron sin
enfermedad cardiaca y 137 (46.1 %) con enfermedad.
ggplot(heart_eda, aes(x = ahd, y = max_hr)) +
geom_boxplot() +
labs(
title = "Frecuencia cardiaca máxima según presencia de enfermedad",
x = "Presencia de enfermedad cardiaca",
y = "Frecuencia cardiaca máxima"
) +
theme_minimal()
Los pacientes con enfermedad cardiaca tienden a presentar una frecuencia
cardiaca máxima menor que aquellos sin enfermedad. La separación
observada entre ambos grupos sugiere que
max_hr podría ser
una variable relevante para explicar la presencia de enfermedad
cardiaca.
ggplot(heart_eda, aes(x = ahd, y = oldpeak)) +
geom_boxplot() +
labs(
title = "Depresión del segmento ST según presencia de enfermedad",
x = "Presencia de enfermedad cardiaca",
y = "Oldpeak"
) +
theme_minimal()
Los valores de
oldpeak tienden a ser mayores entre los
pacientes con enfermedad cardiaca. También se observan algunos valores
elevados que pueden considerarse potencialmente atípicos.
ggplot(heart_eda, aes(x = thal, fill = ahd)) +
geom_bar(position = "fill") +
labs(
title = "Presencia de enfermedad cardiaca según Thal",
x = "Resultado de Thal",
y = "Proporción",
fill = "AHD"
) +
scale_y_continuous(labels = scales::percent) +
theme_minimal()
La proporción de pacientes con enfermedad cardiaca cambia
considerablemente entre las categorías de
thal. La
categoría reversable presenta una mayor proporción de
enfermedad, mientras que en la categoría normal predomina
la ausencia de enfermedad.
ggplot(heart_eda, aes(x = chest_pain, fill = ahd)) +
geom_bar(position = "fill") +
labs(
title = "Presencia de enfermedad según tipo de dolor torácico",
x = "Tipo de dolor torácico",
y = "Proporción",
fill = "AHD"
) +
scale_y_continuous(labels = scales::percent) +
theme_minimal()
El tipo de dolor torácico muestra diferencias claras entre los grupos.
En particular, la categoría
asymptomatic presenta una mayor
proporción de pacientes con enfermedad cardiaca que las demás
categorías.
Las comparaciones realizadas según ahd mostraron
diferencias visibles en varias variables. Entre las numéricas,
max_hr tendió a presentar valores menores en los pacientes
con enfermedad cardiaca, mientras que oldpeak y
ca mostraron valores mayores en este grupo. También se
observaron diferencias en la edad, aunque menos marcadas que en las
variables anteriores. Entre las variables categóricas, los patrones más
notorios aparecieron en chest_pain, ex_ang y
thal.
En cuanto a la dispersión, chol, max_hr y
rest_bp presentaron una variabilidad considerable en sus
respectivas escalas de medición. Esta comparación debe interpretarse con
cautela, ya que las variables se encuentran expresadas en unidades
diferentes.
Los diagramas de caja permitieron identificar posibles valores
atípicos principalmente en rest_bp, chol,
max_hr y oldpeak. Estos registros fueron
conservados, debido a que no se encontró evidencia suficiente para
considerarlos errores y podían corresponder a valores clínicos
reales.
En conjunto, las variables que parecieron más relevantes durante el
análisis exploratorio fueron max_hr, oldpeak,
ca, chest_pain, ex_ang y
thal, debido a las diferencias observadas entre los grupos
definidos por ahd. Estos resultados son de carácter
descriptivo y sirvieron para orientar el análisis inferencial y la
posterior selección de variables.
El análisis inferencial permitió evaluar formalmente algunos de los
patrones observados durante el análisis exploratorio. Se calcularon
intervalos de confianza para variables numéricas, se realizaron pruebas
de comparación entre los grupos definidos por ahd, pruebas
de asociación para variables categóricas y un análisis de correlación
entre variables numéricas. Finalmente, estos resultados se utilizaron
para proponer variables candidatas para el modelado.
Los intervalos de confianza permitieron estimar, con un nivel de confianza del 95 %, rangos plausibles para las medias poblacionales de las principales variables numéricas. Estos intervalos proporcionaron una medida de la incertidumbre asociada con las estimaciones obtenidas a partir de la muestra y complementaron las estadísticas descriptivas calculadas previamente.
Las comparaciones de variables numéricas entre los pacientes con y
sin enfermedad cardiaca mostraron evidencia de diferencias para varias
características. Mediante la prueba t de Welch se obtuvieron diferencias
estadísticamente significativas para age (\(p<0.001\)), rest_bp (\(p=0.0088\)), max_hr (\(p<0.001\)) y oldpeak (\(p<0.001\)). En cambio, para
chol no se encontró evidencia suficiente de diferencia
mediante esta prueba (\(p=0.165\)).
Como análisis complementario se utilizaron pruebas de Wilcoxon en
variables cuya distribución o presencia de valores atípicos hacía
conveniente una comparación no paramétrica. Para oldpeak se
mantuvo una evidencia clara de diferencia entre los grupos (\(p<0.001\)), mientras que para
chol se obtuvo un resultado cercano al nivel de
significancia convencional (\(p=0.0467\)). En consecuencia, la evidencia
para chol se consideró menos consistente que para las demás
variables.
Para estudiar la relación entre las variables categóricas y
ahd se utilizaron pruebas de independencia chi-cuadrado. Se
encontró evidencia de asociación con la presencia de enfermedad cardiaca
para sex, chest_pain, rest_ecg,
ex_ang, slope, ca y
thal.
Los patrones más notorios se observaron en chest_pain,
ex_ang, ca y thal. Por ejemplo,
la enfermedad fue más frecuente entre los pacientes con dolor torácico
asintomático, con angina inducida por ejercicio, con mayor número de
vasos principales afectados y con un resultado reversable
en thal. En contraste, fbs no presentó
evidencia de asociación con ahd (\(p=1\)).
El análisis de correlación entre las variables numéricas permitió examinar posibles relaciones lineales y detectar problemas de redundancia. No se observaron correlaciones suficientemente altas entre las principales variables numéricas como para sugerir un problema evidente de multicolinealidad. Por tanto, la matriz de correlación no justificó por sí sola la eliminación de variables antes del modelado.
Selección de variables candidatas. Considerando conjuntamente los resultados del EDA, las pruebas de hipótesis, las pruebas de asociación y las correlaciones, se definieron conjuntos de variables candidatas para los dos tipos de modelado.
Para la regresión lineal, cuya variable respuesta
fue max_hr, se consideraron seis predictores:
age, sex, rest_bp,
chol, oldpeak y ahd. La selección
se apoyó en las relaciones observadas entre las variables numéricas y
max_hr, así como en las comparaciones de
max_hr entre las categorías de sex y
ahd.
# Correlaciones con max_hr
cor_lineal <- heart_eda |>
select(age, rest_bp, chol, oldpeak, max_hr) |>
cor(use = "complete.obs")
round(
cor_lineal["max_hr", c("age", "rest_bp", "chol", "oldpeak")],
3
)
## age rest_bp chol oldpeak
## -0.395 -0.049 0.000 -0.348
# Comparaciones de max_hr para variables categóricas
c(
sex = t.test(max_hr ~ sex, data = heart_eda)$p.value,
ahd = t.test(max_hr ~ ahd, data = heart_eda)$p.value
)
## sex ahd
## 2.638291e-01 6.107938e-14
Los resultados muestran que age y oldpeak
presentan las relaciones lineales más claras con max_hr,
con correlaciones de aproximadamente -0.395 y -0.348, respectivamente.
En cambio, rest_bp y chol muestran
correlaciones muy débiles. Por otra parte, las comparaciones por grupos
indican diferencias en max_hr tanto según sex
(\(p=0.026\)) como, de manera
especialmente marcada, según ahd (\(p<0.001\)). Con base en estos resultados
y en el análisis previo, se consideraron age,
sex, rest_bp, chol,
oldpeak y ahd como predictores candidatos para
el modelo lineal, permitiendo posteriormente evaluar su aporte
conjunto.
Para la regresión logística, cuya variable respuesta fue
ahd, se consideraron inicialmente nueve predictores:
age, sex, chest_pain,
max_hr, ex_ang, oldpeak,
slope, ca y thal. La selección se
apoyó en las diferencias observadas para las variables numéricas y en
las pruebas de asociación realizadas para las variables categóricas.
# Variables numéricas candidatas para explicar AHD
p_num_log <- sapply(
c("age", "max_hr", "oldpeak"),
function(v) {
t.test(heart_eda[[v]] ~ heart_eda$ahd)$p.value
}
)
# Variables categóricas candidatas para explicar AHD
p_cat_log <- sapply(
c("sex", "chest_pain", "ex_ang", "slope", "ca", "thal"),
function(v) {
suppressWarnings(
chisq.test(table(heart_eda[[v]], heart_eda$ahd))$p.value
)
}
)
round(c(p_num_log, p_cat_log), 4)
## age max_hr oldpeak sex chest_pain ex_ang slope
## 1e-04 0e+00 0e+00 0e+00 0e+00 0e+00 0e+00
## ca thal
## 0e+00 0e+00
En conjunto, estas pruebas respaldaron el uso de las variables
anteriores como candidatas para el modelado de ahd. Sin
embargo, la selección en esta etapa no implica que todas deban
permanecer en el modelo final, ya que una variable puede mostrar una
relación importante de manera individual y aportar poca información
adicional cuando se analiza simultáneamente con otros predictores. Por
esta razón, en la siguiente etapa se ajustaron y compararon diferentes
modelos.
En la Actividad 4 se construyeron modelos estadísticos con dos
objetivos diferentes. Primero se ajustó un modelo de regresión
lineal múltiple para estudiar la frecuencia cardiaca máxima
(max_hr). Posteriormente se ajustaron dos modelos de
regresión logística múltiple para estudiar la presencia
de enfermedad cardiaca mediante ahd: un modelo inicial y un
modelo reducido. La elección del tipo de regresión respondió a la
naturaleza de cada variable respuesta.
Antes del ajuste, las variables categóricas utilizadas en los modelos se definieron como factores para que R las tratara de acuerdo con su naturaleza.
heart_modelo <- heart_eda |>
mutate(
sex = factor(sex),
chest_pain = factor(chest_pain),
ex_ang = factor(ex_ang),
slope = factor(slope),
ca = factor(ca),
thal = factor(thal),
ahd = factor(ahd)
)
La variable respuesta fue max_hr y se utilizaron
seis variables predictoras: age,
sex, rest_bp, chol,
oldpeak y ahd. El objetivo fue evaluar cómo
estas características se relacionan conjuntamente con la frecuencia
cardiaca máxima alcanzada.
modelo_lm_1 <- lm(
max_hr ~ age + sex + rest_bp + chol + oldpeak + ahd,
data = heart_modelo
)
metricas_lm <- tibble(
R2 = summary(modelo_lm_1)$r.squared,
R2_ajustado = summary(modelo_lm_1)$adj.r.squared
)
knitr::kable(
metricas_lm,
format = "html",
digits = 3,
col.names = c("R²", "R² ajustado"),
caption = "Métricas del modelo de regresión lineal"
) |>
kableExtra::kable_styling(
bootstrap_options = c("striped", "hover", "condensed"),
full_width = FALSE,
position = "center"
)
| R² | R² ajustado |
|---|---|
| 0.319 | 0.305 |
El modelo obtuvo un \(R^2\)
aproximado de 0.319 y un \(R^2\) ajustado de 0.305.
Esto significa que las seis variables incluidas explican alrededor del
31.9 % de la variabilidad observada en
max_hr. Entre los coeficientes más relevantes se
encontraron age y oldpeak, ambos con
asociaciones negativas con la frecuencia cardiaca máxima. También se
observaron diferencias relacionadas con ahd.
Para estudiar directamente la presencia de enfermedad cardiaca se
utilizó ahd_binaria como respuesta, donde 0 representa
ausencia y 1 presencia de enfermedad.
El modelo logístico inicial utilizó nueve
variables predictoras: age, sex,
chest_pain, max_hr, ex_ang,
oldpeak, slope, ca y
thal.
Posteriormente se ajustó un modelo logístico
reducido con seis variables predictoras:
sex, chest_pain, oldpeak,
slope, ca y thal. Por lo tanto,
respecto al modelo inicial se eliminaron age,
max_hr y ex_ang.
# Modelo logístico inicial: 9 predictores
modelo_log_1 <- glm(
ahd_binaria ~ age + sex + chest_pain + max_hr +
ex_ang + oldpeak + slope + ca + thal,
data = heart_modelo,
family = binomial
)
# Modelo logístico reducido: 6 predictores
modelo_log_0 <- glm(
ahd_binaria ~ sex + chest_pain + oldpeak +
slope + ca + thal,
data = heart_modelo,
family = binomial
)
En regresión logística, los coeficientes indican cambios en las
odds de presentar enfermedad cardiaca, manteniendo constantes
las demás variables. Entre los términos que conservaron mayor relevancia
en el modelo reducido estuvieron los relacionados con sex,
chest_pain, oldpeak, ca y
thal.
Para comparar los dos modelos se utilizaron el AIC y la exactitud de clasificación, considerando un umbral de probabilidad de 0.5.
# Probabilidades estimadas
prob_log_1 <- predict(
modelo_log_1,
type = "response"
)
prob_log_0 <- predict(
modelo_log_0,
type = "response"
)
# Clasificación con umbral de 0.5
pred_log_1 <- ifelse(prob_log_1 >= 0.5, 1, 0)
pred_log_0 <- ifelse(prob_log_0 >= 0.5, 1, 0)
# Tabla comparativa
metricas_log <- tibble(
Modelo = c(
"Inicial (9 predictores)",
"Reducido (6 predictores)"
),
AIC = c(
AIC(modelo_log_1),
AIC(modelo_log_0)
),
Exactitud = c(
mean(pred_log_1 == heart_modelo$ahd_binaria),
mean(pred_log_0 == heart_modelo$ahd_binaria)
)
)
knitr::kable(
metricas_log,
digits = 3,
caption = "Comparación de los modelos logísticos"
)
| Modelo | AIC | Exactitud |
|---|---|---|
| Inicial (9 predictores) | 225.478 | 0.875 |
| Reducido (6 predictores) | 224.204 | 0.865 |
El modelo inicial presentó un AIC de 225.48 y una exactitud aproximada de 87.5 %, mientras que el modelo reducido obtuvo un AIC de 224.20 y una exactitud aproximada de 86.5 %. El modelo inicial clasificó correctamente una proporción ligeramente mayor de pacientes, pero el modelo reducido utilizó tres predictores menos y obtuvo un AIC menor. Por esta razón, el modelo reducido se consideró una alternativa más sencilla, al mantener un desempeño similar con menos variables.
La comparación debe interpretarse con cautela, ya que la exactitud fue calculada sobre los mismos 297 pacientes utilizados para ajustar los modelos. Por tanto, estas métricas describen su comportamiento en la muestra analizada y no garantizan el mismo desempeño con pacientes nuevos. Los modelos tienen un propósito académico y no deben interpretarse como herramientas de diagnóstico clínico sin una validación posterior.
El análisis exploratorio mostró diferencias entre los pacientes con y
sin enfermedad cardiaca. Entre las variables numéricas destacaron
max_hr, que tendió a presentar valores menores en pacientes
con enfermedad, y oldpeak y ca, cuyos valores
tendieron a ser mayores. Entre las variables categóricas, los patrones
más notorios se observaron en chest_pain,
ex_ang y thal.
El análisis inferencial confirmó varios de estos hallazgos. Se
encontraron diferencias estadísticamente significativas por
ahd para age, rest_bp,
max_hr y oldpeak. Asimismo, las pruebas de
independencia mostraron evidencia de asociación con ahd
para sex, chest_pain, rest_ecg,
ex_ang, slope, ca y
thal. En contraste, fbs no mostró evidencia de
asociación, mientras que los resultados para chol fueron
menos consistentes entre las pruebas realizadas.
A partir de la evidencia exploratoria e inferencial se construyó un
modelo de regresión lineal múltiple para max_hr utilizando
seis variables predictoras: age,
sex, rest_bp, chol,
oldpeak y ahd. El modelo obtuvo un \(R^2\) de 0.319 y un \(R^2\) ajustado de 0.305,
por lo que explicó aproximadamente el 31.9 % de la variabilidad
observada en la frecuencia cardiaca máxima. Entre los efectos
más claros se encontraron las asociaciones negativas de age
y oldpeak con max_hr.
Para estudiar la presencia de enfermedad cardiaca se ajustó
inicialmente un modelo de regresión logística con nueve
variables predictoras: age, sex,
chest_pain, max_hr, ex_ang,
oldpeak, slope, ca y
thal. Este modelo presentó un AIC de
225.48 y una exactitud aproximada de 87.5 % al
utilizar un umbral de clasificación de 0.5.
Posteriormente se obtuvo un modelo logístico reducido con
seis variables: sex,
chest_pain, oldpeak, slope,
ca y thal. El modelo reducido presentó un
AIC de 224.20 y una exactitud aproximada de
86.5 %. Aunque la exactitud disminuyó ligeramente, el modelo
utilizó tres variables menos y obtuvo un AIC menor, por lo que se
consideró una alternativa más sencilla que mantiene un desempeño
similar con menos variables. Entre sus efectos más destacados
se encontraron los asociados con sex,
chest_pain, oldpeak, ca y
thal; por ejemplo, se obtuvieron odds ratios aproximados de
3.81 para el sexo masculino, 1.63 para
oldpeak y 5.16 para la categoría
reversible de thal.
En conjunto, los resultados indican que la presencia de enfermedad cardiaca en esta muestra no parece estar relacionada con una sola característica, sino con la combinación de varios indicadores clínicos. Estos hallazgos deben interpretarse como asociaciones estadísticas dentro del conjunto de datos analizado y no como relaciones causales ni como un procedimiento de diagnóstico médico.
Durante el proyecto se identificaron principalmente problemas relacionados con valores faltantes, nombres poco adecuados de variables y variables categóricas que inicialmente estaban codificadas como numéricas. También fue necesario decidir cómo tratar posibles valores atípicos y seleccionar las pruebas estadísticas más apropiadas según el tipo y comportamiento de cada variable.
El análisis exploratorio permitió reconocer patrones y diferencias
iniciales, mientras que el análisis inferencial aportó evidencia para
seleccionar las variables candidatas. En el modelado, la regresión
lineal múltiple explicó aproximadamente el 31.9 % de la
variabilidad de max_hr. Por otra parte, el modelo
logístico inicial alcanzó una exactitud aproximada de 87.5
%, mientras que el modelo reducido obtuvo 86.5
% y disminuyó el AIC de 225.48 a 224.20. De
esta manera, el modelo reducido permitió mantener un desempeño similar
utilizando menos variables y una estructura más sencilla. Sin embargo,
este análisis no permite afirmar que se haya encontrado el modelo más
sencillo o el modelo óptimo, ya que podrían evaluarse otras
combinaciones de variables y realizarse procedimientos adicionales de
selección y validación.
El análisis del conjunto Heart Disease permitió identificar
que la presencia de enfermedad cardiaca está asociada con varias
características clínicas y no con una sola variable. Entre las variables
que mostraron mayor relevancia a lo largo de las distintas etapas
estuvieron age, sex, max_hr,
oldpeak, ca, chest_pain,
ex_ang y thal.
El análisis exploratorio permitió reconocer patrones y diferencias
iniciales, mientras que el análisis inferencial aportó evidencia para
seleccionar las variables candidatas. En el modelado, la regresión
lineal múltiple explicó aproximadamente el 31.9 % de la
variabilidad de max_hr. Por otra parte, el modelo
logístico inicial alcanzó una exactitud aproximada de 87.5
%, mientras que el modelo reducido obtuvo 86.5
% y disminuyó el AIC de 225.48 a 224.20. De
esta manera, el modelo reducido permitió mantener un desempeño similar
utilizando menos variables y una estructura más sencilla. Sin embargo,
este análisis no permite afirmar que se haya encontrado el modelo más
sencillo o el modelo óptimo, ya que podrían evaluarse otras
combinaciones de variables y realizarse procedimientos adicionales de
selección y validación.
Los resultados deben interpretarse con cautela, ya que corresponden a una muestra específica y muestran asociaciones, no relaciones causales. Además, los modelos tienen un propósito académico y no deben utilizarse como herramientas de diagnóstico clínico sin una validación adicional con nuevos datos.
Triola, M. F. (2018). Elementary Statistics (13th ed.). Pearson.
Wasserman, L. (2004). All of Statistics: A Concise Course in Statistical Inference. Springer.
Wickham, H., Çetinkaya-Rundel, M., & Grolemund, G. (2023). R for Data Science (2nd ed.). O’Reilly.
Zar, J. H. (2010). Biostatistical Analysis (5th ed.). Pearson.