Predicción de la diabetes tipo 2 mediante aprendizaje automático (Métodos de clasificación)

INTRODUCCIÓN

Las enfermedades crónicas se definen como procesos patológicos de evolución prolongada que no se resuelven espontáneamente, rara vez alcanzan una curación completa y, además, generan una gran carga social desde el punto de vista económico, así como desde la perspectiva de la dependencia social y la discapacidad. Tienen una etiología múltiple, su desarrollo es poco predecible, presentan múltiples factores de riesgo y, con algunas excepciones, su origen no es infeccioso. Por todo ello, representan un problema nacional e internacional de salud pública que afecta a la mayoría de las naciones, con un gran impacto en las poblaciones de los países en desarrollo. Entre las enfermedades crónicasmás importantes se cuentan la hipertensión arterial sistémica, la diabetes, las hiperlipidemias, el sobrepeso y la obesidad, el cáncer y la enfermedad respiratoria crónica, muy ligadas a malos estilos de vida -como las dietas inadecuadas, la ingestión exagerada de alcohol y tabaco, y la vida sedentaria-, así como las discapacidades visuales y auditivas.(Ardila2018).

Importar base de datos desde rda - rstudio Se debe cargar desde R la base para guardar en una extención compatible con Rstudio, para los cual realizamos el siguiente proseso.

write.table(diabetes,file=“diabetes2.txt”,sep=“;”,eol=“”)

#Importar la base de datos
#file.choose()
diabetes <- read.csv("C:\\Users\\ASUS\\Documents\\diabetes2.txt",sep = ";")
#diabetes
# nombres de las variables
names(diabetes)
##  [1] "Age"              "Gender"           "Family_Diabetes"  "highBP"          
##  [5] "PhysicallyActive" "BMI"              "Smoking"          "Alcohol"         
##  [9] "Sleep"            "SoundSleep"       "RegularMedicine"  "JunkFood"        
## [13] "Stress"           "BPLevel"          "Pregancies"       "Pdiabetes"       
## [17] "UriationFreq"     "Diabetic"

DESCRIPCIÓN DE LAS VARIABLES

En este estudio, se seleccionan un total de 952 participantes de 18 años o más, de los cuales 580 son hombres y 372 son mujeres, en los cuales se pidió a los participantes que respondieran un cuestionario que se va a describir a continuación:

Age: es la edad

Gender: genero(masculino y femenino)

Family history with diabetes: antecedentes familiares con diabetes(si,no)

Diagnosted with high blood pressure: diagnóstico con presión alta

Físicamente activo: (una hora o más,ninguna,más de media hora,menos de media hora,ninguno)

Espesor de la piel: (en mm Hg)

Fuma: (si, no)

Consumo de alcohol: (si,no)

Horas de sueño: (horas que descansa)

Sueño profundo: (horas de sueño)

Ingesta regular de medicina: (si,no)

Consumo de comida chatarra: (si,no)

Estrés:(Siempre, a menudo, a veces, nunca)

Nivel de presión arterial: (bajo, normal,alto)

Número de embarazos: (número)

Diabetes en gestación: (si,no)

Frecuencia al orinar: (Poco, bastante)

Diabético: (diabético-267, no diabético-685)

