# Teoría La regresión logística es un modelo estadístico de clasificación binaria, que estima la probabilidad de que ocurra un evento (valor 1) frente a que no ocurra (valor 0), en función de variables independientes.
Las enfermedades cardiovasculares son una de las principales causas de muerte a nivel mundial, por lo que es importante identificar a tiempo a las personas en riesgo. En este análisis se utiliza un conjunto de datos clínicos para construir un modelo de regresión logística que permita predecir la probabilidad de padecer un ataque al corazón.
El objetivo es analizar cómo variables como edad, colesterol y presión arterial influyen en la presencia de enfermedad cardíaca, apoyando la toma de decisiones informadas en el ámbito de la salud.
library(caret)
## Loading required package: ggplot2
## Loading required package: lattice
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ lubridate 1.9.4 ✔ tibble 3.2.1
## ✔ purrr 1.0.4 ✔ tidyr 1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ✖ purrr::lift() masks caret::lift()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
df <- read.csv("/Users/nataliamartinez/Desktop/Heart.csv")
age: Edad del paciente (en años).
sex: Sexo del paciente (1 = hombre, 0 = mujer).
cp: Tipo de dolor en el pecho (categoría que indica el tipo de angina).
trestbps: Presión arterial en reposo (mm Hg).
chol: Nivel de colesterol sérico (mg/dl).
fbs: Azúcar en sangre en ayunas (>120 mg/dl) (1 = verdadero, 0 = falso).
restecg: Resultados del electrocardiograma en reposo.
thalach: Frecuencia cardíaca máxima alcanzada.
exang: Angina inducida por ejercicio (1 = sí, 0 = no).
oldpeak: Depresión del segmento ST inducida por ejercicio (indica estrés cardíaco).
slope: Pendiente del segmento ST durante el ejercicio.
ca: Número de vasos principales coloreados por fluoroscopía (0–3).
thal: Resultado de la prueba de talasemia (condición del flujo sanguíneo).
target: Variable objetivo (1 = presencia de enfermedad cardíaca, 0 = ausencia).
##Generalidades
summary(df)
## age sex cp trestbps
## Min. :29.00 Min. :0.0000 Min. :0.0000 Min. : 94.0
## 1st Qu.:48.00 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:120.0
## Median :56.00 Median :1.0000 Median :1.0000 Median :130.0
## Mean :54.43 Mean :0.6956 Mean :0.9424 Mean :131.6
## 3rd Qu.:61.00 3rd Qu.:1.0000 3rd Qu.:2.0000 3rd Qu.:140.0
## Max. :77.00 Max. :1.0000 Max. :3.0000 Max. :200.0
## chol fbs restecg thalach
## Min. :126 Min. :0.0000 Min. :0.0000 Min. : 71.0
## 1st Qu.:211 1st Qu.:0.0000 1st Qu.:0.0000 1st Qu.:132.0
## Median :240 Median :0.0000 Median :1.0000 Median :152.0
## Mean :246 Mean :0.1493 Mean :0.5298 Mean :149.1
## 3rd Qu.:275 3rd Qu.:0.0000 3rd Qu.:1.0000 3rd Qu.:166.0
## Max. :564 Max. :1.0000 Max. :2.0000 Max. :202.0
## exang oldpeak slope ca
## Min. :0.0000 Min. :0.000 Min. :0.000 Min. :0.0000
## 1st Qu.:0.0000 1st Qu.:0.000 1st Qu.:1.000 1st Qu.:0.0000
## Median :0.0000 Median :0.800 Median :1.000 Median :0.0000
## Mean :0.3366 Mean :1.072 Mean :1.385 Mean :0.7541
## 3rd Qu.:1.0000 3rd Qu.:1.800 3rd Qu.:2.000 3rd Qu.:1.0000
## Max. :1.0000 Max. :6.200 Max. :2.000 Max. :4.0000
## thal target
## Min. :0.000 Min. :0.0000
## 1st Qu.:2.000 1st Qu.:0.0000
## Median :2.000 Median :1.0000
## Mean :2.324 Mean :0.5132
## 3rd Qu.:3.000 3rd Qu.:1.0000
## Max. :3.000 Max. :1.0000
modelo <- glm(target ~ ., data = df, family = binomial)
summary(modelo)
##
## Call:
## glm(formula = target ~ ., family = binomial, data = df)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 3.690245 1.401395 2.633 0.00846 **
## age -0.008199 0.012609 -0.650 0.51551
## sex -1.846549 0.256572 -7.197 6.16e-13 ***
## cp 0.854601 0.100353 8.516 < 2e-16 ***
## trestbps -0.018239 0.005621 -3.245 0.00118 **
## chol -0.005670 0.002056 -2.757 0.00583 **
## fbs -0.101152 0.284855 -0.355 0.72251
## restecg 0.413237 0.188984 2.187 0.02877 *
## thalach 0.023626 0.005682 4.158 3.21e-05 ***
## exang -0.990787 0.224287 -4.418 9.98e-06 ***
## oldpeak -0.570731 0.116004 -4.920 8.66e-07 ***
## slope 0.534070 0.188677 2.831 0.00465 **
## ca -0.754488 0.103052 -7.321 2.45e-13 ***
## thal -0.886068 0.155629 -5.693 1.24e-08 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1420.2 on 1024 degrees of freedom
## Residual deviance: 718.9 on 1011 degrees of freedom
## AIC: 746.9
##
## Number of Fisher Scoring iterations: 6
prueba <- data.frame(
age = 52,
sex = 1,
cp = 0,
trestbps = 125,
chol = 212,
fbs = 0,
restecg = 1,
thalach = 168,
exang = 0,
oldpeak = 1.0,
slope = 2,
ca = 2,
thal = 3,
target = NA
)
predict(modelo, newdata = prueba, type = "response")
## 1
## 0.2055683
En conclusión, la probabilidad de presentar enfermedad cardíaca para el paciente evaluado es:
20.6%: Para un paciente de 52 años, hombre, con valores moderados de presión arterial y colesterol, sin angina inducida por ejercicio.
Por lo tanto, la probabilidad es relativamente baja, lo que sugiere que el paciente no presenta un alto riesgo de ataque al corazón según el modelo.