Predicción de la diabetes tipo 2 mediante aprendizaje automático (Métodos de clasificación)

INTRODUCCIÓN

La enfermedad crónica es una condición de salud que se caracteriza por ser de larga duración y generalmente no tiene una cura completa. A diferencia de las enfermedades agudas que son de corta duración, las enfermedades crónicas pueden persistir durante meses o incluso años. Estas enfermedades pueden afectar diferentes sistemas del cuerpo y tener un impacto significativo en la calidad de vida de una persona.

Algunos de las enfermedades crónicas incluyen la diabetes, la hipertensión arterial, el asma, la enfermedad cardiovascular y la artritis. Estas enfermedades requieren un manejo continuo y a menudo implican cambios en el estilo de vida, medicamentos y seguimiento médico regular.

Es importante destacar que cada enfermedad crónica es única y puede afectar a las personas de diferentes maneras. Algunas personas pueden experimentar síntomas leves, mientras que otras pueden tener síntomas más graves que limitan su capacidad para llevar una vida normal.

Es fundamental que las personas con enfermedades crónicas reciban un diagnóstico temprano y un tratamiento adecuado para controlar los síntomas y prevenir complicaciones a largo plazo. Además, el apoyo emocional y la educación sobre la enfermedad son aspectos importantes del manejo de las enfermedades crónicas.(Comunicarse con los demás - al vivir con una enfermedad crónica: MedlinePlus Enciclopedia Médica, s. f.)


DESCRIPCIÓN DE LAS VARIABLES

Edad (Age): Se basa al período de tiempo que la persona esta viva o ha estado viva.

Género (Gender): Hace referencia a la identidad sexual de una persona, ya sea masculino o femenino.

Diabetes familiar (Family_Diabetes): Se refiere a la presencia de antecedentes familiares de diabetes, es decir, si algún miembro de la familia ha sido diagnosticado con diabetes.

Presión arterial alta (highBP): Hace referencia a la presión arterial elevada, de la persona lo cual puede ser un indicador de problemas de salud como enfermedades cardiovasculares.

Actividad física (PhysicallyActive): Se refiere al nivel de actividad física que una persona realiza en su vida diaria, como ejercicios, deportes y cualquier otra forma de actividad física que se realice regularmente.

BMI: Es la sigla en inglés para “Índice de Masa Corporal” (Body Mass Index): Se utiliza para evaluar si una persona tiene un peso saludable en relación con su altura.

Fumar (Smoking): Hace referencia al hábito de fumar cigarrillos u otras formas de tabaco. El tabaquismo está asociado con numerosos problemas de salud, como enfermedades respiratorias y cardiovasculares.

Consumo de alcohol (Alcohol): Se refiere al consumo de bebidas alcohólicas. El consumo excesivo de alcohol puede tener efectos negativos en la salud, incluyendo daño al hígado y aumento del riesgo de accidentes.

Sueño (Sleep): Hace referencia al período de descanso y recuperación que una persona necesita diariamente.

Sueño profundo (SoundSleep): Se refiere a la calidad del sueño, especialmente al sueño profundo y reparador, es adecuado es importante para la salud y el bienestar general.

Medicación regular (RegularMedicine): Hace referencia al consumo regular de medicamentos recetados por un médico para tratar una condición médica específica.

Comida chatarra (JunkFood): Se refiere a alimentos que son altos en calorías, grasas saturadas, azúcares y bajos en nutrientes esenciales.

Estrés (Stress): Hace referencia a la respuesta del cuerpo ante situaciones desafiantes o estresantes. El estrés crónico puede tener efectos negativos en la salud física y mental.

Nivel de presión arterial (BPLevel): Se refiere al nivel de presión arterial, que puede ser normal, bajo o alto de la persona. Está asociada con un mayor riesgo de enfermedades cardiovasculares.

Embarazos (Pregancies): Hace referencia al número de veces que una mujer ha estado embarazada o ha dado a luz a un bebé.

Diabetes gestacional (Pdiabetes): Se refiere a la diabetes que se desarrolla durante el embarazo. Es importante controlar y tratar la diabetes gestacional para evitar complicaciones tanto para la madre como para el bebé.

Frecuencia urinaria (UriationFreq): Hace referencia a la frecuencia con la que una persona orina.

Diabetes (Diabetic): Se refiere a la condición médica crónica caracterizada por niveles elevados de azúcar en sangre. Puede tener implicaciones para la salud a largo plazo y requiere un manejo adecuado a través de cambios en el estilo de vida y medicación.


EXTENSIÓN CON R Y RSTUDIO

DATA <- load(“DATA.rda”)

Error in readChar(con, 5L, useBytes = TRUE) : no se puede abrir la conexión Además: Warning message: In readChar(con, 5L, useBytes = TRUE) : cannot open compressed file ‘DATA.rda’, probable reason ‘No such file or directory’

file.choose() [1] “C:\6to SEMESTRE\METODO CUANTITATIVO\DATA.rda”

DATA <- load(“C:\6to SEMESTRE\METODO CUANTITATIVO\DATA.rda”)

DATA

[1] “diabetes”

write.table(diabetes, file = “diabetes2.txt”, sep = “;”, eol=“”)


DESAROLLO

CARGA DE BASE DE DATOS:

# Importar la base de datos
diabetes <- read.csv("diabetes2.csv",sep = ";")
# diabetes
# Se muetsra las primeras 3 filas de la base de datos
head(diabetes, 3)
##              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
##     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
##     Pregancies Pdiabetes UriationFreq Diabetic
## 20           0         0     not much       no
## 258          0         0     not much       no
## 511          3         0     not much       no

NOMBRE DE LAS VARIABLES DE LA BASE DE DATOS

# nombres de las variables
names(diabetes)
##  [1] "Age"              "Gender"           "Family_Diabetes"  "highBP"          
##  [5] "PhysicallyActive" "BMI"              "Smoking"          "Alcohol"         
##  [9] "Sleep"            "SoundSleep"       "RegularMedicine"  "JunkFood"        
## [13] "Stress"           "BPLevel"          "Pregancies"       "Pdiabetes"       
## [17] "UriationFreq"     "Diabetic"

TIPO DE CLASE DE LAS VARIABLES DE LA BASE DE DATOS

# Comprobar el tipo de clase de cada variable
clases <- sapply(diabetes, class)
clases
##              Age           Gender  Family_Diabetes           highBP 
##      "character"      "character"      "character"      "character" 
## PhysicallyActive              BMI          Smoking          Alcohol 
##      "character"        "integer"      "character"      "character" 
##            Sleep       SoundSleep  RegularMedicine         JunkFood 
##        "integer"        "integer"      "character"      "character" 
##           Stress          BPLevel       Pregancies        Pdiabetes 
##      "character"      "character"        "integer"      "character" 
##     UriationFreq         Diabetic 
##      "character"      "character"

CAMBIAR EL TIPO DE CLASE

Variable AGE

diabetes$Age <- factor(diabetes$Age)
levels(diabetes$Age) <- c("40-49","50-59","60 or older","less than 40")
class(diabetes$Age)
## [1] "factor"

Variable Gender

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

Variable Family_Diabetes

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

Variable HighBP

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

Variable PhysicallyActive

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

Variable Smoking

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

Variable Alcohol

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

Variable RegularMedicine

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

Variable JunkFood

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

Variable Stress

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

Variable Bplevel

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

Variable Pdiabetes

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

Variable UriationFreq

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

Variable Diabetic

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

LIMPIEZA DE LA BASE DE DATOS

# Eliminar filas con valores faltantes
diabetes_clean <- na.omit(diabetes)

# Verificar el resultado
head(diabetes_clean)
##              Age Gender Family_Diabetes highBP         PhysicallyActive BMI
## 20  less than 40   Male             yes     no \t\nless than half an hr  22
## 258 less than 40   Male             yes     no \t\nless than half an hr  22
## 511  60 or older Female             yes     no     more than half an hr  26
## 907 less than 40   Male             yes     no                     none  19
## 582  60 or older   Male              no     no                     none  23
## 726        40-49   Male              no     no           one hr or more  26
##     Smoking Alcohol Sleep SoundSleep RegularMedicine     JunkFood     Stress
## 20       no      no     8          6              no   very often  sometimes
## 258      no      no     8          6              no   very often  sometimes
## 511      no      no     7          7              no occasionally very often
## 907     yes     yes     7          5              no occasionally  sometimes
## 582      no     yes     7          6             yes occasionally     always
## 726     yes      no     8          7              no occasionally very often
##     BPLevel Pregancies Pdiabetes UriationFreq Diabetic
## 20      low          0         0     not much       no
## 258     low          0         0     not much       no
## 511     low          3         0     not much       no
## 907     low          0         0     not much       no
## 582  normal          0         0  quite often      yes
## 726     low          0         0     not much       no

ELIMINAR LOS NA

# Eliminar filas con valores NA
diabetes_clean <- na.omit(diabetes)

