Este documento contiene las instrucciones y enunciados asociados a la Prueba Especial Programada 2 (PEP2) del curso de Estadística Computacional modalidad diurna. Con respecto a ello:
A ustedes se les ha pedido estudiar el conjunto de datos asociado al diagnóstico de enfermedad arterial coronaria (Detrano et al. 1989) (disponible en UCI Machine Learning Repository), en particular el asociado a la base de datos de Cleveland (processed.cleveland.data). Para esto deberá realizar las siguientes actividades, contextualizando todas sus respuestas con relación al problema:
Caracterización del conjunto de datos (15 puntos). Realice una descripción detallada del conjunto de datos, explicando el significado de cada variable. Asegúrese de incluir una discusión sobre el tipo de variable (numérica, categórica) y cualquier valor faltante o inusual que deba tenerse en cuenta durante el análisis. Se espera una caracterización completa y precisa, que incluya una tabla resumen con las estadísticas descriptivas de las variables numéricas y una breve explicación de su relevancia en el contexto del diagnóstico de enfermedades cardíacas. Asegúrese de incluir gráficos.
El conjunto de datos a trabajar durante la evaluación posee las siguientes variables:
Nombre_de_variable | Tipo_de_dato | Descripción |
---|---|---|
age | Numérico, discreto | Edad de pacientes en años |
sex | Categórico | Sexo (1: hombre, 0: mujer) |
cp | Categórico | Tipo de dolor de pecho (1: angina típica, 2: angina atípica, 3: dolor no anginoso, 4: asintomático) |
trestbps | Numérico, discreto | Presión arterial en reposo medida al ingresar al hospital (mm Hg) |
chol | Numérico, discreto | Nivel de colesterol sérico (mg/dl) |
fbs | Categórico | Nivel de azúcar en sangre en ayunas > 120 mg/dl (1: verdadero, 0: falso) |
restecg | Categórico | Resultados del electrocardiograma en reposo (0: normal, 1: anomalía ST-T, 2: hipertrofia ventricular izquierda) |
thalach | Numérico, discreto | Frecuencia cardíaca máxima alcanzada |
exang | Categórico | Angina inducida por ejercicio (1: sí, 0: no) |
oldpeak | Numérico, discreto | Depresión del segmento ST inducida por ejercicio respecto al reposo |
slope | Categórico | Pendiente del segmento ST (0: descendente, 1: plano, 2: ascendente) |
ca | Numérico, discreto | Número de vasos principales coloreados por fluoroscopia (0-3) |
thal | Categórico | Tipo de talasemia (3: normal, 6: defecto fijo, 7: defecto reversible) |
num | Categórico | Presencia de enfermedad cardíaca (0: no, 1 a 4 presencia de enfermedad) - Variable dependiente |
La documentación asociada al conjunto de datos indica que la variable objetivo (dependiente) es “num”, por lo que se puede caracterizar cada una del resto de las varibles independientes con base a esta.
La variable “age” describe la edad de los pacientes en años, con un rango de 29 a 77 años y un promedio de 54.44 ± 9.04 años. La distribución de esta variable con respecto a la variable dependiente “num” se presenta a continuación:
La variable “sex” corresponde al sexo biológico de los(as) pacientes, distribuyéndose en 97 mujeres (0) y 206 hombres (1). La distribución de esta variable en relación con la variable dependiente “num” se presenta a continuación:
La variable “cp”, asociada al tipo de dolor de pecho, se distribuye de la siguiente manera: 23 casos de angina típica (1), 50 casos de angina atípica (2), 86 casos de dolor no anginoso (3) y 144 casos asintomáticos (4). La distribución de esta variable en relación con la variable dependiente “num” se detalla a continuación:
Esta variable describe la presión arterial en reposo de los(as) pacientes medida al ingresar al hospital. Su rango va desde 94 a 200 mmHg y un promedio de 131.69 ± 17.6 mmHg. La distribución de esta variable con respecto a la variable dependiente “num” se presenta a continuación:
Esta variable describe el nivel de colesterol sérico en mg/dl de los(as) pacientes medido al ingresar al hospital. Su rango va desde 126 a 564 mg/dl y un promedio de 246.69 ± 51.78 mg/dl. La distribución de esta variable con respecto a la variable dependiente “num” se presenta a continuación:
Esta variable describe si la glucosa en ayunas es mayor a 120 mg/dl (1 = verdadero; 0 = falso). Se distribuye en 45 pacientes con glucosa en ayunas mayor a 120 mg/dl (1) y 258 pacientes con glucosa en ayunas menor o igual a 120 mg/dl (0). La distribución de esta variable con respecto a la variable dependiente “num” se presenta a continuación:
La variable “restecg” describe los resultados del electrocardiograma en reposo, con las siguientes categorías: 151 casos con un electrocardiograma normal (0), 4 casos con una anomalía de la onda ST-T (1), y 148 casos con hipertrofia ventricular izquierda probable o definitiva (2). La distribución de esta variable con respecto a la variable dependiente “num” se presenta a continuación:
La variable “thalach” describe la frecuencia cardíaca máxima alcanzada durante el ejercicio, medida en latidos por minuto (bpm). Su rango va desde 71 a 202 bpm, con un promedio de 149.61 ± 22.88 bpm. La distribución de esta variable con respecto a la variable dependiente “num” se presenta a continuación:
La variable “exang” indica si el paciente experimentó angina inducida por el ejercicio (1 = Sí, 0 = No). Se distribuye en 99 pacientes que experimentaron angina inducida por el ejercicio (1) y 204 pacientes que no la experimentaron (0). La distribución de esta variable con respecto a la variable dependiente “num” se presenta a continuación:
La variable “oldpeak” representa la depresión del segmento ST inducida por el ejercicio en relación con el reposo, medida en milímetros. Su rango va desde 0 a 6.2 mm, con un promedio de 1.04 ± 1.16 mm. La distribución de esta variable con respecto a la variable dependiente “num” se presenta a continuación:
La variable “slope” describe la pendiente del segmento ST en el electrocardiograma durante el ejercicio, con las siguientes categorías: 142 casos con pendiente ascendente (1), 140 casos con pendiente plana (2), y 21 casos con pendiente descendente (3). La distribución de esta variable con respecto a la variable dependiente “num” se presenta a continuación:
La variable “ca” representa el número de vasos principales (de 0 a 3) coloreados por fluoroscopia. Su rango va desde 0 a 3, con un promedio de 0.67 ± 0.93. Este conjunto presenta 4 casos faltantes de valores, los que fueron reemplazados por el valor promedio de estos datos. La distribución de esta variable con respecto a la variable dependiente “num” se presenta a continuación:
La variable “thal” describe el tipo de talasemia con las siguientes categorías: 168 casos con talasemia normal (3), 18 casos con defecto fijo (6), y 117 casos con defecto reversible (7). En este caso, existen dos datos “NA”, que fueron reemplazador por la mediana de los datos. La distribución de esta variable con respecto a la variable dependiente “num” se presenta a continuación:
La variable num
indica la presencia y severidad de la
enfermedad cardíaca, categorizada de la siguiente manera:
164 casos sin enfermedad cardíaca (0) y
139 casos con enfermedad cardíaca (1 a 4, con severidad
creciente). Después de reemplazar los valores NA
con la
moda, la distribución de esta variable es la siguiente:
Análisis de relación entre variables (20 puntos). Investigue si existe una relación significativa entre la edad de los(as) pacientes y las siguientes variables: presión arterial en reposo, colesterol sérico, frecuencia cardíaca máxima alcanzada, y diagnóstico de enfermedad cardíaca. Construya modelos de regresión lineal y realice una interpretación de los resultados.
Para investigar la relación entre la edad de los pacientes y las variables presión arterial en reposo, colesterol sérico, frecuencia cardíaca máxima alcanzada y diagnóstico de enfermedad cardíaca, se propone el siguiente análisis:
2.1 Análisis de correlación. Primero, se calculará la matriz de correlación entre la variable “edad” y las variables numéricas seleccionadas (presión arterial en reposo, colesterol sérico, frecuencia cardíaca máxima alcanzada) utilizando el coeficiente de correlación de Pearson. Esto permitirá evaluar la “fuerza” y la dirección de la relación lineal entre estas variables.
Los resultados muestran que no existe una fuerte tendencia entre las variables independientes y la variable “edad” (dependiente), ya que todos los coeficientes de correlación son menores en valor absoluto a |0.5|. Esto indica que las relaciones lineales entre la edad y las variables estudiadas son débiles.
2.2 Modelos de regresión lineal simple. A continuación, se construirá un modelo de regresión lineal para cada variable independiente (presión arterial en reposo, colesterol sérico, frecuencia cardíaca máxima alcanzada) en función de la edad. Es necesario señalar que la variable “diagnóstico de enfermedad cardíaca” es categórica, por lo que debiese usarse otro enfoque para tratar esta variable (spoiler, regresión logística).
El modelo de regresión asociado es el siguiente:
##
## Call:
## lm(formula = age ~ trestbps, data = data_UCI)
##
## Residuals:
## Min 1Q Median 3Q Max
## -25.192 -6.192 0.540 6.284 23.540
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 35.16759 3.76973 9.329 < 2e-16 ***
## trestbps 0.14634 0.02837 5.157 4.55e-07 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 8.678 on 301 degrees of freedom
## Multiple R-squared: 0.08119, Adjusted R-squared: 0.07814
## F-statistic: 26.6 on 1 and 301 DF, p-value: 4.547e-07
El análisis de regresión lineal entre la presión arterial en reposo (trestbps) y la edad muestra una relación positiva significativa (coeficiente = 0.146, p < 0.001). Sin embargo, la relación es débil, ya que el R-cuadrado ajustado es bajo (0.078), indicando que solo una pequeña proporción de la variabilidad en la edad es explicada por trestbps, por lo que no explica la edad.
El modelo de regresión asociado es el siguiente:
##
## Call:
## lm(formula = age ~ chol, data = data_UCI)
##
## Residuals:
## Min 1Q Median 3Q Max
## -23.8817 -6.4804 0.4404 6.3248 23.3737
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 45.44049 2.48015 18.322 < 2e-16 ***
## chol 0.03648 0.00984 3.707 0.00025 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 8.854 on 301 degrees of freedom
## Multiple R-squared: 0.04366, Adjusted R-squared: 0.04048
## F-statistic: 13.74 on 1 and 301 DF, p-value: 0.0002496
El análisis de regresión lineal entre el colesterol sérico (chol) y la edad muestra una relación positiva significativa (coeficiente = 0.036, p < 0.001). Sin embargo, esta relación es débil, ya que el R-cuadrado ajustado es bajo (0.040), indicando que solo alrededor del 4% de la variabilidad en la edad es explicada por el colesterol. El modelo sugiere que, en promedio, la edad aumenta ligeramente con el aumento del colesterol, pero la variabilidad no explicada es considerable.
El modelo de regresión asociado es el siguiente:
##
## Call:
## lm(formula = age ~ thalach, data = data_UCI)
##
## Residuals:
## Min 1Q Median 3Q Max
## -22.4899 -6.6559 0.5558 6.3567 24.4894
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 77.71867 3.16826 24.530 < 2e-16 ***
## thalach -0.15561 0.02093 -7.433 1.11e-12 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 8.322 on 301 degrees of freedom
## Multiple R-squared: 0.1551, Adjusted R-squared: 0.1523
## F-statistic: 55.25 on 1 and 301 DF, p-value: 1.109e-12
El análisis de regresión lineal entre la frecuencia cardíaca máxima alcanzada (thalach) y la edad muestra una relación negativa significativa (coeficiente = -0.156, p < 0.001). Esto sugiere que a medida que la edad aumenta, la frecuencia cardíaca máxima disminuye. Aunque la relación es más fuerte que en análisis previos, sigue siendo moderada, con un R-cuadrado ajustado de 0.1523, lo que indica que aproximadamente el 15% de la variabilidad en la edad puede ser explicada por la frecuencia cardíaca máxima alcanzada. La disminución de la frecuencia cardíaca con la edad es consistente con el envejecimiento fisiológico.
Si bien, la variable target “num” es categórica, de todas maneras construiremos una aproximación lineal. Esta es la siguiente:
##
## Call:
## lm(formula = num ~ age, data = data_UCI)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.5904 -0.8937 -0.5302 0.8034 3.5606
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -0.711676 0.421439 -1.689 0.0923 .
## age 0.030290 0.007637 3.966 9.14e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.2 on 301 degrees of freedom
## Multiple R-squared: 0.04966, Adjusted R-squared: 0.04651
## F-statistic: 15.73 on 1 and 301 DF, p-value: 9.136e-05
El análisis de regresión lineal simple entre la edad (age) y la variable num (diagnóstico de enfermedad cardíaca) muestra una relación positiva y significativa (coeficiente = 0.030, p < 0.001). Esto indica que, en promedio, a medida que la edad aumenta, el valor de num (que indica la presencia y severidad de la enfermedad cardíaca) también tiende a aumentar. Sin embargo, el coeficiente de determinación ajustado (R-cuadrado ajustado) es bajo (0.0465), lo que sugiere que solo alrededor del 4.65% de la variabilidad en num es explicada por la edad. Esto implica que, aunque la edad tiene un efecto significativo, existen otros factores importantes que afectan el diagnóstico de enfermedad cardíaca y no están capturados por este modelo.
2.3 Análisis de regresión lineal múltiple. Por último, se construirá un modelo de regresión lineal múltiple para evaluar cómo las variables edad, presión arterial en reposo, colesterol sérico y frecuencia cardíaca máxima alcanzada, en conjunto, afectan la variable de diagnóstico de enfermedad cardíaca. Este análisis permitirá determinar la contribución individual de cada variable al modelo y cómo influyen colectivamente en la variable dependiente.
##
## Call:
## lm(formula = num ~ age + trestbps + chol + thalach, data = data_UCI)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.9237 -0.7617 -0.2875 0.5845 3.9247
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2.571582 0.820450 3.134 0.00189 **
## age 0.002413 0.008198 0.294 0.76871
## trestbps 0.008939 0.003806 2.349 0.01949 *
## chol 0.001166 0.001269 0.919 0.35892
## thalach -0.021594 0.003057 -7.064 1.15e-11 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 1.11 on 298 degrees of freedom
## Multiple R-squared: 0.1945, Adjusted R-squared: 0.1837
## F-statistic: 17.99 on 4 and 298 DF, p-value: 3.013e-13
El modelo de regresión lineal múltiple muestra que la frecuencia cardíaca máxima alcanzada (thalach) tiene un impacto significativo y negativo en el diagnóstico de enfermedad cardíaca (num) (coeficiente = -0.022, p < 0.001), mientras que la presión arterial en reposo (trestbps) también tiene un efecto positivo y significativo (coeficiente = 0.009, p = 0.019). Sin embargo, la edad (age) y el colesterol sérico (chol) no son predictores significativos. El R-cuadrado ajustado de 0.184 indica que aproximadamente el 18.4% de la variabilidad en num es explicada por este modelo. Esto sugiere que, aunque el modelo captura parte de la variabilidad, otros factores no incluidos podrían ser importantes.
Análisis de diferencias significativas (25 puntos). Determine si existe una diferencia significativa entre alguna variable y el diagnóstico de enfermedad cardíaca. Considere 0 para las personas que no tienen problemas y 1 o más como que presentan alguna condición. Seleccione al menos 5 variables para este análisis y justifique el criterio de selección.
Para realizar este análisis, utilizaremos las cuatro variables estudiadas en la pregunta anterior. Primero, es necesario binarizar la variable dependiente “Diagnóstico de enfermedad cardíaca (num)”, de manera que 0 indique la ausencia de problemas cardíacos y 1 indique la presencia de alguna condición. Esto se puede lograr con el siguiente código:
Posteriormente es necesario evaluar el cumplimiento de las condiciones paramétricas, normalidad y homocedasticidad, esto puede ser realizado como:
# Evaluación de normalidad por clase
shapiro_age_0 = shapiro.test(data_UCI$age[data_UCI$num_binary == 0])
shapiro_age_1 = shapiro.test(data_UCI$age[data_UCI$num_binary == 1])
shapiro_trestbps_0 = shapiro.test(data_UCI$trestbps[data_UCI$num_binary == 0])
shapiro_trestbps_1 = shapiro.test(data_UCI$trestbps[data_UCI$num_binary == 1])
shapiro_chol_0 = shapiro.test(data_UCI$chol[data_UCI$num_binary == 0])
shapiro_chol_1 = shapiro.test(data_UCI$chol[data_UCI$num_binary == 1])
shapiro_thalach_0 = shapiro.test(data_UCI$thalach[data_UCI$num_binary == 0])
shapiro_thalach_1 = shapiro.test(data_UCI$thalach[data_UCI$num_binary == 1])
# Evaluación de homocedasticidad
library("car")
levene_age = leveneTest(age ~ as.factor(num_binary), data = data_UCI)
levene_trestbps = leveneTest(trestbps ~ as.factor(num_binary), data = data_UCI)
levene_chol = leveneTest(chol ~ as.factor(num_binary), data = data_UCI)
levene_thalach = leveneTest(thalach ~ as.factor(num_binary), data = data_UCI)
# Crear la tabla con los p-valores
p_values = data.frame(
Variable = rep(c("age", "trestbps", "chol", "thalach"), each = 2),
Clase = rep(c("Sin enfermedad", "Con enfermedad"), times = 4),
`Shapiro-Wilk p-value (Normalidad)` = c(shapiro_age_0$p.value, shapiro_age_1$p.value,
shapiro_trestbps_0$p.value, shapiro_trestbps_1$p.value,
shapiro_chol_0$p.value, shapiro_chol_1$p.value,
shapiro_thalach_0$p.value, shapiro_thalach_1$p.value),
`Levene p-value (Homocedasticidad)` = rep(c(levene_age$`Pr(>F)`[1],
levene_trestbps$`Pr(>F)`[1],
levene_chol$`Pr(>F)`[1],
levene_thalach$`Pr(>F)`[1]), each = 2)
)
names(p_values) = c("Variable","Clase", "Normalidad (SW)","LeveneTest (Homocedasticidad)")
# Mostrar la tabla
p_values %>%
kbl(caption = "Tabla 2. P-valores para Normalidad por Clase y Homocedasticidad") %>%
kable_classic_2(full_width = T, html_font = "Cambria", bootstrap_options = "striped")
Variable | Clase | Normalidad (SW) | LeveneTest (Homocedasticidad) |
---|---|---|---|
age | Sin enfermedad | 0.1320410 | 0.0051667 |
age | Con enfermedad | 0.0022558 | 0.0051667 |
trestbps | Sin enfermedad | 0.0115609 | 0.1583120 |
trestbps | Con enfermedad | 0.0001173 | 0.1583120 |
chol | Sin enfermedad | 0.0000000 | 0.7032232 |
chol | Con enfermedad | 0.4025547 | 0.7032232 |
thalach | Sin enfermedad | 0.0005433 | 0.0229960 |
thalach | Con enfermedad | 0.3523170 | 0.0229960 |
Al evaluar los p-valores, ninguna de las variables cumple con las condiciones de normalidad. Por lo tanto, es necesario aplicar la prueba de Mann-Whitney U, que es una prueba no paramétrica adecuada para comparar dos muestras independientes.
library("tidyr")
library("dplyr")
# Calcular estadísticos por clase
stats_summary = data_UCI %>%
group_by(num_binary) %>%
summarise(
age_mean = mean(age, na.rm = TRUE),
age_sd = sd(age, na.rm = TRUE),
age_median = median(age, na.rm = TRUE),
trestbps_mean = mean(trestbps, na.rm = TRUE),
trestbps_sd = sd(trestbps, na.rm = TRUE),
trestbps_median = median(trestbps, na.rm = TRUE),
chol_mean = mean(chol, na.rm = TRUE),
chol_sd = sd(chol, na.rm = TRUE),
chol_median = median(chol, na.rm = TRUE),
thalach_mean = mean(thalach, na.rm = TRUE),
thalach_sd = sd(thalach, na.rm = TRUE),
thalach_median = median(thalach, na.rm = TRUE)
) %>%
pivot_longer(cols = -num_binary, names_to = c("Variable", ".value"), names_sep = "_") %>%
pivot_wider(names_from = num_binary, values_from = c(mean, sd, median))
# Prueba de Mann-Whitney U para cada variable
mann_whitney_age = wilcox.test(age ~ num_binary, data = data_UCI)
mann_whitney_trestbps = wilcox.test(trestbps ~ num_binary, data = data_UCI)
mann_whitney_chol = wilcox.test(chol ~ num_binary, data = data_UCI)
mann_whitney_thalach = wilcox.test(thalach ~ num_binary, data = data_UCI)
# Crear la tabla con los p-valores de Mann-Whitney U
p_values_mann_whitney = data.frame(
Variable = c("age", "trestbps", "chol", "thalach"),
`Mann Whitney U Test (p.value)` = c(mann_whitney_age$p.value,
mann_whitney_trestbps$p.value,
mann_whitney_chol$p.value,
mann_whitney_thalach$p.value)
)
# Combinar estadísticos con los p-valores
final_table = left_join(stats_summary, p_values_mann_whitney, by = "Variable")
# Redondear los valores a 3 decimales
final_table = final_table %>%
mutate(across(where(is.numeric), round, 3))
names(final_table) = c("Variable","Promedio C0","Promedio C1","Desv. Estándar C0","Desv. Estándar C1","Mediana C0","Mediana C1","Mann Whitney UTest (p.value)")
# Mostrar la tabla
final_table %>%
kbl(caption = "Tabla 3. Estadísticos Descriptivos y P-valores de la Prueba de Mann-Whitney U para Comparación de Grupos
(0 = Sin enfermedad, 1 = Con enfermedad)") %>%
kable_classic_2(full_width = T, html_font = "Cambria", bootstrap_options = "striped")
Variable | Promedio C0 | Promedio C1 | Desv. Estándar C0 | Desv. Estándar C1 | Mediana C0 | Mediana C1 | Mann Whitney UTest (p.value) |
---|---|---|---|---|---|---|---|
age | 52.585 | 56.626 | 9.512 | 7.938 | 52.0 | 58 | 0.000 |
trestbps | 129.250 | 134.568 | 16.205 | 18.769 | 130.0 | 130 | 0.026 |
chol | 242.640 | 251.475 | 53.457 | 49.487 | 234.5 | 249 | 0.035 |
thalach | 158.378 | 139.259 | 19.199 | 22.593 | 161.0 | 142 | 0.000 |
Según los resultados, la edad, la presión arterial en reposo y el colesterol sérico tienden a ser significativamente mayores (con un nivel de confianza del 95%) en los pacientes con enfermedad cardíaca, mientras que la frecuencia cardíaca máxima tiende a ser significativamente menor en este grupo.
Por último, estudiaremos la variable exang, que indica la presencia de angina inducida por el ejercicio. Esta variable posee valores binarios (0: sin angina, 1: con angina). Dado que es una variable categórica, evaluaremos las proporciones en los diferentes grupos utilizando la prueba de Chi-cuadrado. El código para realizar este análisis es el siguiente:
Angina Inducida (exang) | Sin Enfermedad | Con Enfermedad | |
---|---|---|---|
Sin angina | 0 | 141 | 63 |
Con angina | 1 | 23 | 76 |
Según los datos y el valor p obtenido en la prueba de chi-cuadrado, existe una asociación estadísticamente significativa entre la presencia de enfermedad cardíaca y la angina inducida por ejercicio. Esto indica que los pacientes con enfermedad cardíaca tienen una mayor probabilidad de experimentar angina durante el ejercicio en comparación con aquellos sin la enfermedad. Este hallazgo sugiere que la angina inducida por ejercicio puede ser un indicador clínico relevante en el diagnóstico y manejo de enfermedades cardíacas.
La redacción de este documento fue revisado usando ChatGPT, lo mismo que los comentarios de cada código. Por otro lado, todos los códigos están detallados en este enlace.