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_1 <- read.csv("C:\\Users\\ASUS\\Documents\\diabetes2.txt",sep = ";")
#diabetes_1
# nombres de las variables
names(diabetes_1)
##  [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_1, 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_1$Age <- factor(diabetes_1$Age)
levels(diabetes_1$Age) <- c("40-49","50-59","60 or older","less than 40")
class(diabetes_1$Age)
## [1] "factor"

Variable Gender

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

Variable Family_Diabetes

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

Variable highBP

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

Variable PhysicallyActive

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

Variable Smoking

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

Variable Alcohol

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

Variable RegularMedicine

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

Variable JunkFood

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

Variable Stress

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

Variable BPLevel

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

Variable Pdiabetes

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

Variable UriationFreq

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

Variable Diabetic

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

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

diabetes <- na.omit(diabetes_1)
#vereficamos el resultado
head(diabetes)

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

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:

Formulas

MEDIA Datos impares \[Mediana = x_{(\frac{n+1}{2})}\]

MEDIANA Datos impares \[Mediana = x_{(\frac{n+1}{2})}\] Datos pares

\[Mediana = \frac{x_{\frac{n}{2}}+x_{(\frac{n}{2})+1}}{2}\] DESVIACIÓN ESTANDAR

\[SD = \sqrt{\frac{\sum_{i=1}^{n}(x_i - \bar{x})^2}{n-1}}\]

summary(diabetes[,classes=="numeric"])
##       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[,classes=="numeric"],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)
## Warning: package 'ggplot2' was built under R version 4.3.2
library(gridExtra)
## Warning: package 'gridExtra' was built under R version 4.3.2
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")
grid.arrange(grafico_1,grafico_2,grafico_3,grafico_4,nrow=3,ncol=4)

INTERPRETACIÓN:El primer gráfico de barras destaca una tendencia notable: hay una mayor representación de personas del género masculino en este estudio. Este dato resalta una disparidad demográfica que puede ser relevante al considerar diversas perspectivas y enfoques en relación con los resultados obtenidos.

INTERPRETACIÓN: El segundo gráfico de barras ofrece una perspectiva interesante: la mayoría de la población estudiada corresponde a personas menores de 40 años. Este dato resalta la composición demográfica predominante en nuestra muestra, mostrando una mayor representación de personas más jóvenes. Este hallazgo es significativo ya que refleja la dinámica y la vitalidad de esta franja demográfica en nuestro estudio.

INTERPRETACIÓN:El gráfico de barras número tres revela un patrón alentador: la mayoría de las personas se comprometen con la actividad física durante una hora o más. Este dato refleja un enfoque positivo hacia la salud y el bienestar en nuestra comunidad. Es alentador ver que tantas personas valoran y dedican tiempo a cuidar su salud a través del ejercicio regular.

INTERPRETACIÓN:En este gráfico de barras, se destaca un patrón revelador: más de 600 personas muestran un hábito ocasional de consumir comida chatarra. Este dato subraya la prevalencia de este tipo de alimentación en nuestra comunidad. Es crucial entender la importancia de promover opciones más saludables y educar sobre los beneficios de una dieta equilibrada. Este hallazgo nos motiva a trabajar hacia un cambio positivo, ofreciendo alternativas más nutritivas y opciones de comida que fomenten un estilo de vida más saludable para todos.

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.

Boxplot del diabetes vs indice de masa corporal, Sleep, Sound Sleep, Pregancies

library(gridExtra)
library(ggplot2)
p1 <- ggplot(diabetes,aes(x=Diabetic,
                          y=BMI, color=Diabetic))+
  geom_boxplot()
p2 <- ggplot(diabetes,aes(x=Diabetic,
                          y=Sleep, color=Diabetic))+
  geom_boxplot()
p3 <- ggplot(diabetes,aes(x=Diabetic,
                          y=SoundSleep, color=Diabetic))+
  geom_boxplot()
p4 <- ggplot(diabetes,aes(x=Diabetic,
                          y=Pregancies, color=Diabetic))+
  geom_boxplot()
grid.arrange(p1,p2,p3,p4,nrow=3,ncol=4)

