PREDICCIÓN DE LA DIABETES DE TIPO 2 MEDIANTE MÉTODOS DE CLASIFICACIÓN DE APRENDIZAJE AUTOMÁTICO

INTRODUCCIÓN

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.

IDENTIFICACIÓN DE VARIABLES

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”.

Transformar a factor las variables “character”

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"
  1. Cambiamos a factor la variable “Age”
diabetes2$Age= factor (diabetes2$Age)
levels(diabetes2$Age) = c ("less than 40","40-49", "50-59", "60 or older")
class(diabetes2$Age)
## [1] "factor"
  1. Cambiamos a factor la variable “Gender”
diabetes2$Gender= factor (diabetes2$Gender)
levels(diabetes2$Gender) = c ("Male", "Female")
class(diabetes2$Gender)
## [1] "factor"
  1. Cambiamos a factor la variable “family_Diabetes”
diabetes2$Family_Diabetes= factor (diabetes2$Family_Diabetes)
levels(diabetes2$Family_Diabetes) = c ("no", "yes")
class(diabetes2$Family_Diabetes)
## [1] "factor"
  1. Cambiamos a factor la variable “HighBP”
diabetes2$highBP= factor (diabetes2$highBP)
levels(diabetes2$highBP) = c ("no", "yes")
class(diabetes2$highBP)
## [1] "factor"
  1. Cambiamos a factor la variable “PhysicallyActive”
diabetes2$PhysicallyActive <- factor(diabetes2$PhysicallyActive)
levels(diabetes2$PhysicallyActive) <- c("  
one hr or more","none","    
more than half an hr"," 
less than half an hr","none")
class(diabetes2$PhysicallyActive)
## [1] "factor"
  1. Cambiamos a factor la variable “Smoking”
diabetes2$Smoking= factor (diabetes2$Smoking)
levels(diabetes2$Smoking) = c ("no", "yes")
class(diabetes2$Smoking)
## [1] "factor"
  1. Cambiamos a factor la variable “Alcohol”
diabetes2$Alcohol= factor (diabetes2$Alcohol)
levels(diabetes2$Alcohol) = c ("no", "yes")
class(diabetes2$Alcohol)
## [1] "factor"
  1. Cambiamos a factor la variable “RegularMedicine”
diabetes2$RegularMedicine = factor (diabetes2$RegularMedicine )
levels(diabetes2$RegularMedicine ) = c ("no", "yes")
class(diabetes2$RegularMedicine )
## [1] "factor"
  1. Cambiamos a factor la variable “JunkFood”
diabetes2$JunkFood = factor (diabetes2$JunkFood )
levels(diabetes2$JunkFood ) = c ("often", "occasionally", "very often", "always")
class(diabetes2$JunkFood )
## [1] "factor"
  1. Cambiamos a factor la variable “Stress”
diabetes2$Stress  = factor (diabetes2$Stress  )
levels(diabetes2$Stress  ) = c ("always", "not at all", "sometimes", "very often")
class(diabetes2$Stress )
## [1] "factor"
  1. Cambiamos a factor la variable “BPLevel”
diabetes2$BPLevel <- factor(diabetes2$BPLevel)
levels(diabetes2$BPLevel) <- c("high", "normal","   low")
class(diabetes2$BPLevel)
## [1] "factor"
  1. Cambiamos a factor la variable “UriationFreq”
diabetes2$UriationFreq <- factor(diabetes2$UriationFreq)
levels(diabetes2$UriationFreq) <- c("quite often","not much")
class(diabetes2$UriationFreq)
## [1] "factor"
  1. Cambiamos a factor la variable “Pdiabetes”
diabetes2$Pdiabetes <- factor(diabetes2$Pdiabetes)
levels(diabetes2$Pdiabetes) <- c("0","1") 
class(diabetes2$Pdiabetes)
## [1] "factor"
  1. Cambiamos a factor la variable “Diabetic”
diabetes2$Diabetic <- factor(diabetes2$Diabetic)
levels(diabetes2$Diabetic) <- c("no","yes")
class(diabetes2$Diabetic)
## [1] "factor"

Unión de las variables ya transformadas

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"

Encontrar NA’S

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

Se obtiene que no hay datos perdidos o faltantes en la base de datos “diabetes2”.

Análisis descriptivo y visual de las variables.

Análisis descriptivo

Fórmula y concepto

  • Media: Valor que se obtiene cuando se suman todos los datos de un análisis estadístico y se dividen por la cantidad total de datos. \[Media (X) = \sum_{i=1}^{n}x_{i}=x_{1}+x_{2}+x_{3}+...+x_{n}\]
  • Mediana:Valor medio cuando un conjunto de datos se ordena de menor a mayor. \[Mediana~par\longrightarrow Me(x) = x_{\frac{n+1}{2}}\] \[Mediana~impar \longrightarrow Me(x)= x_{\frac{n+1}{2}} + x_{\frac{n}{2}+1}\]
  • Desviación estándar: Medida de extensión o variabilidad en la estadística descriptiva. Se utiliza para calcular la variación o dispersión en la que los puntos de datos individuales difieren de la media.

\[Desviación ~ estándar \longrightarrow \sigma = \sqrt( \frac{\sum_{i=1}^{n} = (x_{i}- \bar{x})^2}{n})\]

  • Cuartiles: Dividen a la distribución en cuatro partes iguales (tres divisiones). Q1,Q2,Q3, correspondientes a 25%, 50%,75%. PERCENTILES, cuando dividen a la distribución en 100 partes (99 divisiones).

Atención: esta fórmula nos indica la posición del cuartil, no el valor del cuartil. El cuartil será el dato situado en la posición obtenida por la fórmula.

\[Cuartiles ~ \longrightarrow Q_k= \frac{k*N}{4}\]

Interpretación de resultados

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
  • BMI

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.

  • Sleep

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.

  • SoundSleep

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.

  • Pregancies

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é.

Análisis visual de datos

Diagrama de barras (Gender, Age, PhysicallyActive, JunkFood)

  1. Variable “Gender”
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.
## ℹ 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.

  1. Variable “Age”
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.

  1. Variable “PhysicallyActive”
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.

  1. Variable “JunkFood”
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.

Diagrama de puntos

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.

Gráficos de boxplot(cajas) entre Binaria y Numéricas

  1. Relación entre la variable “Diabetic” y “BMI”
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\).

  1. Relación entre la variable “Diabetic” y “Sleep”
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.

  1. Relación entre la variable “Diabetic” y “SoundSleep”
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.

  1. Relación entre la variable “Diabetic” y “Pregancies”
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.