# Comprobar el tipo de clase de cada variable
clases <- sapply(diabetes, 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"

Conversión del tipo de variable (char a factor)

Variable Age

diabetes$Age <- factor(diabetes$Age)
levels(diabetes$Age) <- c("40-49","50-59","60 or older","less than 40")
class(diabetes$Age)
## [1] "factor"

Variable Gender

diabetes$Gender <- factor(diabetes$Gender)
levels(diabetes$Gender) <- c("Female","Male")
class(diabetes$Gender)
## [1] "factor"

Variable Family_Diabetes

diabetes$Family_Diabetes <- factor(diabetes$Family_Diabetes)
levels(diabetes$Family_Diabetes) <- c("no","yes")
class(diabetes$Family_Diabetes)
## [1] "factor"

Variable highBP

diabetes$highBP <- factor(diabetes$highBP)
levels(diabetes$highBP) <- c("no","yes")
class(diabetes$highBP)
## [1] "factor"

Variable PhysicallyActive

diabetes$PhysicallyActive <- factor(diabetes$PhysicallyActive)
levels(diabetes$PhysicallyActive) <- c("    
one hr or more","none","    
more than half an hr"," 
less than half an hr","none")
class(diabetes$PhysicallyActive)
## [1] "factor"

Variable Smoking

diabetes$Smoking <- factor(diabetes$Smoking)
levels(diabetes$Smoking) <- c("no","yes")
class(diabetes$Smoking)
## [1] "factor"

Variable Alcohol

diabetes$Alcohol <- factor(diabetes$Alcohol)
levels(diabetes$Alcohol) <- c("no","yes")
class(diabetes$Alcohol)
## [1] "factor"

Variable RegularMedicine

diabetes$RegularMedicine <- factor(diabetes$RegularMedicine)
levels(diabetes$RegularMedicine) <- c("no","yes")
class(diabetes$RegularMedicine)
## [1] "factor"

Variable JunkFood

diabetes$JunkFood <- factor(diabetes$JunkFood)
levels(diabetes$JunkFood) <- c("often","occasionally","very often","always")
class(diabetes$JunkFood)
## [1] "factor"

Variable Stress

diabetes$Stress <- factor(diabetes$Stress)
levels(diabetes$Stress) <- c("always","onot at all","sometimes","very often")
class(diabetes$Stress)
## [1] "factor"

Variable BPLevel

diabetes$BPLevel <- factor(diabetes$BPLevel)
levels(diabetes$BPLevel) <- c("high","normal","low")
class(diabetes$BPLevel)
## [1] "factor"

Variable Pdiabetes

diabetes$Pdiabetes <- factor(diabetes$Pdiabetes)
levels(diabetes$Pdiabetes) <- c("0","yes" )
class(diabetes$Pdiabetes)
## [1] "factor"

Variable UriationFreq

diabetes$UriationFreq <- factor(diabetes$UriationFreq)
levels(diabetes$UriationFreq) <- c("quite often","not much" )
class(diabetes$UriationFreq)
## [1] "factor"

Realizamos un análisis para poder ver si existen datos perdidos

which(is.na(diabetes))
## integer(0)

Craeacion de la matriz completa con la conversión de clases realizada

classes=sapply(diabetes,class)
for(i in 1:ncol(diabetes))
  if(classes[i]=="integer")
    diabetes[[i]]=as.numeric(diabetes[[i]])
classes=sapply(diabetes,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"      "character"

Analisis descriptivo

descriptcion teoria(que hace la media el mini etc,concepto y formula)

Mínimo: Es el valor más pequeño en un conjunto de datos. Representa el extremo inferior de la distribución.

Primer Cuartil (Q1): También conocido como el percentil 25 o el 25º percentil. Es el valor que separa al 25% más bajo de los datos del 75% más alto cuando los datos están ordenados de menor a mayor.

Mediana: Es el valor que se encuentra en el centro de un conjunto de datos cuando están ordenados de menor a mayor. Exactamente la mitad de los datos se encuentran por encima de la mediana y la otra mitad por debajo de ella.

Media: Es el promedio de un conjunto de números. Se calcula sumando todos los valores y dividiendo esa suma por la cantidad de valores en el conjunto.

Tercer Cuartil (Q3): También conocido como el percentil 75 o el 75º percentil. Es el valor que separa al 75% más bajo de los datos del 25% más alto cuando los datos están ordenados de menor a mayor.

Máximo: Es el valor más grande en un conjunto de datos. Representa el extremo superior de la distribución. En esta parte procederemos hacer nuestro analisis descriptivo de nuestras variables de tipo entero y vamos a obtener los siguientes resultados:

summary(diabetes[,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(diabetes[,clases=="integer"],2,sd)
##        BMI      Sleep SoundSleep Pregancies 
##  5.1399922  1.3042497  1.8435140  0.9090479

INTERPRETACIÓN:

IMC (Índice de Masa Corporal):

Mínimo (15.00): Representa el valor más bajo del Índice de Masa Corporal registrado en el conjunto de datos. Primer Cuartil (Q1 - 21.00): Indica que el 25% de los datos tienen un Índice de Masa Corporal igual o inferior a 21.00, lo que sugiere un rango inicial de valores.

Mediana (50% - 24.00): El punto medio de los datos, donde el 50% tiene un Índice de Masa Corporal igual o inferior a 24.00 y el otro 50% tiene valores superiores. Es una medida de tendencia central. Media (~25.33): Es el promedio del Índice de Masa Corporal en el conjunto de datos, indicando la tendencia general de los valores.

Tercer Cuartil (Q3 - 28.00): Representa que el 75% de los datos tienen un Índice de Masa Corporal igual o inferior a 28.00, lo que muestra un rango más alto de valores. Máximo (42.00): Es el valor más alto registrado del Índice de Masa Corporal en el conjunto de datos.

Sleep (Sueño):

Mínimo (4.000): La duración más baja del sueño registrada en las unidades de medida utilizadas en el conjunto de datos.

Primer Cuartil (Q1 - 6.000): Indica que el 25% de los registros tienen una duración de sueño igual o inferior a 6.000 unidades.

Mediana (50% - 7.000): El punto medio de las mediciones de duración del sueño, donde el 50% de los datos tienen una duración igual o inferior a 7.000 unidades.

Media (6.976): Es el valor promedio de la duración del sueño registrado en el conjunto de datos. Tercer Cuartil (Q3 - 8.000): Indica que el 75% de los registros tienen una duración de sueño igual o inferior a 8.000 unidades.

Máximo (11.000): Representa la duración más larga del sueño registrada en las unidades de medida del conjunto de datos.

SoundSleep (Sueño Profundo):

Mínimo (0.000): La duración más baja de sueño profundo registrada en las unidades de medida utilizadas.

Primer Cuartil (Q1 - 4.000): Indica que el 25% de los registros tienen una duración de sueño profundo igual o inferior a 4.000 unidades.

Mediana (50% - 6.000): El punto medio de las mediciones de duración de sueño profundo, donde el 50% de los datos tienen una duración igual o inferior a 6.000 unidades.

Media (5.609): Es el valor promedio de la duración de sueño profundo en el conjunto de datos.

Tercer Cuartil (Q3 - 7.000): Indica que el 75% de los registros tienen una duración de sueño profundo igual o inferior a 7.000 unidades.

Máximo (11.000): Representa la duración más larga de sueño profundo registrada en las unidades de medida del conjunto de datos.

Embarazos:

Mínimo (0.0000): Representa el número más bajo de embarazos registrado en el conjunto de datos.

Primer Cuartil (Q1 - 0.0000): Indica que el 25% de los datos tienen un número de embarazos igual o inferior a 0.0000, sugiriendo un rango inicial de valores.

Mediana (50% - 0.0000): El punto medio de los datos, donde el 50% tiene un número de embarazos igual o inferior a 0.0000 y el otro 50% tiene valores superiores. Es una medida de tendencia central.

Media (~0.3819): Es el promedio del número de embarazos en el conjunto de datos, indicando la tendencia general de los valores.

Tercer Cuartil (Q3 - 0.0000): Representa que el 75% de los datos tienen un número de embarazos igual o inferior a 0.0000, lo que muestra un rango más alto de valores.

Máximo (4.0000): Es el número más alto de embarazos registrado en el conjunto de datos.

ANALISIS VISUAL DE DATOS

DIAGRAMA DE BARRAS Genero, edad, actividad fisica, comida chatarra, cada variable de diferente color.

library(ggplot2)
grafico_1 = ggplot(diabetes,aes(x=Gender))+
  geom_bar(stat="count", width=0.7, fill="blue")+
  theme_minimal()+
  labs(x = "Gender", y = "Count")
grafico_2 = ggplot(diabetes,aes(x=Age))+
  geom_bar(stat="count", width=0.7, fill="orange")+
  theme_minimal()+
  labs(x = "Age", y = "Count")
grafico_3 = ggplot(diabetes,aes(x=PhysicallyActive))+
  geom_bar(stat="count", width=0.7, fill="yellow")+
  theme_minimal() +
  labs(x = "Physically Active", y = "Count")
grafico_4 =ggplot(diabetes,aes(x=JunkFood))+
  geom_bar(stat="count", width=0.7, fill="pink")+
  theme_minimal()+
  labs(x = "Junk Food", y = "Count")
print(grafico_1)

INTERPRETACIÓN: En este diagrama de barras podemos ver que existen mas personas de genero masculino en este estudio.

print(grafico_2)

INTERPRETACIÓN:

print(grafico_3)

INTERPRETACIÓN:

print(grafico_4)

INTERPRETACIÓN:

DIAGRAMA DE DISPERSION #indice de masa corporar y horas de sueño para el de dispersion

qplot(BMI,Sleep, data=diabetes,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.

#EXTRA

#QUE OTROS FACTORES O QUE OTRA RELACION PUEDE MEDIR PARA EVR SI EXISTE DIABETES O NO