INTERPRETACIÓN GRÁFICA 1 En nuestro primer diagrama de bigotes que compara el índice de masa corporal con la presencia de diabetes, se observa una distribución asimétrica positiva en los individuos sin diabetes, indicada por la presencia de valores atípicos y una mayor dispersión de datos hacia la parte superior de la distribución. En contraste, en los individuos con diabetes, la distribución muestra simetría, donde la mediana se encuentra en el centro de la caja, coincidiendo con una distribución equilibrada de datos alrededor de la mediana, representando un equilibrio entre la media, mediana y moda.

INTERPRETACIÓN GRÁFICA 2 En el segundo diagrama de bigotes, se observa una distribución asimétrica negativa o sesgada a la izquierda, donde la ausencia de valores atípicos indica una concentración de datos por encima de la mediana. La mayor parte de los datos se sitúa en la parte superior de la distribución, y la mediana suele ser mayor que la media, lo que refleja la concentración de datos en valores menores.

INTERPRETACIÓN GRÁFICA 3 En el tercer diagrama de bigotes, se identifica una asimetría positiva o sesgada a la derecha, con una ausencia de valores atípicos y una concentración de datos hacia la parte inferior de la distribución. La mayor parte de los datos se encuentran por debajo de la mediana, lo que indica una concentración de valores mayores y una media que suele ser mayor que la mediana.

INTERPRETACIÓN GRÁFICA 4 En nuestro cuarto diagrama de bigotes, se evidencia la presencia de datos atípicos en las personas que no presentan diabetes y se encuentran en período de embarazo. Esta observación destaca la singularidad de este grupo en relación con la distribución de los datos, lo cual puede indicar una influencia especial del embarazo en la manifestación de la diabetes en este conjunto de datos.

Relación entre la variable binaria con las variables nominales

library(ggmosaic)
## Warning: package 'ggmosaic' was built under R version 4.3.2
library(gridExtra)
q1 <- ggplot(data = diabetes)+geom_mosaic(aes(x = product(Diabetic,Gender),fill = Diabetic))+ labs(x="Gender", title = "factores diabetes")

q2 <- ggplot(data = diabetes)+geom_mosaic(aes(x = product(Diabetic,Smoking),fill = Diabetic))+ labs(x="Smoking", title = "factores diabetes")

q3 <- ggplot(data = diabetes)+geom_mosaic(aes(x = product(Diabetic,Alcohol),fill = Diabetic))+ labs(x="Alcohol", title = "factores diabetes")


q4 <- ggplot(data = diabetes)+geom_mosaic(aes(x = product(Diabetic,Family_Diabetes),fill = Diabetic))+ labs(x="Family_Diabetes", title = "factores diabetes")

q5 <- ggplot(data = diabetes)+geom_mosaic(aes(x = product(Diabetic,highBP),fill = Diabetic))+ labs(x="highBP", title = "factores diabetes")

q6 <- ggplot(data = diabetes)+geom_mosaic(aes(x = product(Diabetic,PhysicallyActive),fill = Diabetic))+ labs(x="PhysicalluActive", title = "factores diabetes")

q7 <- ggplot(data = diabetes)+geom_mosaic(aes(x = product(Diabetic,RegularMedicine),fill = Diabetic))+ labs(x="RegularMedicine", title = "factores diabetes")

q8 <- ggplot(data = diabetes)+geom_mosaic(aes(x = product(Diabetic, JunkFood),fill = Diabetic))+ labs(x="junkfood", title = "factores diabetes")

q9 <- ggplot(data = diabetes)+geom_mosaic(aes(x = product(Diabetic, Stress),fill = Diabetic))+ labs(x="stress", title = "factores diabetes")

q10 <- ggplot(data = diabetes)+geom_mosaic(aes(x = product(Diabetic, BPLevel),fill = Diabetic))+ labs(x="BPlevel", title = "factores diabetes")

q11 <- ggplot(data = diabetes)+geom_mosaic(aes(x = product(Diabetic, UriationFreq),fill = Diabetic))+ labs(x="UriationFreq", title = "factores diabetes")

grid.arrange(q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,nrow=4,ncol=4)
## Warning: `unite_()` was deprecated in tidyr 1.2.0.
## ℹ Please use `unite()` instead.
## ℹ 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.

INTERPRETACIÓN 1:

En el gráfico, se destaca que tanto en la población femenina como en la masculina, la mayoría de las personas no padecen diabetes. Esta información sugiere que, independientemente del género, una proporción significativa de la población estudiada no muestra esta condición.

