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

INTRODUCCIÓN

La enfermedad crónica es una condición de salud que se caracteriza por ser de larga duración y generalmente no tiene una cura completa. A diferencia de las enfermedades agudas que son de corta duración, las enfermedades crónicas pueden persistir durante meses o incluso años. Estas enfermedades pueden afectar diferentes sistemas del cuerpo y tener un impacto significativo en la calidad de vida de una persona.

Algunos de las enfermedades crónicas incluyen la diabetes, la hipertensión arterial, el asma, la enfermedad cardiovascular y la artritis. Estas enfermedades requieren un manejo continuo y a menudo implican cambios en el estilo de vida, medicamentos y seguimiento médico regular.

Es importante destacar que cada enfermedad crónica es única y puede afectar a las personas de diferentes maneras. Algunas personas pueden experimentar síntomas leves, mientras que otras pueden tener síntomas más graves que limitan su capacidad para llevar una vida normal.

Es fundamental que las personas con enfermedades crónicas reciban un diagnóstico temprano y un tratamiento adecuado para controlar los síntomas y prevenir complicaciones a largo plazo. Además, el apoyo emocional y la educación sobre la enfermedad son aspectos importantes del manejo de las enfermedades crónicas.(Comunicarse con los demás - al vivir con una enfermedad crónica: MedlinePlus Enciclopedia Médica, s. f.)

DESCRIPCIÓN DE LAS VARIABLES

Edad (Age): Se basa al período de tiempo que la persona esta viva o ha estado viva.

Género (Gender): Hace referencia a la identidad sexual de una persona, ya sea masculino o femenino.

Diabetes familiar (Family_Diabetes): Se refiere a la presencia de antecedentes familiares de diabetes, es decir, si algún miembro de la familia ha sido diagnosticado con diabetes.

Presión arterial alta (highBP): Hace referencia a la presión arterial elevada, de la persona lo cual puede ser un indicador de problemas de salud como enfermedades cardiovasculares.

Actividad física (PhysicallyActive): Se refiere al nivel de actividad física que una persona realiza en su vida diaria, como ejercicios, deportes y cualquier otra forma de actividad física que se realice regularmente.

BMI: Es la sigla en inglés para “Índice de Masa Corporal” (Body Mass Index): Se utiliza para evaluar si una persona tiene un peso saludable en relación con su altura.

Fumar (Smoking): Hace referencia al hábito de fumar cigarrillos u otras formas de tabaco. El tabaquismo está asociado con numerosos problemas de salud, como enfermedades respiratorias y cardiovasculares.

Consumo de alcohol (Alcohol): Se refiere al consumo de bebidas alcohólicas. El consumo excesivo de alcohol puede tener efectos negativos en la salud, incluyendo daño al hígado y aumento del riesgo de accidentes.

Sueño (Sleep): Hace referencia al período de descanso y recuperación que una persona necesita diariamente.

Sueño profundo (SoundSleep): Se refiere a la calidad del sueño, especialmente al sueño profundo y reparador, es adecuado es importante para la salud y el bienestar general.

Medicación regular (RegularMedicine): Hace referencia al consumo regular de medicamentos recetados por un médico para tratar una condición médica específica.

Comida chatarra (JunkFood): Se refiere a alimentos que son altos en calorías, grasas saturadas, azúcares y bajos en nutrientes esenciales.

Estrés (Stress): Hace referencia a la respuesta del cuerpo ante situaciones desafiantes o estresantes. El estrés crónico puede tener efectos negativos en la salud física y mental.

Nivel de presión arterial (BPLevel): Se refiere al nivel de presión arterial, que puede ser normal, bajo o alto de la persona. Está asociada con un mayor riesgo de enfermedades cardiovasculares.

Embarazos (Pregancies): Hace referencia al número de veces que una mujer ha estado embarazada o ha dado a luz a un bebé.

Diabetes gestacional (Pdiabetes): Se refiere a la diabetes que se desarrolla durante el embarazo. Es importante controlar y tratar la diabetes gestacional para evitar complicaciones tanto para la madre como para el bebé.