Gráficos de boxplot(cajas) entre binaria y nominales

  1. Relación entre la variable “Diabetic”
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.
## ℹ 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 de resultados

  • Relación entre la variable “Diabetic” y “Gender”

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”.

  • Relación entre la variable “Diabetic” y “Family_Diabetes”

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.

  • Relación entre la variable “Diabetic” y “highBP”

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.

  • Relación entre la variable “Diabetic” y “PhysicallyActive”

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)

Interpretación de resultados

  • Relación entre la variable “Diabetic” y “Smoking”

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.

  • Relación entre la variable “Diabetic” y “Alcohol”

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.

  • Relación entre la variable “Diabetic” y “RegularMedicine”

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.

  • Relación entre la variable “Diabetic” y “JunkFood”

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)

Interpretación de resultados

  • Relación entre la variable “Diabetic” y “Stress”

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.

  • Relación entre la variable “Diabetic” y “BPLevel”

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.

  • Relación entre la variable “Diabetic” y “UrationFreq”

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.

Gráfico multivariante

Primer gráfico alternativo para las correlaciones

library(GGally)
library(ggmosaic)
ggpairs(diabetes2[, clases == "integer"])+ theme_bw()

Segundo gráfico alternativo para las correlaciones.

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

Interpretación de resultados del gráfico de correlación

  • Relación entre la variable “Sleep” y “BMI”

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.

  • Relación entre la variable “SoundSleep” y “BMI”

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.

  • Relación entre la variable “Pregancies” y “BMI”

La relación entre las variales “Pregancies” y “BMI” tiene una correlación de -0.086, lo cual es una correlación nula negativa.

  • Relación entre la variable “SoundSleep” y “Sleep”

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.

  • Relación entre la variable “Pregancies” y “Sleep”