# Verificar el resultado
head(diabetes_clean)
##              Age Gender Family_Diabetes highBP         PhysicallyActive BMI
## 20  less than 40   Male             yes     no \t\nless than half an hr  22
## 258 less than 40   Male             yes     no \t\nless than half an hr  22
## 511  60 or older Female             yes     no     more than half an hr  26
## 907 less than 40   Male             yes     no                     none  19
## 582  60 or older   Male              no     no                     none  23
## 726        40-49   Male              no     no           one hr or more  26
##     Smoking Alcohol Sleep SoundSleep RegularMedicine     JunkFood     Stress
## 20       no      no     8          6              no   very often  sometimes
## 258      no      no     8          6              no   very often  sometimes
## 511      no      no     7          7              no occasionally very often
## 907     yes     yes     7          5              no occasionally  sometimes
## 582      no     yes     7          6             yes occasionally     always
## 726     yes      no     8          7              no occasionally very often
##     BPLevel Pregancies Pdiabetes UriationFreq Diabetic
## 20      low          0         0     not much       no
## 258     low          0         0     not much       no
## 511     low          3         0     not much       no
## 907     low          0         0     not much       no
## 582  normal          0         0  quite often      yes
## 726     low          0         0     not much       no

ANÁLISIS DESCRIPTIVO

Descripción teórica:

Concepto y Fórmula:

Interpretación:

Diabetes1 <- diabetes_clean[, c("BMI", "Sleep", "SoundSleep", "Pregancies")]
summary(Diabetes1)
##       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

SELECCIÓN DE LAS VARIABLES FACTOR

Diabetes1 <- diabetes_clean[, c("BMI", "Sleep", "SoundSleep", "Pregancies")]

# Verificar el resultado
head(Diabetes1)
##     BMI Sleep SoundSleep Pregancies
## 20   22     8          6          0
## 258  22     8          6          0
## 511  26     7          7          3
## 907  19     7          5          0
## 582  23     7          6          0
## 726  26     8          7          0

MÍNIMO

El valor mínimo se refiere al valor más pequeño encontrado de las variables dentro de esa base de datos. Para calcular el valor mínimo de una variable se, puedes utilizar la función min(). Esta función devuelve el valor mínimo dentro de un vector o columna.

\[\text{Valor Mínimo} = \min(x_1, x_2, ..., x_n)\]

# Obtener el valor mínimo de las variables "BMI", "Sleep", "SoundSleep" y "Pregancies"
apply(Diabetes1[, c("BMI", "Sleep", "SoundSleep", "Pregancies")], 2, min)
##        BMI      Sleep SoundSleep Pregancies 
##         15          4          0          0

Interpretación:

BMI (Índice de Masa Corporal):

El valor mínimo es 15.00. Esto significa que la menor medida de índice de masa corporal registrada es 15. El BMI es una medida que relaciona el peso y la altura de una persona, y un valor mínimo puede sugerir la presencia de casos con bajo peso.

Sleep (Horas de Sueño):

El valor mínimo es 4.000. Indica que la menor cantidad de horas de sueño registrada es 4. Esto podría sugerir la presencia de casos con un bajo número de horas de sueño.

SoundSleep (Horas de Sueño Profundo):

El valor mínimo es 0. Indica que, en algunos casos, no hubo horas de sueño profundo registradas. Esto podría ser interpretado como la ausencia de horas de sueño profundo en esos casos específicos.

Pregnancies (Embarazos):

El valor mínimo es 0. Indica que la menor cantidad de embarazos registrada es 0. Esto podría sugerir la presencia de casos donde no hubo embarazos.


PRIMER CUARTIL

El primer cuartil, también conocido como Q1 o percentil 25, es un valor estadístico que indica el punto en el cual el 25% de los datos de una muestra se encuentran por debajo de ese valor. En otras palabras, el primer cuartil divide la muestra en cuatro partes iguales, donde el 25% de los datos se encuentran por debajo del primer cuartil y el 75% restante se encuentra por encima.

\[Q1=Percentil . 25\]

# Calcular el primer cuartil de las variables "BMI", "Sleep", "SoundSleep" y "Pregancies"
first_quartiles <- quantile(Diabetes1$BMI, probs = 0.25)
first_quartiles_sleep <- quantile(Diabetes1$Sleep, probs = 0.25)
first_quartiles_soundsleep <- quantile(Diabetes1$SoundSleep, probs = 0.25)
first_quartiles_pregnancies <- quantile(Diabetes1$Pregancies, probs = 0.25)

# Verificar los resultados

C <- data.frame(
  first_quartiles,
  first_quartiles_sleep,
  first_quartiles_soundsleep,
  first_quartiles_pregnancies
)

print(C)
##     first_quartiles first_quartiles_sleep first_quartiles_soundsleep
## 25%              21                     6                          4
##     first_quartiles_pregnancies
## 25%                           0

Interpretación:

BMI (Índice de Masa Corporal):

El primer cuartil para BMI es 21. Esto significa que el 25% de los datos tienen un valor de BMI menor o igual a 21. En términos prácticos, se puede decir que el 25% de las observaciones tienen un índice de masa corporal igual o inferior a 21.

Sleep (Horas de Sueño):

El primer cuartil para Sleep es 6. Esto indica que el 25% de los datos tienen un valor de horas de sueño igual o inferior a 6. En otras palabras, el 25% de las observaciones tienen un número de horas de sueño igual o inferior a 6.

SoundSleep (Horas de Sueño Profundo):

El primer cuartil para SoundSleep es 4. Significa que el 25% de los datos tienen un valor de horas de sueño profundo igual o inferior a 4. El primer cuartil nos proporciona una idea sobre la distribución de las horas de sueño profundo en el cuartil inferior.

Pregnancies (Embarazos):

El primer cuartil para Pregancies es 0. Indica que el 25% de los datos tienen un valor de embarazos igual o inferior a 0. Esto sugiere que un cuarto de las observaciones no tuvieron embarazos o tuvieron muy pocos embarazos.


MEDIANA

La mediana es una medida de tendencia central que indica el valor que se encuentra en el centro de un conjunto de datos ordenados. Es decir, la mitad de los valores están por encima de la mediana y la otra mitad están por debajo.

\[\text{Mediana} = \text{valor\medio}\]

apply(Diabetes1, 2, median)
##        BMI      Sleep SoundSleep Pregancies 
##         24          7          6          0

Interpretación:

BMI (Índice de Masa Corporal):

La mediana para BMI es 24. Esto significa que el 50% de los datos tienen un valor de BMI menor o igual a 24. En otras palabras, la mitad de las observaciones tienen un índice de masa corporal igual o inferior a 24, y la otra mitad tiene un valor igual o superior a 24.

Sleep (Horas de Sueño):

La mediana para Sleep es 7. Indica que el 50% de los datos tienen un valor de horas de sueño igual o inferior a 7. La mediana es el punto medio de la distribución de las horas de sueño, donde la mitad de las observaciones tienen un número de horas igual o inferior a 7, y la otra mitad tiene un valor igual o superior a 7.

SoundSleep (Horas de Sueño Profundo):

La mediana para SoundSleep es 6. Significa que el 50% de los datos tienen un valor de horas de sueño profundo igual o inferior a 6. La mediana proporciona información sobre el punto medio de la distribución de las horas de sueño profundo.

Pregnancies (Embarazos):

La mediana para Pregancies es 0. Indica que el 50% de los datos tienen un valor de embarazos igual o inferior a 0. La mediana nos dice que la mitad de las observaciones tienen cero o un número muy bajo de embarazos.


MEDIA

El valor de la media se refiere al promedio de los valores de una variable específica. La media es una medida de tendencia central que se calcula sumando todos los valores y dividiendo el resultado entre la cantidad total de valores.

\[\bar{x} = \frac{1}{N} \sum_{i=1}^{N} x_i\]

data.frame(mean(Diabetes1$BMI),
mean(Diabetes1$Sleep),
mean(Diabetes1$SoundSleep),
mean(Diabetes1$Pregancies))
##   mean.Diabetes1.BMI. mean.Diabetes1.Sleep. mean.Diabetes1.SoundSleep.
## 1            25.33444              6.975717                   5.609272
##   mean.Diabetes1.Pregancies.
## 1                  0.3818985

Interpretación:

BMI (Índice de Masa Corporal):

La media para BMI es 25.33. En este caso, la media de BMI es aproximadamente 25.33, lo que indica que, en promedio, las medidas de índice de masa corporal tienden a estar alrededor de este valor.

Sleep (Horas de Sueño):

La media para Sleep es 6.976. En promedio, las observaciones en el conjunto de datos tienen alrededor de 6.976 horas de sueño.

SoundSleep (Horas de Sueño Profundo):

La media para SoundSleep es 5.609. En promedio, las horas de sueño profundo son aproximadamente 5.609.

Pregnancies (Embarazos):

La media para Pregancies es 0.3819. En promedio, las observaciones en el conjunto de datos tienen aproximadamente 0.3819 embarazos.


TERCER CUARTIL

El valor del tercer cuartil, también conocido como el percentil 75 (Q3), es un valor que divide los datos ordenados en cuatro partes iguales. Esto significa que el 75% de los datos se encuentran por debajo del tercer cuartil y el 25% restante se encuentra por encima.

\[Q_3=Percentil. 75\]

Diabetes1 <- diabetes_clean[, c("BMI", "Sleep", "SoundSleep", "Pregancies")]

# Calcular el tercer cuartil para cada variable
q3_values <- apply(Diabetes1, 2, quantile, probs = 0.75)