Frecuencia urinaria (UriationFreq): Hace referencia a la frecuencia con la que una persona orina.

Diabetes (Diabetic): Se refiere a la condición médica crónica caracterizada por niveles elevados de azúcar en sangre. Puede tener implicaciones para la salud a largo plazo y requiere un manejo adecuado a través de cambios en el estilo de vida y medicación.

EXTENSIÓN CON R Y RSTUDIO

DATA <- load(“DATA.rda”)

Error in readChar(con, 5L, useBytes = TRUE) : no se puede abrir la conexión Además: Warning message: In readChar(con, 5L, useBytes = TRUE) : cannot open compressed file ‘DATA.rda’, probable reason ‘No such file or directory’

file.choose() [1] “C:\6to SEMESTRE\METODO CUANTITATIVO\DATA.rda”

DATA <- load(“C:\6to SEMESTRE\METODO CUANTITATIVO\DATA.rda”)

DATA

[1] “diabetes”

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

DESAROLLO

CARGA DE BASE DE DATOS:

# Importar la base de datos
diabetes <- read.csv("diabetes2.csv",sep = ";")
# diabetes
# Se muetsra las primeras 3 filas de la base de datos
head(diabetes, 3)
##              Age Gender Family_Diabetes highBP PhysicallyActive BMI Smoking
## 20  less than 40   Male             yes     no   one hr or more  22      no
## 258 less than 40   Male             yes     no   one hr or more  22      no
## 511  60 or older Female             yes     no             none  26      no
##     Alcohol Sleep SoundSleep RegularMedicine     JunkFood     Stress BPLevel
## 20       no     8          6              no        often not at all  normal
## 258      no     8          6              no        often not at all  normal
## 511      no     7          7              no occasionally  sometimes  normal
##     Pregancies Pdiabetes UriationFreq Diabetic
## 20           0         0     not much       no
## 258          0         0     not much       no
## 511          3         0     not much       no

NOMBRE DE LAS VARIABLES DE LA BASE DE DATOS

# 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"

TIPO DE CLASE DE LAS VARIABLES DE LA BASE DE DATOS

# 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"

CAMBIAR EL TIPO DE CLASE

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("not at all", "sometimes", "very often", "always")
class(diabetes$Stress)
## [1] "factor"

Variable Bplevel