La relación entre las variales “Pregancies” y “Sleep” tiene una correlación de 0.054, lo cual es una correlación nula positiva.

  • Relación entre la variable “Pregancies” y “SoudSleep”

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.

Escalamiento de las variables

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.

Realizar el escalamiento de las variables numéricas

diabetes2[, clases == "integer"]= scale(diabetes2[, clases == "integer"])
head(diabetes2)

Conversión de las variables cualitativas categóricas en variables ficticias

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_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    \nmore than half an hr
## 20                                           0
## 258                                          0
## 511                                          1
## 907                                          0
## 582                                          0
## 726                                          0
##     PhysicallyActive \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 Stressnot 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 BPLevel\tlow Pregancies Pdiabetes1
## 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

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%.

Predicción de la 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_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.

Conceptos básicos

  • GML(Modelos Lineales Generalizados):

Un GLM está especificado por tres componentes:

  1. Aleatoria.

  2. Sistemática.

  3. 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.

  • Valor z y valor p

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

  • Age60 or older

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.

  • Ageless than 40

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.

  • Family_Diabetesyes

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.

  • highBPyes

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 *

  • PhysicallyActivenone

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.

  • PhysicallyActiveone hr or more

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.

  • Smokingyes

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.

  • RegularMedicineyes

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.

  • BPLevelnormal

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.

  • Pdiabetesyes

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.

Anova

Compara medias para ver si hay diferencas significativas en diferentes grupos.

Se utiliza el test chi - cuadrado

gfit0 <- glm(Diabetic ~ 1, data = diabetes2,
             family = binomial)
anova (gfit0, gfit1, test = "Chisq")
  • Existe al menos un grupo que es significativo
  • La diferencia es altamente significativa entre el modelo de todas las variables es significatvamente mejor que el modelo solo con la consttante. Mirando el test de Wald para la sginficacion de cada parametro individual vemos que son altamente significativos los coeficientes para las variables Age, Family_Diabetes, highBP , PhysicallyActive, Smoking, RegularMedicine, BPLevel, Pdiabetes. Esto quiere decir que el resto de las variables no aportan significativamente cuando las demás están presentes. Si queremos ver los efectos conjuntos de cada variable podemos usar el comando anova en el que las variables se añaden secuencialmente.
anova(gfit1, test = "Chisq")
  • Interpretación

Se corrobora que las variables significativas son las mismas en los dos casos. Es decir, estas influyen en el modelo.

gfit2 <- glm( Diabetic ~ ., data = Train.diabet, family = binomial)
cbind(gfit1$coefficients, gfit2$coefficients)
##                                                    [,1]         [,2]
## (Intercept)                                 -2.77087932  -1.74808262
## Age40-49                                     0.41120398   0.59253917
## Age50-59                                     1.62408303   1.61214689
## Age60 or older                              -1.68935773  -1.74881721
## GenderFemale                                 0.48706126   0.75499209
## Family_Diabetesyes                           1.00919861   1.10013745
## highBPyes                                   -0.85082885  -1.34929812
## PhysicallyActivenone                         0.55513711   0.96937032
## PhysicallyActive    \nmore than half an hr   0.85532299   1.24247791
## PhysicallyActive \nless than half an hr      1.68316752   1.65601454
## BMI                                          0.17735494   0.14903473
## Smokingyes                                   1.15528381   1.46817871
## Alcoholyes                                   0.09688630  -0.93616362
## Sleep                                        0.05860712   0.13708311
## SoundSleep                                   0.39536387   0.24376942
## RegularMedicineyes                           2.97844459   3.18194151
## JunkFoodoccasionally                         0.08808372  -0.59620345
## JunkFoodvery often                           0.25582142  -0.68203158
## JunkFoodalways                               0.04005097  -0.80432089
## Stressnot at all                            -0.03268509  -0.09683845
## Stresssometimes                             -0.53932026  -0.66670031
## Stressvery often                            -0.32951273  -0.76141479
## BPLevelnormal                              -15.08887804 -15.55244810
## BPLevel\tlow                                -1.47618023  -1.88078889
## Pregancies                                   0.32210269   0.41273999
## Pdiabetes1                                   4.01651629   5.09624708
## UriationFreqnot much                         0.43749258   0.41011844
  • Interpretación