# Imprimir los resultados
print(q3_values)
##        BMI      Sleep SoundSleep Pregancies 
##         28          8          7          0

Interpretación:

BMI (Índice de Masa Corporal):

El tercer cuartil (3rd Qu) para BMI es 28. Indica que el 75% de los datos tienen un valor de BMI menor o igual a 28. En otras palabras, el 75% de las observaciones tienen un índice de masa corporal igual o inferior a 28.

Sleep (Horas de Sueño):

El tercer cuartil para Sleep es 8. Esto significa que el 75% de los datos tienen un valor de horas de sueño igual o inferior a 8. Indica la distribución de las horas de sueño en el cuartil superior, donde el 75% de las observaciones tienen un número de horas igual o inferior a 8.

SoundSleep (Horas de Sueño Profundo):

El tercer cuartil para SoundSleep es 7. Indica que el 75% de los datos tienen un valor de horas de sueño profundo igual o inferior a 7. Proporciona información sobre la distribución de las horas de sueño profundo en el cuartil superior.

Pregnancies (Embarazos):

El tercer cuartil para Pregancies es 0. Indica que el 75% de los datos tienen un valor de embarazos igual o inferior a 0. Esto sugiere que la mayoría de las observaciones tienen cero o un número muy bajo de embarazos.


VALOR MÁXIMO

El valor máximo se refiere al valor más grande que se encuentra en una determinada variable o columna. Es el valor más alto dentro de esa columna específica de un conjunto de datos.

\[\text{Valor Máximo} = \text{max}(x)\]

# Suponiendo que Diabetes1 es tu conjunto de datos
Diabetes1 <- diabetes_clean[, c("BMI", "Sleep", "SoundSleep", "Pregancies")]

# Calcular el valor máximo de cada variable
maximos <- apply(Diabetes1, 2, max)

# Imprimir los valores máximos
print(maximos)
##        BMI      Sleep SoundSleep Pregancies 
##         42         11         11          4

Interpretación:

BMI (Índice de Masa Corporal):

El valor máximo para BMI es 42. Indica el valor más alto observado en el conjunto de datos para el índice de masa corporal. Este valor máximo, 42 rep,resenta el extremo superior de las medidas de índice de masa corporal.

Sleep (Horas de Sueño):

El valor máximo para Sleep es 11. Indica la mayor cantidad de horas de sueño registrada en el conjunto de datos. Este valor máximo, 11, sugiere que algunas observaciones en el conjunto de datos tuvieron una cantidad considerablemente alta de horas de sueño.

SoundSleep (Horas de Sueño Profundo):

El valor máximo para SoundSleep es 11. Representa la mayor cantidad de horas de sueño profundo observada en los datos. Este valor máximo, 11, indica que algunas observaciones experimentaron una cantidad significativamente alta de horas de sueño profundo.

Pregnancies (Embarazos):

El valor máximo para Pregancies es 4. Indica la mayor cantidad de embarazos registrada en el conjunto de datos. Este valor máximo, 4, sugiere que algunas observaciones tuvieron un número relativamente alto de embarazos.


DESVIACIÓN ESTANDAR

La desviación estándar es una medida de dispersión o variabilidad en un conjunto de datos. Indica cuánto se alejan los valores individuales de la media del conjunto de datos.

En términos más simples, la desviación estándar nos dice qué tan dispersos están los valores alrededor de la media. Si la desviación estándar es baja, significa que los valores tienden a estar cerca de la media. Por otro lado, si la desviación estándar es alta, indica que los valores están más dispersos y alejados de la media.

La desviación estándar se calcula tomando la raíz cuadrada de la varianza. Es una medida ampliamente utilizada en estadística para comprender la dispersión de los datos y comparar la variabilidad entre diferentes conjuntos de datos.

Responder de nuevo Buscar en la web y GPT-4

Fórmula

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

Diabetes1 <- diabetes_clean[, c("BMI", "Sleep", "SoundSleep", "Pregancies")]

desviacion_estandar <- apply(Diabetes1, 2, sd)

desviacion_estandar
##        BMI      Sleep SoundSleep Pregancies 
##  5.1399922  1.3042497  1.8435140  0.9090479

Interpretación

Las desviaciones estándar corresponden a las variables “BMI”, “Sleep”, “SoundSleep” y “Pregancies”.

Cada una de estas desviaciones estándar indica cuánto se alejan los valores individuales de cada variable de la media correspondiente.

BMI (Índice de masa corporal): La desviación estándar de 5.14 para el BMI indica que los valores individuales de BMI tienden a alejarse de la media en aproximadamente 5.14 unidades. Esto sugiere que hay una variabilidad relativamente alta en los índices de masa corporal en el conjunto de datos.

Sleep (Tiempo de sueño): La desviación estándar de 1.30 para Sleep indica que los valores individuales de tiempo de sueño tienden a alejarse de la media en aproximadamente 1.30 unidades. Esto sugiere una variabilidad moderada en los tiempos de sueño registrados.

SoundSleep (Sueño profundo): La desviación estándar de 1.84 para SoundSleep indica que los valores individuales de sueño profundo tienden a alejarse de la media en aproximadamente 1.84 unidades. Esto sugiere una variabilidad moderada en los niveles de sueño profundo registrados.

Pregancies (Embarazos): La desviación estándar de 0.91 para Pregancies indica que los valores individuales de embarazos tienden a alejarse de la media en aproximadamente 0.91 unidades. Esto sugiere una variabilidad relativamente baja en el número de embarazos en el conjunto de datos.

En general, cuanto más grande sea la desviación estándar, más dispersos estarán los valores alrededor de la media y mayor será la variabilidad en los datos. Por otro lado, una desviación estándar más pequeña indica que los valores están más cerca de la media y hay menos variabilidad en los datos, y nos proporcionan información sobre la dispersión y variabilidad de los datos en relación con la media. Cuanto mayor sea la desviación estándar, mayor será la variabilidad y dispersión de los valores individuales respecto a la media.


GRÁFICA DE BARRAS

Relación con (género, edad, actividad física y consumo de comida chatarra)

Género (gender)

library(ggplot2)
grafico_Gender = ggplot(diabetes_clean,aes(x=Gender))+
  geom_bar(stat="count", width=0.7, fill="skyblue")+
  theme_minimal()

print(grafico_Gender)

Interpretación:

Se puede observar que en la base de datos de los pacientes con diabetes de la variable Gender(Género), el género masculino osea los hombres presentan mayor sintomas de diabetes.


Edad (age)

grafico_Age = ggplot(diabetes_clean,aes(x=Age))+
  geom_bar(stat="count", width=0.7, fill="orange")+
  theme_minimal()

print(grafico_Age)

Interpretación:

Se puede observar que en la base de datos de los pacientes con diabetes de la variable Age(Edad), sea femenino y masculino los pacientes de 40-49, 50-59, 60 años o mas y menos de 40 el mayor sintomas de diabetes se presenta a una edad, que se podría decir temprana es de menores de 40, por muchos factores.


Actividad Física (PhysicallyActive)

grafico_P = ggplot(diabetes_clean,aes(x=PhysicallyActive))+
  geom_bar(stat="count", width=0.7, fill="green")+
  theme_minimal()

print(grafico_P)

Interpretación:

Se puede observar que en la base de datos de los pacientes con diabetes de la variable Actividad Física (PhysicallyActive), sea femenino y masculino los pacientes que realizan una hora o más, nunca, más de media hora y menos de media hora, se puede ver que las personas que realizan una hora o más intentan controlar las diabetes.


JunkFood (Comida Chatarra)

grafico_C =ggplot(diabetes_clean,aes(x=JunkFood))+
  geom_bar(stat="count", width=0.7, fill="pink")+
  theme_minimal()

print(grafico_C)

Interpretación:

Se puede observar que en la base de datos de los pacientes con diabetes de la variable JunkFood (Comida Chatarra), las personas que comen una comida, a menudo, ocasionalmente, casi nunca y siempre, se puede observar que la mayor parte de ellos que ocasionalmente comen comida chatarra tienden a presentar mayor síntomas de diabetes.


GRÁFICO DE DISPERSIÓN

Masa Corporal y Horas de Sueño (BMI and Sleep)

ggplot(diabetes_clean, aes(x = BMI, y = Sleep, col = factor(Sleep))) +
  geom_point() +
  labs(title = "Relación entre BMI y Horas de Sueño",
       x = "Masa Corporal (BMI)",
       y = "Horas de Sueño")

Interpretación

En el Eje x (BMI) se representa el Índice de Masa Corporal (BMI) donde cada punto en el gráfico está ubicado en el valor correspondiente de BMI. En el eje y (Sleep) representa el número de horas de sueño, donde cada punto en el gráfico está ubicado en el valor correspondiente de horas de sueño. Los puntos en el gráfico están coloreados según la variable Sleep el nivel del sueño. Donde se puede visualizar cómo se distribuyen los puntos en función de las categorías de horas de sueño se puede ver una mayor distribución o relación, entre las masa corporal de 20 a 30 en función de las horas de sueño que va desde las 6 horas hasta las 8 horas.

Los valores de los coeficientes nos indican la relación entre cada uno de los predictores y la variable dependiente.

El coeficiente independiente nos da un punto de referencia para evaluar el efecto de los predictores en la probabilidad de tener diabetes.