diabetes$BPLevel <- factor(diabetes$BPLevel)
levels(diabetes$BPLevel) <- c("normal", "high", "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("not much", "quite often")
class(diabetes$UriationFreq)
## [1] "factor"

Variable Diabetic

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

LIMPIEZA DE LA BASE DE DATOS

# Eliminar filas con valores faltantes
diabetes_clean <- na.omit(diabetes)

# Verificar el resultado
head(diabetes_clean)
##              Age Gender Family_Diabetes highBP         PhysicallyActive BMI
## 20  less than 40   Male             yes     no \t\nless than half an hr  22
## 258 less than 40   Male             yes     no \t\nless than half an hr  22
## 511  60 or older Female             yes     no     more than half an hr  26
## 907 less than 40   Male             yes     no                     none  19
## 582  60 or older   Male              no     no                     none  23
## 726        40-49   Male              no     no           one hr or more  26
##     Smoking Alcohol Sleep SoundSleep RegularMedicine     JunkFood     Stress
## 20       no      no     8          6              no   very often  sometimes
## 258      no      no     8          6              no   very often  sometimes
## 511      no      no     7          7              no occasionally very often
## 907     yes     yes     7          5              no occasionally  sometimes
## 582      no     yes     7          6             yes occasionally     always
## 726     yes      no     8          7              no occasionally very often
##     BPLevel Pregancies Pdiabetes UriationFreq Diabetic
## 20      low          0         0     not much       no
## 258     low          0         0     not much       no
## 511     low          3         0     not much       no
## 907     low          0         0     not much       no
## 582  normal          0         0  quite often      yes
## 726     low          0         0     not much       no

ELIMINAR LOS NA

# Eliminar filas con valores NA
diabetes_clean <- na.omit(diabetes)

# Verificar el resultado
head(diabetes_clean)
##              Age Gender Family_Diabetes highBP         PhysicallyActive BMI
## 20  less than 40   Male             yes     no \t\nless than half an hr  22
## 258 less than 40   Male             yes     no \t\nless than half an hr  22
## 511  60 or older Female             yes     no     more than half an hr  26
## 907 less than 40   Male             yes     no                     none  19
## 582  60 or older   Male              no     no                     none  23
## 726        40-49   Male              no     no           one hr or more  26
##     Smoking Alcohol Sleep SoundSleep RegularMedicine     JunkFood     Stress
## 20       no      no     8          6              no   very often  sometimes
## 258      no      no     8          6              no   very often  sometimes
## 511      no      no     7          7              no occasionally very often
## 907     yes     yes     7          5              no occasionally  sometimes
## 582      no     yes     7          6             yes occasionally     always
## 726     yes      no     8          7              no occasionally very often
##     BPLevel Pregancies Pdiabetes UriationFreq Diabetic
## 20      low          0         0     not much       no
## 258     low          0         0     not much       no
## 511     low          3         0     not much       no
## 907     low          0         0     not much       no
## 582  normal          0         0  quite often      yes
## 726     low          0         0     not much       no

ANÁLISIS DESCRIPTIVO

Descripción teórica:

Concepto y Fórmula:

Interpretación:

Diabetes1 <- diabetes_clean[, c("BMI", "Sleep", "SoundSleep", "Pregancies")]
summary(Diabetes1)
##       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

Selección de variables factor

Diabetes1 <- diabetes_clean[, c("BMI", "Sleep", "SoundSleep", "Pregancies")]

# Verificar el resultado
head(Diabetes1)
##     BMI Sleep SoundSleep Pregancies
## 20   22     8          6          0
## 258  22     8          6          0
## 511  26     7          7          3
## 907  19     7          5          0
## 582  23     7          6          0
## 726  26     8          7          0

Minimo

El valor mínimo se refiere al valor más pequeño encontrado de las variables dentro de esa base de datos. Para calcular el valor mínimo de una variable se, puedes utilizar la función min(). Esta función devuelve el valor mínimo dentro de un vector o columna.

\[\text{Valor Mínimo} = \min(x_1, x_2, ..., x_n)\]

# Obtener el valor mínimo de las variables "BMI", "Sleep", "SoundSleep" y "Pregancies"
apply(Diabetes1[, c("BMI", "Sleep", "SoundSleep", "Pregancies")], 2, min)
##        BMI      Sleep SoundSleep Pregancies 
##         15          4          0          0

Interpretación:


Primer Cuartil

El primer cuartil, también conocido como Q1 o percentil 25, es un valor estadístico que indica el punto en el cual el 25% de los datos de una muestra se encuentran por debajo de ese valor. En otras palabras, el primer cuartil divide la muestra en cuatro partes iguales, donde el 25% de los datos se encuentran por debajo del primer cuartil y el 75% restante se encuentra por encima.

\[Q1=Percentil . 25\]

# Calcular el primer cuartil de las variables "BMI", "Sleep", "SoundSleep" y "Pregancies"
first_quartiles <- quantile(Diabetes1$BMI, probs = 0.25)
first_quartiles_sleep <- quantile(Diabetes1$Sleep, probs = 0.25)
first_quartiles_soundsleep <- quantile(Diabetes1$SoundSleep, probs = 0.25)
first_quartiles_pregnancies <- quantile(Diabetes1$Pregancies, probs = 0.25)

# Verificar los resultados

C <- data.frame(
  first_quartiles,
  first_quartiles_sleep,
  first_quartiles_soundsleep,
  first_quartiles_pregnancies
)

print(C)
##     first_quartiles first_quartiles_sleep first_quartiles_soundsleep
## 25%              21                     6                          4
##     first_quartiles_pregnancies
## 25%                           0

Interpretación:


Mediana

La mediana es una medida de tendencia central que indica el valor que se encuentra en el centro de un conjunto de datos ordenados. Es decir, la mitad de los valores están por encima de la mediana y la otra mitad están por debajo.

\[\text{Mediana} = \text{valor\medio}\]

apply(Diabetes1, 2, median)
##        BMI      Sleep SoundSleep Pregancies 
##         24          7          6          0

Interpretación:


Media

El valor de la media se refiere al promedio de los valores de una variable específica. La media es una medida de tendencia central que se calcula sumando todos los valores y dividiendo el resultado entre la cantidad total de valores.

\[\bar{x} = \frac{1}{N} \sum_{i=1}^{N} x_i\]

data.frame(mean(Diabetes1$BMI),
mean(Diabetes1$Sleep),
mean(Diabetes1$SoundSleep),
mean(Diabetes1$Pregancies))
##   mean.Diabetes1.BMI. mean.Diabetes1.Sleep. mean.Diabetes1.SoundSleep.
## 1            25.33444              6.975717                   5.609272
##   mean.Diabetes1.Pregancies.
## 1                  0.3818985

Interpretación:

______________________________________-

Tercer Cuartil

El valor del tercer cuartil, también conocido como el percentil 75 (Q3), es un valor que divide los datos ordenados en cuatro partes iguales. Esto significa que el 75% de los datos se encuentran por debajo del tercer cuartil y el 25% restante se encuentra por encima.

\[Q_3=Percentil. 75\]

Diabetes1 <- diabetes_clean[, c("BMI", "Sleep", "SoundSleep", "Pregancies")]

# Calcular el tercer cuartil para cada variable
q3_values <- apply(Diabetes1, 2, quantile, probs = 0.75)

# Imprimir los resultados
print(q3_values)
##        BMI      Sleep SoundSleep Pregancies 
##         28          8          7          0

Interpretación:


Valor Maximo

El valor máximo se refiere al valor más grande que se encuentra en una determinada variable o columna. Es el valor más alto dentro de esa columna específica de un conjunto de datos.

\[\text{Valor Máximo} = \text{max}(x)\]

# Suponiendo que Diabetes1 es tu conjunto de datos
Diabetes1 <- diabetes_clean[, c("BMI", "Sleep", "SoundSleep", "Pregancies")]

# Calcular el valor máximo de cada variable
maximos <- apply(Diabetes1, 2, max)

# Imprimir los valores máximos
print(maximos)
##        BMI      Sleep SoundSleep Pregancies 
##         42         11         11          4

Interpretación:


GRÁFICA DE BARRAS

Relación con (género, edad, actividad física y consumo de comida chatarra)

Género(gender)

library(ggplot2)
grafico_Gender = ggplot(diabetes_clean,aes(x=Gender))+
  geom_bar(stat="count", width=0.7, fill="skyblue")+
  theme_minimal()

print(grafico_Gender)

Interpretación:


Edad(age)

grafico_Age = ggplot(diabetes_clean,aes(x=Age))+
  geom_bar(stat="count", width=0.7, fill="orange")+
  theme_minimal()

print(grafico_Age)

Interpretación:


Actividad Física(PhysicallyActive)

grafico_P = ggplot(diabetes_clean,aes(x=PhysicallyActive))+
  geom_bar(stat="count", width=0.7, fill="green")+
  theme_minimal()

print(grafico_P)

Comida Chatarra

grafico_C =ggplot(diabetes_clean,aes(x=JunkFood))+
  geom_bar(stat="count", width=0.7, fill="pink")+
  theme_minimal()

print(grafico_C)

Interpretacion:


GRÁFICO DE DISPERSIÓN

Masa Corporal y Horas de Sueño(BMI Y Sleep)

ggplot(diabetes_clean, aes(x = BMI, y = Sleep, col = factor(Sleep))) +
  geom_point() +
  labs(title = "Relación entre BMI y Horas de Sueño",
       x = "Masa Corporal (BMI)",
       y = "Horas de Sueño")

Comunicarse con los demás - al vivir con una enfermedad crónica: MedlinePlus Enciclopedia Médica. (s. f.). https://medlineplus.gov/spanish/ency/patientinstructions/000602.htm