Al ya calcular el modelo, se predice con el conjunto de validación (Val.diabet) y entrenamiento.

p = predict(gfit2, Val.diabet, type = "response")
PredDiabet = as.factor (p > 0.5)
levels(PredDiabet) = c( "no", "yes")
library(lattice)
library(caret)
matrizLogis <- confusionMatrix (Val.diabet$Diabetic, PredDiabet)
matrizLogis
## Confusion Matrix and Statistics
## 
##           Reference
## Prediction  no yes
##        no  185  20
##        yes  16  51
##                                           
##                Accuracy : 0.8676          
##                  95% CI : (0.8215, 0.9056)
##     No Information Rate : 0.739           
##     P-Value [Acc > NIR] : 1.799e-07       
##                                           
##                   Kappa : 0.6506          
##                                           
##  Mcnemar's Test P-Value : 0.6171          
##                                           
##             Sensitivity : 0.9204          
##             Specificity : 0.7183          
##          Pos Pred Value : 0.9024          
##          Neg Pred Value : 0.7612          
##              Prevalence : 0.7390          
##          Detection Rate : 0.6801          
##    Detection Prevalence : 0.7537          
##       Balanced Accuracy : 0.8194          
##                                           
##        'Positive' Class : no              
## 
  • Interpretación

Para los verdaderos negativos es decir las personas que no tienen diabetes en este momento, la posibilidad de que no presenten diabetes tipo 2 a un futuro es de 185 personas.

Para los falsos negativos es decir las personas que si presentan diabetes tipo 2 en este momento, la posibilidad de que no presenten diabetes tipo 2 a un futuro es de 20 personas.

Para los falsos positivos es decir las personas que presentan diabetes tipo 2 en este momento, la posibilidad de que no presenten diabetes tipo 2 a un futuro es de 16 personas.

Para los verdaderos positivos es decir las personas que presentan diabetes tipo 2 en este momento, la posibilidad de que presenten diabetes tipo 2 a un futuro es de 51 personas.

library(pROC)
## Type 'citation("pROC")' for a citation.
## 
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
## 
##     cov, smooth, var
test_prob = predict(gfit2, newdata = Val.diabet, type = "response")
test_roc = roc(Val.diabet$Diabetic ~ test_prob, plot = T, print.auc = T)
## Setting levels: control = no, case = yes
## Setting direction: controls < cases

Es un modelo completamente aceptable, ya que es moderado. En la sensibildiad podemos ver el comportamiento de los valors positivos y la especicifidad es la de los valores negativos.

Los umbrales de desicion se establecen por el area bajo la curva se dice que el modelo de prediccion con el modelos de regresion logística aparentemente es bueno.

Máquinas de vector soporte.

Otro modelo de clasificación binaria es el conocido como Support Vector Machine (Maquina de vector soporte). Los paquetes que ajustan los modelos de SVM es e1071 y liblinear. Ajustamos el modelo para nuestros datos con el kernel radial que es el que se ajusta por defecto.

library(e1071)
fitsvm1 <- svm(Diabetic~., data= Train.diabet)
summary(fitsvm1)
## 
## Call:
## svm(formula = Diabetic ~ ., data = Train.diabet)
## 
## 
## Parameters:
##    SVM-Type:  C-classification 
##  SVM-Kernel:  radial 
##        cost:  1 
## 
## Number of Support Vectors:  265
## 
##  ( 132 133 )
## 
## 
## Number of Classes:  2 
## 
## Levels: 
##  no yes
  • Interpretación

Número de Vectores de Soporte: Hay un total de 274 vectores de soporte en el modelo. De estos, 138 pertenecen a la clase “no” y 136 a la clase “yes”.

Número de Clases: El modelo está configurado para realizar una clasificación binaria, ya que hay dos clases: “no” y “yes”.

Niveles de las Clases:

Las clases en tu conjunto de datos son “no” y “yes”.

Se ha ajustado un modelo SVM de clasificación binaria utilizando el kernel radial con un parámetro de costo igual a 1. El modelo ha identificado 274 vectores de soporte y está configurado para clasificar observaciones en dos clases (“no” y “yes”).