Este estudio analiza la presencia de diabetes en una muestra de individuos, explorando su relación con factores como el IMC, la edad y la presión arterial. Utilizaremos el conjunto de datos Pima Indians Diabetes Dataset, ampliamente usado en estudios epidemiológicos.
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
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(caret)
## Loading required package: lattice
##
## Attaching package: 'caret'
##
## The following object is masked from 'package:purrr':
##
## lift
library(MASS)
##
## Attaching package: 'MASS'
##
## The following object is masked from 'package:dplyr':
##
## select
# Cargar datos
data <- read.csv("https://raw.githubusercontent.com/jbrownlee/Datasets/master/pima-indians-diabetes.data.csv", header=FALSE)
names(data) <- c("NumEmbarazos", "Glucosa", "Presion", "Piel", "Insulina", "IMC", "DiabetesPedigree", "Edad", "Diabetes")
data$Diabetes <- as.factor(data$Diabetes)
# Resumen de los datos
summary(data)
## NumEmbarazos Glucosa Presion Piel
## Min. : 0.000 Min. : 0.0 Min. : 0.00 Min. : 0.00
## 1st Qu.: 1.000 1st Qu.: 99.0 1st Qu.: 62.00 1st Qu.: 0.00
## Median : 3.000 Median :117.0 Median : 72.00 Median :23.00
## Mean : 3.845 Mean :120.9 Mean : 69.11 Mean :20.54
## 3rd Qu.: 6.000 3rd Qu.:140.2 3rd Qu.: 80.00 3rd Qu.:32.00
## Max. :17.000 Max. :199.0 Max. :122.00 Max. :99.00
## Insulina IMC DiabetesPedigree Edad Diabetes
## Min. : 0.0 Min. : 0.00 Min. :0.0780 Min. :21.00 0:500
## 1st Qu.: 0.0 1st Qu.:27.30 1st Qu.:0.2437 1st Qu.:24.00 1:268
## Median : 30.5 Median :32.00 Median :0.3725 Median :29.00
## Mean : 79.8 Mean :31.99 Mean :0.4719 Mean :33.24
## 3rd Qu.:127.2 3rd Qu.:36.60 3rd Qu.:0.6262 3rd Qu.:41.00
## Max. :846.0 Max. :67.10 Max. :2.4200 Max. :81.00
# Distribución de diabetes
table(data$Diabetes)
##
## 0 1
## 500 268
prop.table(table(data$Diabetes))
##
## 0 1
## 0.6510417 0.3489583
# Relación entre IMC y Diabetes
ggplot(data, aes(x=Diabetes, y=IMC, fill=Diabetes)) +
geom_boxplot() +
theme_minimal() +
ggtitle("Relación entre IMC y Diabetes")
# Prueba de t para comparar IMC entre diabéticos y no diabéticos
t.test(IMC ~ Diabetes, data = data)
##
## Welch Two Sample t-test
##
## data: IMC by Diabetes
## t = -8.6193, df = 573.47, p-value < 2.2e-16
## alternative hypothesis: true difference in means between group 0 and group 1 is not equal to 0
## 95 percent confidence interval:
## -5.940864 -3.735811
## sample estimates:
## mean in group 0 mean in group 1
## 30.30420 35.14254
# Regresión logística para predecir la diabetes
modelo <- glm(Diabetes ~ Glucosa + IMC + Edad + Presion, data=data, family=binomial)
summary(modelo)
##
## Call:
## glm(formula = Diabetes ~ Glucosa + IMC + Edad + Presion, family = binomial,
## data = data)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -7.970394 0.679866 -11.723 < 2e-16 ***
## Glucosa 0.033036 0.003360 9.832 < 2e-16 ***
## IMC 0.088515 0.013964 6.339 2.31e-10 ***
## Edad 0.034595 0.007900 4.379 1.19e-05 ***
## Presion -0.012419 0.005074 -2.448 0.0144 *
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 993.48 on 767 degrees of freedom
## Residual deviance: 749.59 on 763 degrees of freedom
## AIC: 759.59
##
## Number of Fisher Scoring iterations: 5
Los resultados sugieren que la glucosa y el IMC tienen una fuerte asociación con la presencia de diabetes. La edad también es un factor importante, destacando la importancia de la prevención y monitoreo temprano.