INTERPRETACIÓN 2:

El gráfico muestra que tanto entre fumadores como no fumadores, hay una distribución similar en cuanto a la presencia o ausencia de diabetes. Esto sugiere que, en esta muestra, el hábito de fumar parece no ser un factor influyente en la prevalencia de la diabetes.

INTERPRETACIÓN 3: Tanto entre aquellos que consumen alcohol como los que no lo hacen, se observa una proporción similar de individuos con y sin diabetes. Estos resultados indican que, en esta muestra, el consumo de alcohol no parece correlacionarse con la presencia de diabetes.

INTERPRETACIÓN 4: El gráfico muestra que la condición de tener familiares diabéticos no parece ser determinante en la presencia de diabetes en esta muestra. La mayoría de las personas, independientemente de esta condición familiar, no sufren de diabetes.

INTERPRETACIÓN 5: Se evidencia que una proporción considerable de las personas con presión arterial alta también tienen diabetes. Esto sugiere una posible relación entre la presión arterial y la presencia de diabetes en esta población estudiada.

INTERPRETACIÓN 6: Se observa que una minoría de las personas con diabetes se dedican a una actividad física significativa. Esto sugiere que una baja proporción de individuos diabéticos en esta muestra se comprometen con una actividad física regular.

INTERPRETACIÓN 7: El gráfico muestra que la mayoría de las personas con diabetes toman medicación regular. Esto sugiere que el uso de medicamentos está relacionado con la presencia de diabetes en esta población estudiada.

INTERPRETACIÓN 8: En este estudio, no se evidencia una correlación entre el consumo de comida chatarra y la presencia de diabetes, ya que la distribución entre aquellos que consumen y no consumen este tipo de comida parece similar en términos de diabetes.

INTERPRETACIÓN 9: No se observa una influencia clara del estrés en la presencia de diabetes en esta muestra. La distribución entre aquellos que informan estrés y los que no lo hacen no parece variar significativamente en términos de presencia de diabetes.

INTERPRETACIÓN 10: El gráfico sugiere que la presión arterial no parece ser un factor determinante en la presencia de diabetes, ya que más del 50% de las personas no presentan diabetes, independientemente de su nivel de presión arterial.

INTERPRETACIÓN 11: La frecuencia de orinar no parece ser un factor influyente en la presencia de diabetes en esta muestra, ya que más del 50% de las personas que informan frecuencia al orinar no tienen diabetes.

GRÁFICO MULTIVARIANTE

Introducción de la libreria GGally

El paquete GGally en R es una librería de gráficos ggplot2 que permite a los usuarios crear y personalizar sus propios gráficos.

El paquete GGally es un paquete de R que contiene funciones para la visualización de datos. El paquete contiene una serie de funciones de gráficos de alta calidad y es muy útil para la exploración de datos.

El paquete GGally se puede utilizar para mostrar la relación entre dos variables.

El paquete GGally en R ofrece una variedad de funciones de gráficos y análisis que pueden ser útiles para los usuarios de R.

GGally es una librería de R que proporciona una interfaz gráfica para explorar y visualizar los datos. La librería incluye funciones para crear gráficos de dispersión, histogramas, diagramas de caja, mapas de calor y muchos otros. GGally también permite la interactividad, por ejemplo, el usuario puede hacer clic en un punto de datos en un gráfico de dispersión y ver los valores de otras variables para ese punto.(ESTADISTICOL,2023)

library(GGally)
## Warning: package 'GGally' was built under R version 4.3.2
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
## 
## Attaching package: 'GGally'
## The following object is masked from 'package:ggmosaic':
## 
##     happy
ggpairs(diabetes[,classes=="numeric"])+
theme_bw()

INTERPRETACIÓN:

Se puede concluir que las variables sueño, sueño profundo y embarazo no muestran una influencia directa en el índice de masa corporal, como se refleja en su nivel de correlación.

La relación entre las variables sueño y sueño profundo presenta una correlación moderada, evidenciada por un coeficiente de correlación de 0.57. Este valor sugiere una asociación significativa entre ambas variables, indicando que el sueño puede tener cierta influencia en la calidad del sueño profundo.

