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.)
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.
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=“”)
# 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
# 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"
# 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"
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"
# 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 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
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
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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(06071981)
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”.
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.
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.
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.
gfit2 <- glm(Diabetic~., data =Train.diabet, family = binomial)
cbind(gfit1$coefficients, gfit2$coefficients)
## [,1] [,2]
## (Intercept) -2.77087932 -1.74808262
## Age50-59 0.41120398 0.59253917
## Age60 or older 1.62408303 1.61214689
## Ageless than 40 -1.68935773 -1.74881721
## GenderMale 0.48706126 0.75499209
## Family_Diabetesyes 1.00919861 1.10013745
## highBPyes -0.85082885 -1.34929812
## PhysicallyActivenone 0.55513711 0.96937032
## PhysicallyActivemore than half an hr 0.85532299 1.24247791
## PhysicallyActive\t\nless than half an hr 1.68316752 1.65601454
## BMI 0.17735494 0.14903473
## Smokingyes 1.15528381 1.46817871
## Alcoholyes 0.09688630 -0.93616362
## Sleep 0.05860712 0.13708311
## SoundSleep 0.39536387 0.24376942
## RegularMedicineyes 2.97844459 3.18194151
## JunkFoodoccasionally 0.08808372 -0.59620345
## JunkFoodvery often 0.25582142 -0.68203158
## JunkFoodalways 0.04005097 -0.80432089
## Stresssometimes -0.03268509 -0.09683845
## Stressvery often -0.53932026 -0.66670031
## Stressalways -0.32951273 -0.76141479
## BPLevelhigh -15.08887804 -15.55244810
## BPLevellow -1.47618023 -1.88078889
## Pregancies 0.32210269 0.41273999
## Pdiabetesyes 4.01651629 5.09624708
## UriationFreqquite often 0.43749258 0.41011844
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 185 20
## yes 16 51
##
## Accuracy : 0.8676
## 95% CI : (0.8215, 0.9056)
## No Information Rate : 0.739
## P-Value [Acc > NIR] : 1.799e-07
##
## Kappa : 0.6506
##
## Mcnemar's Test P-Value : 0.6171
##
## Sensitivity : 0.9204
## Specificity : 0.7183
## Pos Pred Value : 0.9024
## Neg Pred Value : 0.7612
## Prevalence : 0.7390
## Detection Rate : 0.6801
## Detection Prevalence : 0.7537
## Balanced Accuracy : 0.8194
##
## 'Positive' Class : no
##
Interpretación
Reference
Prediction no yes
no 185 20
yes 16 51
Accuracy: 0.8676 (86.76%): La proporción de predicciones correctas sobre el total de predicciones.
Intervalo de Confianza (95% CI): (0.8215, 0.9056): El intervalo de confianza del 95% para la precisión.
No Information Rate: 0.739: La tasa de no información, es decir, la precisión que se lograría prediciendo siempre la clase más frecuente.
P-Value [Acc > NIR]: 1.799e-07: El valor p para la significancia estadística de la precisión en comparación con la tasa de no información.
Kappa: 0.6506: Una medida de concordancia que tiene en cuenta la probabilidad de coincidir por casualidad.
Sensibilidad (Recall): 0.9204: La proporción de positivos reales que fueron correctamente identificados por el modelo.
Especificidad: 0.7183: La proporción de negativos reales que fueron correctamente identificados por el modelo.
Pos Pred Value (Precision): 0.9024: La proporción de predicciones positivas correctas entre todas las predicciones positivas.
Neg Pred Value: 0.7612: La proporción de predicciones negativas correctas entre todas las predicciones negativas. Interpretación:
La precisión global del modelo es del 86.76%, lo que significa que el 86.76% de las predicciones fueron correctas.
La sensibilidad (Recall) es del 92.04%, lo que indica que el modelo es efectivo para identificar la clase “no” (negativa).
La especificidad es del 71.83%, lo que indica que el modelo es menos efectivo para identificar la clase “yes” (positiva).
El valor predicho positivo (Precision) es del 90.24%, lo que significa que el 90.24% de las predicciones positivas fueron correctas.
El modelo parece ser bastante bueno para predecir la clase “no” (negativa), pero tiene cierta dificultad para predecir la clase “yes” (positiva), como se evidencia por la menor especificidad. Esto puede deberse a un desequilibrio en la distribución de clases o a la necesidad de ajustar los umbrales de decisión del modelo. Además, la sensibilidad y la especificidad pueden proporcionar información adicional sobre cómo el modelo se desempeña en diferentes aspectos de la clasificación.
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.
Las máquinas de soporte vectorial (Support Vector Machines o SVM, por sus siglas en inglés) son un tipo de algoritmo de aprendizaje supervisado utilizado para clasificación y regresión. Están fundamentadas en la teoría del aprendizaje estadístico y la optimización convexa. La idea principal detrás de las SVM es encontrar el hiperplano que mejor separa las clases en un espacio de características de alta dimensión.
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: 265
##
## ( 132 133 )
##
##
## 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: 265
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”).
A continuación predecimos los valores de la respuesta y calculamos:
# Ajustar un modelo SVM con kernel Radial
predictedSVM <- predict(fitsvm1, val.diabet)
matrizSVM1 <- confusionMatrix(val.diabet$Diabetic, predictedSVM)
matrizSVM1
## Confusion Matrix and Statistics
##
## Reference
## Prediction no yes
## no 196 9
## yes 14 53
##
## Accuracy : 0.9154
## 95% CI : (0.8758, 0.9456)
## No Information Rate : 0.7721
## P-Value [Acc > NIR] : 3.803e-10
##
## Kappa : 0.7664
##
## Mcnemar's Test P-Value : 0.4042
##
## Sensitivity : 0.9333
## Specificity : 0.8548
## Pos Pred Value : 0.9561
## Neg Pred Value : 0.7910
## Prevalence : 0.7721
## Detection Rate : 0.7206
## Detection Prevalence : 0.7537
## Balanced Accuracy : 0.8941
##
## 'Positive' Class : no
##
Interpretación
Prediction no yes
no 196 9
yes 14 53
Accuracy: 0.9154 (91.54%): La proporción de predicciones correctas sobre el total de predicciones.
Intervalo de Confianza (95% CI): (0.8758, 0.9456): El intervalo de confianza del 95% para la precisión.
No Information Rate: 0.7721: La tasa de no información, es decir, la precisión que se lograría prediciendo siempre la clase más frecuente.
P-Value [Acc > NIR]: 3.803e-10: El valor p para la significancia estadística de la precisión en comparación con la tasa de no información.
Kappa: 0.7664: Una medida de concordancia que tiene en cuenta la probabilidad de coincidir por casualidad.
Sensibilidad (Recall): 0.9333: La proporción de positivos reales que fueron correctamente identificados por el modelo.
Especificidad: 0.8548: La proporción de negativos reales que fueron correctamente identificados por el modelo. Pos Pred Value (Precision): 0.9561: La proporción de predicciones positivas correctas entre todas las predicciones positivas.
Neg Pred Value: 0.7910: La proporción de predicciones negativas correctas entre todas las predicciones negativas.
La precisión global del modelo es del 91.54%, lo que indica que el 91.54% de las predicciones fueron correctas. La sensibilidad (Recall) es del 93.33%, lo que indica que el modelo es eficaz para identificar la clase “no” (negativa).
La especificidad es del 85.48%, lo que indica que el modelo es efectivo para identificar la clase “yes” (positiva). El valor predicho positivo (Precision) es del 95.61%, lo que significa que el 95.61% de las predicciones positivas fueron correctas.
El modelo parece tener un buen rendimiento, con una alta precisión y buenas métricas de sensibilidad y especificidad. La sensibilidad indica que el modelo es capaz de identificar la mayoría de los casos positivos, mientras que la especificidad sugiere que también es bueno identificando los casos negativos. Estas métricas equilibradas sugieren un modelo robusto para la clasificación en este caso particular.
# Ajustar un modelo SVM con kernel polinómico
fitsvm2 <- svm(Diabetic ~ ., data = Train.diabet, kernel = "polynomial")
summary(fitsvm2)
##
## Call:
## svm(formula = Diabetic ~ ., data = Train.diabet, kernel = "polynomial")
##
##
## Parameters:
## SVM-Type: C-classification
## SVM-Kernel: polynomial
## cost: 1
## degree: 3
## coef.0: 0
##
## Number of Support Vectors: 386
##
## ( 202 184 )
##
##
## Number of Classes: 2
##
## Levels:
## no yes
predictedSVM2 <- predict(fitsvm2, newdata = val.diabet)
matrizSVM2 <- confusionMatrix(val.diabet$Diabetic, predictedSVM2)
print(matrizSVM2)
## Confusion Matrix and Statistics
##
## Reference
## Prediction no yes
## no 203 2
## yes 51 16
##
## Accuracy : 0.8051
## 95% CI : (0.753, 0.8505)
## No Information Rate : 0.9338
## P-Value [Acc > NIR] : 1
##
## Kappa : 0.3038
##
## Mcnemar's Test P-Value : 4.301e-11
##
## Sensitivity : 0.7992
## Specificity : 0.8889
## Pos Pred Value : 0.9902
## Neg Pred Value : 0.2388
## Prevalence : 0.9338
## Detection Rate : 0.7463
## Detection Prevalence : 0.7537
## Balanced Accuracy : 0.8441
##
## 'Positive' Class : no
##
Interpretación
Prediction no yes
no 203 2
yes 51 16
Accuracy: 0.8051 (80.51%): La proporción de predicciones correctas sobre el total de predicciones.
Intervalo de Confianza (95% CI): (0.753, 0.8505): El intervalo de confianza del 95% para la precisión.
No Information Rate: 0.9338: La tasa de no información, es decir, la precisión que se lograría prediciendo siempre la clase más frecuente.
P-Value [Acc > NIR]: 1: El valor p para la significancia estadística de la precisión en comparación con la tasa de no información.
Kappa: 0.3038: Una medida de concordancia que tiene en cuenta la probabilidad de coincidir por casualidad.
Sensibilidad (Recall): 0.7992: La proporción de positivos reales que fueron correctamente identificados por el modelo.
Especificidad: 0.8889: La proporción de negativos reales que fueron correctamente identificados por el modelo.
Pos Pred Value (Precision): 0.9902: La proporción de predicciones positivas correctas entre todas las predicciones positivas.
Neg Pred Value: 0.2388: La proporción de predicciones negativas correctas entre todas las predicciones negativas.
La precisión global del modelo es del 80.51%, lo que indica que el 80.51% de las predicciones fueron correctas.
La sensibilidad (Recall) es del 79.92%, lo que indica que el modelo es capaz de identificar el 79.92% de los casos positivos.
La especificidad es del 88.89%, lo que indica que el modelo es eficaz para identificar el 88.89% de los casos negativos.
El valor predicho positivo (Precision) es del 99.02%, lo que significa que el 99.02% de las predicciones positivas fueron correctas.
Aunque la precisión global es del 80.51%, el valor predicho positivo es muy alto (99.02%). Esto sugiere que el modelo tiende a predecir la clase “no” de manera precisa, pero tiene dificultades al predecir la clase “yes”.
La sensibilidad relativamente baja indica que el modelo podría pasar por alto algunos casos positivos.
La especificidad es alta, lo que indica que el modelo es bueno para identificar casos negativos.
Dado el desequilibrio en la prevalencia de las clases (No Information Rate: 93.38%), es posible que las métricas no sean las más apropiadas para evaluar el rendimiento del modelo. Dependiendo del contexto, puede ser útil explorar otras métricas o ajustar los umbrales de clasificación.
# Ajustar un modelo SVM con kernel lineal
fitsvm3 <- svm(Diabetic ~ ., data = Train.diabet, kernel = "linear")
summary(fitsvm3)
##
## Call:
## svm(formula = Diabetic ~ ., data = Train.diabet, kernel = "linear")
##
##
## Parameters:
## SVM-Type: C-classification
## SVM-Kernel: linear
## cost: 1
##
## Number of Support Vectors: 195
##
## ( 98 97 )
##
##
## Number of Classes: 2
##
## Levels:
## no yes
predictedSVM3 <- predict(fitsvm3, newdata = val.diabet)
matrizSVM3 <- confusionMatrix(val.diabet$Diabetic, predictedSVM3)
print(matrizSVM3)
## Confusion Matrix and Statistics
##
## Reference
## Prediction no yes
## no 186 19
## yes 16 51
##
## Accuracy : 0.8713
## 95% CI : (0.8256, 0.9087)
## No Information Rate : 0.7426
## P-Value [Acc > NIR] : 1.512e-07
##
## Kappa : 0.6586
##
## Mcnemar's Test P-Value : 0.7353
##
## Sensitivity : 0.9208
## Specificity : 0.7286
## Pos Pred Value : 0.9073
## Neg Pred Value : 0.7612
## Prevalence : 0.7426
## Detection Rate : 0.6838
## Detection Prevalence : 0.7537
## Balanced Accuracy : 0.8247
##
## 'Positive' Class : no
##
Interpretación:
Prediction no yes
no 186 19
yes 16 51
Accuracy: 0.8713 (87.13%): La proporción de predicciones correctas sobre el total de predicciones.
Intervalo de Confianza (95% CI): (0.8256, 0.9087): El intervalo de confianza del 95% para la precisión.
No Information Rate: 0.7426: La tasa de no información, es decir, la precisión que se lograría prediciendo siempre la clase más frecuente.
P-Value [Acc > NIR]: 1.512e-07: El valor p para la significancia estadística de la precisión en comparación con la tasa de no información.
Kappa: 0.6586: Una medida de concordancia que tiene en cuenta la probabilidad de coincidir por casualidad.
Sensibilidad (Recall): 0.9208: La proporción de positivos reales que fueron correctamente identificados por el modelo.
Especificidad: 0.7286: La proporción de negativos reales que fueron correctamente identificados por el modelo.
Pos Pred Value (Precision): 0.9073: La proporción de predicciones positivas correctas entre todas las predicciones positivas.
Neg Pred Value: 0.7612: La proporción de predicciones negativas correctas entre todas las predicciones negativas.
La precisión global del modelo es del 87.13%, lo que indica que el 87.13% de las predicciones fueron correctas.
La sensibilidad (Recall) es del 92.08%, lo que indica que el modelo es capaz de identificar el 92.08% de los casos positivos.
La especificidad es del 72.86%, lo que indica que el modelo es efectivo para identificar el 72.86% de los casos negativos.
El valor predicho positivo (Precision) es del 90.73%, lo que significa que el 90.73% de las predicciones positivas fueron correctas.
La sensibilidad alta sugiere que el modelo es bueno para identificar casos positivos.
La especificidad, aunque no tan alta como la sensibilidad, es razonable.
El valor predicho positivo es elevado, indicando que cuando el modelo predice “yes”, suele ser preciso.
El modelo parece tener un rendimiento sólido en la clasificación, con un equilibrio razonable entre sensibilidad y especificidad. La alta sensibilidad indica que el modelo es bueno para identificar casos positivos, mientras que la alta especificidad sugiere que es eficaz en la identificación de casos negativos. La interpretación final dependerá del contexto específico de la aplicación y de los costos asociados con los errores de clasificación.
# Ajustar un modelo SVM con kernel sigmoidal
fitsvm4 <- svm(Diabetic ~ ., data = Train.diabet, kernel = "sigmoid")
summary(fitsvm4)
##
## Call:
## svm(formula = Diabetic ~ ., data = Train.diabet, kernel = "sigmoid")
##
##
## Parameters:
## SVM-Type: C-classification
## SVM-Kernel: sigmoid
## cost: 1
## coef.0: 0
##
## Number of Support Vectors: 281
##
## ( 140 141 )
##
##
## Number of Classes: 2
##
## Levels:
## no yes
predictedSVM4<- predict(fitsvm4, newdata = val.diabet)
matrizSVM4 <- confusionMatrix(val.diabet$Diabetic, predictedSVM4)
print(matrizSVM4)
## Confusion Matrix and Statistics
##
## Reference
## Prediction no yes
## no 186 19
## yes 16 51
##
## Accuracy : 0.8713
## 95% CI : (0.8256, 0.9087)
## No Information Rate : 0.7426
## P-Value [Acc > NIR] : 1.512e-07
##
## Kappa : 0.6586
##
## Mcnemar's Test P-Value : 0.7353
##
## Sensitivity : 0.9208
## Specificity : 0.7286
## Pos Pred Value : 0.9073
## Neg Pred Value : 0.7612
## Prevalence : 0.7426
## Detection Rate : 0.6838
## Detection Prevalence : 0.7537
## Balanced Accuracy : 0.8247
##
## 'Positive' Class : no
##
Interpretación
Prediction no yes
no 186 19
yes 16 51
Accuracy: 0.8713 (87.13%): La proporción de predicciones correctas sobre el total de predicciones.
Intervalo de Confianza (95% CI): (0.8256, 0.9087): El intervalo de confianza del 95% para la precisión.
No Information Rate: 0.7426: La tasa de no información, es decir, la precisión que se lograría prediciendo siempre la clase más frecuente.
P-Value [Acc > NIR]: 1.512e-07: El valor p para la significancia estadística de la precisión en comparación con la tasa de no información.
Kappa: 0.6586: Una medida de concordancia que tiene en cuenta la probabilidad de coincidir por casualidad.
Sensibilidad (Recall): 0.9208: La proporción de positivos reales que fueron correctamente identificados por el modelo.
Especificidad: 0.7286: La proporción de negativos reales que fueron correctamente identificados por el modelo.
Pos Pred Value (Precision): 0.9073: La proporción de predicciones positivas correctas entre todas las predicciones positivas.
Neg Pred Value: 0.7612: La proporción de predicciones negativas correctas entre todas las predicciones negativas.
La precisión global del modelo es del 87.13%, lo que indica que el 87.13% de las predicciones fueron correctas.
La sensibilidad (Recall) es del 92.08%, lo que indica que el modelo es capaz de identificar el 92.08% de los casos positivos.
La especificidad es del 72.86%, lo que indica que el modelo es efectivo para identificar el 72.86% de los casos negativos.
El valor predicho positivo (Precision) es del 90.73%, lo que significa que el 90.73% de las predicciones positivas fueron correctas.
El modelo parece tener un rendimiento sólido en la clasificación, con un equilibrio razonable entre sensibilidad y especificidad. La alta sensibilidad indica que el modelo es bueno para identificar casos positivos, mientras que la alta especificidad sugiere que es eficaz en la identificación de casos negativos. La interpretación final dependerá del contexto específico de la aplicación y de los costos asociados con los errores de clasificación.
Accuracy <- c(matrizLogis$overall[1], matrizSVM1$overall[1], matrizSVM2$overall[1], matrizSVM3$overall[1], matrizSVM4$overall[1])
names(Accuracy)= c("Logística", "SVM-RADIAL", "SVM-POLYNOMIAL", "SVM-SIGMODAL", "SVM-LINEAL")
Accuracy
## Logística SVM-RADIAL SVM-POLYNOMIAL SVM-SIGMODAL SVM-LINEAL
## 0.8676471 0.9154412 0.8051471 0.8713235 0.8713235
Interpretación:
Logística: 86.77%
La regresión logística tiene una precisión del 86.77%, lo que significa que aproximadamente el 86.77% de las predicciones fueron correctas.
SVM con kernel radial (RBF): 91.54%
El modelo SVM con kernel radial tiene una precisión del 91.54%, lo que indica que aproximadamente el 91.54% de las predicciones fueron correctas.
SVM con kernel polinómico: 80.51%
El modelo SVM con kernel polinómico tiene una precisión del 80.51%, lo que significa que aproximadamente el 80.51% de las predicciones fueron correctas.
SVM con kernel sigmoidal: 87.13%
El modelo SVM con kernel sigmoidal tiene una precisión del 87.13%, lo que indica que aproximadamente el 87.13% de las predicciones fueron correctas.
SVM con kernel lineal: 87.13%
El modelo SVM con kernel lineal tiene una precisión del 87.13%, similar a la del modelo SVM con kernel sigmoidal. En resumen, en función de las tasas de precisión proporcionadas:
SVM con kernel radial tiene la precisión más alta.
La regresión logística y los modelos SVM con kernel sigmoidal y lineal tienen tasas de precisión similares. SVM con kernel polinómico muestra la precisión más baja entre los modelos mencionados.
library(neuralnet)
require(neuralnet)
Train <- data.frame(Train.diabet$Diabetic, model.matrix(Diabetic~.,data=Train.diabet)[,-1])
colnames(Train)[1]="Diabetic"
nn1 <- neuralnet(Diabetic~.,data = Train,hidden = 3,act.fct="logistic",linear.output = FALSE)
plot(nn1, main="Redes Neuronales")
library(caret)
Validate <- data.frame(val.diabet$Diabetic, model.matrix(Diabetic~., data = val.diabet)[,-1])
colnames(Validate)[1]="Diabetic"
Predict <- compute(nn1, Validate)
predictedNN1 <- factor(Predict$net.result[,1]>0.5, labels = c("no", "yes"))
matrizNN1 <- confusionMatrix(val.diabet$Diabetic, predictedNN1)
matrizNN1
## Confusion Matrix and Statistics
##
## Reference
## Prediction no yes
## no 5 200
## yes 58 9
##
## Accuracy : 0.0515
## 95% CI : (0.0284, 0.0849)
## No Information Rate : 0.7684
## P-Value [Acc > NIR] : 1
##
## Kappa : -0.491
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.07937
## Specificity : 0.04306
## Pos Pred Value : 0.02439
## Neg Pred Value : 0.13433
## Prevalence : 0.23162
## Detection Rate : 0.01838
## Detection Prevalence : 0.75368
## Balanced Accuracy : 0.06121
##
## 'Positive' Class : no
##
Interpretación
Prediction no yes
no 5 200
yes 58 9
La clase “Positive” (Positiva) se ha definido como “no”.
El modelo tiene un rendimiento muy bajo, ya que la precisión es muy baja, y otras métricas también indican dificultades para distinguir entre las clases. Además, el valor kappa negativo sugiere que el modelo es peor que un modelo aleatorio. Es necesario revisar y ajustar el modelo para mejorar el rendimiento.
La matriz de confusión muestra la comparación entre las predicciones del modelo y las referencias reales. En este caso, la precisión es muy baja, con un valor de 0.0515, lo que indica que el modelo tiene dificultades para predecir con precisión.
El valor de Kappa también es negativo, lo que sugiere un desempeño deficiente del modelo. Además, la sensibilidad y la especificidad son muy bajas, lo que indica que el modelo tiene dificultades para identificar tanto los verdaderos positivos como los verdaderos negativos. En resumen, este modelo tiene un rendimiento muy pobre.
library(caret)
library(neuralnet)
require(neuralnet)
nn1 <- neuralnet(Diabetic ~., data = Train, hidden = c(5, 3), act.fct = "logistic", linear.output = FALSE)
plot(nn1)
Predict1 <- compute(nn1, Validate)
predictedNN2 <- factor(Predict1$net.result[,1]>0.5, labels = c("no", "yes"))
matrizNN2 <- confusionMatrix(val.diabet$Diabetic, predictedNN2)
matrizNN2
## Confusion Matrix and Statistics
##
## Reference
## Prediction no yes
## no 8 197
## yes 59 8
##
## Accuracy : 0.0588
## 95% CI : (0.034, 0.0938)
## No Information Rate : 0.7537
## P-Value [Acc > NIR] : 1
##
## Kappa : -0.497
##
## Mcnemar's Test P-Value : <2e-16
##
## Sensitivity : 0.11940
## Specificity : 0.03902
## Pos Pred Value : 0.03902
## Neg Pred Value : 0.11940
## Prevalence : 0.24632
## Detection Rate : 0.02941
## Detection Prevalence : 0.75368
## Balanced Accuracy : 0.07921
##
## 'Positive' Class : no
##
Interpretación
Esta predicción sobre las redes nueronales no es la mejor prediccion por lo que se utiliza otros métodos de predicción.
Prediction no yes
no 8 197
yes 59 8
La clase “Positive” (Positiva) se ha definido como “no”.
Al igual que el modelo anterior, este modelo también muestra un rendimiento muy bajo. La precisión es baja, y otras métricas indican dificultades para distinguir entre las clases. El valor kappa negativo sugiere que el modelo es peor que un modelo aleatorio. Es necesario revisar y ajustar el modelo para mejorar su rendimiento.
#NAIVE BAYES
library(e1071)
fitbayes <- naiveBayes(Diabetic~., data = Train.diabet)
summary(fitbayes)
## Length Class Mode
## apriori 2 table numeric
## tables 17 -none- list
## levels 2 -none- character
## isnumeric 17 -none- logical
## call 4 -none- call
# predict output
predictedbayes <- predict(fitbayes, val.diabet)
matrizNB <- confusionMatrix(val.diabet$Diabetic, predictedbayes)
matrizNB
## Confusion Matrix and Statistics
##
## Reference
## Prediction no yes
## no 175 30
## yes 19 48
##
## Accuracy : 0.8199
## 95% CI : (0.7689, 0.8637)
## No Information Rate : 0.7132
## P-Value [Acc > NIR] : 3.363e-05
##
## Kappa : 0.5402
##
## Mcnemar's Test P-Value : 0.1531
##
## Sensitivity : 0.9021
## Specificity : 0.6154
## Pos Pred Value : 0.8537
## Neg Pred Value : 0.7164
## Prevalence : 0.7132
## Detection Rate : 0.6434
## Detection Prevalence : 0.7537
## Balanced Accuracy : 0.7587
##
## 'Positive' Class : no
##
Interpretación
Prediction no yes
no 175 30
yes 19 48
El modelo tiene una precisión decente, pero es tambien importante analizar otras métricas para evaluar su rendimiento en detalle o aumentar mas precision en el modelo.
#ÁRBOL DE DECISION
library(tree)
tree1 <- tree(Diabetic~., data =Train.diabet)
summary(tree1)
##
## Classification tree:
## tree(formula = Diabetic ~ ., data = Train.diabet)
## Variables actually used in tree construction:
## [1] "RegularMedicine" "Pdiabetes" "Age" "Stress"
## [5] "SoundSleep" "UriationFreq" "PhysicallyActive" "Alcohol"
## [9] "Family_Diabetes" "BMI" "Sleep"
## Number of terminal nodes: 21
## Residual mean deviance: 0.3115 = 190.9 / 613
## Misclassification error rate: 0.05836 = 37 / 634
plot(tree1)
text(tree1, pretty =1)
Interpretación
Variables Utilizadas en la Construcción del Árbol:
Las siguientes variables fueron utilizadas para construir el árbol:
RegularMedicine
Pdiabetes
Age
Stress
SoundSleep
UriationFreq
PhysicallyActive
Alcohol
Family_Diabetes
BMI
Sleep
El árbol de clasificación tiene 21 nodos terminales. Cada nodo terminal representa una región en la que se hace una predicción.
La desviación media residual es 0.3115, lo que indica la dispersión promedio de los datos respecto a las predicciones del modelo. En este caso, es 190.9, lo que significa que el modelo explica una buena cantidad de la variabilidad en los datos.
La tasa de error de clasificación incorrecta es 0.05836, lo que significa que el modelo clasifica incorrectamente el 5.836% de los casos en el conjunto de datos de entrenamiento.
El árbol de clasificación utiliza varias variables para hacer predicciones sobre la variable objetivo Diabetic. El hecho de que haya 21 nodos terminales sugiere que el árbol es relativamente profundo y puede estar capturando patrones complejos en los datos. La desviación media residual y la tasa de error de clasificación incorrecta proporcionan información sobre la calidad del ajuste del modelo a los datos de entrenamiento.
predictedtree1 <- predict(tree1, val.diabet, type = "class")
matriztree1 <- confusionMatrix(val.diabet$Diabetic, predictedtree1)
matriztree1
## Confusion Matrix and Statistics
##
## Reference
## Prediction no yes
## no 197 8
## yes 16 51
##
## Accuracy : 0.9118
## 95% CI : (0.8716, 0.9426)
## No Information Rate : 0.7831
## P-Value [Acc > NIR] : 1.257e-08
##
## Kappa : 0.7524
##
## Mcnemar's Test P-Value : 0.153
##
## Sensitivity : 0.9249
## Specificity : 0.8644
## Pos Pred Value : 0.9610
## Neg Pred Value : 0.7612
## Prevalence : 0.7831
## Detection Rate : 0.7243
## Detection Prevalence : 0.7537
## Balanced Accuracy : 0.8946
##
## 'Positive' Class : no
##
Interpretación
Prediction no yes
no 197 8
yes 16 51
La clase “Positive” (Positiva) se ha definido como “no”.
Este modelo tiene un rendimiento bastante bueno. La precisión es alta, y otras métricas también indican un buen rendimiento en la clasificación. La sensibilidad y especificidad son altas, y el valor kappa sugiere una concordancia sustancial entre las predicciones del modelo y las predicciones aleatorias ajustadas.
Los árboles con muchas ramas, tiene alta varianza asi que necesario podar
#PODAR
cv.tree1 <- cv.tree(tree1, FUN = prune.misclass)
cv.tree1
## $size
## [1] 21 18 16 11 8 7 6 3 2 1
##
## $dev
## [1] 65 65 64 62 63 67 88 90 114 196
##
## $k
## [1] -Inf 0.0 1.0 1.8 2.0 5.0 7.0 8.0 22.0 84.0
##
## $method
## [1] "misclass"
##
## attr(,"class")
## [1] "prune" "tree.sequence"
plot(cv.tree1)
Interpretación
$size:
Representa el tamaño del árbol de decisión podado en cada paso.
Los valores son: 21, 18, 16, 11, 8, 7, 6, 3, 2, 1.
Sugiere que el árbol se poda en cada paso, disminuyendo en tamaño.
$dev:
Posiblemente representa la desviación del modelo en cada paso.
Los valores son: 70, 70, 68, 64, 63, 74, 89, 93, 112, 196.
La desviación es una medida de la bondad de ajuste de un modelo. Valores más pequeños generalmente indican un mejor ajuste.
$k:
Puede representar un parámetro de complejidad utilizado en la poda del árbol.
Los valores son: -Inf, 0.0, 1.0, 1.8, 2.0, 5.0, 7.0, 8.0, 22.0, 84.0.
Estos valores parecen aumentar gradualmente, sugiriendo un cambio en la complejidad durante la poda.
$method:
Esto especifica el método de poda utilizado, y en este caso, es “misclass” (clasificación errónea).
“Misclass” probablemente se refiere al error de clasificación como criterio para la poda.
attr(,“class”):
Indica la clase o tipo del objeto.
En este caso, es un “prune” y “tree.sequence.”
El resultado de un proceso de poda de un árbol de decisión. El árbol comienza con un cierto tamaño y, en cada paso, se poda en función del error de clasificación hasta que alcanza un tamaño de 1. Los valores de desviación dan una indicación del ajuste del modelo en cada paso. Los valores $k pueden representar un parámetro de complejidad, y “misclass” es el método utilizado para la poda.
prune.tree1 <- prune.misclass(tree1, best = 10)
plot(prune.tree1)
text(prune.tree1, pretty = 0)
predictedtree2 <- predict(prune.tree1, val.diabet, type ="class")
matriztree2 <- confusionMatrix(val.diabet$Diabetic, predictedtree2)
matriztree2
## Confusion Matrix and Statistics
##
## Reference
## Prediction no yes
## no 192 13
## yes 22 45
##
## Accuracy : 0.8713
## 95% CI : (0.8256, 0.9087)
## No Information Rate : 0.7868
## P-Value [Acc > NIR] : 0.0002243
##
## Kappa : 0.637
##
## Mcnemar's Test P-Value : 0.1762964
##
## Sensitivity : 0.8972
## Specificity : 0.7759
## Pos Pred Value : 0.9366
## Neg Pred Value : 0.6716
## Prevalence : 0.7868
## Detection Rate : 0.7059
## Detection Prevalence : 0.7537
## Balanced Accuracy : 0.8365
##
## 'Positive' Class : no
##
#RAMAS A 5
prune.tree2 <- prune.misclass(tree1, best = 5)
plot(prune.tree2)
text(prune.tree2, pretty = 0)
predictedtree3 <- predict(prune.tree2, val.diabet, type ="class")
matriztree3 <- confusionMatrix(val.diabet$Diabetic, predictedtree3)
matriztree3
## Confusion Matrix and Statistics
##
## Reference
## Prediction no yes
## no 191 14
## yes 27 40
##
## Accuracy : 0.8493
## 95% CI : (0.8011, 0.8896)
## No Information Rate : 0.8015
## P-Value [Acc > NIR] : 0.02584
##
## Kappa : 0.5657
##
## Mcnemar's Test P-Value : 0.06092
##
## Sensitivity : 0.8761
## Specificity : 0.7407
## Pos Pred Value : 0.9317
## Neg Pred Value : 0.5970
## Prevalence : 0.8015
## Detection Rate : 0.7022
## Detection Prevalence : 0.7537
## Balanced Accuracy : 0.8084
##
## 'Positive' Class : no
##
Interpretación
mientras menos ramas se pone en la predicción disminuye mas por lo tanto no mejora
#RAMAS 15
prune.tree3 <- prune.misclass(tree1, best = 15)
plot(prune.tree3)
text(prune.tree3, pretty = 0)
predictedtree4 <- predict(prune.tree3, val.diabet, type ="class")
matriztree4 <- confusionMatrix(val.diabet$Diabetic, predictedtree4)
matriztree4
## Confusion Matrix and Statistics
##
## Reference
## Prediction no yes
## no 192 13
## yes 17 50
##
## Accuracy : 0.8897
## 95% CI : (0.8463, 0.9243)
## No Information Rate : 0.7684
## P-Value [Acc > NIR] : 2.327e-07
##
## Kappa : 0.6969
##
## Mcnemar's Test P-Value : 0.5839
##
## Sensitivity : 0.9187
## Specificity : 0.7937
## Pos Pred Value : 0.9366
## Neg Pred Value : 0.7463
## Prevalence : 0.7684
## Detection Rate : 0.7059
## Detection Prevalence : 0.7537
## Balanced Accuracy : 0.8562
##
## 'Positive' Class : no
##
Interprtación
Mientras mas ramas se de al árbol los niveles de predicción se mejoran mucho
#RAMDOM FOREST
library(randomForest)
## randomForest 4.7-1.1
## Type rfNews() to see new features/changes/bug fixes.
##
## Attaching package: 'randomForest'
## The following object is masked from 'package:gridExtra':
##
## combine
## The following object is masked from 'package:ggplot2':
##
## margin
fitRF <- randomForest(Diabetic~., data = Train.diabet, ntree=500)
summary(fitRF)
## Length Class Mode
## call 4 -none- call
## type 1 -none- character
## predicted 634 factor numeric
## err.rate 1500 -none- numeric
## confusion 6 -none- numeric
## votes 1268 matrix numeric
## oob.times 634 -none- numeric
## classes 2 -none- character
## importance 17 -none- numeric
## importanceSD 0 -none- NULL
## localImportance 0 -none- NULL
## proximity 0 -none- NULL
## ntree 1 -none- numeric
## mtry 1 -none- numeric
## forest 14 -none- list
## y 634 factor numeric
## test 0 -none- NULL
## inbag 0 -none- NULL
## terms 3 terms call
# predict output
predictedRF <- predict(fitRF, val.diabet)
matrizRF1 <- confusionMatrix(val.diabet$Diabetic, predictedRF)
matrizRF1
## Confusion Matrix and Statistics
##
## Reference
## Prediction no yes
## no 200 5
## yes 9 58
##
## Accuracy : 0.9485
## 95% CI : (0.9151, 0.9716)
## No Information Rate : 0.7684
## P-Value [Acc > NIR] : 4.633e-16
##
## Kappa : 0.8585
##
## Mcnemar's Test P-Value : 0.4227
##
## Sensitivity : 0.9569
## Specificity : 0.9206
## Pos Pred Value : 0.9756
## Neg Pred Value : 0.8657
## Prevalence : 0.7684
## Detection Rate : 0.7353
## Detection Prevalence : 0.7537
## Balanced Accuracy : 0.9388
##
## 'Positive' Class : no
##
importance(fitRF)
## MeanDecreaseGini
## Age 47.996445
## Gender 4.847399
## Family_Diabetes 10.942331
## highBP 7.969586
## PhysicallyActive 15.932822
## BMI 20.336674
## Smoking 1.582601
## Alcohol 4.221527
## Sleep 12.078554
## SoundSleep 14.328307
## RegularMedicine 56.264017
## JunkFood 6.266867
## Stress 15.764495
## BPLevel 16.423671
## Pregancies 11.551984
## Pdiabetes 5.105988
## UriationFreq 4.936928
varImpPlot(fitRF)
Interpretación
Pos Pred Value (Valor predictivo positivo): 0.9485 - Esto significa que cuando el modelo predice la clase “no” (positivo), hay un 97.56% de probabilidad de que realmente sea “no”. Es una métrica positiva que sugiere una buena capacidad del modelo para identificar verdaderos positivos.
Neg Pred Value (Valor predictivo negativo): 0.8657 - Esto significa que cuando el modelo predice la clase “yes” (negativo), hay un 86.57% de probabilidad de que realmente sea “yes”. Es una métrica positiva para la capacidad del modelo para identificar verdaderos negativos.
Prevalence (Prevalencia): 0.7684 - La prevalencia de la clase “no” es del 76.84%, lo que indica que la mayoría de las instancias pertenecen a la clase “no”.
Detection Rate (Tasa de detección): 0.7353 - La tasa de detección es del 73.53%, lo que sugiere que el modelo está detectando correctamente alrededor del 73.53% de los casos positivos.
Detection Prevalence (Prevalencia de detección): 0.7537 - La prevalencia de detección es del 75.37%, lo que indica la frecuencia con la que se detectan los casos positivos.
Balanced Accuracy (Precisión equilibrada): 0.9388 - Una medida equilibrada que tiene en cuenta tanto los verdaderos positivos como los verdaderos negativos. Un valor de 0.9388 es bastante alto y sugiere un buen rendimiento general del modelo.
‘Positive’ Class (Clase ‘positiva’): La clase considerada como positiva es “no”.
MeanDecreaseGini (Disminución media de Gini): Estos son los valores que indican la importancia relativa de cada característica para la clasificación. Características con valores más altos son más importantes. Por ejemplo, “RegularMedicine” tiene un valor bastante alto, lo que sugiere que es una característica clave para la clasificación. “Gender” y “Smoking” tienen valores más bajos, lo que indica una importancia relativamente menor en este contexto.
El modelo tiene un buen rendimiento en la clasificación, con altas tasas de valor predictivo positivo y negativo, así como una precisión equilibrada significativamente alta. La importancia de las características proporciona información sobre qué variables están contribuyendo más al rendimiento del modelo.
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