IMPORTACION DE LA BASE

diabetes2 <- read.csv("diabetes2.txt", sep=";")
head(diabetes2)
             Age Gender Family_Diabetes highBP     PhysicallyActive BMI Smoking
20  less than 40   Male             yes     no       one hr or more  22      no
258 less than 40   Male             yes     no       one hr or more  22      no
511  60 or older Female             yes     no                 none  26      no
907 less than 40   Male             yes     no more than half an hr  19     yes
582  60 or older   Male              no     no more than half an hr  23      no
726        40-49   Male              no     no less than half an hr  26     yes
    Alcohol Sleep SoundSleep RegularMedicine     JunkFood     Stress BPLevel
20       no     8          6              no        often not at all  normal
258      no     8          6              no        often not at all  normal
511      no     7          7              no occasionally  sometimes  normal
907     yes     7          5              no occasionally not at all  normal
582     yes     7          6             yes occasionally very often    high
726      no     8          7              no occasionally  sometimes  normal
    Pregancies Pdiabetes UriationFreq Diabetic
20           0         0     not much       no
258          0         0     not much       no
511          3         0     not much       no
907          0         0     not much       no
582          0         0  quite often      yes
726          0         0     not much       no
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" ...

IMPORTACION DE LIBRERIAS

library(ggplot2)
Warning: package 'ggplot2' was built under R version 4.3.2
library(gridExtra)

INTRODUCION

La diabetes tipo 2 representa un desafío global de salud pública con consecuencias significativas para la calidad de vida de millones de personas. La prevalencia en constante aumento y las implicaciones en términos de morbimortalidad hacen imperativo desarrollar enfoques eficaces para la detección temprana y la gestión efectiva de esta enfermedad crónica. En este contexto, el uso de métodos avanzados de clasificación de aprendizaje automÔtico se presenta como una herramienta prometedora para mejorar la precisión en la predicción de la diabetes tipo 2.

La elección de métodos de clasificación específicos, como Support Vector Machines (SVM), Random Forest, Gradient Boosting, y Redes Neuronales, se fundamenta en su capacidad para manejar conjuntos de datos complejos y extraer patrones no lineales, características esenciales en el anÔlisis de datos médicos. La comparación y evaluación de estos métodos permitirÔn identificar cuÔl ofrece el rendimiento mÔs óptimo para el propósito de este estudio.

La calidad de los datos es un elemento crítico en la efectividad de los modelos de aprendizaje automÔtico. En este sentido, se prestarÔ especial atención a la selección y preparación de conjuntos de datos representativos, considerando variables relevantes como la historia clínica, factores genéticos, y hÔbitos de vida. AdemÔs, se implementarÔn técnicas de validación cruzada y otras estrategias de evaluación para garantizar la fiabilidad y generalización de los modelos desarrollados.

DESCRICION DE LAS VARIABLES

  1. Edad Tipo: Numérica. Descripción: La edad del individuo en años. La diabetes tipo 2 tiende a aumentar con la edad, y este factor es esencial para evaluar el riesgo.

  2. ƍndice de Masa Corporal (IMC): Tipo: NumĆ©rica. Descripción: El IMC, calculado a partir del peso y la altura del individuo, es un indicador de la obesidad. La obesidad estĆ” fuertemente asociada con la diabetes tipo 2.

  3. Nivel de Glucosa en Ayunas: Tipo: Numérica. Descripción: La concentración de glucosa en la sangre después de un período de ayuno. Valores elevados pueden indicar resistencia a la insulina y predispone al individuo a la diabetes tipo 2.

  4. Presión Arterial: Tipo: Numérica. Descripción: La presión arterial sistólica y diastólica, medidas en mmHg. La hipertensión arterial es un factor de riesgo independiente para la diabetes tipo 2.

  5. Historial Familiar de Diabetes: Tipo: Categórica (Sí/No). Descripción: Indica si hay antecedentes familiares de diabetes tipo 2. La genética desempeña un papel crucial en la predisposición a la enfermedad.

6.Actividad Física: Tipo: Categórica (Baja/Moderada/Alta). Descripción: Nivel de actividad física regular del individuo. La falta de actividad física estÔ vinculada a un mayor riesgo de diabetes tipo 2.

