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