Masa Corporal y Horas de Sueño Profundo (BMI and Sound Sleep)

ggplot(diabetes_clean, aes(x = BMI, y = SoundSleep, col = factor(SoundSleep))) +
  geom_point() +
  labs(title = "Relación entre BMI y Horas de Sueño Profundo",
       x = "Masa Corporal (BMI)",
       y = "Horas de Sueño Profundo (SoundSleep")

Interpretación

En el Eje x (BMI) se representa el Índice de Masa Corporal (BMI) donde cada punto en el gráfico está ubicado en el valor correspondiente de BMI. En el eje y (SoundSleep) representa el número de horas de sueño profundo, donde cada punto en el gráfico está ubicado en el valor correspondiente de horas de sueño profundo. Los puntos en el gráfico están coloreados según la variable SoundSleep el nivel del sueño Profundo. Donde se puede visualizar cómo se distribuyen los puntos en función de las categorías de horas de sueño se puede ver una mayor distribución o relación, entre las masa corporal de 10 a 35 en función de las horas de sueño profundo que va desde las 5 horas hasta las 6 horas, ya que que el índice de masa corporal no estan elevada las horas de sueño a profundidad no estan alta se podría decir que en nivel de relación es normal.


Masa Corporal y Embarazos (BMI and Pregancies)

ggplot(diabetes_clean, aes(x = BMI, y = Pregancies, col = factor(Pregancies))) +
  geom_point() +
  labs(title = "Relación entre BMI y los Embarazos",
       x = "Masa Corporal (BMI)",
       y = "Embarazos")

Interpretación

En el Eje x (BMI) se representa el Índice de Masa Corporal (BMI) donde cada punto en el gráfico está ubicado en el valor correspondiente de BMI. En el eje y (Pregancies) representa el número de embarazos, donde cada punto en el gráfico está ubicado en el valor correspondiente de embarazos. Los puntos en el gráfico están coloreados según la variable Pregancies los embarazos. Se puede observar que o decir que cuando un persona (mujer), esta embarazada tiende a tener un BMI algo alto como se ve en la gráfica ya que esta elevada desde los 20 hasta los 40 pero como los valores aumnetan los embarazos se ven menos por que esta en el intervalo de 0.


Horas de Sueño y Embarazos (Sleep and Pregancies)

ggplot(diabetes_clean, aes(x = Sleep, y = Pregancies, col = factor(Pregancies))) +
  geom_point() +
  labs(title = "Relación entre Sleep y los Embarazos",
       x = "Horas de sueño (Sleeo)",
       y = "Embarazos (Pregancies")

Interpretación

Se puede observar que mientras hay embarazos con sintomas de diabetes que tanto pueden dormir y hay un intervalo de embarazos de 2 a 3 hay mayor profundidad de sueño ya que se pueden sentir cansados y por la tanto descansan más.


GRÁFICO DE BOXPLOT

Variable de masa corporal (BMI) y diabetes (Pdiabetic)

ggplot(diabetes_clean, aes(x=Diabetic, y=BMI, color=Diabetic))+geom_boxplot()

Interpretación

En resumen, este gráfico de boxplot nos permite comparar las distribuciones de los valores de BMI para diferentes categorías de diabetes, y se identifica dos datos atípicos posibles en la variables Diabetic (no) y la media de las cajas esta dispareja o elevada en (yes).


Variable de Diabetes (Diabetic) y sueño (Sleep)

ggplot(diabetes_clean, aes(x=Diabetic, y=Sleep, color=Diabetic))+geom_boxplot()

Interpretación

En resumen, este gráfico de boxplot nos permite comparar las distribuciones de los valores de Diabetic para las horas de sueño y no se identifica datos atípicos posibles en la variables Diabetic y la media de las cajas estan iguales.


Variable de Diabetes (Diabetic) y sueño profundo (SoundSleep)

ggplot(diabetes_clean, aes(x=Diabetic, y=SoundSleep, color=Diabetic))+geom_boxplot()

Interpretación

En resumen, este gráfico de boxplot nos permite comparar las distribuciones de los valores de Diabetic para las horas de sueño profundo y no se identifica datos atípicos posibles en la variables Diabetic se observa que la media de las cajas estan igual.


Variable de Diabetes (Diabetic) y Embarazos (Pregancies)

ggplot(diabetes_clean, aes(x=Diabetic, y=Pregancies, color=Diabetic))+geom_boxplot()

Interpretación

En resumen, este gráfico de boxplot nos permite comparar las distribuciones de los valores de Diabetic para los embarazos y se identifica 3 datos atípicos posibles en la variables Diabetic (no), y la media de las cajas se encuentran en un punto muy bajo de 0.


GRÁFICO DE MOSAICO EN RELACIÓN ENTRE LAS VARIABLES

Su funcion es resumir las probabilidades condicionadas a las coocurrencias de diferentes variables categoricas en una lista de registros de la misma longitud.

Relación de todas las variables de tipo factor

library(ggmosaic)
library(gridExtra)
library(ggplot2)

# VARIABLE DIABETIC Y GENDER

par(mfrow = c(4,3))
q1 <- ggplot(data=diabetes_clean)+ 
  geom_mosaic(aes(x=product(Diabetic, Gender), fill = Diabetic)) + labs(x="Genero",title = "Factores_Diabetes")

# VARIABLE DIABETIC Y FAMILY_DIABETIC

q2 <- ggplot(data=diabetes_clean)+ 
  geom_mosaic(aes(x=product(Diabetic, Family_Diabetes), fill = Diabetic)) + labs(x="Historial familiar de diabetes",title = "Factores_Diabetes")

# VARIABLE DIABETIC Y HIGHBP

q3 <- ggplot(data=diabetes_clean)+ 
  geom_mosaic(aes(x=product(Diabetic, highBP), fill = Diabetic)) + labs(x="Diagnóstico de la hipertensión arterial",title = "Factores_Diabetes")

# VARIABLE DIABETIC Y SMOKING

q4 <- ggplot(data=diabetes_clean)+ 
  geom_mosaic(aes(x=product(Diabetic, Smoking), fill = Diabetic)) + labs(x="Historial familiar de diabetes",title = "Factores_Diabetes")

# VARIABLE DIABETIC Y ALCOHOL

q5 <- ggplot(data=diabetes_clean)+ 
  geom_mosaic(aes(x=product(Diabetic, Alcohol), fill = Diabetic)) + labs(x="Alcohol",title = "Factores_Diabetes")

# VARIABLE DIABETIC Y REGULAR_MEDICINE

q6 <- ggplot(data=diabetes_clean)+ 
  geom_mosaic(aes(x=product(Diabetic, RegularMedicine), fill = Diabetic)) + labs(x="Alcohol",title = "Factores_Diabetes")

# VARIABLE DIABETIC Y PHYSICALLYACTIVE

q7 <- ggplot(data=diabetes_clean)+ 
  geom_mosaic(aes(x=product(Diabetic, PhysicallyActive), fill = Diabetic)) + labs(x="Actividad física",title = "Factores_Diabetes")

# VARIABLE DIABETIC Y JUNKFOOD

q8 <- ggplot(data=diabetes_clean)+ 
  geom_mosaic(aes(x=product(Diabetic, JunkFood), fill = Diabetic)) + labs(x="Consumo de comida chatarra",title = "Factores_Diabetes")

# VARIABLE DIABETIC Y STRESS

q9 <- ggplot(data=diabetes_clean)+ 
  geom_mosaic(aes(x=product(Diabetic, Stress), fill = Diabetic)) + labs(x="Estres",title = "Factores_Diabetes")

# VARIABLE DIABETIC Y BPLEVEL

q10 <- ggplot(data=diabetes_clean)+ 
  geom_mosaic(aes(x=product(Diabetic, BPLevel), fill = Diabetic)) + labs(x="Nivel BPL",title = "Factores_Diabetes")

# VARIABLE DIABETIC Y URIATIONFREQ

q11 <- ggplot(data=diabetes_clean)+ 
  geom_mosaic(aes(x=product(Diabetic, UriationFreq), fill = Diabetic)) + labs(x="Frecuencia urinaria",title = "Factores_Diabetes")

# UNIÓN DE LAS VARIABLES

grid.arrange(q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11, nrow = 4 , ncol = 3)
## 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

Se visualiza la asociación entre dos variables categóricas, donde cada rectángulo en el gráfico representa una combinación única de niveles de las dos variables, en este caso se presenta 11 rectángulos de diferentes combinaciones de dos variables.

El tamaño de cada rectángulo refleja la proporción de observaciones en los datos que cumplen con la combinación específica de las dos variables. Cuanto más grande sea el rectángulo, mayor será la proporción de casos en la categoría.

Los ejes x e y representan las dos variables categóricas que se esta analizando, se mira la relación entre la variable Diabetic y otra variable categórica específica (por ejemplo, Gender, Family_Diabetes, highBP, etc.).

Tambien se observa patrones o tendencias en el gráfico. Por ejemplo, hay combinaciones específicas que tienen una proporción más alta o más baja de casos diabéticos.

Se mira interacciones entre las dos variables, ya que hay algunas combinación de niveles de las dos variables que muestre una asociación fuerte y otras debiles, tambien hay algunas combinaciones que tienen un impacto particularmente fuerte en la proporción de casos diabéticos.