En contraste, la relación entre la variable sueño y embarazo muestra una correlación baja, representada por un coeficiente de correlación de 0.054. Esto sugiere que no existe una asociación significativa entre estas dos variables, indicando que el embarazo no parece estar directamente relacionado con los patrones de sueño.

Asimismo, la relación entre la variable sueño profundo y embarazo también presenta una correlación baja, con un coeficiente de correlación de 0.117. Esta baja correlación sugiere que no hay una asociación significativa entre el sueño profundo y el embarazo, lo que indica que el estado de embarazo no parece influir directamente en la calidad del sueño profundo.

p <- ggpairs(diabetes[,c(which(classes=="numeric"),18)], aes(color= Diabetic))+ theme_bw()
#change color manual
#loop through each plot changing relevant scales
for(i in 1:p$nrow){
  for(j in 1:p$ncol){
    p[i,j]<-p[i,j]+
      scale_fill_manual(values=c("pink","skyblue"))+
      scale_color_manual(values=c("pink","skyblue"))
  }
}
p
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.

Dividiremos el conjunto completo de individuos en dos partes, una para entrenar el modelo, que contiene el 80% de los individuos y otra para validarlo que contiene el resto.Esto es asi porque si valoramos el modelo con las mismas observaciones que usamos para ajustarlo, la bondad de ajuste quedara sobrevalorada.

Antes de ajustar cualquier modelo, es conveniente escalar las variables numericas y tenemos que reacondicionar las variables categoricas convirtiendolas en variables ficticias y usando la primera o ultima categoria como comparación.

Definición de variable ficticia

Las variables ficticias son variables binarias que toman valor 0,1. Al definir una variable ficticia debemos decidir a qué acontecimiento se le asigna el valor 1, y a cuál el 0. ello conduce a modelos de regresión en los que los parámetros se prestan a interpretaciones muy naturales.

diabetes[,classes =="numeric"] = scale(diabetes[,classes=="numeric"])
head(diabetes)

Modelos para la predicción de la variable binaria

categoricas -ficticias numericas-cambiado escalamiento

# La variable Diabetic que era cualitativa se la transforma a variable ficticia entre 0 y 1.
X = model.matrix(Diabetic~., data=diabetes)
head(X)
##     (Intercept) Age50-59 Age60 or older Ageless than 40 GenderMale
## 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_Diabetesyes highBPyes PhysicallyActivenone
## 20                   1         0                    0
## 258                  1         0                    0
## 511                  1         0                    0
## 907                  1         0                    1
## 582                  0         0                    1
## 726                  0         0                    0
##     PhysicallyActive\t\nmore than half an hr
## 20                                         0
## 258                                        0
## 511                                        1
## 907                                        0
## 582                                        0
## 726                                        0
##     PhysicallyActive\t\nless than half an hr        BMI Smokingyes Alcoholyes
## 20                                         1 -0.6487242          0          0
## 258                                        1 -0.6487242          0          0
## 511                                        0  0.1294871          0          0
## 907                                        0 -1.2323826          1          1
## 582                                        0 -0.4541713          0          1
## 726                                        0  0.1294871          1          0
##          Sleep SoundSleep RegularMedicineyes JunkFoodoccasionally
## 20  0.78534240  0.2119477                  0                    0
## 258 0.78534240  0.2119477                  0                    0
## 511 0.01861803  0.7543900                  0                    1
## 907 0.01861803 -0.3304947                  0                    1
## 582 0.01861803  0.2119477                  1                    1
## 726 0.78534240  0.7543900                  0                    1
##     JunkFoodvery often JunkFoodalways Stressonot at all Stresssometimes
## 20                   1              0                 1               0
## 258                  1              0                 1               0
## 511                  0              0                 0               1
## 907                  0              0                 1               0
## 582                  0              0                 0               0
## 726                  0              0                 0               1
##     Stressvery often BPLevelnormal BPLevellow Pregancies Pdiabetesyes
## 20                 0             0          1 -0.4201082            0
## 258                0             0          1 -0.4201082            0
## 511                0             0          1  2.8800479            0
## 907                0             0          1 -0.4201082            0
## 582                1             0          0 -0.4201082            0
## 726                0             0          1 -0.4201082            0
##     UriationFreqnot much
## 20                     0
## 258                    0
## 511                    0
## 907                    0
## 582                    1
## 726                    0