7.Consumo de Alcohol: Tipo: Categórica (Bajo/Moderado/Alto). Descripción: La cantidad de alcohol consumida regularmente por el individuo. El consumo excesivo puede aumentar el riesgo de diabetes tipo 2.

  1. Tabaquismo: Tipo: Categórica (Sí/No). Descripción: Indica si el individuo es fumador. El tabaquismo se ha asociado con un mayor riesgo de diabetes tipo 2.

  2. Niveles de Colesterol: Tipo: Numérica. Descripción: Concentración de colesterol total, HDL (lipoproteínas de alta densidad) y LDL (lipoproteínas de baja densidad). Desórdenes en estos niveles estÔn relacionados con la diabetes tipo 2.

  3. Historial de Enfermedades Cardíacas: Tipo: Categórica (Sí/No). Descripción: Indica si el individuo tiene antecedentes de enfermedades cardíacas. Las enfermedades cardíacas y la diabetes tipo 2 comparten factores de riesgo comunes.

  4. Niveles de Insulina: Tipo: Numérica. Descripción: Concentración de insulina en la sangre. La resistencia a la insulina es una característica clave en el desarrollo de la diabetes tipo 2.

Conversion de la variable edad

diabetes2$Age=factor(diabetes2$Age)
levels(diabetes2$Age)=c("40-49","50-59","60 or older","less than 40")

#Conversion de la variable GENERO

diabetes2$Gender=factor(diabetes2$Gender)
levels(diabetes2$Gender)=c("Male","Female")

#Conversion de la variable FAMILIA DIABETES

diabetes2$Family_Diabetes=factor(diabetes2$Family_Diabetes)
levels(diabetes2$Family_Diabetes)=c("yes","no")

#Conversion de la variable hipBP

diabetes2$highBP=factor(diabetes2$highBP)
levels(diabetes2$highBP)=c("yes","no")

#Conversion de la variable PhysicallyActive

diabetes2$PhysicallyActive=factor(diabetes2$PhysicallyActive)
levels(diabetes2$PhysicallyActive)=c("less than half an hr","More than half an hr","none","one hr or more")

#Conversion de la variable Smoking

diabetes2$Smoking=factor(diabetes2$Smoking)
levels(diabetes2$Smoking)=c("yes","no")

#Conversion de la variable Alcohol

diabetes2$Alcohol=factor(diabetes2$Alcohol)
levels(diabetes2$Alcohol)=c("yes","no")

#Conversion de la variable RegularMedicine

diabetes2$RegularMedicine=factor(diabetes2$RegularMedicine)
levels(diabetes2$RegularMedicine)=c("yes","no")

Conversion de la variable JunkFood