MATRIZ DE CORRELACIÓN DE LAS VARIABLES TIPO FACTOR

Una matriz de correlación se utiliza para investigar als dependencia entre multibles variables a la vez. El resultado de la tabla contiene los coeficientes de correlacion entre las diferentes variables que conforman el dataframe, nos ayuda a entender la relacion entre ellas. Con este grafico podemos seleccionar las variables relevantes y el eliminar aquellas que son redundantes, que tienen covariancia.

deb.cor <- cor(Diabetes1, method = "pearson")
round(deb.cor,2)
##              BMI Sleep SoundSleep Pregancies
## BMI         1.00 -0.07      -0.29      -0.09
## Sleep      -0.07  1.00       0.57       0.05
## SoundSleep -0.29  0.57       1.00       0.12
## Pregancies -0.09  0.05       0.12       1.00

Interpretación

La correlacion puede ir de 1 a -1. Cuando mas grande, mas positiva a 1 es, o mas pequeña, mas negativa a 1 es, mayor es la relacion entre las variables.

Si es positiva, es directamente propocional en el momento que es 1, o bien negativa, es inversamente proprcional.

Si es cercana a 0 nos indica que no hay correlacion entre esas dos variables.


GRÁFICO DE MATRIZ DE CORRELACIÓN

Como ver la correlacion graficamente para identificar rapidamente las variables que nos interesan:

library(corrplot)
## corrplot 0.92 loaded
corrplot(deb.cor)

Presentación en cuadros

corrplot(deb.cor, method = "shade", shade.col = NA,
         tl.col = "black", tl.srt = 45) # el parametro tl.srt nos permite dar una inclinacion de 45 grados a los titulares, method igual a shade nos proporciona las formas cuadradas, tl.col color negro.

Vamos a definir una paleta de colores mas suave para modificar el grafico:

col <- colorRampPalette(c("#BB4444", "#EE9988", "#FFFFFF",
                          "#77AADD","#4477AA"))
corrplot(deb.cor, method = "shade", shade.col = NA, tl.col = "black",
         tl.srt = 45, col = col(200), addCoef.col = "black", addcolorlabel = "no",
         order = "AOE", type = "lower", diag = F, addshade = "all") # col de colores nos expandira hasta 200 colores con las gamas usadas
## Warning in text.default(pos.xlabel[, 1], pos.xlabel[, 2], newcolnames, srt =
## tl.srt, : "addcolorlabel" is not a graphical parameter
## Warning in text.default(pos.ylabel[, 1], pos.ylabel[, 2], newrownames, col =
## tl.col, : "addcolorlabel" is not a graphical parameter
## Warning in title(title, ...): "addcolorlabel" is not a graphical parameter

corrplot(deb.cor, method = "circle", shade.col = NA, tl.col = "black",
         tl.srt = 45, col = col(200), addCoef.col = "black", addcolorlabel = "no",
         order = "AOE", type = "upper", diag = F, addshade = "all")
## Warning in text.default(pos.xlabel[, 1], pos.xlabel[, 2], newcolnames, srt =
## tl.srt, : "addcolorlabel" is not a graphical parameter
## Warning in text.default(pos.ylabel[, 1], pos.ylabel[, 2], newrownames, col =
## tl.col, : "addcolorlabel" is not a graphical parameter
## Warning in title(title, ...): "addcolorlabel" is not a graphical parameter

Interpretación

Como se muestra en las gráfica las correlaciones son muy bajas entres las variables, por lo tanto no hay relación en esas variables.

GRÁFICO MULTIVARIANTE

library(ggplot2)
library(ggmosaic)
library(plotly)
## 
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
## 
##     last_plot
## The following object is masked from 'package:stats':
## 
##     filter
## The following object is masked from 'package:graphics':
## 
##     layout
library(ggrepel)
library(GGally)
## Registered S3 method overwritten by 'GGally':
##   method from   
##   +.gg   ggplot2
## 
## Attaching package: 'GGally'
## The following object is masked from 'package:ggmosaic':
## 
##     happy
# Imprimir la estructura del conjunto de datos
str(diabetes_clean)
## 'data.frame':    906 obs. of  18 variables:
##  $ Age             : Factor w/ 4 levels "40-49","50-59",..: 4 4 3 4 3 1 3 1 4 2 ...
##  $ Gender          : Factor w/ 2 levels "Female","Male": 2 2 1 2 2 2 2 1 2 2 ...
##  $ Family_Diabetes : Factor w/ 2 levels "no","yes": 2 2 2 2 1 1 2 1 1 2 ...
##  $ highBP          : Factor w/ 2 levels "no","yes": 1 1 1 1 1 1 1 1 1 1 ...
##  $ PhysicallyActive: Factor w/ 4 levels "one hr or more",..: 4 4 3 2 2 1 2 3 1 4 ...
##  $ BMI             : int  22 22 26 19 23 26 26 23 22 38 ...
##  $ Smoking         : Factor w/ 2 levels "no","yes": 1 1 1 2 1 2 1 1 1 1 ...
##  $ Alcohol         : Factor w/ 2 levels "no","yes": 1 1 1 2 2 1 2 1 1 2 ...
##  $ 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 : Factor w/ 2 levels "no","yes": 1 1 1 1 2 1 2 1 1 2 ...
##  $ JunkFood        : Factor w/ 4 levels "often","occasionally",..: 3 3 2 2 2 2 2 3 3 2 ...
##  $ Stress          : Factor w/ 4 levels "not at all","sometimes",..: 2 2 3 2 4 3 3 4 2 4 ...
##  $ BPLevel         : Factor w/ 3 levels "normal","high",..: 3 3 3 3 1 3 3 3 3 3 ...
##  $ Pregancies      : int  0 0 3 0 0 0 0 1 0 0 ...
##  $ Pdiabetes       : Factor w/ 2 levels "0","yes": 1 1 1 1 1 1 1 1 1 1 ...
##  $ UriationFreq    : Factor w/ 2 levels "not much","quite often": 1 1 1 1 2 1 2 1 2 1 ...
##  $ Diabetic        : Factor w/ 2 levels "no","yes": 1 1 1 1 2 1 2 1 1 2 ...

Daros Númericos

# Seleccionar columnas numéricas
numeric_columns <- diabetes_clean[, sapply(diabetes_clean, is.numeric)]

Gráfica

# Crear la matriz de gráficos
p <- ggpairs(numeric_columns) + 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("#00AFBB", "#E7B800")) +
      scale_color_manual(values=c("#00AFBB", "#E7B800"))
  }
  
}
p

# Crear la matriz de gráficos con paleta de colores
p <- ggpairs(numeric_columns, aes(color = diabetes_clean$BPLevel)) +
  theme_bw() +
  scale_color_manual(values = c("#00AFBB", "#E7B800", "#FC4E07"))

# Imprimir la matriz de gráficos
print(p)

clases <- sapply(diabetes_clean, class)

classes <- sapply(diabetes_clean, class)
for (i in 1:ncol(diabetes_clean))
  if(classes[i]== "integer")
    diabetes_clean[[i]] =as.numeric(diabetes_clean[[i]])