Observara que las variables numéricas reescaladas contienen los mismos valores iniciales. Cada una de las variables nominales ha 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érica que vale 1 cuando el sexo es hombre y 0 cuando es mujer.El resto de variables tambien son convertidas a Binarias con el número de categorías que cada una almacena. Los parámetros correspondientes a las categorias retenidas comparan a estas con la categoria eliminada.

Dividiremos el conjunto completo de individuos en dos partes, uno para entrenar el modelo, que contiene el 80% de los individuos y otro para validarlo que contiene el resto. Esto es así porque si valoramos el modelo con las mismas observaciones que usamos para ajustarlo, la bondad de ajuste quedara sobrevalorada. Por ejemplo, vamos a usar el 70% de los individuos para ajustar el modelo y el 30% para probarlo.Para que siempre obtengamos los mismos resultados colocamos la semilla de los numeros pseudo aleatorios con la fecha de nacimiento sin separaciones(diamesaño).

tr=round(nrow(diabetes)*0.7)
set.seed(06071981)
muestra <- sample.int(nrow(diabetes),tr)
Train.diabet <- diabetes[muestra,]
Val.diabet <- diabetes[-muestra,]

Ahora disponemos de un conjunto de entrenamiento train diabetes que es del 65% y un conjunto de validación val.diabet que corrresponde al 35%.

Predicción de diabetes (binaria) y variables que influyen en la misma

Modelos de clasificación

Regresión logística

Trataremos de modelar la probabilidad de DIABETES positiva en función del resto de las variables.

El modelo logístico es:

\[{p_i}=P\left({Y=1/X={x_i}}\right)={{{e^{{\beta_0}+}\beta_1}{x_{i1}}+\ldots + {\beta_p}{x_{ip}}}} \over {1 + {e^{{\beta_0}+ {beta_1}{x_{i1}} + \ldots + {\beta_p}{x_{ip}}}}}\]

Se trata de un modelo lineal en el logit de la probabilidad

#insertar mas teoria del modelo que estamos utilizando

library(stats)
gfit1=glm(formula = Diabetic~., data=diabetes, family = 'binomial')
summary(gfit1)

Call:
glm(formula = Diabetic ~ ., family = "binomial", data = diabetes)

Coefficients:
                                          Estimate Std. Error z value Pr(>|z|)
(Intercept)                               -2.77088    1.08160  -2.562 0.010412
Age50-59                                   0.41120    0.36291   1.133 0.257177
Age60 or older                             1.62408    0.41602   3.904 9.47e-05
Ageless than 40                           -1.68936    0.43244  -3.907 9.36e-05
GenderMale                                 0.48706    0.37089   1.313 0.189105
Family_Diabetesyes                         1.00920    0.25459   3.964 7.37e-05
highBPyes                                 -0.85083    0.38970  -2.183 0.029013
PhysicallyActivenone                       0.55514    0.36247   1.532 0.125639
PhysicallyActive\t\nmore than half an hr   0.85532    0.38718   2.209 0.027165
PhysicallyActive\t\nless than half an hr   1.68317    0.37751   4.459 8.25e-06
BMI                                        0.17735    0.12090   1.467 0.142372
Smokingyes                                 1.15528    0.50424   2.291 0.021955
Alcoholyes                                 0.09689    0.36237   0.267 0.789187
Sleep                                      0.05861    0.15561   0.377 0.706443
SoundSleep                                 0.39536    0.18442   2.144 0.032045
RegularMedicineyes                         2.97844    0.30926   9.631  < 2e-16
JunkFoodoccasionally                       0.08808    0.84774   0.104 0.917245
JunkFoodvery often                         0.25582    0.83663   0.306 0.759775
JunkFoodalways                             0.04005    0.97557   0.041 0.967253
Stressonot at all                         -0.03269    0.51891  -0.063 0.949776
Stresssometimes                           -0.53932    0.39565  -1.363 0.172845
Stressvery often                          -0.32951    0.45855  -0.719 0.472393
BPLevelnormal                            -15.08888  758.75534  -0.020 0.984134
BPLevellow                                -1.47618    0.39038  -3.781 0.000156
Pregancies                                 0.32210    0.14874   2.165 0.030350
Pdiabetesyes                               4.01652    0.88504   4.538 5.67e-06
UriationFreqnot much                       0.43749    0.31153   1.404 0.160219
                                            