diabetes2$JunkFood=factor(diabetes2$JunkFood)
levels(diabetes2$JunkFood)=c("very often"," 
always","often","occasionally")

Conversion de la variable Stress

diabetes2$Stress=factor(diabetes2$Stress)
levels(diabetes2$Stress)=c("not at all","sometimes","very often","always")

#Conversion de la variable BPLevel

diabetes2$BPLevel=factor(diabetes2$BPLevel)
levels(diabetes2$BPLevel)=c("normal","high","low")

#Conversion de la variable UriationFreq

diabetes2$UriationFreq=factor(diabetes2$UriationFreq)
levels(diabetes2$UriationFreq)=c("not much","quite often")

VERIFICACION DE NA

BASE_na <- is.na(diabetes2)
classes <- sapply(diabetes2, class)
for (variable in names(classes)) {
 cat("Variable:", variable, " - Clase:", classes[variable], "\n")
}
## Variable: Age  - Clase: factor 
## Variable: Gender  - Clase: factor 
## Variable: Family_Diabetes  - Clase: factor 
## Variable: highBP  - Clase: factor 
## Variable: PhysicallyActive  - Clase: factor 
## Variable: BMI  - Clase: integer 
## Variable: Smoking  - Clase: factor 
## Variable: Alcohol  - Clase: factor 
## Variable: Sleep  - Clase: integer 
## Variable: SoundSleep  - Clase: integer 
## Variable: RegularMedicine  - Clase: factor 
## Variable: JunkFood  - Clase: factor 
## Variable: Stress  - Clase: factor 
## Variable: BPLevel  - Clase: factor 
## Variable: Pregancies  - Clase: integer 
## Variable: Pdiabetes  - Clase: character 
## Variable: UriationFreq  - Clase: factor 
## Variable: Diabetic  - Clase: character

#ANALISIS DESCRIPTIVO

MINIMO En un conjunto de datos es el número mÔs pequeño o la observación mÔs baja dentro de ese conjunto. Es uno de los resúmenes descriptivos bÔsicos que ayuda a entender la gama o dispersión de los datos.

1st QU El primer quintil, tambiƩn conocido como el quintil inferior o percentil 25, es el valor que separa el 20% inferior de un conjunto de datos ordenado de manera ascendente. En otras palabras, el primer quintil es el valor por debajo del cual cae el 25% de los datos. FORMULA \[Q1 = \frac{n+1}{4}\]

MEDIANA La mediana es una medida de tendencia central en estadísticas que se utiliza para representar el valor central de un conjunto de datos. Para calcular la mediana, primero debes ordenar los datos de menor a mayor (o viceversa) y luego encontrar el valor que se encuentra exactamente en el centro de la distribución. FORMULA NUMERO IMPAR DE DATOS \[M = Valor de la posicion (\frac{n+1}{2})\] NUMERO PAR DE DATOS \[M = Suma de los valores en las posiciones (\frac{n}{2})\] MEDIA Es una medida que representa el valor típico o promedio de un conjunto de datos. Se calcula sumando todos los valores en el conjunto y dividiendo esa suma por el número total de elementos en el conjunto. FORMULA \[\bar{x} = \frac{\sum_{i=1_{}}^{N}xi}{N}\]

3RD QU Sefiere al valor que divide los tres cuartos superiores de un conjunto de datos ordenado. En términos mÔs específicos, el tercer cuartil representa el valor por debajo del cual se encuentra el 75% de los datos. \[Q1 = 3\frac{n+1}{5}\] Para calcular el tercer cuartil, primero debes ordenar el conjunto de datos de menor a mayor. Luego, divides los datos en cuatro partes iguales, y el tercer cuartil es el valor que se encuentra en el límite entre el tercer y el cuarto cuartil. MatemÔticamente, se suele denotar como Q3Q3. MAXIMO En un conjunto de datos se refiere al valor mÔs grande o a la observación mÔs alta dentro de ese conjunto.Calcular el valor mÔximo es útil para entender la variabilidad en un conjunto de datos y proporciona información sobre la parte superior de la distribución. Similar al valor mínimo, el valor mÔximo puede ser sensible a valores atípicos o extremos, ya que un solo valor extremadamente alto puede afectar significativamente el valor mÔximo.

summary(diabetes2[,classes=="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[,classes=="integer"],2,sd)
       BMI      Sleep SoundSleep Pregancies 
 5.1399922  1.3042497  1.8435140  0.9090479 

INTERPRETACION DE RESULTADOS

DESCRIPCION DE LA VARIABLE BMI Observamos personas con un minimo de 15,00 de grosor de la piel y un maximo de 42 mm de grosol de la piel con un promedio de 25,33 mm grosor de la piel y una mediana de 24,00 de grosor

DESCRIPCION DE LA VARIABLE SLEEP Observamos que las personas tienen sueƱo minimo 4 horas y un maximo de 11 horas, en promedio las personas tienen sueƱo casi 7 horas con una mediana de 7 horas, con un primer quiantil de 6 horas y un tercer quantil de 8 horas

DESCRIPCION DE LA VARIABLE SoundSleep Observamos que las personas tiene sueƱo profundo minimo o horas y un maximo de 11 horas, en promedio las personas tienen sueƱo profundo 5 horaa con una mediana de 6horas, con un primer quiantil de 4 horas y un tercer quantil de 7 horas

DESCRIPCION DE LA VARIABLE Pregancies
Se observa un minimo de 0 personas enbarazadas y un maximo de 4 personas embarazadas con un promedio de 0,38 personas embarazadas y con un primer quiantil de 0 y tercer quantil de 0.

DIAGRAMA DE BARRAS(GENERO,AGE,ACTIVIDAD FISICA,COMIDA CHATARRA) VARIABLE GENERO

ggplot(diabetes2, aes(x = Gender)) +
  geom_bar(fill = "skyblue") +
  labs(x = "Gender", title = "VARIABLE GENERO") +
  theme_minimal()

VARIABLE EDAD

ggplot(diabetes2, aes(x = Age)) +
  geom_bar(fill = "skyblue") +
  labs(x = "Age", title = "VARIABLE EDAD") +
  theme_minimal()

##DIAGRAMA DE DISPERSION (RELACION ENTRE BMI Y LAS HORAS DE SUEƑO)

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.

PARA IDENTIFICAR SI PUEDE EXISTER PRESENCIA DE DIABETES O NO, CON LA INFLUENCIA DE ESTOS DOS FACTORES

INTERPRETACION En la grafica se observa que no presenta tendencia de diabetes en cambio existe presencia de diabetes pero muy poco entre las dos variables sueƱo y grosol de la piel, pero si puede aver presencia de diabetes en personas exepcionales.

IDENTIFICAR QUE OTROS FACTORES PUEDEN INFLUIR EN LA PRESENCIA DE DIABETES

##DIAGRAMA DE DISPERSION (PhysicallyActive y Smoking )

qplot(PhysicallyActive
,Smoking, data = diabetes2, colour = Diabetic)

INTERPRETACION En la grafica se observa que no presenta tendencia de diabetes en cambio existe presencia de diabetes pero muy escasa, entre las realizar ejercicio y fumar, La influencia del ejercicio y el hƔbito de fumar en la diabetes tipo 2 es significativa, ya que al realizar ejercicio ayuda a la mejora de la sensibilidad a la insulina y la regulacion de los niveles de glucosa

##DIAGRAMA DE DISPERSION (RELACION ENTRE Edad y ALcocol)

qplot(Age,Alcohol, data = diabetes2, colour = Diabetic)

INTERPRETACION Se observa que npo existe tendencia a a diabetes ya que las personas de las edades encuestadas no son propensar a tener diabetes por consumir alcochol.

##DIAGRAMA DE DISPERSION (RELACION ENTRE ESTRES Y COMIDA CHATARRA)

qplot(JunkFood,Stress, data = diabetes2, colour = Diabetic)

INTERPRETACION Se observa que no existe tendencia a diabetes,solo existe un poco de tendencia entre la variable estres y comida chatarra a tener deabetes.

##DIAGRAMA DE DISPERSION (ESTRES Y INGESTA DE MEDICAMENTOS)

qplot(Stress,RegularMedicine, data = diabetes2, colour = Diabetic)

INTERPRETACION Se observa que no existe tendencia a diabetes,solo existe un poco de tendencia entre la variable estres y ingesta de medicamento,pero puede ser que la disminuicion de ingesta de medicamento producca deabetes.

##DIAGRAMA DE DISPERSION (ESTRES Y INGESTA DE MEDICAMENTOS)

qplot(Alcohol,BPLevel, data = diabetes2, colour = Diabetic)

INTERPRETACION Se observa que no existe tendencia a diabetes,solo existe un poco de tendencia entre la variable embarazo y alcochol, por lo que se puede decir que muchas personas que estan embaradas no consumen alcohol.

BOXPLOT

Diabetic <- diabetes2$Diabetic
Pregancies <- diabetes2$Pregancies
P4 <- ggplot(diabetes2, aes(x=Diabetic,
                            y=Pregancies, color=Diabetic))+
  geom_boxplot()
P4

BMI <- diabetes2$BMI

P5 <- ggplot(diabetes2, aes(x=Diabetic,
                            y=BMI, color=Diabetic))+
  geom_boxplot()
P5

sleep <- diabetes2$Sleep

P5 <- ggplot(diabetes2, aes(x=Diabetic,
                            y=sleep, color=Diabetic))+
  geom_boxplot()
P5

SoundSleep <- diabetes2$SoundSleep
P6 <- ggplot(diabetes2, aes(x=Diabetic,
                            y=sleep, color=Diabetic))+
  geom_boxplot()
P6

grid.arrange(P4,P5,P6,nrow = 4, ncol =4)

boxplot

library(ggmosaic)
Warning: package 'ggmosaic' was built under R version 4.3.2
q1 <- ggplot(data = diabetes2)+geom_mosaic(aes(x = product(Diabetic,Gender),fill = Diabetic))+ labs(x="Gender", title = "factores diabetes")
q1
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.

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

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

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

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

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

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

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

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

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

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

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

grid.arrange(q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,q12,nrow = 4, ncol =4)

Grafico multivariante

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(diabetes2[,classes=="integer"])+theme_bw()

Podemos observar que existe una correlación muy poca significativa entre BMI y la variable sleep

library(GGally)

p <- ggpairs(diabetes2[,c(which(classes=="integer"),18)], aes(color = diabetes2$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("#000AEB","#E7B800")) +
       scale_color_manual(values = c("#000AEB","#E7B800"))
    
  }
  }
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`.

ESCALAMIENTO DE LAS VARIABLES NUMERICAS

Dividimos 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 misma observaciones que usamos para ajustarlo, la bondad del 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 la ultima categoria como comparación