Adriana del Rocío Rentería Andino
El presente trabajo expone el tema de predicción de diabetes de tipo 2 mediante métodos de clasificación de aprendizaje automático, que se puede definir como el anuncio de un hecho a futuro a partir del historial de datos de los pacienes y la aplicación de algoritmos, con la finalidad de dar solución y prevenir la enfermedad.
La diabetes mellitus tipo 2 (DM2) es una enfermedad crónica que se caracteriza por niveles elevados de azúcar en la sangre. Además, es una de las enfermedades crónicas más comunes en el mundo, con una prevalencia estimada de 463 millones de personas en 2020.
Para analizar esta problemáica es necesario mencionar sus causas. Una de ellas es el factor genético, por lo que las personas con antecedentes familiares de DM2 tienen un mayor riesgo de desarrollar la enfermedad.Los factores ambientales tambíen inciden, ya que aumentan el riesgo de DM2, estas son: sobrepeso y obesidad, inactividad física, edad, historial familiar de diabetes, etinia y algunas afecciones médicas.
La investigación de esta problemática social se realizó por el interés de predecir la DM2 con la ayuda de la aplicación de los métodos de aprendizaje automático, ya que tiene el potencial de mejorar el diagnóstico temprano de la enfermedad y, por lo tanto, de prevenir complicaciones graves.
Por otro lado, profundizar el tema como interés académico es esencial para el entendimiento de la aplicación de los métodos de clasificación en temas de la salud. Ya que, como estudiante es importante la práctica e interpretación adecuada para la toma de decisiones.
diabetes2 <- read.csv("C:/Users/CHRIS LLIGUIN/Downloads/DATA-20231130/diabetes2.txt", sep=";")
View(diabetes2)
str(diabetes2)
## 'data.frame': 906 obs. of 18 variables:
## $ Age : chr "less than 40" "less than 40" "60 or older" "less than 40" ...
## $ Gender : chr "Male" "Male" "Female" "Male" ...
## $ Family_Diabetes : chr "yes" "yes" "yes" "yes" ...
## $ highBP : chr "no" "no" "no" "no" ...
## $ PhysicallyActive: chr "one hr or more" "one hr or more" "none" "more than half an hr" ...
## $ BMI : int 22 22 26 19 23 26 26 23 22 38 ...
## $ Smoking : chr "no" "no" "no" "yes" ...
## $ Alcohol : chr "no" "no" "no" "yes" ...
## $ Sleep : int 8 8 7 7 7 8 8 7 6 8 ...
## $ SoundSleep : int 6 6 7 5 6 7 3 7 2 6 ...
## $ RegularMedicine : chr "no" "no" "no" "no" ...
## $ JunkFood : chr "often" "often" "occasionally" "occasionally" ...
## $ Stress : chr "not at all" "not at all" "sometimes" "not at all" ...
## $ BPLevel : chr "normal" "normal" "normal" "normal" ...
## $ Pregancies : int 0 0 3 0 0 0 0 1 0 0 ...
## $ Pdiabetes : chr "0" "0" "0" "0" ...
## $ UriationFreq : chr "not much" "not much" "not much" "not much" ...
## $ Diabetic : chr "no" "no" "no" "no" ...
Age: Edad. Variable cualitativa de tipo factor.
Gender: Género del individuo en estudio. Variable de tipo caracter.
Family_Diabetes: Antecedentes familiares de diabetes. Variable caracter.
highBP: Diagnóstico de hipertensión arterial,
PhysicallyActive: Actividad física, si la
persona corre, camina entre otros. Variable de tipo caracter.
BMI: Índice de masa corporal.La mayoría de los adultos con un BMI o IMC por encima de 25 tienen sobrepeso y un mayor riesgo de desarrollar diabetes tipo 2 Variable de tipo entero.
Smoking: Tabaquismo. Variable de tipo
caracter.
Alcohol: Consumo de alcohol. Variable de tipo
caracter.
Sleep: Horas de sueño. Variable de tipo entero.
Sound Sleep: Horas de sueño profundo. Variable de tipo entero.
RegularMedicine: Si la persona toma regularmente
medicamentos. Variable de tipo caracter.
JunkFood: Comida basura. Variable de tipo caracter.
Stress: Estrés. Variable tipo caracter.
BPLevel: Nivel BPL. Variable tipo
caracter.
Pregancies: Embarazos. Variable tipo entero.
Pdiabetes: Variable tipo entero.
UriationFreq Frecuencia urinaria. Variale tipo
caracter.
Diabético: Diabético. Variable tipo caracter.
clases <- sapply(diabetes2, class)
clases
## Age Gender Family_Diabetes highBP
## "character" "character" "character" "character"
## PhysicallyActive BMI Smoking Alcohol
## "character" "integer" "character" "character"
## Sleep SoundSleep RegularMedicine JunkFood
## "integer" "integer" "character" "character"
## Stress BPLevel Pregancies Pdiabetes
## "character" "character" "integer" "character"
## UriationFreq Diabetic
## "character" "character"
Cambiamos a factor a edad
diabetes2$Age= factor (diabetes2$Age)
levels(diabetes2$Age) = c ("40-49", "50-59", "60 or older", "less than 40")
class(diabetes2$Age)
## [1] "factor"
Cambiamos a factor a genero
diabetes2$Gender= factor (diabetes2$Gender)
levels(diabetes2$Gender) = c ("Male", "Female")
class(diabetes2$Gender)
## [1] "factor"
Cambiamos a factor family_Diabetes
diabetes2$Family_Diabetes= factor (diabetes2$Family_Diabetes)
levels(diabetes2$Family_Diabetes) = c ("Male", "Female")
class(diabetes2$Family_Diabetes)
## [1] "factor"
Cambiamos a factor HighBP
diabetes2$highBP= factor (diabetes2$highBP)
levels(diabetes2$highBP) = c ("Male", "Female")
class(diabetes2$highBP)
## [1] "factor"
Cambiamos a factor PhysicallyActive
diabetes2$PhysicallyActive = factor (diabetes2$highBP)
levels(diabetes2$PhysicallyActive) = c ("one hr or more", "none","
more than half an hr", "more than half an hr", "less than half an hr")
class(diabetes2$PhysicallyActive)
## [1] "factor"
Cambiamos a factor Smoking
diabetes2$Smoking= factor (diabetes2$Smoking)
levels(diabetes2$Smoking) = c ("yes", "no")
class(diabetes2$Smoking)
## [1] "factor"
Cambiamos a factor Alcohol
diabetes2$Alcohol= factor (diabetes2$Alcohol)
levels(diabetes2$Alcohol) = c ("yes", "no")
class(diabetes2$Alcohol)
## [1] "factor"
Cambiamos a factor RegularMedicine
diabetes2$RegularMedicine = factor (diabetes2$RegularMedicine )
levels(diabetes2$RegularMedicine ) = c ("yes", "no")
class(diabetes2$RegularMedicine )
## [1] "factor"
Cambiamos a factor JunkFood
diabetes2$JunkFood = factor (diabetes2$JunkFood )
levels(diabetes2$JunkFood ) = c ("often", "occasionally", "always", "very often")
class(diabetes2$JunkFood )
## [1] "factor"
Cambiamos a factor JunkFood
diabetes2$Stress = factor (diabetes2$Stress )
levels(diabetes2$Stress ) = c ("not at all", "sometimes", "very often", "always")
class(diabetes2$Stress )
## [1] "factor"
Cambiamos a factor BPLevel
diabetes2$BPLevel <- factor(diabetes2$BPLevel)
levels(diabetes2$BPLevel) <- c("high"," low", "normal")
class(diabetes2$BPLevel)
## [1] "factor"
Cambiamos a factor BPLevel
diabetes2$UriationFreq <- factor(diabetes2$UriationFreq)
levels(diabetes2$UriationFreq) <- c("not much","quite often")
class(diabetes2$UriationFreq)
## [1] "factor"
Cambiamos a factor BPLevel
diabetes2$Pdiabetes <- factor(diabetes2$Pdiabetes)
levels(diabetes2$Pdiabetes) <- c("0","1")
class(diabetes2$Pdiabetes)
## [1] "factor"
Cambiamos a factor Diabetic
diabetes2$Diabetic <- factor(diabetes2$Diabetic)
levels(diabetes2$Diabetic) <- c("no","yes")
class(diabetes2$Diabetic)
## [1] "factor"
which(is.na(diabetes2))
## integer(0)
Classes <- sapply(diabetes2, class)
for (i in 1:ncol(diabetes2))
if(Classes [i]== "integer")
diabetes2[[i]]= as.numeric(diabetes2[[i]])
Classes = sapply(diabetes2, class)
Classes
## Age Gender Family_Diabetes highBP
## "factor" "factor" "factor" "factor"
## PhysicallyActive BMI Smoking Alcohol
## "factor" "numeric" "factor" "factor"
## Sleep SoundSleep RegularMedicine JunkFood
## "numeric" "numeric" "factor" "factor"
## Stress BPLevel Pregancies Pdiabetes
## "factor" "factor" "numeric" "factor"
## UriationFreq Diabetic
## "factor" "factor"
Fómulas de la media, mediana. Interpretación de percentiles. Realizaremos una descripcion básica y visualización de datos
summary(diabetes2[, clases == "integer"])
## BMI Sleep SoundSleep Pregancies
## Min. :15.00 Min. : 4.000 Min. : 0.000 Min. :0.0000
## 1st Qu.:21.00 1st Qu.: 6.000 1st Qu.: 4.000 1st Qu.:0.0000
## Median :24.00 Median : 7.000 Median : 6.000 Median :0.0000
## Mean :25.33 Mean : 6.976 Mean : 5.609 Mean :0.3819
## 3rd Qu.:28.00 3rd Qu.: 8.000 3rd Qu.: 7.000 3rd Qu.:0.0000
## Max. :42.00 Max. :11.000 Max. :11.000 Max. :4.0000
apply(diabetes2[,clases == "integer"], 2, sd)
## BMI Sleep SoundSleep Pregancies
## 5.1399922 1.3042497 1.8435140 0.9090479
\[Desviación ~ estándar \longrightarrow \sigma = \sqrt( \frac{\sum_{i=1}^{n} = (x_{i}- \bar{x})^2}{n})\] Cuartiles: Dividen a la distribución en cuatro partes iguales (tres divisiones). Q1,Q2,Q3, correspondientes a 25%, 50%,75%. PERCENTILES, cuando dividen a la distribución en 100 partes (99 divisiones). \[Cuartiles ~ \longrightarrow Q_k= \frac{k*N}{4}\]
Además, al considerar su 1er cuartil y 3er cuartil se nota un cambio considerable ya que pasa de 21 libras a 28 libras, por lo que se observó que aumentó considerablemente su riesgo de contener diabetes tipo 2 es, ya que el peso se encontró al límite.
Además, al considerar su 1er cuartil y 3er cuartil no se nota un cambio drástico ya que pasa de 6 horas a 8 horas, lo cual se encuentra de igual manera en un buen rango de sueño. Por lo que, el sueño no parece un factor que influya mucho para la obtención de diabetes tipo 2.
Pero, al ya comprobar la mediana de SoundSleep fue de 6 horas y su media fue de aproximadamente 6 horas. Por lo que la población intermedia tiene una buena hora de sueño. Esto se puede corroborar con la hora máxima, ya que esta fue de 11 horas de sueño, por lo que es muy bueno, puesto que, al comparar con la variable Sleep con su máximo de 11 horas es bueno porque contuvo la misma cantidad con sueño profundo.
library(ggplot2)
grafico_1 = ggplot(diabetes2,aes(x=Gender))+
geom_bar(stat="count", width=0.7, fill="skyblue")+
theme_minimal()
grafico_2 = ggplot(diabetes2,aes(x=Age))+
geom_bar(stat="count", width=0.7, fill="orange")+
theme_minimal()
grafico_3 = ggplot(diabetes2,aes(x=PhysicallyActive))+
geom_bar(stat="count", width=0.7, fill="green")+
theme_minimal()
grafico_4 =ggplot(diabetes2,aes(x=JunkFood))+
geom_bar(stat="count", width=0.7, fill="pink")+
theme_minimal()
print(grafico_1)
print(grafico_2)
print(grafico_3)
print(grafico_4)
library(ggplot2)
qplot(BMI, Sleep, data = diabetes2, colour = Diabetic)
## Warning: `qplot()` was deprecated in ggplot2 3.4.0.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.