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 de tipo cualitativa nominal, con rangos de edad: “40-49”, “50-59”, “60 or older”(60 o más), “less than 40”(menos de 40).
Gender: Género del individuo. Variable de tipo cualitativa nominal con 2 niveles: Male (Masculino) y Female(Femenino).
Family_Diabetes: Antecedentes familiares de diabetes. Variable de tipo cualitativa nominal con dos niveles “yes”(sí) y “no”. Este constituye uno de los factores de riesgo en padecer diabetes tipo 2.
highBP: Diagnóstico de hipertensión arterial alta. Variable cualitativa nominal, con dos niveles:“yes”(sí) y “no”. Es decir, contiene presión arterial alta o no contiene.
PhysicallyActive: -Actividad física. Frecuencia
del paciente para correr, caminar entre otros. Variable
cualitativa nominal, con 5 niveles: “one hr or more”(una hora o
más), “none”(ninguno),”
more than half an hr”(más de media hora), “more than half an hr”(más de
media hora), “less than half an hr”(menos de media hora).
BMI: Índice de masa corporal. Variable cuantitativa discreta. Es un cálculo simple que utiliza la altura y el peso de una persona. La mayoría de los adultos con un BMI-IMC por encima de 25 tienen sobrepeso y un mayor riesgo de desarrollar diabetes tipo 2 Variable de tipo entero. \[IMC = kg/m^2\]Una persona con un IMC de 18.5 a 24.9 está en el rango peso normal o saludable. Una persona con un IMC de 25 a 29.9 se clasifica como persona con sobrepeso. Una persona con un IMC de 30 a 39.9 se clasifica como persona con obesidad.Una persona con un IMC de 40 o más se clasifica como persona con obesidad severa.
Smoking: Tabaquismo. Variable cualitativa nominal con dos niveles, “yes”(Sí) y “no”. Es decir, si la persona fuma o no consume.
Alcohol: Consumo de alcohol. Variable cualitativa nominal con dos niveles, “yes”(sí) y “no”. Es decir, si la persona consume alcohol o no consume.
Sleep: Horas de sueño.Variable cuantitativa discreta. Las horas adecuadas de sueño es de 7 por noche o más. Variable de tipo entero.
Sound Sleep: Horas de sueño profundo. Variable cuantitativa discreta. El porcentaje asignado al sueño profundo es del 20% sobre todas las horas que hemos dormido. Variable de tipo entero.
RegularMedicine: Si la persona toma regularmente medicamentos. Variable cualitativa nominal con dos niveles “yes” y “no”.
JunkFood: Comida basura o chatarra. Variable cualitativa nominal que dicta la frecuencia del consumo de la comida chatarra, contiene 4 niveles: “often”(frecuentemente), “occasionally”(casionalmente), “always”(siempre), “very often”(muy a menudo).
Stress: Estrés. Puede hacer que sea más difícil de controlar la diabetes porque puede desequilibrar la rutina diaria y puede resultar en un deterioro del cuerpo. Variable cualitativa nominal que contiene 4 niveles “not at all”(“en absoluto),”sometimes”(a veces), “very often”(muy a menudo), “always”(siempre).
BPLevel: Diagnóstico de hipertensión arterial. La presión arterial normal es de 120/80 milímetros de mercurio o inferior, si presenta más a esa cantidad, se dicta que contiene hipertensión alta(Hipertensión). Si es menor a inferior a 90/60 mm Hg se dicta que la presión es baja. Variable cualitativa nominal que contiene 3 niveles. Normal, Low(baja) y High(alta).
Pregancies: Número de embarazos. Variable cuantitativa discreta.
Pdiabetes: La diabetes gestacional es un tipo de diabetes que puede aparecer durante el embarazo en las mujeres que no tengan ya diabetes. Variable cualitativa nominal con 2 niveles 0 (No) y 1 (Sí)
UriationFreq Frecuencia urinaria. Variable cualitativa nominal con 2 nivles: “not much”(no mucho),“quite often”(bastante a menudo).
Diabético: Diabético.Si la persona es diabética o no. Variable cualitativa nominal contiene 2 niveles: “yes” y “no”.
Se transforman las variables tipo cualitativas nominal a factor, lo cual nos ayuda a diferenciar los diferentes niveles.
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"
diabetes2$Age= factor (diabetes2$Age)
levels(diabetes2$Age) = c ("less than 40","40-49", "50-59", "60 or older")
class(diabetes2$Age)
## [1] "factor"
diabetes2$Gender= factor (diabetes2$Gender)
levels(diabetes2$Gender) = c ("Male", "Female")
class(diabetes2$Gender)
## [1] "factor"
diabetes2$Family_Diabetes= factor (diabetes2$Family_Diabetes)
levels(diabetes2$Family_Diabetes) = c ("Male", "Female")
class(diabetes2$Family_Diabetes)
## [1] "factor"
diabetes2$highBP= factor (diabetes2$highBP)
levels(diabetes2$highBP) = c ("yes", "no")
class(diabetes2$highBP)
## [1] "factor"
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"
diabetes2$Smoking= factor (diabetes2$Smoking)
levels(diabetes2$Smoking) = c ("yes", "no")
class(diabetes2$Smoking)
## [1] "factor"
diabetes2$Alcohol= factor (diabetes2$Alcohol)
levels(diabetes2$Alcohol) = c ("yes", "no")
class(diabetes2$Alcohol)
## [1] "factor"
diabetes2$RegularMedicine = factor (diabetes2$RegularMedicine )
levels(diabetes2$RegularMedicine ) = c ("yes", "no")
class(diabetes2$RegularMedicine )
## [1] "factor"
diabetes2$JunkFood = factor (diabetes2$JunkFood )
levels(diabetes2$JunkFood ) = c ("often", "occasionally", "always", "very often")
class(diabetes2$JunkFood )
## [1] "factor"
diabetes2$Stress = factor (diabetes2$Stress )
levels(diabetes2$Stress ) = c ("not at all", "sometimes", "very often", "always")
class(diabetes2$Stress )
## [1] "factor"
diabetes2$BPLevel <- factor(diabetes2$BPLevel)
levels(diabetes2$BPLevel) <- c("high"," low", "normal")
class(diabetes2$BPLevel)
## [1] "factor"
diabetes2$UriationFreq <- factor(diabetes2$UriationFreq)
levels(diabetes2$UriationFreq) <- c("not much","quite often")
class(diabetes2$UriationFreq)
## [1] "factor"
diabetes2$Pdiabetes <- factor(diabetes2$Pdiabetes)
levels(diabetes2$Pdiabetes) <- c("0","1")
class(diabetes2$Pdiabetes)
## [1] "factor"
diabetes2$Diabetic <- factor(diabetes2$Diabetic)
levels(diabetes2$Diabetic) <- c("no","yes")
class(diabetes2$Diabetic)
## [1] "factor"
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"
which(is.na(diabetes2))
## integer(0)
Se obtiene que no hay datos perdidos o faltantes en la base de datos “diabetes2”.
\[Desviación ~ estándar \longrightarrow \sigma = \sqrt( \frac{\sum_{i=1}^{n} = (x_{i}- \bar{x})^2}{n})\]
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
Se obtiene que el mínimo del índice de masa corporal de 15 \(kg/m^2\) por lo que el riesgo de padecer diabetes tipo 2, aún es bajo pero no descartable, ya que, se considera un mayor riesgo a las personas que tiene un BMI por encima de las 25 \(kg/m^2\) . Sin embargo, hay que tomar en cuenta que su mediana es de 24 \(kg/m^2\) y su media de 25.33 \(kg/m^2\).
Además, al considerar el 1er cuartil, se infiere que el 25% de la población en estudio contiene 21\(kg/m^2\) y el 75% que representa el 3er cuartil que posee 28 \(kg/m^2\), con una desviación estándar de 5.1399922.
Considerando estos valores se infiere que la población es propensa a ser diabética.
Se obtiene que el mínimo es de 4 horas de sueño, lo cual es poco, ya que el sueño adecuado es de 7 horas o más para un adulto. Sin embardo su mediana es de 7 horas y su media de igual manera, por lo que, se acerca al rango adecuado. Aunque se verificó que el máximo de horas de sueño es de 11 horas.
Además, al considerar el 1er cuartil, se infiere que el 25% de la población en estudio constituye 6 horas de sueño, mientras que, el 3er cuartil que representa el 75% es de 8 horas, con una desviación estándar de 1.3042497.
Por lo que, el sueño no parece un factor que influya mucho para la predicción diabetes tipo 2 en pacientes.
Se obtiene que el mínimo es 0 horas por lo que es una cifra alarmante, ya que, el porcentaje asignado al sueño profundo es del 20% sobre todas las horas que se ha dormido. Por lo que, al comparar con la variable Sleep, es decir, sueño, el dato es caótico ya que en cuestión de sueño las horas son altas, sin embargo, en sueño profundo son bajas. Por lo que, ciertas personas no tienen un buen descanso.
Pero, al ya comprobar la mediana de SoundSleep es 6 horas y su media es de aproximadamente lo mismo. 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.
Además, al considerar el 1er cuartil, se infiere que el 25% de la población en estudio constituye 4 horas de sueño profundo, mientras que, el 3er cuartil que representa el 75% es de 7 horas, con una desviación estándar de 1.8435140.
Entonces, se infiere que la mayoría de personas tienen un buen sueño profundo, sin embargo, existe personas que no lo tienen, por lo que, esta variable puede ser un factor que influya en la diabetes 2.
Se obtiene que el mínimo de embarazos es de 0 y el máximo de 4 embarazos. Por lo que, el 25% y el 75% de la población, es decir, el 1er cuartil y 3er cuartil se encuentra en 0 embarazos, con una desviación estándar de 0.9090479.
Es decir, que la variable “Pregancies” no es muy notable ya que no muchas mujeres se encuentran en este estado. Sin embargo, es bueno considerar la variable, puesto que, la diabetes gestacional aumenta el riesgo de tener presión arterial alta y preeclampsia, una complicación grave del embarazo que provoca presión arterial alta y otros síntomas que pueden poner en riesgo la vida de la madre y la del bebé.
library(ggplot2)
grafico_1 = ggplot(diabetes2,aes(x=Gender))+
geom_bar(stat="count", width=0.7, fill="skyblue")+
theme_minimal() + geom_text(aes(label = ..count..), stat="count" )
print(grafico_1)
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## i Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Interpretación
Se obtiene que en la variable “Gender”, el más predominante es “Male”(masculino) con 557 individuos, mientras que “Female”(Femenino) tiene 349.
grafico_2 = ggplot(diabetes2,aes(x=Age))+
geom_bar(stat="count", width=0.7, fill="orange")+
theme_minimal() + geom_text(aes(label = ..count..), stat="count" )
print(grafico_2)
Interpretación
Se obtiene que en la variable “Age”, el rango predominante es “60 or older”(más de 60) con una suma de 464, por lo cual la población mayoritaria se encuentra en la 3ra edad.
Los otros rangos sobrantes se asemejan en cantidades, “less than 40”(menores de 40) con 139, 40-49 con 165 y 50-59 con 138 individuos.
grafico_3 = ggplot(diabetes2,aes(x=PhysicallyActive))+
geom_bar(stat="count", width=0.7, fill="green")+
theme_minimal() + geom_text(aes(label = ..count..), stat="count" )
print(grafico_3)
Interpretación
Se obtiene que el nivel que más predomina es “less than half an hr”(menos de media hora) con 321 individuos, cantidad preocupante ya que mientras menos ejercicio se realiza, mayor el riesgo de padecer alguna enfermedad.
También, el segundo rango sobresaliente es “more than half an hr”(más de media hora) con 227, es bueno la cantidad, siempre y cuando se considere que la gente lo haga al menos 5 días a la semana.
Los rangos minotarios es “none”(ninguno) con 134 y “one hr or more”(una hora o más) con 224.
Entonces, se infiere que, es importante hacer conciencia sobre la acividad física, para que así baje el rango de personas que no lo hacen. Sin embargo, como la población mayoritaria en edad es de la 3ra edad puede que sea dificil para ellos hacer ejercicio.
grafico_4 =ggplot(diabetes2,aes(x=JunkFood))+
geom_bar(stat="count", width=0.7, fill="pink")+
theme_minimal() + geom_text(aes(label = ..count..), stat="count" )
print(grafico_4)
Interpretación
Se obtiene que el nivel “occasionally”(ocasionalmente), sobresale entre todos, por lo cual, se encuentra bien, ya que “always”(siempre) es 38, often(a menudo) es 188 y “very often”(muy a menudo) es 65, cantidades muy bajos con respecto a “occasionally”.
Por lo que, se infiere que la población trata de no comer mucha comida chatarra.
Relacion entre las variables. Ayuda a la predicción aportan a diagnostivo de diabetes
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.
Interpretación
Se obtiene que mientras más BMI con repecto al sueño, más probabilidad de ser diabético es la persona. Puesto que, a partir del 20 \(kg/m^2\) BMI y el sueño bajo desde 4, más personas son propensas a ser diabéticos. Sin embargo, se visualiza que no hay muchas personas diabéticas.
qplot(BMI, Age, data = diabetes2, colour = Diabetic)
Interpretación
Se infiere que mientras menos edad y menos BMI se tiene menor probabilidad de ser diabético, por lo que, el rango de edad de más de 60 es más propensa a contraer diabetes tipo 2. Además, el rango con menos probabilidad de que ocurra la enfermedad son los menores de 40 años.
library(ggplot2)
qplot(BMI, JunkFood, data = diabetes2, colour = Diabetic)
Interpretación
Se infiere que mientras más BMI y consumo de comida chatarra, mayor es el riesgo de padecer diabetes tipo 2. Ya que se observa
library(ggplot2)
qplot(BMI, BPLevel, data = diabetes2, colour = Diabetic)
Interpretación
Se obtiene que hay mayor relación cuando el BMI es alto y el nivel de hipertención es alto. Es decir mientras más BMI y mayor presión arterial más propenso es la persona en ser diabética.
library(ggplot2)
ggplot(diabetes2, aes (x = Diabetic, y = BMI, color = Diabetic)) + geom_boxplot()
Interpretación:
Se obtiene que la variable BMI en relación a diabetes, en el nivel “no” el 25% de la población, es decir, el 1er cuartil sobrepasa los 20 \(kg/m^2\), su mediana y media es aproximadamente de 24\(kg/m^2\).
También el 3er cuartil se acerca a 30 \(kg/m^2\), por lo que, el 75% de las personas en estudio tienen sobrepeso. Aunque con el máximo se verifica que efectivamente se trata con personas de obesidad severa, ya que contienen aproximadamente más de 38 \(kg/m^2\) e incluso se refleja 2 datos atípicos entre 38 y 45 \(kg/m^2\).
En el nivel yes el 25% de la población, es decir, el 1er cuartil se encuentra entre los 26 \(kg/m^2\), su mediana y media sobrepasa 25\(kg/m^2\).
ggplot(diabetes2, aes (x = Diabetic, y = Sleep, color = Diabetic)) + geom_boxplot()
Interpretación:
Se obtiene que el mínimo es de 4 horas de sueño entre los niveles yes y no, lo cual es poco, ya que el sueño adecuado es de 7 horas o más para un adulto. Sin embargo, su mediana es de 7 horas y su media de igual manera en los dos niveles, por lo que, se acerca al rango adecuado. Aunque se verificó que el máximo de horas de sueño es de 10 horas para yes y 11 horas para no.
Además, al considerar el 1er cuartil de los 2 niveles, se infiere que el 25% de la población en estudio constituye 6 horas de sueño, mientras que, el 3er cuartil de los 2, que representa el 75% es de 8 horas.
Por lo que, los niveles estudiados, son semejantes pero no iguales.
ggplot(diabetes2, aes (x = Diabetic, y = SoundSleep , color = Diabetic)) + geom_boxplot()
Interpretación:
Se obtiene que el mínimo del nivel “no”, es decir, cuando el individuo no contiene diabetes 2, es 0 horas , mientras, que el nivel “yes”, tiene un mínimo de 2, por lo que es una cifra alarmante, ya que, el porcentaje asignado al sueño profundo es del 20% sobre todas las horas que se ha dormido.
Pero, al ya comprobar la mediana de SoundSleep de los dos niveles es 6 horas y su media es de aproximadamente lo mismo. Por lo que la población intermedia tiene una buena hora de sueño. Esto se puede corroborar con la hora máxima de “yes” con 10 y el nivel “no” es de 11 horas.
Además, al considerar el 1er cuartil de los dos niveles , se infiere que el 25% de la población en estudio constituye 4 horas de sueño profundo, mientras que, el 3er cuartil que representa el 75% es de 7 horas..
Entonces, se infiere que la mayoría de personas tienen un buen sueño profundo, sin embargo, se observa que el sueño de las personas que contienen diabetes tipo 2 es muy bajo a comparación de los que no possen.
ggplot(diabetes2, aes (x = Diabetic, y = Pregancies, color = Diabetic)) + geom_boxplot()
Interpretación
Se obtiene que el mínimo de embarazos es 0 para las 2 variables y el máximo es de 4 embarazos sólo para el nivel yes. Por lo que, el 25%, es decir, el 1er cuartil se encuentra en 0 embarazos para los dos niveles. Sin embargo, para el 3er cuartil , es decir, el 75% de la población de la variable “no” queda en 0, mientras para las personas diabéticas de tipo 2, es de 2 embarazos.
Por lo que se infiere, que mientras, la persona tenga más embarazos, tiene más probabilidad de contener diabetes tipo 2.
library(ggmosaic)
library(gridExtra)
q1<- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, Gender),
fill = Diabetic)) + labs ("Gender",
title = "Factores_Diabetes")
q2<- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, Family_Diabetes),
fill = Diabetic)) + labs ("Family_Diabetes",
title = "Factores_Diabetes")
q3 <- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, highBP),
fill = Diabetic)) + labs ("highBP",
title = "Factores_Diabetes")
q4 <- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, PhysicallyActive),
fill = Diabetic)) + labs("PhysicallyActive",
title = "Factores_Diabetes")
grid.arrange(q1, q2, q3, q4, nrow= 2, ncol = 2)
## Warning: `unite_()` was deprecated in tidyr 1.2.0.
## i Please use `unite()` instead.
## i The deprecated feature was likely used in the ggmosaic package.
## Please report the issue at <https://github.com/haleyjeppson/ggmosaic>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Se observa que las personas que no contienen diabetes tipo 2 sobresale, mientras, que la población minotaria es los que contienen la enfermedad. Sin embargo, se visualiza que entre la variable “Male”(Masculino) posse más individuos con DM2 que las mujeres “Female”.
Se observa que las personas que no contienen diabetes tipo 2 sobresale, mientras, que la población minotaria es los que contienen la enfermedad. Sin embargo, se visualiza que si la persona proviene de una familia con historial de la enfermedad, tiene más probabilidades de poseer la enfermedad DM2.
Se observa que las personas que no contienen diabetes tipo 2 sobresale, mientras, que la población minotaria es los que contienen la enfermedad. Sin embargo, se visualiza que mientras el diagnóstico de hipertensión arterial es alta, más probabilidad es que la persona contenga DM2.
Se observa que las personas que no contienen diabetes tipo 2 sobresale, mientras, que la población minotaria es los que contienen la enfermedad. Sin embargo, se visualiza que mientras menos deporte haga la persona, más es la probabilidad de contraer DM2.
q5<- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, Smoking),
fill = Diabetic)) + labs ("Smoking",
title = "Factores_Diabetes")
q6<- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, Alcohol),
fill = Diabetic)) + labs ("Alcohol",
title = "Factores_Diabetes")
q7 <- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, RegularMedicine),
fill = Diabetic)) + labs ("RegularMedicine",
title = "Factores_Diabetes")
q8 <- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, JunkFood),
fill = Diabetic)) + labs("JunkFood",
title = "Factores_Diabetes")
grid.arrange(q5, q6, q7, q8, nrow= 2, ncol = 2)
Se observa que las personas que no contienen diabetes tipo 2 sobresale, mientras, que la población minotaria es los que contienen la enfermedad. Sin embargo, se visualiza que mientras más la persona fume, se tiene más probabilidad de contraer DM2.
Se observa que las personas que no contienen diabetes tipo 2 sobresale, mientras, que la población minotaria es los que contienen la enfermedad. Sin embargo, se visualiza que mientras más la persona fume, se tiene más probabilidad de contraer DM2.
Se observa que las personas que no contienen diabetes tipo 2 sobresale, mientras, que la población minotaria es los que contienen la enfermedad. Sin embargo, se visualiza que mientras más se toma alcohol, se tiene más probabilidad de contraer DM2.
Se observa que las personas que no contienen diabetes tipo 2 sobresale, mientras, que la población minotaria es los que contienen la enfermedad. Sin embargo, se visualiza que mientras más se consume comida chatarra, más es la probabilidad de contraer DM2.
q9<- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, Stress),
fill = Diabetic)) + labs ("Stress",
title = "Factores_Diabetes")
q10<- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, BPLevel),
fill = Diabetic)) + labs ("BPLevel",
title = "Factores_Diabetes")
q11 <- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, UriationFreq),
fill = Diabetic)) + labs ("UriationFreq",
title = "Factores_Diabetes")
grid.arrange(q9, q10, q11, nrow= 2, ncol = 2)
Se observa que las personas que no contienen diabetes tipo 2 sobresale, mientras, que la población minotaria es los que contienen la enfermedad. Sin embargo, se visualiza que mientras más estrés tenga la persona, más probabilidad es contraer la enfermedad.
Se observa que las personas que no contienen diabetes tipo 2 sobresale, mientras, que la población minotaria es los que contienen la enfermedad. Sin embargo, se visualiza que mientras más alta el la presión arterial, mayor es la probabilidad de contraer DM2.
Se observa que las personas que no contienen diabetes tipo 2 sobresale, mientras, que la población minotaria es los que contienen la enfermedad. Sin embargo, se visualiza que mientras que más alta la frecuencia urinaria, mayor es el riesgo de contraer la enfermedad.
library(GGally)
library(ggmosaic)
ggpairs(diabetes2[, clases == "integer"])+ theme_bw()
Este gráfico brinda mayor información sobre la data estudiada.
library(GGally)
library(ggmosaic)
p <- ggpairs(diabetes2[, c(which( clases == "integer") ,18)], aes(color = Diabetic)) + theme_bw()
for(i in 1:p$nrow){
for(j in 1:p$ncol){
p[i,j] <- p[i,j] +
scale_fill_manual(values = c("#66CDAA", "#EE3050")) +
scale_color_manual(values = c("#66CDAA", "#EE4050"))
}
}
p
La relación entre las variales “Sleep” y “BMI” tiene una correlación de -0.073, lo cual es una correlación nula negativa. Por lo que, indica que mientras más sea el BMI, menor cantidad de sueño en horas tendrá el paciente.
Además, existe dispersión entre los valores de las dos variables, dando como resultado una correlación no lineal.
La relación entre las variales “SoundSleep” y “BMI” tiene una correlación de -0.291, lo cual es una correlación nula negativa. Por lo cual, mientras más BMI presenta el paciente peor será el sueño profundo.
La relación entre las variales “Pregancies” y “BMI” tiene una correlación de -0.086, lo cual es una correlación nula negativa.
La relación entre las variables “SoundSleep” y “Sleep” revela una correlación con moderada intensidad, expresada mediante un valor numérico de 0.575. Este coeficiente sugierre una asociación significativa entre ambos aspectos, indicando cambios en uno podría estar relacionado con cambios proporcionados en el otro, aunque no de manera extremadamente fuerte.
La relación entre las variales “Pregancies” y “Sleep” tiene una correlación de 0.054, lo cual es una correlación nula positiva.
La relación entre las variales “Pregancies” y “SoundSleep” tiene una correlación de 0.117, lo cual es una correlación débil positiva.
Divideremos el conjunto completo de individuos en dos partes, uno para entrenar el modelo, que contienen el 80% d elos individuos y otra para validarlo que contiene el resto. Esto es así porque si valoramos el modelo con las mismas observaciones que usamos para ajustarlo, la bondad del ajuste quedará sobrevalorada.
Antes de ajustar cualquier modelo, es conveniente escalar las variables numériccas y tenemos que reacondicionar las variables categóricas convirtiéndolas en variables ficticias y usando la primera o la última categoría como comparación.
diabetes2[, clases == "integer"]= scale(diabetes2[, clases == "integer"])
head(diabetes2)
Las varibles categóricas aparecen con 0 y 1.
X= model.matrix(Diabetic ~ ., data = diabetes2)
head(X)
## (Intercept) Age40-49 Age50-59 Age60 or older GenderFemale
## 20 1 0 0 1 1
## 258 1 0 0 1 1
## 511 1 0 1 0 0
## 907 1 0 0 1 1
## 582 1 0 1 0 1
## 726 1 0 0 0 1
## Family_DiabetesFemale highBPno PhysicallyActivenone
## 20 1 0 0
## 258 1 0 0
## 511 1 0 0
## 907 1 0 0
## 582 0 0 0
## 726 0 0 0
## PhysicallyActive\t\nmore than half an hr
## 20 0
## 258 0
## 511 0
## 907 0
## 582 0
## 726 0
## PhysicallyActivemore than half an hr PhysicallyActiveless than half an hr
## 20 0 0
## 258 0 0
## 511 0 0
## 907 0 0
## 582 0 0
## 726 0 0
## BMI Smokingno Alcoholno Sleep SoundSleep RegularMedicineno
## 20 -0.6487242 0 0 0.78534240 0.2119477 0
## 258 -0.6487242 0 0 0.78534240 0.2119477 0
## 511 0.1294871 0 0 0.01861803 0.7543900 0
## 907 -1.2323826 1 1 0.01861803 -0.3304947 0
## 582 -0.4541713 0 1 0.01861803 0.2119477 1
## 726 0.1294871 1 0 0.78534240 0.7543900 0
## JunkFoodoccasionally JunkFoodalways JunkFoodvery often Stresssometimes
## 20 0 1 0 1
## 258 0 1 0 1
## 511 1 0 0 0
## 907 1 0 0 1
## 582 1 0 0 0
## 726 1 0 0 0
## Stressvery often Stressalways BPLevel\tlow BPLevelnormal Pregancies
## 20 0 0 0 1 -0.4201082
## 258 0 0 0 1 -0.4201082
## 511 1 0 0 1 2.8800479
## 907 0 0 0 1 -0.4201082
## 582 0 1 0 0 -0.4201082
## 726 1 0 0 1 -0.4201082
## Pdiabetes1 UriationFreqquite often
## 20 0 0
## 258 0 0
## 511 0 0
## 907 0 0
## 582 0 1
## 726 0 0
Se observa que las variables numéricas reescaladas contienen los mismo valores iniciales. Cada una de las variables nominales han sido convertida en variables binarias. El número de variables binarias es siempre el número de categorías de la variable nominal. Por ejemplo, la variable Gender (con dos categorías) ha sido convertida en GenderMale que es una variable numérca que vale 1 cuando el sexo es hombre y 0 cuando es mujer. El resto de variables también son convertidas a Binarias con el número de categorías que cada una almacena. Los parámetros correspondientes a las categóricas retenidas comparan a éstas con la categoría eliminada.
Divideremos el conjunto completo de individuos en dos partes, uno para entrenar el modelo, que contiene el 80% de los de los individuos y otra para validarlo que contiene el resto. Esto es
tr = round(nrow(diabetes2)*0.7)
set.seed(06071981) # semilla para el entrenamiento
muestra = sample.int(nrow(diabetes2), tr) # tomo una muestra del 70%
Train.diabet = diabetes2[muestra,] #tomo los datos para entrenamiento
Val.diabet = diabetes2[-muestra,] #tomo los datos para validación
Ahora disponemos de un conjunto de entrenamiento Train.diabet que es el 70% y un conjunto de validación Val.diabet que es el 30%.
Trataremos de modelar la probabilidad de DIABETES positiva en función del resto de las variables.
\[{p_1} = P\left({Y=1|X={x_i}}\right)=\frac{e^{\beta_{0}+\beta_{1}x_{i1}+...\beta_{p}x_{ip}}}{1+e^{\beta_{0}+\beta_{1}x_{i1}+...\beta_{p}x_{ip}}}\] Vamos ajustar el modelo desde el punto de vista estadístico para interpretar los parámetros.
Un GLM está especificado por tres componentes:
Aleatoria.
Sistemática.
De enlace.
Los GLM son, por tanto, una extensión de los modelos lineales que permiten utilizar distribuciones no normales de los errores (binomiales, Poisson, gamma, etc) y varianzas no constantes.
glm <- ajusta los modelos de regresió, que tipo de distribución se va aplicar. Distribucion binomial.
La columna Pr(>|z|) representa el valor p asociado con el valor en la columna del valor z.
Si el valor p es menor que un cierto nivel de significancia (por ejemplo, α = 0,05), esto indica que la variable predictiva tiene una relación estadísticamente significativa con la variable de respuesta en el modelo.
\[Valor ~ z = \frac{Estimación}{Error ~ Estándar} \]
\[Valor ~ p = 2*(1-pnorm(valor ~ z))\]
library(stats)
gfit1 <- glm( Diabetic~., data = diabetes2, family = binomial)
summary(gfit1)
##
## Call:
## glm(formula = Diabetic ~ ., family = binomial, data = diabetes2)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.5271 -0.3939 -0.1470 0.3512 2.7029
##
## Coefficients: (1 not defined because of singularities)
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.10082 0.86734 -1.269 0.204372
## Age40-49 0.39428 0.35305 1.117 0.264089
## Age50-59 1.47179 0.39012 3.773 0.000162 ***
## Age60 or older -1.53766 0.41047 -3.746 0.000180 ***
## GenderFemale 0.57709 0.34927 1.652 0.098475 .
## Family_DiabetesFemale 1.10985 0.24728 4.488 7.18e-06 ***
## highBPno -0.66985 0.36895 -1.816 0.069443 .
## PhysicallyActivenone NA NA NA NA
## BMI 0.12624 0.11754 1.074 0.282848
## Smokingno 1.00114 0.45912 2.181 0.029215 *
## Alcoholno -0.09957 0.35001 -0.284 0.776038
## Sleep 0.04793 0.15000 0.320 0.749318
## SoundSleep 0.41637 0.16925 2.460 0.013893 *
## RegularMedicineno 2.78423 0.28287 9.843 < 2e-16 ***
## JunkFoodoccasionally -0.74839 0.67642 -1.106 0.268552
## JunkFoodalways -0.46604 0.66770 -0.698 0.485195
## JunkFoodvery often -0.94183 0.85775 -1.098 0.272193
## Stresssometimes -0.06891 0.49740 -0.139 0.889810
## Stressvery often -0.83976 0.38884 -2.160 0.030797 *
## Stressalways -0.63285 0.43852 -1.443 0.148977
## BPLevel\tlow -15.35205 718.46262 -0.021 0.982952
## BPLevelnormal -1.31370 0.37083 -3.543 0.000396 ***
## Pregancies 0.41201 0.14258 2.890 0.003857 **
## Pdiabetes1 3.07780 0.73982 4.160 3.18e-05 ***
## UriationFreqquite often 0.29334 0.29401 0.998 0.318419
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 1091.56 on 905 degrees of freedom
## Residual deviance: 514.17 on 882 degrees of freedom
## AIC: 562.17
##
## Number of Fisher Scoring iterations: 16
Se obtiene el modelo lineal generalizado (Regresión logística) para la variable “Age” en el nivel “60 or older”(60 o más), la estimación para la variable predictora es de 1.62408, su error estándar es de , con valor de z 3.904 y con un valor p de 9.47e-05.
El valor p es menor que el nivel de significancia ( \(\alpha = 0.05\)), esto indica que la variable predictiva tiene una relación estadísticamente significativa con la variable respuesta, esto se evidencia en los asteriscos al lado del valor p.
Por lo cual, indica que tener 60 o mas años aumenta considerablemente la probabilidad de tener diabetes tipo 2.
Se obtiene el modelo lineal generalizado (Regresión logística) para la variable “Age” en el nivel “less than 40”(menos de 40), la estimación para la variable predictora es de -1.68936 , su error estándar es de , con valor de z -3.907 y con un valor p de 9.36e-05.
El valor p es mayor que el nivel de significancia ( \(\alpha = 0.05\)), esto indica que la variable predictiva tiene una relación estadísticamente significativa con la variable respuesta, esto se evidencia en los asteriscos al lado del valor p.
Por lo cual, indica que tener menos de 40 años, disminuye la probabilidad de contener diabetes tipo 2.
Se obtiene el modelo lineal generalizado (Regresión logística) para la variable “Family_Diabetes” en el nivel “yes”(sí), la estimación para la variable predictora es de 1.00920, su error estándar es de , con valor de z 3.964 y con un valor p de 7.37e-05.
El valor p es mayor que el nivel de significancia ( \(\alpha = 0.05\)), esto indica que la variable predictiva tiene una relación estadísticamente significativa con la variable respuesta, esto se evidencia en los asteriscos al lado del valor p.
Por lo cual, indica que tener antecedentes familiares con diabetes tipo 2, el paciente aumenta considerablemente la probabilidad de tener diabetes tipo 2.
Se obtiene el modelo lineal generalizado (Regresión logística) para la variable “highBP” en el nivel “yes”(sí), la estimación para la variable predictora es de -0.85083 , su error estándar es de , con valor de z -2.183 y con un valor p de 0.029013.
El valor p es mayor que el nivel de significancia ( \(\alpha = 0.05\)), esto indica que la variable predictiva tiene una relación estadísticamente significativa con la variable respuesta, esto se evidencia en el asterisco al lado del valor p.
Por lo cual, indica que tener no contener presión alterial alta, disminuye la probabilidad de contener diabetes tipo 2.
PhysicallyActivenone 0.85532 0.38718 2.209 0.027165 *
Se obtiene el modelo lineal generalizado (Regresión logística) para la variable “PhysicallyActive” en el nivel “none”(ninguno), la estimación para la variable predictora es de 0.85532, su error estándar es de , con valor de z 2.209 y con un valor p de 0.027165.
El valor p es mayor que el nivel de significancia ( \(\alpha = 0.05\)), esto indica que la variable predictiva tiene una relación estadísticamente significativa con la variable respuesta, esto se evidencia en los asteriscos al lado del valor p.
Por lo cual, indica que al no tener actividad física, el paciente aumenta considerablemente la probabilidad de tener diabetes tipo 2.
Se obtiene el modelo lineal generalizado (Regresión logística) para la variable “PhysicallyActive” en el nivel “nhr or more”(una hora o más), la estimación para la variable predictora es de 1.68317, su error estándar es de , con valor de z 4.459 y con un valor p de 8.25e-06.
El valor p es mayor que el nivel de significancia ( \(\alpha = 0.05\)), esto indica que la variable predictiva tiene una relación estadísticamente significativa con la variable respuesta, esto se evidencia en los asteriscos al lado del valor p.
Por lo cual, indica que al tener actividad física, el paciente aumenta considerablemente la probabilidad de tener diabetes tipo 2.
Se obtiene el modelo lineal generalizado (Regresión logística) para la variable “Smoking” en el nivel “yes”(sí), la estimación para la variable predictora es de 1.15528, su error estándar es de , con valor de z 0.021955 y con un valor p de 0.021955.
El valor p es mayor que el nivel de significancia ( \(\alpha = 0.05\)), esto indica que la variable predictiva tiene una relación estadísticamente significativa con la variable respuesta, esto se evidencia en los asteriscos al lado del valor p.
Por lo cual, indica que al ser fumador, el paciente aumenta considerablemente la probabilidad de tener diabetes tipo 2.
Se obtiene el modelo lineal generalizado (Regresión logística) para la variable “RegularMedcine” en el nivel “yes”(sí), la estimación para la variable predictora es de 2.97844, su error estándar es de , con valor de z 9.631 y con un valor p de 2e-16.
El valor p es mayor que el nivel de significancia ( \(\alpha = 0.05\)), esto indica que la variable predictiva tiene una relación estadísticamente significativa con la variable respuesta, esto se evidencia en los asteriscos al lado del valor p.
Por lo cual, indica que al medicarse, el paciente aumenta considerablemente la probabilidad de tener diabetes tipo 2.
Se obtiene el modelo lineal generalizado (Regresión logística) para la variable “BPLevel” en el nivel “normal”, la estimación para la variable predictora es de -1.47618, su error estándar es de , con valor de z -3.781 y con un valor p de 0.000156.
El valor p es mayor que el nivel de significancia ( \(\alpha = 0.05\)), esto indica que la variable predictiva tiene una relación estadísticamente significativa con la variable respuesta, esto se evidencia en los asteriscos al lado del valor p.
Por lo cual, indica que al tener la presion arterial normal, el paciente disminuye considerablemente la probabilidad de tener diabetes tipo 2.
Se obtiene el modelo lineal generalizado (Regresión logística) para la variable “BPLevel” en el nivel “normal”, la estimación para la variable predictora es de 4.01652, su error estándar es de , con valor de z 4.538 y con un valor p de 5.67e-06.
El valor p es mayor que el nivel de significancia ( \(\alpha = 0.05\)), esto indica que la variable predictiva tiene una relación estadísticamente significativa con la variable respuesta, esto se evidencia en los asteriscos al lado del valor p.
Por lo cual, indica que al tener la diabetes gestional, el paciente aumenta considerablemente la probabilidad de tener diabetes tipo 2.