(Intercept)                              *  
Age50-59                                    
Age60 or older                           ***
Ageless than 40                          ***
GenderMale                                  
Family_Diabetesyes                       ***
highBPyes                                *  
PhysicallyActivenone                        
PhysicallyActive\t\nmore than half an hr *  
PhysicallyActive\t\nless than half an hr ***
BMI                                         
Smokingyes                               *  
Alcoholyes                                  
Sleep                                       
SoundSleep                               *  
RegularMedicineyes                       ***
JunkFoodoccasionally                        
JunkFoodvery often                          
JunkFoodalways                              
Stressonot at all                           
Stresssometimes                             
Stressvery often                            
BPLevelnormal                               
BPLevellow                               ***
Pregancies                               *  
Pdiabetesyes                             ***
UriationFreqnot much                        
---
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:  491.38  on 879  degrees of freedom
AIC: 545.38

Number of Fisher Scoring iterations: 16

INTERPRETACIÓN:

(Intercept) (Intercepción): Este valor indica la estimación del logaritmo de la odds (razón de probabilidades) de tener diabetes cuando todas las demás variables son cero.

Edad 50-59, Edad 60 o más, Edad menor de 40: Estos coeficientes representan cómo cada grupo de edad se relaciona con la probabilidad de tener diabetes en comparación con un grupo de referencia. Por ejemplo, “Edad 60 años o más” tiene una probabilidad de tener diabetes 1.624 veces mayor que el grupo de referencia cuando se controlan otras variables.

GenderMale: Indica cómo el género masculino se relaciona con la probabilidad de tener diabetes en comparación con el género femenino. Sin embargo, parece que no hay una diferencia significativa en este caso.

Family_Diabetesyes: Representa cómo el antecedente familiar de diabetes afecta la probabilidad de tener diabetes. Un antecedente familiar positivo aumenta la probabilidad de tener diabetes en 1.009 veces en comparación con aquellos sin antecedentes familiares de diabetes.

highBPyes: Indica cómo tener presión arterial alta se relaciona con la probabilidad de tener diabetes. Aquí, tener alta presión arterial parece disminuir la probabilidad de tener diabetes.

FísicamenteActivoona, FísicamenteActivode media hora, FísicamenteActivode media hora: Estos coeficientes representan diferentes niveles de actividad física y cómo se relacionan con la probabilidad de tener diabetes en comparación con un grupo de referencia. Parece que tener menos de media hora de actividad física aumenta considerablemente la probabilidad de tener diabetes.

IMC: Cada aumento en el índice de masa corporal (IMC) se asocia con un aumento del 0,17735 en la probabilidad de tener diabetes, aunque no es estadísticamente significativo en este modelo.

Smokingyes, Alcoholyes, Sleep, SoundSleep: Estos coeficientes representan cómo fumar, beber alcohol, la calidad del sueño y otros factores se relacionan con la probabilidad de tener diabetes. En este modelo, parecen tener efectos diferentes, pero no todos son significativos.

RegularMedicineyes: Tener un régimen de medicación regular está fuertemente asociado con un aumento significativo (2.97844 veces) en la probabilidad de tener diabetes.

JunkFoodoccasionally, JunkFoodvery a menudo, JunkFoodalways: Estos coeficientes muestran cómo los diferentes niveles de consumo de comida chatarra se relacionan con la probabilidad de tener diabetes. En este modelo, no parecen ser significativas.

Estrés en absoluto, estrés a veces, estrés muy a menudo: Estos coeficientes indican cómo diferentes niveles de estrés se relacionan con la probabilidad de tener diabetes. En este caso, no parece haber una asociación significativa entre el estrés y la diabetes.

BPLevelnormal, BPLevellow: Aquí, tener un nivel de presión arterial bajo se relaciona significativamente con una disminución en la probabilidad de tener diabetes.

Embarazos: Cada embarazo adicional está asociado con un aumento de 0.32210 en la probabilidad de tener diabetes, aunque no es estadísticamente significativo en este modelo.

Pdiabetesyes: Tener diabetes previa está fuertemente asociado con un aumento significativo (4.01652 veces) en la probabilidad de tener diabetes.

UriationFreqnot much: La frecuencia urinaria parece no tener una asociación significativa con la probabilidad de tener diabetes en este modelo.