classes = sapply(diabetes_clean, 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"
# Crear la matriz de gráficos con paleta de colores
w <- ggpairs(diabetes_clean[,c(which(classes =="numeric"),18)], aes(color=Diabetic)) + theme_bw()
# change color manually
# loop through each plot changing relevant scales
 for (i in 1:w$nrow) {
  for (j in 1:w$ncol) {
    w[i,j] <- w[i,j]+
      scale_fill_manual(values = c("skyblue", "yellow"))+
      scale_color_manual(values=c("skyblue","yellow"))
  }
 }
w
## `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`.

Interpretación

A partir de la gráfica de mosaico se muestra las correlaciones entre las variables del conjunto de datos diabetes, se puede concluir lo siguiente:

Hay una correlación negativa significativa entre el sueño y BMI. El valor de la correlación es -0.073.

Hay una correlación negativa el sueño profundo y BMI. El valor de la correlación es -0.291.

Existe una correlación negativa significativa entre el índice de masa corporal (BMI) y los embarazos. El valor de la correlación es -0.682.

Hay una correlación moderada entre el sueño y sueño profundo. El valor de la correlación es 0.575.

No hay una correlación significativa entre las horas de sueño y el embarazo. El valor de la correlación es 0.054.

Hay una correlación positiva entre las horas de sueño profundo y embarazos. El valor de la correlación es 0.117.

En resumen, las variables sueño, sueño profundo, BMI y número de embarazos, parecen estar relacionadas de manera moderada a alta con la enfermedad de la diabetes.


VARIABLES FICTICIAS

Las variables ficticias, también conocidas como variables dummy, son variables binarias que se utilizan para representar categorías o niveles de una variable categórica en un modelo de regresión. Estas variables toman el valor de 1 si la observación pertenece a una categoría específica y 0 en caso contrario. Se utilizan para capturar el efecto de las diferentes categorías en el modelo de manera individualizada.

Dividiremos el conjunto completo de individuos en dos partes, un para entrenar el modelo, que contiene el 80% de los individuos y otra para validarlo que contiene el resto. Esto es así porque si valoramos el modelo con las misma observaciones que usamos para ajustarlo, la bondad del ajuste quedará sobrevalorada.

Antes de ajustar cualquier modelo, es conveniente escalar las variables numéricas 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.

Escalamiento de númericas

numeric_columns <- sapply(diabetes_clean, is.numeric)
diabetes_clean[, numeric_columns] <- scale(diabetes_clean[, numeric_columns])
head(diabetes_clean)
##              Age Gender Family_Diabetes highBP         PhysicallyActive
## 20  less than 40   Male             yes     no \t\nless than half an hr
## 258 less than 40   Male             yes     no \t\nless than half an hr
## 511  60 or older Female             yes     no     more than half an hr
## 907 less than 40   Male             yes     no                     none
## 582  60 or older   Male              no     no                     none
## 726        40-49   Male              no     no           one hr or more
##            BMI Smoking Alcohol      Sleep SoundSleep RegularMedicine
## 20  -0.6487242      no      no 0.78534240  0.2119477              no
## 258 -0.6487242      no      no 0.78534240  0.2119477              no
## 511  0.1294871      no      no 0.01861803  0.7543900              no
## 907 -1.2323826     yes     yes 0.01861803 -0.3304947              no
## 582 -0.4541713      no     yes 0.01861803  0.2119477             yes
## 726  0.1294871     yes      no 0.78534240  0.7543900              no
##         JunkFood     Stress BPLevel Pregancies Pdiabetes UriationFreq Diabetic
## 20    very often  sometimes     low -0.4201082         0     not much       no
## 258   very often  sometimes     low -0.4201082         0     not much       no
## 511 occasionally very often     low  2.8800479         0     not much       no
## 907 occasionally  sometimes     low -0.4201082         0     not much       no
## 582 occasionally     always  normal -0.4201082         0  quite often      yes
## 726 occasionally very often     low -0.4201082         0     not much       no
x=model.matrix(Diabetic~., data=diabetes_clean)
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
##     PhysicallyActivemore 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 Stresssometimes Stressvery often
## 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
##     Stressalways BPLevelhigh 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
##     UriationFreqquite often
## 20                        0
## 258                       0
## 511                       0
## 907                       0
## 582                       1
## 726                       0

Interpretación

Observará 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 también son convertida a Binarias con el número de categorias que cada una almacena. Los parámetros correspondientes a las categorías retenidas comparan a éstas con la categoría eliminada.

Dividiremos el conjunto completo de individuos en dos partes, un para entrenar el modelo, que contiene el 80% de los individuos a Binarias con el número de categorias que cada una almacena. Los parámetros correspondientes a las categorías retenidas comparan a éstas con la categoría eliminada.

Dividiremos el conjunto completo de individuos en dos partes, un 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 quedará sobrevalorada.

Por ejemplo, vamos ausar 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 números pseudo aleatorios con la fecha de nacimiento sin separaciones (diamesaño).

tr=round(nrow(diabetes_clean)*0.7)
set.seed(0605490028)
muestra=sample.int(nrow(diabetes_clean), tr)
Train.diabet=diabetes_clean[muestra,]
val.diabet=diabetes_clean[-muestra,]

Ahora disponemos de un conjunto de entrenamiento Train.diabet y un conjunto d evalidación Val.diabet”.

MODELOS DE CLASIFICACIÓN

Regresión Logística

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

\[{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}}}}}}\]

Vamos a ajustar primero el modelo desde el punto de vista estadistica para interpretar los parámetros

gfit1 <- glm(Diabetic~., data=diabetes_clean, family=binomial)
summary(gfit1)
## 
## Call:
## glm(formula = Diabetic ~ ., family = binomial, data = diabetes_clean)
## 
## 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
## PhysicallyActivemore 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
## Stresssometimes                           -0.03269    0.51891  -0.063 0.949776
## Stressvery often                          -0.53932    0.39565  -1.363 0.172845
## Stressalways                              -0.32951    0.45855  -0.719 0.472393
## BPLevelhigh                              -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
## UriationFreqquite often                    0.43749    0.31153   1.404 0.160219
##                                             
## (Intercept)                              *  
## Age50-59                                    
## Age60 or older                           ***
## Ageless than 40                          ***
## GenderMale                                  
## Family_Diabetesyes                       ***
## highBPyes                                *  
## PhysicallyActivenone                        
## PhysicallyActivemore than half an hr     *  
## PhysicallyActive\t\nless than half an hr ***
## BMI                                         
## Smokingyes                               *  
## Alcoholyes                                  
## Sleep                                       
## SoundSleep                               *  
## RegularMedicineyes                       ***
## JunkFoodoccasionally                        
## JunkFoodvery often                          
## JunkFoodalways                              
## Stresssometimes                             
## Stressvery often                            
## Stressalways                                
## BPLevelhigh                                 
## BPLevellow                               ***
## Pregancies                               *  
## Pdiabetesyes                             ***
## UriationFreqquite often                     
## ---
## 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

Este es un resumen de un modelo de regresión logística ajustado a los datos utilizando la función glm() en R.

Call:

Muestra la llamada que se utilizó para ajustar el modelo.

Coefficients:

La tabla de coeficientes muestra la estimación de los efectos de cada variable independiente en la probabilidad de ser Diabético (variable dependiente). Estos coeficientes se encuentran en la escala logarítmica de odds.

Estimate:

Es la estimación del coeficiente para cada predictor.

Std. Error:

Representa el error estándar de la estimación de cada coeficiente. Mide la variabilidad de la estimación.

z value:

Es el valor z, que indica cuántas desviaciones estándar está el coeficiente estimado del valor nulo. Valores z más grandes (en valor absoluto) sugieren que el predictor es más relevante.

Pr(>|z|):

Es el valor p, que indica la probabilidad de observar el valor z si la hipótesis nula (el coeficiente es igual a cero) es cierta. Valores p pequeños sugieren que el predictor es significativo.


Interpretación de los valores

La salida de un modelo de regresión logística, donde se presentan los coeficientes estimados para cada una de las variables predictoras:

Intercept (Intercepto): -2.77088. Este es el término constante en la regresión logística cuando todas las demás variables son cero.

Age50-59: 0.41120. Aumento en la probabilidad logarítmica de la variable de respuesta para la categoría de edad entre 50 y 59 años, en comparación con la categoría de referencia que es diabetes.

Age60 or older: 1.62408. Aumento en la probabilidad logarítmica para la categoría de edad de 60 años o más, en comparación con la categoría de referencia que es diabetes.

Ageless than 40: -1.68936. Disminución en la probabilidad logarítmica para la categoría de edad menor de 40 años, en comparación con la categoría de referencia que es diabetes.

GenderMale: 0.48706. Aumento en la probabilidad logarítmica para la categoría de género masculino, en comparación con la categoría de referencia que es diabetes.

Family_Diabetesyes: 1.00920. Aumento en la probabilidad logarítmica para aquellos con antecedentes familiares de diabetes, en comparación con la categoría de referencia que es diabetes.

highBPyes: -0.85083. Disminución en la probabilidad logarítmica para aquellos con presión arterial alta, en comparación con la categoría de referencia que es diabetes.

PhysicallyActivenone: 0.55514. Aumento en la probabilidad logarítmica para aquellos que no son físicamente activos, en comparación con la categoría de referencia que es diabetes.

PhysicallyActivemore than half an hr: 0.85532. Aumento en la probabilidad logarítmica para aquellos que son físicamente activos durante más de media hora al día, en comparación con la categoría de referencia que es diabetes.

PhysicallyActiveless than half an hr: 1.68317. Aumento en la probabilidad logarítmica para aquellos que son físicamente activos durante menos de media hora al día, en comparación con la categoría de referencia que es diabetes.

BMI: 0.17735. Aumento en la probabilidad logarítmica por unidad de cambio en el índice de masa corporal.

Smokingyes: 1.15528. Aumento en la probabilidad logarítmica para aquellos que fuman, en comparación con la categoría de no fumadores.

Alcoholyes: 0.09689. Aumento en la probabilidad logarítmica para aquellos que consumen alcohol, en comparación con la categoría de no consumidores.

Sleep: 0.05861. Aumento en la probabilidad logarítmica por unidad de cambio en la variable de sueño.

SoundSleep: 0.39536. Aumento en la probabilidad logarítmica para aquellos que informan tener un sueño saludable, en comparación con la categoría de referencia de sueño profundo.

RegularMedicineyes: 2.97844. Aumento en la probabilidad logarítmica para aquellos que toman medicamentos regularmente, en comparación con la categoría de no usuarios.

JunkFoodoccasionally, JunkFoodvery often, JunkFoodalways: Estos coeficientes están asociados con la frecuencia de consumo de comida chatarra. Sin embargo, los valores son bajos pero positivos y se puede decir que no son estadísticamente significativos.

Stresssometimes, Stressvery often, Stressalways: Estos coeficientes están asociados con la frecuencia de experimentar estrés. Nuevamente, los valores son bajos negativos y no pueden ser estadísticamente significativos.

BPLevelhigh, BPLevellow: Estos coeficientes están asociados con los niveles de presión arterial. “BPLevellow” tiene un efecto negativo significativo, lo que indica una disminución en la probabilidad logarítmica para niveles bajos de presión arterial.

