# Cargar los datos
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.2.3
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# Para transformar la base de datos
library(readr)
## Warning: package 'readr' was built under R version 4.2.3
diabetes2 <- read.csv("C:/Users/CIENCIAS/Music/cuantitativo/diabetes2.txt",sep=";")
View(diabetes2)#View(diabetes2)
La diabetes mellitus (DM) es una enfermedad metabólica crónica, asociada al desarrollo de complicaciones irreversibles, invalidantes y aun mortales con notable afectación de la calidad de vida si el tratamiento es inadecuado y una condición básica para que lo sea, es que el paciente se adhiera al mismo, lo que solo puede conseguirse si el paciente interioriza lo que significa ser portador de la enfermedad, las potenciales complicaciones a las que está expuesto y entiende la racionalidad y riesgos del tratamiento. Para lograr todo esto se necesita que el paciente tenga conocimientos adecuados sobre la enfermedad.
Teniendo en cuenta la alta prevalencia de la DM la que varía según las regiones entre el 1% al 8 %, llegando en zonas como Piura y Lima a niveles alrededor de 7,04% (1,2) y dado el alto costo que representan las complicaciones crónicas para el paciente y para el sistema de salud se hace imprescindible evaluar el nivel de conocimientos que sobre la enfermedad tienen los pacientes, pues esa es la única forma de prevenir daño (3-6), con la consiguiente prevención de morbimortalidad y reducción de costos (7-10).
La diabetes, una enfermedad crónica en constante aumento, plantea desafíos significativos para la salud global. A medida que la prevalencia de la diabetes se dispara, especialmente en países en desarrollo, surge una preocupación urgente por comprender las causas subyacentes, desarrollar estrategias efectivas de prevención y tratamiento, y abordar las consecuencias socioeconómicas que acompañan a esta epidemia silenciosa. En este contexto, exploraremos [tema específico que abordará en tu trabajo] como un paso crucial hacia la comprensión y el manejo más efectivo de la diabetes, contribuyendo así a mejorar la calidad de vida de millones de personas en todo el mundo.
#Descripción de las variables
Edad= La edad de las personas que fueron diagnosticas. Genero = Esta variable indica si las personas son mujeres o hombres. Historia familiar con diabetes = Si alguien de su familia a sido diagnosticada anteriormente diabetes. Diagnosticado con presion arterial alta= Si cuenta con presion arterial alta o no Caminar/correr/estar = La variable indica si las personas caminan o tienen actividad fisica.
IMC= El índice de masa corporal (IMC) es un número que se calcula con base en el peso y la estatura de la persona.
Fumar= Las personas fuman o no y si es un indice para la enfermedad de diabetes
Consumo de alcohol = Las personas diagnosticas les preguntan si consumen o no alcohol.
Horas de sueño = Cuantas horas de sueño esta persona duerme.
Horas de sueño profundo = Horas de sueño sin tener que levantarse por alguna incomodidad.
Ingesta regular de ¿medicamento? = Esra varible indica si las personas estudiadas ingieren regularmente medicamentos o no
Consumo de comida chatarra = Estas personas diagnosticadas consumen o no comida chatarra.
Estrés = Ver el nivel de estres que presentan estan personas
Nivel de presión arterial= Saber cual es el nivel de presion arterial que tienen.
Numero de embarazos = Ver si las personas mujeres el numero de embarazos que han tenido.
Diabetes gestacional= La variable indica si tienen diabetes gestional o no
Frecuencia de orinar= Quieren determinar con que precuencias las personas van al baño a orinar.
Diabetico = Aqui ya muestra si esa persona es o no diabetica.
classes<-sapply(diabetes2,class);classes
## 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"
edadfactor<-factor(diabetes2$Age)
levels(edadfactor)=c("40-49","50-59","60 or older","less than 40")
class(edadfactor)
## [1] "factor"
generofactor<-factor(diabetes2$Gender)
levels(generofactor)=c("male","female")
class(generofactor)
## [1] "factor"
familydiabetes<-factor(diabetes2$Family_Diabetes)
levels(familydiabetes)=c("yes","no")
class(familydiabetes)
## [1] "factor"
highBP<-factor(diabetes2$highBP)
levels(highBP)=c("yes","no")
class(highBP)
## [1] "factor"
PhysicallyActive<-factor(diabetes2$PhysicallyActive)
levels(PhysicallyActive)=c("less than half an hr ","more than half an hr","none
","one hour or more")
class(PhysicallyActive)
## [1] "factor"
smoking<-factor(diabetes2$Smoking)
levels(smoking)=c("yes","no")
class(smoking)
## [1] "factor"
alcohol<-factor(diabetes2$Alcohol)
levels(alcohol)=c("yes","no")
class(alcohol)
## [1] "factor"
Medicina<-factor(diabetes2$RegularMedicine)
levels(Medicina)=c("yes","no")
class(Medicina)
## [1] "factor"
JunkFood<-factor(diabetes2$JunkFood)
levels(JunkFood)=c("often","occasionally","very often","always")
class(JunkFood)
## [1] "factor"
columnas_a_convertir <- c("Age", "Gender","Family_Diabetes","highBP","PhysicallyActive","Smoking","Alcohol","RegularMedicine","JunkFood","Stress","BPLevel","UriationFreq","Diabetic","Pdiabetes")
mi_data <- diabetes2 %>%
mutate_at(vars(columnas_a_convertir), as.factor)
## Warning: Using an external vector in selections was deprecated in tidyselect 1.1.0.
## ℹ Please use `all_of()` or `any_of()` instead.
## # Was:
## data %>% select(columnas_a_convertir)
##
## # Now:
## data %>% select(all_of(columnas_a_convertir))
##
## See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
str(mi_data)
## '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 "less than half an hr",..: 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 "always","occasionally",..: 3 3 2 2 2 2 2 3 3 2 ...
## $ Stress : Factor w/ 4 levels "always","not at all",..: 2 2 3 2 4 3 3 4 2 4 ...
## $ BPLevel : Factor w/ 3 levels "high","low","normal": 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 ...
hay_na <- any(is.na(mi_data))
print(hay_na)
## [1] FALSE
La media aritmética es una medida estadística que se utiliza para calcular el valor promedio de un conjunto de datos. Se obtiene sumando todos los valores y dividiendo la suma entre la cantidad de valores en el conjunto. También se le conoce como promedio o media. La media aritmética tiene varias propiedades interesantes. Una de ellas es que si los números tienen media μ, entonces la suma de las desviaciones de los números respecto a la media es igual a cero. Esto significa que los números a la izquierda de la media están equilibrados por los números a la derecha.
\(\bar{X}=\frac{\sum_{i=1}^{n}x_{i}}{n}\)
La desviación típica, también conocida como desviación estándar, es una medida estadística que indica cuánto tienden a alejarse los valores individuales de un conjunto de datos respecto a la media. Es una medida de dispersión que nos permite entender la variabilidad de los datos.
\(\sigma =\sqrt{\frac{\sum_{i}^{N}(x_{i}-\bar{x})^{2}}{N}}\)
Los cuartiles son valores que dividen un conjunto de datos en cuatro partes iguales. Son una medida estadística utilizada para evaluar rápidamente la dispersión y la tendencia central de un conjunto de datos. Los cuartiles más comunes son:
Primer cuartil (Q1): El 25% de los datos es menor o igual a este valor.
\(Q_{1}=L+\frac{(\frac{N}{4}-F)*c}{f}\)
Donde:
Q1 es el primer cuartil. L es el límite inferior de la clase del cuartil. N es el número total de datos en el conjunto. F es la frecuencia acumulada de la clase anterior al cuartil. c es la amplitud de la clase. f es la frecuencia de la clase del cuartil.
Segundo cuartil (Q2): También conocido como la mediana, el 50% de los datos es menor o igual a este valor.
\(Q_{1}=L+\frac{(\frac{N}{2}-F)*c}{f}\)
Donde:
Q2 es el primer cuartil. L es el límite inferior de la clase del cuartil. N es el número total de datos en el conjunto. F es la frecuencia acumulada de la clase anterior al cuartil. c es la amplitud de la clase. f es la frecuencia de la clase del cuartil.
Tercer cuartil (Q3): El 75% de los datos es menor o igual a este valor.
\(Q_{1}=L+\frac{(\frac{3N}{4}-F)*c}{f}\)
Donde:
Q3 es el tercer cuartil. L es el límite inferior de la clase del cuartil. N es el número total de datos en el conjunto. F es la frecuencia acumulada de la clase anterior al cuartil. c es la amplitud de la clase. f es la frecuencia de la clase del cuartil.
Classes<- sapply(mi_data,class)
Classes
## Age Gender Family_Diabetes highBP
## "factor" "factor" "factor" "factor"
## PhysicallyActive BMI Smoking Alcohol
## "factor" "integer" "factor" "factor"
## Sleep SoundSleep RegularMedicine JunkFood
## "integer" "integer" "factor" "factor"
## Stress BPLevel Pregancies Pdiabetes
## "factor" "factor" "integer" "factor"
## UriationFreq Diabetic
## "factor" "factor"
summary(mi_data[,Classes=="integer"])
## BMI Sleep SoundSleep Pregancies
## Min. :15.00 Min. : 4.000 Min. : 0.000 Min. :0.0000
## 1st Qu.:21.00 1st Qu.: 6.000 1st Qu.: 4.000 1st Qu.:0.0000
## Median :24.00 Median : 7.000 Median : 6.000 Median :0.0000
## Mean :25.33 Mean : 6.976 Mean : 5.609 Mean :0.3819
## 3rd Qu.:28.00 3rd Qu.: 8.000 3rd Qu.: 7.000 3rd Qu.:0.0000
## Max. :42.00 Max. :11.000 Max. :11.000 Max. :4.0000
sd(mi_data$BMI)
## [1] 5.139992
sd(mi_data$Sleep)
## [1] 1.30425
sd(mi_data$SoundSleep)
## [1] 1.843514
sd(mi_data$Pregancies)
## [1] 0.9090479
El valor mínimo del índice de masa corporal (IMC) es de 15. Esto indica que la persona está en la categoría de bajo peso.
El primer cuartil del IMC es de 21. Esto significa que el 25% de las personas tienen un IMC igual o menor a 21. Se considera que un IMC de 21 está dentro de una categoría de peso saludable.
La mediana del IMC es de 24. Esto indica que el 50% de las personas tienen un IMC igual o menor a 24. Un IMC de 24 también se considera dentro de una categoría de peso saludable.
El tercer cuartil del IMC es de 28. Esto significa que el 75% de las personas tienen un IMC igual o menor a 28. Un IMC de 28 está en la categoría de sobrepeso.
La media del IMC es de 25.3. La media representa el valor promedio del IMC en la muestra. Un IMC de 25.3 también está dentro de una categoría de peso saludable.
El valor máximo del IMC es de 42. Esto indica que al menos una persona en la muestra tiene un IMC de 42, lo cual está en la categoría de obesidad.
Una desviación estándar de 5.139992 significa que los valores individuales en el conjunto de datos tienden a estar dispersos o alejados del promedio en una cantidad aproximada de 5.139992 unidades.
Los valores proporcionados sugieren que la mayoría de las personas en la muestra tienen un IMC dentro de una categoría de peso saludable, aunque también hay personas con sobrepeso y obesidad.
El valor mínimo de horas de sueño es de 4. Esto indica que al menos una persona en la muestra duerme solo 4 horas, lo cual se considera insuficiente y puede afectar negativamente la salud y el bienestar.
El primer cuartil del sueño es de 6 horas. Esto significa que el 25% de las personas en la muestra duermen 6 horas o menos. También se considera que menos de 6 horas de sueño es insuficiente para la mayoría de las personas.
La mediana del sueño es de 7 horas. Esto indica que el 50% de las personas en la muestra duermen 7 horas o menos. Aunque 7 horas pueden considerarse un sueño adecuado para algunas personas, es importante tener en cuenta las necesidades individuales de sueño, ya que pueden variar.
El tercer cuartil del sueño es de 8 horas. Esto significa que el 75% de las personas en la muestra duermen 8 horas o menos. Se considera que 8 horas de sueño es una cantidad adecuada para la mayoría de las personas adultas.
La media del sueño es de 6.976 horas. La media representa el valor promedio de horas de sueño en la muestra. Aunque la media es ligeramente inferior a 7 horas, es importante destacar que la mediana es de 7 horas, lo que indica que hay una distribución equilibrada de horas de sueño en la muestra.
El valor máximo de horas de sueño es de 11. Esto indica que al menos una persona en la muestra duerme 11 horas, lo cual puede considerarse una cantidad más alta de sueño.
Una desviación estándar de 1.30425 significa que los valores individuales en el conjunto de datos tienden a estar relativamente cerca del promedio, con una dispersión o variabilidad de aproximadamente 1.30425 unidades.
El valor mínimo en este conjunto de datos es 0. Esto indica que al menos un elemento del conjunto tiene un valor de 0.
El primer cuartil, también conocido como el percentil 25, es 4. Esto significa que el 25% de los valores del conjunto de datos son menores o iguales a 4.
La mediana es 6. La mediana es el valor que se encuentra en el medio del conjunto de datos cuando se ordenan de menor a mayor. Esto significa que el 50% de los valores del conjunto son menores o iguales a 6.
La media, también conocida como promedio, es 5.609. La media se calcula sumando todos los valores del conjunto y dividiéndolos por la cantidad de elementos. En este caso, la media es 5.609, lo que indica que el promedio de los valores del conjunto es aproximadamente 5.609.
El tercer cuartil, también conocido como el percentil 75, es 7. Esto significa que el 75% de los valores del conjunto de datos son menores o iguales a 7.
El valor máximo en este conjunto de datos es 11. Esto indica que al menos un elemento del conjunto tiene un valor de 11.
La desviación estándar es una medida de la dispersión o variabilidad de los valores del conjunto. En este caso, la desviación estándar es 1.843514, lo que indica que los valores individuales tienden a dispersarse alrededor de la media de 5.609.
## Interpretacion Pregancies
El valor mínimo en este conjunto de datos es 0. Esto indica que al menos un elemento del conjunto tiene un valor de 0, lo que significa que hay mujeres en el conjunto de datos que no han tenido embarazos.
El primer cuartil, también conocido como el percentil 25, es 0. Esto significa que el 25% de los valores del conjunto de datos son menores o iguales a 0, lo que indica que una parte significativa de las mujeres en el conjunto de datos no ha tenido embarazos.
La mediana es 0. La mediana es el valor que se encuentra en el medio del conjunto de datos cuando se ordenan de menor a mayor. En este caso, la mediana es 0, lo que indica que el 50% de los valores del conjunto son menores o iguales a 0. Esto sugiere que la mayoría de las mujeres en el conjunto de datos no han tenido embarazos.
La media, también conocida como promedio, es 0.3819. La media se calcula sumando todos los valores del conjunto y dividiéndolos por la cantidad de elementos. En este caso, la media es 0.3819, lo que indica que el promedio de los valores del conjunto es aproximadamente 0.3819. Esto sugiere que, en promedio, las mujeres en el conjunto de datos han tenido aproximadamente 0.3819 embarazos.
El tercer cuartil, también conocido como el percentil 75, es 0. Esto significa que el 75% de los valores del conjunto de datos son menores o iguales a 0, lo que indica que la mayoría de las mujeres en el conjunto de datos no han tenido embarazos.
El valor máximo en este conjunto de datos es 4. Esto indica que al menos un elemento del conjunto tiene un valor de 4, lo que significa que hay mujeres en el conjunto de datos que han tenido hasta 4 embarazos.
La desviación estándar es una medida de la dispersión o variabilidad de los valores del conjunto. En este caso, la desviación estándar es 0.9090479, lo que indica que los valores individuales tienden a dispersarse alrededor de la media de 0.3819. Sin embargo, dado que la media es cercana a cero y la desviación estándar es relativamente baja, esto sugiere que la mayoría de las mujeres en el conjunto de datos no han tenido embarazos o han tenido muy pocos.
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.2.3
library(gridExtra)
## Warning: package 'gridExtra' was built under R version 4.2.3
##
## Attaching package: 'gridExtra'
## The following object is masked from 'package:dplyr':
##
## combine
g1<- ggplot(mi_data,aes(x=Age))+ geom_bar(stat="count",width=0.7,fill="steelblue")+theme_minimal()
g2<- ggplot(mi_data,aes(x=Gender))+ geom_bar(stat="count",width=0.7,fill="blue")+theme_minimal()
g3<- ggplot(mi_data,aes(x=PhysicallyActive))+ geom_bar(stat="count",width=0.7,fill="red")+theme_minimal()
g4<- ggplot(mi_data,aes(x=JunkFood))+ geom_bar(stat="count",width=0.7,fill="green")+theme_minimal()
grid.arrange(g1,g2,g3,g4,nrow=2,ncol=2)
En la primera grafica se muestra que existe mayor presencia en personas menores a 40 años, la gran mayoria son hombres, ocasionalmente consumen comida chatarra y no son muy activabas fisicamente.
qplot(BMI,Sleep, data=mi_data,colour=Diabetic)
## Warning: `qplot()` was deprecated in ggplot2 3.4.0.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
En el grafico de dispersion con las varibles indice de masa corporal con las horas de dormir se observa que ahi mas afluencia de person que no presentan diabetes.
qplot(Sleep, Family_Diabetes , data=mi_data,colour=Diabetic)
Las variables horas de dormir y los familiares que hallan tenido diabetes se puede ver una gran mayoria que si padecen de diabetes es decir estas dos variables no influyen en que las personas tengan diabetes.
qplot(BMI,Alcohol, data=mi_data,colour=Diabetic)
Las variables indice de masa coorporal y alcohol son dos variables que segun el grafico que podemos que ya aumentan las persona que pueden tener diabetes esto indica que son variables mas significatibas con respecto a esta enfermedad.
qplot(BMI, Age , data=mi_data,colour=Diabetic)
La variable indice de masa coorporal y la edad si son variables significativas al momento de detectar a las personas que tienen diabetes las personas que estan en la edad promedio de 60 años.
qplot(BPLevel,Sleep, data=mi_data,colour=Diabetic)
El nivel de precio arterial y las horas de dormir de una person no es tan significativa al momento de padecer diabetes en este caso la mayoria de personas no tienen diabetes.
qplot(highBP,Sleep, data=mi_data,colour=Diabetic)
La hipertension y las horas de dormir presentan una significancia alta ya que podemos observar que aumentaron las personas que si tienen diabetes esto quiere que las personas que no duermen bien y tienen hipertencion son propensas a tener diabetes.
e1<- ggplot(mi_data,aes(x=Diabetic, y=BMI, color= Diabetic))+ geom_boxplot()
e2<- ggplot(mi_data,aes(x=Diabetic, y=Sleep, color= Diabetic))+ geom_boxplot()
e3<- ggplot(mi_data,aes(x=Diabetic, y=SoundSleep, color= Diabetic))+ geom_boxplot()
e4<- ggplot(mi_data,aes(x=Diabetic, y=Pregancies, color= Diabetic))+ geom_boxplot()
grid.arrange(e1,e2,e3,e4,nrow=2,ncol=2)
Mediante la grafica de cajas de la variable BMI(indice de masa corporal) se observa que existen datos atipicos en las personas que no tienen diabetes tambien se puede identificar que existe mayor presencia de las personas que si tienen diabetes.
La grafica de cajas de observa que no existen datos atipicos en las personas que no tienen diabetes ni tampoco en las que si tienen diabtes y se observa que la media de ambas esta que esta en las personas que duermen alrededor de 7 horas.
En los dos diagramas de cajas de las personas que tienen y que no tienen diabetes podemos observar que no existen datos atipicos, con respecto a las personas que no tienen diabetes se obseva que el bigote inferior significa que los datos en la parte inferior de la distribución son más dispersos o tienen más variabilidad que los datos en la parte superior.
En las personas que no padecen de diabetes se puede observar que existen valores atipicos son observaciones que están significativamente fuera del rango esperado de la mayoría de los datos. Estos valores pueden proporcionar información valiosa sobre la distribución de los datos y destacar puntos que difieren significativamente del resto. La mayoría de los datos tiende a ser menor que la mediana, lo que sugiere un sesgo hacia la parte inferior de la distribución.La mediana está en la parte inferior y apenas visible, hay una concentración significativa de datos en la parte inferior de la distribución.
library(ggmosaic)
## Warning: package 'ggmosaic' was built under R version 4.2.3
library(gridExtra)
q1 <- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, Age),
fill = Diabetic)) + labs(x = "Age", title = "Factores_Diabetes")
q2 <- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, Gender),
fill = Diabetic)) + labs(x = "Gender", title = "Factores_Diabetes")
q3 <- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, Family_Diabetes),
fill = Diabetic)) + labs(x = "Family_Diabetes", title = "Factores_Diabetes")
q4 <- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, highBP),
fill = Diabetic)) + labs(x = "highBP", title = "Factores_Diabetes")
q5 <- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, PhysicallyActive),
fill = Diabetic)) + labs(x = "PhysicallyActive", title = "Factores_Diabetes")
q6 <- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, Smoking),
fill = Diabetic)) + labs(x = "Smoking", title = "Factores_Diabetes")
q7 <- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, Alcohol),
fill = Diabetic)) + labs(x = "Alcohol", title = "Factores_Diabetes")
q8 <- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, RegularMedicine),
fill = Diabetic)) + labs(x = "RegularMedicine", title = "Factores_Diabetes")
q9 <- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, JunkFood),
fill = Diabetic)) + labs(x = "JunkFood", title = "Factores_Diabetes")
q10 <- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, Stress),
fill = Diabetic)) + labs(x = "Stress", title = "Factores_Diabetes")
q11 <- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, BPLevel),
fill = Diabetic)) + labs(x = "BPLevel", title = "Factores_Diabetes")
q12 <- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, Pdiabetes),
fill = Diabetic)) + labs(x = "Pdiabetes", title = "Factores_Diabetes")
q13 <- ggplot(data = diabetes2)+
geom_mosaic(aes(x= product(Diabetic, UriationFreq),
fill = Diabetic)) + labs(x = "UriationFreq", title = "Factores_Diabetes")
grid.arrange(q1,q2,q3,q4,q5, q6, q7, q8, q9, q10, q11, q12, q13, nrow=4,ncol=4)
## Warning: `unite_()` was deprecated in tidyr 1.2.0.
## ℹ Please use `unite()` instead.
## ℹ The deprecated feature was likely used in the ggmosaic package.
## Please report the issue at <https://github.com/haleyjeppson/ggmosaic>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
En lo graficos de mosaico vamos a observar si estan variables son significativas al momento de identificar con estas variables las personas tienen o no diabetes en este caso todas las variables son importantes para identificar si las personas tienen diabetes y se puede determinar que las personas no tienen diabetes ## Grafico multivariante GGally
library(GGally)
## Warning: package 'GGally' was built under R version 4.2.3
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
##
## Attaching package: 'GGally'
## The following object is masked from 'package:ggmosaic':
##
## happy
ggpairs(mi_data[,Classes=="integer"])+theme_bw()
p<-ggpairs(mi_data[,c(which(Classes=="integer"),18)],aes(color=Diabetic))+theme_bw()
for (i in 1:p$nrow) {
for (j in 1:p$ncol) {
p[i,j]<- p[i,j]+
scale_fill_manual(values = c("blue","yellow"))+
scale_color_manual(values = c("blue","yellow"))
}
}
p
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
La correlación negativa sugiere que, en general, a medida que el BMI tiende a aumentar, las horas de dormir tienden a disminuir ligeramente. Sin embargo, la magnitud de la correlación (-0.073) indica que esta relación es bastante débil. Dado que la correlación es débil, es probable que la relación entre el BMI y las horas de dormir no sea muy significativa desde el punto de vista práctico.
Indica una relación moderada y negativa entre estas dos variables.La correlación negativa sugiere que, en general, a medida que el BMI aumenta, la calidad del sueño (dormir profundamente) tiende a disminuir.
Una correlación de -0.086 entre el índice de masa corporal (BMI) y el número de embarazos sugiere una relación muy débil y negativa entre estas dos variables la magnitud de -0.086 indica una relación débil entre el BMI y el número de embarazos. La correlación negativa sugiere que, en general, a medida que el BMI tiende a aumentar, hay una tendencia ligeramente negativa hacia un menor número de embarazos.
La correlación de 0.575 entre las horas de dormir y el sueño profundo indica una relación moderada y positiva entre estas dos variables. En otras palabras, hay una tendencia a que, a medida que aumentan las horas de dormir, también aumente la frecuencia o calidad del sueño profundo, y viceversa las variables están correlacionadas con la presencia o ausencia de diabetes. La correlación de 0.644 entre las horas de dormir y la diabetes y la correlación de 0.543 entre el sueño profundo y la diabetes indican asociaciones moderadas entre cada una de estas variables y la presencia de diabetes.
La correlación de 0.054 entre el embarazo y las horas de dormir indica una relación extremadamente débil y prácticamente nula entre estas dos variables. La magnitud tan baja sugiere que, en general, no hay una asociación apreciable entre la cantidad de horas de dormir y la variable de embarazo las variables están correlacionadas con la presencia o ausencia de diabetes. La correlación de 0.029 entre el embarazo y la diabetes y la correlación de 0.102 entre las horas de dormir y la diabetes indican asociaciones muy débiles entre cada una de estas variables y la presencia de diabetes.
La correlación de 0.117 entre el embarazo y el sueño profundo indica una relación débil y positiva entre estas dos variables. A medida que la variable de embarazo aumenta, hay una ligera tendencia a que también aumente la frecuencia o calidad del sueño profundo, y viceversa. Sin embargo, la magnitud de la correlación sugiere que esta relación es relativamente débil. Las variables están correlacionadas con la presencia o ausencia de diabetes. La correlación de 0.078 entre el embarazo y la diabetes y la correlación de 0.169 entre el sueño profundo y la diabetes indican asociaciones débiles entre cada una de estas variables y la presencia de diabetes.
Divideremos el conjunto completo de individuos en dos partes, uno para entrenar el modelo, que contiene el 80% de los individuos y otra para validarlo que contiene el resto. Esto es asi porque si valoramos el modelo con las misma observaciones que usamos para ajustarlo, la bondad del ajuste quedara sobrevalorada.
Antes de ajustar cualquier modelo, es conveniente escalar las variables numericas y tenemos que reacondicionar las variables categoricas convirtiendolas en variables ficticias y usando la primera o la ultima categorica como comparacion.
mi_data[, Classes=="integer"]=scale(mi_data[,Classes=="integer"])
head(mi_data)
X=model.matrix(Diabetic~.,data = mi_data)
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 PhysicallyActivemore than half an hr
## 20 1 0 0
## 258 1 0 0
## 511 1 0 0
## 907 1 0 1
## 582 0 0 1
## 726 0 0 0
## PhysicallyActivenone PhysicallyActiveone hr or more BMI Smokingyes
## 20 0 1 -0.6487242 0
## 258 0 1 -0.6487242 0
## 511 1 0 0.1294871 0
## 907 0 0 -1.2323826 1
## 582 0 0 -0.4541713 0
## 726 0 0 0.1294871 1
## Alcoholyes Sleep SoundSleep RegularMedicineyes JunkFoodoccasionally
## 20 0 0.78534240 0.2119477 0 0
## 258 0 0.78534240 0.2119477 0 0
## 511 0 0.01861803 0.7543900 0 1
## 907 1 0.01861803 -0.3304947 0 1
## 582 1 0.01861803 0.2119477 1 1
## 726 0 0.78534240 0.7543900 0 1
## JunkFoodoften JunkFoodvery often Stressnot at all Stresssometimes
## 20 1 0 1 0
## 258 1 0 1 0
## 511 0 0 0 1
## 907 0 0 1 0
## 582 0 0 0 0
## 726 0 0 0 1
## Stressvery often BPLevellow BPLevelnormal 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
Observar que las variables numericas reescaladas contienen los mismo valores iniciales. Cada una de las variables nominales ha sido convertida en variables binarias. El numero de variables binarias es siempre el numero de categorias de la variable nominal. Por ejemplo, la variable Gender (con dos categorias) ha sido convertida en GenderMale que es una variable numerica que vale 1 cuando el sexo es hombre y 0 cuando es mujjer.El resto de variables tambien son convertidas a Binarias con el numero de categorias que cada una almacena.Los parametros correspondientes a las categoricas retenidas comparan a estas con la categoria eliminada.
tr<-round(nrow(mi_data)*0.7)
set.seed(06071981)
muestra<- sample.int(nrow(mi_data),tr)
Train.diabet<- mi_data[muestra,]
Val.diabet<- mi_data[-muestra,]
Ahora disponemos de un conjunto de entrenamiento Train.diabet y un conjunto de validacion Val.diabet
Trataremos de modelar la probabilidad de DIABETES positica en funcion del resto de las variables.
El modelo logistico es
gfit1<-glm(Diabetic~.,data = mi_data, family = binomial)
summary(gfit1)
##
## Call:
## glm(formula = Diabetic ~ ., family = binomial, data = mi_data)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.2942 -0.3430 -0.1211 0.2687 3.0182
##
## 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 *
## PhysicallyActivemore than half an hr 0.55514 0.36247 1.532 0.125639
## PhysicallyActivenone 0.85532 0.38718 2.209 0.027165 *
## PhysicallyActiveone hr or more 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
## JunkFoodoften 0.25582 0.83663 0.306 0.759775
## JunkFoodvery often 0.04005 0.97557 0.041 0.967253
## Stressnot at all -0.03269 0.51891 -0.063 0.949776
## Stresssometimes -0.53932 0.39565 -1.363 0.172845
## Stressvery often -0.32951 0.45855 -0.719 0.472393
## BPLevellow -15.08888 758.75534 -0.020 0.984134
## BPLevelnormal -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
## ---
## 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
Los resultados dados son los coeficientes de un modelo estadístico. Cada coeficiente representa el efecto estimado de una variable predictiva sobre la variable de respuesta. Analicemos la información proporcionada:
Coeficientes: (Intersección) : La intersección estimada del modelo. En este caso, la intersección es -2,77088 con un error estándar de 1,08160. La intersección representa el valor esperado de la variable de respuesta cuando todas las variables predictoras son cero. Edad 50-59, Edad 60 o más, Edad menor de 40 : estas son variables ficticias que representan diferentes grupos de edad. Cada coeficiente representa el efecto estimado del grupo de edad correspondiente sobre la variable de respuesta. Por ejemplo, el coeficiente para “60 años o más” es 1,62408, lo que indica que estar en el grupo “60 años o más” se asocia con un aumento en la variable de respuesta. También se proporcionan los errores estándar de estos coeficientes. GenderMale : esta es una variable ficticia que representa el género. El coeficiente de 0,48706 sugiere que ser hombre se asocia con un aumento en la variable respuesta. También se proporciona el error estándar. Familia_Diabetes sí, presión arterial alta sí, físicamente activo más de media hora, físicamente activo una hora o más, físicamente activo una hora o más, IMC, tabaquismo sí, alcohol sí, sueño, sueño profundo, regular medicina ojos, comida chatarra ocasionalmente, comida chatarra a menudo, comida chatarra muy a menudo, estrés nada, estrés a veces, estrés muy a menudo, nivel de presión arterial bajo, nivel de presión arterial normal, embarazos , Pdiabetessí, UriationFreqbastante a menudo : estas son variables predictivas adicionales, cada una con su propio coeficiente y error estándar. La interpretación de estos coeficientes depende del contexto y de las variables específicas que representan. El error estándar (Std. Error) de cada coeficiente mide la precisión de la estimación. Un error estándar más pequeño indica una estimación más precisa. El valor p (Pr(>|z|)) asociado a cada coeficiente representa la probabilidad de observar un coeficiente tan extremo como el valor estimado, asumiendo la hipótesis nula de que el coeficiente verdadero es cero. Los valores de p más bajos indican evidencia más sólida contra la hipótesis nula.
Tenga en cuenta que la interpretación de estos coeficientes debe realizarse en el contexto del modelo estadístico específico y las variables que se utilizan
gfit0<-glm(Diabetic~1,data = mi_data,family = binomial)
anova(gfit0,gfit1,test="Chisq")
La diferencia es altamente significativa, es decir el modelo con todas las variables es significativamente mejor que el modelo solo con la constante. Mirando el test de Wald para la significacion de cada parametro individual vemos que son altamente significativos lo coeficientes para las variables “Age” , “Gender” , “Family_Diabetes” , “highBP” ,“PhysicallyActive”,“BMI” ," Smoking“,”Alcohol" , “Sleep” ." SoundSleep “,” RegularMedicine " ,“JunkFood”,“Stress”,“BPLevel” ," Pregancies “,” Pdiabetes" ," UriationFreq"
anova(gfit1,test="Chisq")
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
## PhysicallyActivemore than half an hr 0.55513711 0.96937032
## PhysicallyActivenone 0.85532299 1.24247791
## PhysicallyActiveone hr or more 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
## JunkFoodoften 0.25582142 -0.68203158
## JunkFoodvery often 0.04005097 -0.80432089
## Stressnot at all -0.03268509 -0.09683845
## Stresssometimes -0.53932026 -0.66670031
## Stressvery often -0.32951273 -0.76141479
## BPLevellow -15.08887804 -15.55244810
## BPLevelnormal -1.47618023 -1.88078889
## Pregancies 0.32210269 0.41273999
## Pdiabetesyes 4.01651629 5.09624708
## UriationFreqquite often 0.43749258 0.41011844
#Para la validacion de predicion
p<-predict(gfit2,Val.diabet,type="response")
PredDiabet<-as.factor(p>0.5)
levels(PredDiabet)<-c("no","yes")
library(lattice)
library(caret)
## Warning: package 'caret' was built under R version 4.2.3
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
##
library(pROC)
## Warning: package 'pROC' was built under R version 4.2.3
## 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
#
Otro modelo de clasificacion binaria es el conocido como Support vectorMachine (Maquina de vector soporte). Los paquetes que ajustan los modelos se SVM es e1071 y LiBLinear. Ajustamos el modelo para muestra datos con el kernel radical que es el que se usa por defecto.
Es un algoritmo de aprendizaje automático supervisado que se utiliza para problemas de clasificación o regresión. Es especialmente útil en problemas de clasificación, donde se tienen dos o más clases de datos etiquetados.
El objetivo de una SVM es encontrar un hiperplano óptimo que separe las clases en el espacio de características. Este hiperplano se define como el vector entre los dos puntos más cercanos de las dos clases, conocidos como vectores de soporte. Cuando se tienen nuevos ejemplos, se pueden clasificar según el lado del hiperplano en el que se encuentren. Pagina(338)
library(e1071)
## Warning: package 'e1071' was built under R version 4.2.3
fitsvmi<-svm(Diabetic~.,data = Train.diabet)
summary(fitsvmi)
##
## 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