Pregancies: 0.32210. Aumento en la probabilidad logarítmica por unidad de cambio en la variable de embarazos.

Pdiabetesyes: 4.01652. Aumento en la probabilidad logarítmica para aquellos con antecedentes de diabetes durante el embarazo.

UriationFreqquite often: 0.43749. Aumento en la probabilidad logarítmica para aquellos que experimentan frecuencia urinaria bastante a menudo.

Estos coeficientes indican cómo cada variable afecta la probabilidad logarítmica de la variable de respuesta en comparación con las categorías de referencia o por unidad de cambio. Los valores p (Pr(>|z|)) indican la significancia estadística de cada coeficiente. Valores bajos (por ejemplo, < 0.05) sugieren que el efecto es probablemente real y no debido al azar.


Interpretación 2:

Las estrellas y los códigos de significancia proporcionan información sobre la significancia estadística de cada variable en el modelo:

(Intercept): El intercepto es significativamente diferente de cero (***), lo que significa que hay evidencia de que el modelo no se ajusta a un escenario donde todas las variables predictoras son cero.

Age50-59, Age60 or older, Ageless than 40: Todas estas categorías de edad son significativas (***), lo que sugiere que hay diferencias significativas en la probabilidad logarítmica entre estas categorías y la categoría de referencia que es edad y diabetes.

GenderMale: No es significativo (sin estrellas), lo que sugiere que no hay evidencia suficiente para decir que el género masculino tiene un efecto significativo en la variable de respuesta en comparación con la categoría de referencia diabetes.

Family_Diabetesyes, highBPyes, PhysicallyActivemore than half an hr, PhysicallyActiveless than half an hr, Smokingyes, SoundSleep, RegularMedicineyes, BPLevellow, Pregancies, Pdiabetesyes: Todas estas variables son significativas, con diferentes niveles de significancia indicados por el número de estrellas (*** . ** . *). Cuantas más estrellas haya, más significativa es la variable.

JunkFoodoccasionally, JunkFoodvery often, JunkFoodalways, PhysicallyActivenone, Alcoholyes, Sleep, BMI, Stresssometimes, Stressvery often, Stressalways, BPLevelhigh, UriationFreqquite often: Estas variables no son significativas según el código de significancia proporcionado.

Adicionalmente se presenta estadísticas del modelo, como la deviance nula, la deviance residual y el criterio de información de Akaike (AIC).

Estos valores pueden ser útiles para evaluar la bondad de ajuste del modelo. Además, el número de iteraciones de Fisher Scoring indica cuántas veces se ha iterado para encontrar los coeficientes del modelo.


TABLA ANOVA

gfit0 <- glm(Diabetic~1, data = diabetes_clean, family = binomial)
anova(gfit0, gfit1, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: Diabetic ~ 1
## Model 2: Diabetic ~ Age + Gender + Family_Diabetes + highBP + PhysicallyActive + 
##     BMI + Smoking + Alcohol + Sleep + SoundSleep + RegularMedicine + 
##     JunkFood + Stress + BPLevel + Pregancies + Pdiabetes + UriationFreq
##   Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
## 1       905    1091.56                          
## 2       879     491.38 26   600.19 < 2.2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interpretación

Modelo 1: Diabetic ~ 1:

Este modelo es el modelo nulo o de referencia, que incluye solo el intercepto y no tiene ninguna variable predictora.

Resid. Df (grados de libertad residuales) es 905. Resid. Dev (devianza residual) es 1091.56.

Modelo 2: Diabetic ~ Age + Gender + Family_Diabetes + … + UriationFreq:

Este modelo incluye un conjunto de variables predictoras: “Age”, “Gender”, “Family_Diabetes”, “highBP”, “PhysicallyActive”, “BMI”, “Smoking”, “Alcohol”, “Sleep”, “SoundSleep”, “RegularMedicine”, “JunkFood”, “Stress”, “BPLevel”, “Pregancies”, “Pdiabetes”, y “UriationFreq”.

Resid. Df es 879. Resid. Dev es 491.38. Df (diferencia en grados de libertad) es 26.

Deviance es la diferencia en la devianza residual entre el Modelo 1 y el Modelo 2, lo que indica cuánto mejor se ajusta el Modelo 2 en comparación con el Modelo 1.

El valor p (Pr(>Chi)) asociado con la prueba de chi-cuadrado para la diferencia entre los dos modelos es muy pequeño (< 2.2e-16), lo que indica que el Modelo 2 es estadísticamente significativamente mejor que el Modelo 1.

El Modelo 2, que incluye todas las variables predictoras mencionadas, es significativamente mejor para explicar la variabilidad en la variable de respuesta “Diabetic” en comparación con el Modelo 1 que no incluye ninguna variable predictora. La prueba de chi-cuadrado indica que la inclusión de las variables en el Modelo 2 mejora significativamente la capacidad del modelo para explicar los datos en comparación con un modelo sin variables predictoras.

La diferencia es altamente significativa, es decir el modelo con todas las variables que solo con la constante o hacer una predicción con la variable si o no diabetica que no es significativa es decir influye mas el resto de variables que la variable sola.El test Wald para la significación de cada parámetro individual vamos que son altamente significativos los coeficientes para las variables Age,Family_Diabetes,highBP, PhysicalleActive,Smoking,RegularMedicine,BPLevel,Pdiabetes. Esto quiere decir que las demás variables no tiene influye en el modelo por ende no son significativos para dicho estudio, si se requiere ver el efecto conjunto de cada variables utilizamos el comando anova.


SEGUNDO ANOVA

anova(gfit1, test = "Chisq")
## Analysis of Deviance Table
## 
## Model: binomial, link: logit
## 
## Response: Diabetic
## 
## Terms added sequentially (first to last)
## 
## 
##                  Df Deviance Resid. Df Resid. Dev  Pr(>Chi)    
## NULL                               905    1091.56              
## Age               3  279.374       902     812.19 < 2.2e-16 ***
## Gender            1    7.079       901     805.11  0.007800 ** 
## Family_Diabetes   1   46.025       900     759.09 1.168e-11 ***
## highBP            1   23.832       899     735.25 1.051e-06 ***
## PhysicallyActive  3   24.538       896     710.72 1.929e-05 ***
## BMI               1    1.010       895     709.71  0.314887    
## Smoking           1   21.493       894     688.21 3.552e-06 ***
## Alcohol           1    2.266       893     685.95  0.132259    
## Sleep             1    1.686       892     684.26  0.194122    
## SoundSleep        1    0.413       891     683.85  0.520206    
## RegularMedicine   1  123.729       890     560.12 < 2.2e-16 ***
## JunkFood          3    1.505       887     558.61  0.681126    
## Stress            3   11.452       884     547.16  0.009515 ** 
## BPLevel           2   18.675       882     528.49 8.806e-05 ***
## Pregancies        1    9.319       881     519.17  0.002268 ** 
## Pdiabetes         1   25.815       880     493.35 3.758e-07 ***
## UriationFreq      1    1.976       879     491.38  0.159819    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Interpretación

La “Tabla de Análisis de Devianza” se genera comúnmente en el contexto de regresión logística y proporciona información sobre cómo diferentes variables predictoras contribuyen a explicar la variabilidad en la variable de respuesta (en este caso, si alguien es diabético o no).

Información del Modelo:

Tipo de modelo: Binomial (indicando regresión logística). Función de enlace: Logit (se utiliza la función logística para modelar la relación entre los predictores y la probabilidad de ser diabético).

Variable de Respuesta:

Variable de respuesta: Diabético.

Análisis Secuencial de Devianza:

Cada fila en la tabla representa la adición de una nueva variable predictora al modelo.

“Df” significa grados de libertad.

“Deviance” es una medida de qué tan bien se ajusta el modelo a los datos, similar a la suma residual de cuadrados en regresión lineal.

“Resid. Df” son los grados de libertad residuales.

“Resid. Dev” es la devianza residual.

Niveles de Significación:

“Pr(>Chi)” representa el valor p asociado con la prueba de Chi-cuadrado de la hipótesis nula de que el coeficiente de la variable correspondiente es cero (sin efecto).

Niveles de Significación:

Variables con valores p muy bajos (normalmente menos de 0.05) se consideran estadísticamente significativas. Los símbolos ““,”“, y”” indican el nivel de significación. “” significa altamente significativo, “” significa significativo, y “” significa moderadamente significativo.

Variables Específicas:

La variable “Edad” es altamente significativa con un valor p menor a 2.2e-16. “Género” también es significativo con un valor p de 0.0078.

“Family_Diabetes”, “highBP”, “PhysicallyActive”, “Smoking”, “RegularMedicine”, “Stress”, “BPLevel”, “Pregancies” y “Pdiabetes” son altamente significativas.

“BMI”, “Alcohol”, “Sleep”, “SoundSleep”, “JunkFood” y “UriationFreq” no son estadísticamente significativas al nivel de 0.05.

Las variables altamente significativas son probablemente predictores importantes de la diabetes en este modelo.


PREDICCIÓN DEL MODELO

gfit2 <- glm(Diabetic~., data =Train.diabet, family = binomial)
cbind(gfit1$coefficients, gfit2$coefficients)
##                                                  [,1]         [,2]
## (Intercept)                               -2.77087932  -2.39066861
## Age50-59                                   0.41120398   0.73777373
## Age60 or older                             1.62408303   1.48601224
## Ageless than 40                           -1.68935773  -2.00456160
## GenderMale                                 0.48706126   0.43123631
## Family_Diabetesyes                         1.00919861   1.02743452
## highBPyes                                 -0.85082885  -1.00790244
## PhysicallyActivenone                       0.55513711   0.78983297
## PhysicallyActivemore than half an hr       0.85532299   0.78863919
## PhysicallyActive\t\nless than half an hr   1.68316752   1.83779480
## BMI                                        0.17735494   0.18744712
## Smokingyes                                 1.15528381   1.54503855
## Alcoholyes                                 0.09688630  -0.26719637
## Sleep                                      0.05860712   0.05753956
## SoundSleep                                 0.39536387   0.46726385
## RegularMedicineyes                         2.97844459   2.98110505
## JunkFoodoccasionally                       0.08808372  -0.06942074
## JunkFoodvery often                         0.25582142   0.48622227
## JunkFoodalways                             0.04005097  -1.04798216
## Stresssometimes                           -0.03268509  -0.50710705
## Stressvery often                          -0.53932026  -0.90451931
## Stressalways                              -0.32951273  -0.93847534
## BPLevelhigh                              -15.08887804 -15.04864731
## BPLevellow                                -1.47618023  -1.35190147
## Pregancies                                 0.32210269   0.15424978
## Pdiabetesyes                               4.01651629   5.79459098
## UriationFreqquite often                    0.43749258   0.56926182

Interpretación

Los coeficientes indican la magnitud y dirección de la relación entre cada variable predictora y la probabilidad logarítmica de ser diabético.

Intercepto (Intercept):

El intercepto es la estimación del logaritmo de odds de ser diabético cuando todas las demás variables son cero. En este caso, el logaritmo de odds es alrededor de -2.77.

Variables de Edad (Age):

Las categorías de edad están codificadas como variables dummy.

La categoría “Age50-59” tiene un efecto positivo en el logaritmo de odds. La categoría “Age60 or older” también tiene un efecto positivo en el logaritmo de odds en comparación con la categoría de referencia “Ageless than 40”.

Variable de Género (Gender):

El género es masculino (GenderMale), hay un aumento positivo en el logaritmo de odds.

Variable de Antecedentes Familiares de Diabetes (Family_Diabetes):

Hay antecedentes familiares de diabetes (Family_Diabetesyes), hay un aumento positivo en el logaritmo de odds.

Variable de Presión Arterial Alta (highBP):

Tiene presión arterial alta (highBPyes), hay una disminución en el logaritmo de odds.

Variable de Actividad Física (PhysicallyActive):

Las diferentes categorías de actividad física tienen efectos positivos en el logaritmo de odds en comparación con la categoría de referencia “PhysicallyActivenone”.

Variable de Índice de Masa Corporal (BMI):

Aumento en el BMI está asociado con un aumento positivo en el logaritmo de odds.

Variable de Hábito de Fumar (Smoking):

Si fuma (Smokingyes), hay un aumento positivo en el logaritmo de odds.

Variable de Consumo de Alcohol (Alcohol):

Si consume alcohol (Alcoholyes), hay un aumento positivo o negativo (dependiendo del sentido de la categoría) en el logaritmo de odds.

Variable de Sueño (Sleep y SoundSleep):

Aumento en el tiempo de sueño está asociado con un aumento positivo en el logaritmo de odds.

Variable de Medicación Regular (RegularMedicine):

Si toma medicación regular (RegularMedicineyes), hay un aumento positivo en el logaritmo de odds.

Variable de Diagnóstico de Diabetes Previa (Pdiabetes):

Si tiene un diagnóstico previo de diabetes (Pdiabetesyes), hay un aumento sustancialmente positivo en el logaritmo de odds.

Variable de Frecuencia de Micción (UriationFreq):

Si tiene una frecuencia de micción bastante frecuente (UriationFreqquite often), hay un aumento positivo en el logaritmo de odds.


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  176  15
##        yes  22  59
##                                           
##                Accuracy : 0.864           
##                  95% CI : (0.8174, 0.9024)
##     No Information Rate : 0.7279          
##     P-Value [Acc > NIR] : 5.379e-08       
##                                           
##                   Kappa : 0.6664          
##                                           
##  Mcnemar's Test P-Value : 0.3239          
##                                           
##             Sensitivity : 0.8889          
##             Specificity : 0.7973          
##          Pos Pred Value : 0.9215          
##          Neg Pred Value : 0.7284          
##              Prevalence : 0.7279          
##          Detection Rate : 0.6471          
##    Detection Prevalence : 0.7022          
##       Balanced Accuracy : 0.8431          
##                                           
##        'Positive' Class : no              
## 

Interpretación

Reference

Prediction no yes

  no     176   15
  
  yes    22    59
  
  

Los elementos en la diagonal principal (176 y 59) representan las predicciones correctas.

Los elementos fuera de la diagonal principal son errores de predicción.

Estadísticas de Desempeño:

Accuracy (Exactitud): 86.4%

Proporción de predicciones correctas sobre el total de predicciones. En este caso, el modelo tiene una precisión del 86.4%.

95% CI (Intervalo de Confianza del 95%): (0.8174, 0.9024)

Un intervalo de confianza para la exactitud del modelo. Proporciona un rango para la verdadera exactitud.

No Information Rate (Tasa de No Información): 72.79%

La tasa de aciertos que se obtendría prediciendo siempre la clase mayoritaria.

P-Value [Acc > NIR]: 5.379e-08

El valor p asociado con la diferencia entre la exactitud del modelo y la tasa de no información. Un valor p pequeño indica que el modelo es significativamente mejor que simplemente predecir la clase mayoritaria.

Kappa: 0.6664

Estadístico Kappa, que mide la concordancia entre las predicciones del modelo y las observaciones reales. Un valor más cercano a 1 indica una mejor concordancia.

Sensibilidad (Recall): 88.89%

Proporción de instancias positivas correctamente clasificadas. Mide la capacidad del modelo para identificar todas las instancias positivas.

Especificidad: 79.73%

Proporción de instancias negativas correctamente clasificadas. Mide la capacidad del modelo para identificar todas las instancias negativas.

Pos Pred Value (Valor Predictivo Positivo): 92.15%

Proporción de instancias predichas como positivas que son verdaderamente positivas.

Neg Pred Value (Valor Predictivo Negativo): 72.84%

Proporción de instancias predichas como negativas que son verdaderamente negativas.

Prevalence: 72.79%

La proporción de instancias positivas en los datos de prueba.

Detection Rate (Tasa de Detección): 64.71%

La proporción de instancias positivas que el modelo es capaz de detectar.

Detection Prevalence (Prevalencia de Detección): 70.22

La proporción de instancias que el modelo predice como positivas.

Balanced Accuracy (Exactitud Equilibrada): 84.31

El promedio de sensibilidad y especificidad. Proporciona una medida equilibrada del rendimiento del modelo.

‘Positive’ Class (Clase ‘Positiva’): no

Indica cuál es la clase considerada como “positiva” en las métricas de sensibilidad y valor predictivo positivo.

El modelo tiene un rendimiento global bastante bueno, con una exactitud del 86.4%.


CURVA ROC

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 = TRUE, print.auc = TRUE)
## Setting levels: control = no, case = yes
## Setting direction: controls < cases

Interpretación

Se utiliza cuando se tiene datos binarios en el eje x se tiene la especificación mide los valores negativos en el eje y se mide la sensibilidad como el comportamiento de los valores positivos y el AUC es de 0.931 que significa que es moderada y el modelo de predición logística de predicción es bueno. Esta siempre entre 0 y 1 se acerca a 1 se estabiliza de forma horizontal.


MAQUINA DE VECTOR SOPORTE

Otro modelo de clasificación binaria es el conocido como Support Vector Machine (Máquina de vestor de soporte). Los paquetes que se ajustan los modelos de SVM es e1071 y Liblinear. Ajustamos al modelo para nuestros datos de Kernel radial que es el que se usa por defecto

# install.packages("e1071")
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:  274
## 
##  ( 138 136 )
## 
## 
## Number of Classes:  2 
## 
## Levels: 
##  no yes
fitsvm1
## 
## Call:
## svm(formula = Diabetic ~ ., data = Train.diabet)
## 
## 
## Parameters:
##    SVM-Type:  C-classification 
##  SVM-Kernel:  radial 
##        cost:  1 
## 
## Number of Support Vectors:  274

Interpretación

Un modelo de Máquinas de Soporte Vectorial (SVM) para clasificación binaria utilizando el kernel radial (también conocido como kernel gaussiano).

Configuración del Modelo:

SVM-Type: C-classification SVM-Kernel: Radial (kernel radial) Cost: 1

Estos parámetros indican que estás utilizando un SVM para clasificación con un kernel radial y un parámetro de costo (C) igual a 1.

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

Los vectores de soporte son las observaciones más relevantes para el modelo y son fundamentales para la construcción del límite de decisión.

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


BIBLIOGRAFÍA

Comunicarse con los demás - al vivir con una enfermedad crónica: MedlinePlus Enciclopedia Médica. (s. f.). https://medlineplus.gov/spanish/ency/patientinstructions/000602.htm