diabetes2 <- read.csv("diabetes2.txt", sep=";")
head(diabetes2)
Age Gender Family_Diabetes highBP PhysicallyActive BMI Smoking
20 less than 40 Male yes no one hr or more 22 no
258 less than 40 Male yes no one hr or more 22 no
511 60 or older Female yes no none 26 no
907 less than 40 Male yes no more than half an hr 19 yes
582 60 or older Male no no more than half an hr 23 no
726 40-49 Male no no less than half an hr 26 yes
Alcohol Sleep SoundSleep RegularMedicine JunkFood Stress BPLevel
20 no 8 6 no often not at all normal
258 no 8 6 no often not at all normal
511 no 7 7 no occasionally sometimes normal
907 yes 7 5 no occasionally not at all normal
582 yes 7 6 yes occasionally very often high
726 no 8 7 no occasionally sometimes normal
Pregancies Pdiabetes UriationFreq Diabetic
20 0 0 not much no
258 0 0 not much no
511 3 0 not much no
907 0 0 not much no
582 0 0 quite often yes
726 0 0 not much no
View(diabetes2)
str(diabetes2)
'data.frame': 906 obs. of 18 variables:
$ Age : chr "less than 40" "less than 40" "60 or older" "less than 40" ...
$ Gender : chr "Male" "Male" "Female" "Male" ...
$ Family_Diabetes : chr "yes" "yes" "yes" "yes" ...
$ highBP : chr "no" "no" "no" "no" ...
$ PhysicallyActive: chr "one hr or more" "one hr or more" "none" "more than half an hr" ...
$ BMI : int 22 22 26 19 23 26 26 23 22 38 ...
$ Smoking : chr "no" "no" "no" "yes" ...
$ Alcohol : chr "no" "no" "no" "yes" ...
$ Sleep : int 8 8 7 7 7 8 8 7 6 8 ...
$ SoundSleep : int 6 6 7 5 6 7 3 7 2 6 ...
$ RegularMedicine : chr "no" "no" "no" "no" ...
$ JunkFood : chr "often" "often" "occasionally" "occasionally" ...
$ Stress : chr "not at all" "not at all" "sometimes" "not at all" ...
$ BPLevel : chr "normal" "normal" "normal" "normal" ...
$ Pregancies : int 0 0 3 0 0 0 0 1 0 0 ...
$ Pdiabetes : chr "0" "0" "0" "0" ...
$ UriationFreq : chr "not much" "not much" "not much" "not much" ...
$ Diabetic : chr "no" "no" "no" "no" ...
IMPORTACION DE LIBRERIAS
library(ggplot2)
Warning: package 'ggplot2' was built under R version 4.3.2
library(gridExtra)
La diabetes tipo 2 representa un desafĆo global de salud pĆŗblica con consecuencias significativas para la calidad de vida de millones de personas. La prevalencia en constante aumento y las implicaciones en tĆ©rminos de morbimortalidad hacen imperativo desarrollar enfoques eficaces para la detección temprana y la gestión efectiva de esta enfermedad crónica. En este contexto, el uso de mĆ©todos avanzados de clasificación de aprendizaje automĆ”tico se presenta como una herramienta prometedora para mejorar la precisión en la predicción de la diabetes tipo 2.
La elección de mĆ©todos de clasificación especĆficos, como Support Vector Machines (SVM), Random Forest, Gradient Boosting, y Redes Neuronales, se fundamenta en su capacidad para manejar conjuntos de datos complejos y extraer patrones no lineales, caracterĆsticas esenciales en el anĆ”lisis de datos mĆ©dicos. La comparación y evaluación de estos mĆ©todos permitirĆ”n identificar cuĆ”l ofrece el rendimiento mĆ”s óptimo para el propósito de este estudio.
La calidad de los datos es un elemento crĆtico en la efectividad de los modelos de aprendizaje automĆ”tico. En este sentido, se prestarĆ” especial atención a la selección y preparación de conjuntos de datos representativos, considerando variables relevantes como la historia clĆnica, factores genĆ©ticos, y hĆ”bitos de vida. AdemĆ”s, se implementarĆ”n tĆ©cnicas de validación cruzada y otras estrategias de evaluación para garantizar la fiabilidad y generalización de los modelos desarrollados.
Edad Tipo: Numérica. Descripción: La edad del individuo en años. La diabetes tipo 2 tiende a aumentar con la edad, y este factor es esencial para evaluar el riesgo.
Ćndice de Masa Corporal (IMC): Tipo: NumĆ©rica. Descripción: El IMC, calculado a partir del peso y la altura del individuo, es un indicador de la obesidad. La obesidad estĆ” fuertemente asociada con la diabetes tipo 2.
Nivel de Glucosa en Ayunas: Tipo: NumĆ©rica. Descripción: La concentración de glucosa en la sangre despuĆ©s de un perĆodo de ayuno. Valores elevados pueden indicar resistencia a la insulina y predispone al individuo a la diabetes tipo 2.
Presión Arterial: Tipo: Numérica. Descripción: La presión arterial sistólica y diastólica, medidas en mmHg. La hipertensión arterial es un factor de riesgo independiente para la diabetes tipo 2.
Historial Familiar de Diabetes: Tipo: Categórica (SĆ/No). Descripción: Indica si hay antecedentes familiares de diabetes tipo 2. La genĆ©tica desempeƱa un papel crucial en la predisposición a la enfermedad.
6.Actividad FĆsica: Tipo: Categórica (Baja/Moderada/Alta). Descripción: Nivel de actividad fĆsica regular del individuo. La falta de actividad fĆsica estĆ” vinculada a un mayor riesgo de diabetes tipo 2.
7.Consumo de Alcohol: Tipo: Categórica (Bajo/Moderado/Alto). Descripción: La cantidad de alcohol consumida regularmente por el individuo. El consumo excesivo puede aumentar el riesgo de diabetes tipo 2.
Tabaquismo: Tipo: Categórica (SĆ/No). Descripción: Indica si el individuo es fumador. El tabaquismo se ha asociado con un mayor riesgo de diabetes tipo 2.
Niveles de Colesterol: Tipo: NumĆ©rica. Descripción: Concentración de colesterol total, HDL (lipoproteĆnas de alta densidad) y LDL (lipoproteĆnas de baja densidad). Desórdenes en estos niveles estĆ”n relacionados con la diabetes tipo 2.
Historial de Enfermedades CardĆacas: Tipo: Categórica (SĆ/No). Descripción: Indica si el individuo tiene antecedentes de enfermedades cardĆacas. Las enfermedades cardĆacas y la diabetes tipo 2 comparten factores de riesgo comunes.
Niveles de Insulina: Tipo: NumĆ©rica. Descripción: Concentración de insulina en la sangre. La resistencia a la insulina es una caracterĆstica clave en el desarrollo de la diabetes tipo 2.
Conversion de la variable edad
diabetes2$Age=factor(diabetes2$Age)
levels(diabetes2$Age)=c("40-49","50-59","60 or older","less than 40")
#Conversion de la variable GENERO
diabetes2$Gender=factor(diabetes2$Gender)
levels(diabetes2$Gender)=c("Male","Female")
#Conversion de la variable FAMILIA DIABETES
diabetes2$Family_Diabetes=factor(diabetes2$Family_Diabetes)
levels(diabetes2$Family_Diabetes)=c("yes","no")
#Conversion de la variable hipBP
diabetes2$highBP=factor(diabetes2$highBP)
levels(diabetes2$highBP)=c("yes","no")
#Conversion de la variable PhysicallyActive
diabetes2$PhysicallyActive=factor(diabetes2$PhysicallyActive)
levels(diabetes2$PhysicallyActive)=c("less than half an hr","More than half an hr","none","one hr or more")
#Conversion de la variable Smoking
diabetes2$Smoking=factor(diabetes2$Smoking)
levels(diabetes2$Smoking)=c("yes","no")
#Conversion de la variable Alcohol
diabetes2$Alcohol=factor(diabetes2$Alcohol)
levels(diabetes2$Alcohol)=c("yes","no")
#Conversion de la variable RegularMedicine
diabetes2$RegularMedicine=factor(diabetes2$RegularMedicine)
levels(diabetes2$RegularMedicine)=c("yes","no")
diabetes2$JunkFood=factor(diabetes2$JunkFood)
levels(diabetes2$JunkFood)=c("very often","
always","often","occasionally")
diabetes2$Stress=factor(diabetes2$Stress)
levels(diabetes2$Stress)=c("not at all","sometimes","very often","always")
#Conversion de la variable BPLevel
diabetes2$BPLevel=factor(diabetes2$BPLevel)
levels(diabetes2$BPLevel)=c("normal","high","low")
#Conversion de la variable UriationFreq
diabetes2$UriationFreq=factor(diabetes2$UriationFreq)
levels(diabetes2$UriationFreq)=c("not much","quite often")
BASE_na <- is.na(diabetes2)
classes <- sapply(diabetes2, class)
for (variable in names(classes)) {
cat("Variable:", variable, " - Clase:", classes[variable], "\n")
}
## Variable: Age - Clase: factor
## Variable: Gender - Clase: factor
## Variable: Family_Diabetes - Clase: factor
## Variable: highBP - Clase: factor
## Variable: PhysicallyActive - Clase: factor
## Variable: BMI - Clase: integer
## Variable: Smoking - Clase: factor
## Variable: Alcohol - Clase: factor
## Variable: Sleep - Clase: integer
## Variable: SoundSleep - Clase: integer
## Variable: RegularMedicine - Clase: factor
## Variable: JunkFood - Clase: factor
## Variable: Stress - Clase: factor
## Variable: BPLevel - Clase: factor
## Variable: Pregancies - Clase: integer
## Variable: Pdiabetes - Clase: character
## Variable: UriationFreq - Clase: factor
## Variable: Diabetic - Clase: character
#ANALISIS DESCRIPTIVO
MINIMO En un conjunto de datos es el número mÔs pequeño o la observación mÔs baja dentro de ese conjunto. Es uno de los resúmenes descriptivos bÔsicos que ayuda a entender la gama o dispersión de los datos.
1st QU El primer quintil, tambiƩn conocido como el quintil inferior o percentil 25, es el valor que separa el 20% inferior de un conjunto de datos ordenado de manera ascendente. En otras palabras, el primer quintil es el valor por debajo del cual cae el 25% de los datos. FORMULA \[Q1 = \frac{n+1}{4}\]
MEDIANA La mediana es una medida de tendencia central en estadĆsticas que se utiliza para representar el valor central de un conjunto de datos. Para calcular la mediana, primero debes ordenar los datos de menor a mayor (o viceversa) y luego encontrar el valor que se encuentra exactamente en el centro de la distribución. FORMULA NUMERO IMPAR DE DATOS \[M = Valor de la posicion (\frac{n+1}{2})\] NUMERO PAR DE DATOS \[M = Suma de los valores en las posiciones (\frac{n}{2})\] MEDIA Es una medida que representa el valor tĆpico o promedio de un conjunto de datos. Se calcula sumando todos los valores en el conjunto y dividiendo esa suma por el nĆŗmero total de elementos en el conjunto. FORMULA \[\bar{x} = \frac{\sum_{i=1_{}}^{N}xi}{N}\]
3RD QU Sefiere al valor que divide los tres cuartos superiores de un conjunto de datos ordenado. En tĆ©rminos mĆ”s especĆficos, el tercer cuartil representa el valor por debajo del cual se encuentra el 75% de los datos. \[Q1 = 3\frac{n+1}{5}\] Para calcular el tercer cuartil, primero debes ordenar el conjunto de datos de menor a mayor. Luego, divides los datos en cuatro partes iguales, y el tercer cuartil es el valor que se encuentra en el lĆmite entre el tercer y el cuarto cuartil. MatemĆ”ticamente, se suele denotar como Q3Q3. MAXIMO En un conjunto de datos se refiere al valor mĆ”s grande o a la observación mĆ”s alta dentro de ese conjunto.Calcular el valor mĆ”ximo es Ćŗtil para entender la variabilidad en un conjunto de datos y proporciona información sobre la parte superior de la distribución. Similar al valor mĆnimo, el valor mĆ”ximo puede ser sensible a valores atĆpicos o extremos, ya que un solo valor extremadamente alto puede afectar significativamente el valor mĆ”ximo.
summary(diabetes2[,classes=="integer"])
BMI Sleep SoundSleep Pregancies
Min. :15.00 Min. : 4.000 Min. : 0.000 Min. :0.0000
1st Qu.:21.00 1st Qu.: 6.000 1st Qu.: 4.000 1st Qu.:0.0000
Median :24.00 Median : 7.000 Median : 6.000 Median :0.0000
Mean :25.33 Mean : 6.976 Mean : 5.609 Mean :0.3819
3rd Qu.:28.00 3rd Qu.: 8.000 3rd Qu.: 7.000 3rd Qu.:0.0000
Max. :42.00 Max. :11.000 Max. :11.000 Max. :4.0000
apply(diabetes2[,classes=="integer"],2,sd)
BMI Sleep SoundSleep Pregancies
5.1399922 1.3042497 1.8435140 0.9090479
INTERPRETACION DE RESULTADOS
DESCRIPCION DE LA VARIABLE BMI Observamos personas con un minimo de 15,00 de grosor de la piel y un maximo de 42 mm de grosol de la piel con un promedio de 25,33 mm grosor de la piel y una mediana de 24,00 de grosor
DESCRIPCION DE LA VARIABLE SLEEP Observamos que las personas tienen sueƱo minimo 4 horas y un maximo de 11 horas, en promedio las personas tienen sueƱo casi 7 horas con una mediana de 7 horas, con un primer quiantil de 6 horas y un tercer quantil de 8 horas
DESCRIPCION DE LA VARIABLE SoundSleep Observamos que las personas tiene sueƱo profundo minimo o horas y un maximo de 11 horas, en promedio las personas tienen sueƱo profundo 5 horaa con una mediana de 6horas, con un primer quiantil de 4 horas y un tercer quantil de 7 horas
DESCRIPCION DE LA VARIABLE Pregancies
Se observa un minimo de 0 personas enbarazadas y un maximo de 4 personas
embarazadas con un promedio de 0,38 personas embarazadas y con un primer
quiantil de 0 y tercer quantil de 0.
DIAGRAMA DE BARRAS(GENERO,AGE,ACTIVIDAD FISICA,COMIDA CHATARRA) VARIABLE GENERO
ggplot(diabetes2, aes(x = Gender)) +
geom_bar(fill = "skyblue") +
labs(x = "Gender", title = "VARIABLE GENERO") +
theme_minimal()
VARIABLE EDAD
ggplot(diabetes2, aes(x = Age)) +
geom_bar(fill = "skyblue") +
labs(x = "Age", title = "VARIABLE EDAD") +
theme_minimal()
##DIAGRAMA DE DISPERSION (RELACION ENTRE BMI Y LAS HORAS DE SUEĆO)
qplot(BMI,Sleep, data = diabetes2, colour = Diabetic)
Warning: `qplot()` was deprecated in ggplot2 3.4.0.
This warning is displayed once every 8 hours.
Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
generated.
PARA IDENTIFICAR SI PUEDE EXISTER PRESENCIA DE DIABETES O NO, CON LA INFLUENCIA DE ESTOS DOS FACTORES
INTERPRETACION En la grafica se observa que no presenta tendencia de diabetes en cambio existe presencia de diabetes pero muy poco entre las dos variables sueƱo y grosol de la piel, pero si puede aver presencia de diabetes en personas exepcionales.
IDENTIFICAR QUE OTROS FACTORES PUEDEN INFLUIR EN LA PRESENCIA DE DIABETES
##DIAGRAMA DE DISPERSION (PhysicallyActive y Smoking )
qplot(PhysicallyActive
,Smoking, data = diabetes2, colour = Diabetic)
INTERPRETACION En la grafica se observa que no presenta tendencia de
diabetes en cambio existe presencia de diabetes pero muy escasa, entre
las realizar ejercicio y fumar, La influencia del ejercicio y el hƔbito
de fumar en la diabetes tipo 2 es significativa, ya que al realizar
ejercicio ayuda a la mejora de la sensibilidad a la insulina y la
regulacion de los niveles de glucosa
##DIAGRAMA DE DISPERSION (RELACION ENTRE Edad y ALcocol)
qplot(Age,Alcohol, data = diabetes2, colour = Diabetic)
INTERPRETACION Se observa que npo existe tendencia a a diabetes ya que
las personas de las edades encuestadas no son propensar a tener diabetes
por consumir alcochol.
##DIAGRAMA DE DISPERSION (RELACION ENTRE ESTRES Y COMIDA CHATARRA)
qplot(JunkFood,Stress, data = diabetes2, colour = Diabetic)
INTERPRETACION Se observa que no existe tendencia a diabetes,solo existe
un poco de tendencia entre la variable estres y comida chatarra a tener
deabetes.
##DIAGRAMA DE DISPERSION (ESTRES Y INGESTA DE MEDICAMENTOS)
qplot(Stress,RegularMedicine, data = diabetes2, colour = Diabetic)
INTERPRETACION Se observa que no existe tendencia a diabetes,solo existe un poco de tendencia entre la variable estres y ingesta de medicamento,pero puede ser que la disminuicion de ingesta de medicamento producca deabetes.
##DIAGRAMA DE DISPERSION (ESTRES Y INGESTA DE MEDICAMENTOS)
qplot(Alcohol,BPLevel, data = diabetes2, colour = Diabetic)
INTERPRETACION Se observa que no existe tendencia a diabetes,solo existe un poco de tendencia entre la variable embarazo y alcochol, por lo que se puede decir que muchas personas que estan embaradas no consumen alcohol.
Diabetic <- diabetes2$Diabetic
Pregancies <- diabetes2$Pregancies
P4 <- ggplot(diabetes2, aes(x=Diabetic,
y=Pregancies, color=Diabetic))+
geom_boxplot()
P4
BMI <- diabetes2$BMI
P5 <- ggplot(diabetes2, aes(x=Diabetic,
y=BMI, color=Diabetic))+
geom_boxplot()
P5
sleep <- diabetes2$Sleep
P5 <- ggplot(diabetes2, aes(x=Diabetic,
y=sleep, color=Diabetic))+
geom_boxplot()
P5
SoundSleep <- diabetes2$SoundSleep
P6 <- ggplot(diabetes2, aes(x=Diabetic,
y=sleep, color=Diabetic))+
geom_boxplot()
P6
grid.arrange(P4,P5,P6,nrow = 4, ncol =4)
library(ggmosaic)
Warning: package 'ggmosaic' was built under R version 4.3.2
q1 <- ggplot(data = diabetes2)+geom_mosaic(aes(x = product(Diabetic,Gender),fill = Diabetic))+ labs(x="Gender", title = "factores diabetes")
q1
Warning: `unite_()` was deprecated in tidyr 1.2.0.
ā¹ Please use `unite()` instead.
ā¹ The deprecated feature was likely used in the ggmosaic package.
Please report the issue at <https://github.com/haleyjeppson/ggmosaic>.
This warning is displayed once every 8 hours.
Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
generated.
q2 <- ggplot(data = diabetes2)+geom_mosaic(aes(x = product(Diabetic,Smoking),fill = Diabetic))+ labs(x="Smoking", title = "factores diabetes")
q2
q3 <- ggplot(data = diabetes2)+geom_mosaic(aes(x = product(Diabetic,Alcohol),fill = Diabetic))+ labs(x="Alcohol", title = "factores diabetes")
q3
q4 <- ggplot(data = diabetes2)+geom_mosaic(aes(x = product(Diabetic,Family_Diabetes),fill = Diabetic))+ labs(x="Family_Diabetes", title = "factores diabetes")
q4
q5 <- ggplot(data = diabetes2)+geom_mosaic(aes(x = product(Diabetic,highBP),fill = Diabetic))+ labs(x="highBP", title = "factores diabetes")
q5
q6 <- ggplot(data = diabetes2)+geom_mosaic(aes(x = product(Diabetic,PhysicallyActive),fill = Diabetic))+ labs(x="PhysicalluActive", title = "factores diabetes")
q6
q7 <- ggplot(data = diabetes2)+geom_mosaic(aes(x = product(Diabetic,RegularMedicine),fill = Diabetic))+ labs(x="RegularMedicine", title = "factores diabetes")
q7
q8 <- ggplot(data = diabetes2)+geom_mosaic(aes(x = product(Diabetic, JunkFood),fill = Diabetic))+ labs(x="junkfood", title = "factores diabetes")
q8
q9 <- ggplot(data = diabetes2)+geom_mosaic(aes(x = product(Diabetic, Stress),fill = Diabetic))+ labs(x="stress", title = "factores diabetes")
q9
q10 <- ggplot(data = diabetes2)+geom_mosaic(aes(x = product(Diabetic, BPLevel),fill = Diabetic))+ labs(x="BPlevel", title = "factores diabetes")
q10
q11 <- ggplot(data = diabetes2)+geom_mosaic(aes(x = product(Diabetic, UriationFreq),fill = Diabetic))+ labs(x="UriationFreq", title = "factores diabetes")
q11
q12 <- ggplot(data = diabetes2)+geom_mosaic(aes(x = product(Diabetic, Diabetic),fill = Diabetic))+ labs(x="diabetic", title = "factores diabetes")
q12
grid.arrange(q1,q2,q3,q4,q5,q6,q7,q8,q9,q10,q11,q12,nrow = 4, ncol =4)
library(GGally)
Warning: package 'GGally' was built under R version 4.3.2
Registered S3 method overwritten by 'GGally':
method from
+.gg ggplot2
Attaching package: 'GGally'
The following object is masked from 'package:ggmosaic':
happy
ggpairs(diabetes2[,classes=="integer"])+theme_bw()
Podemos observar que existe una correlación muy poca significativa entre BMI y la variable sleep
library(GGally)
p <- ggpairs(diabetes2[,c(which(classes=="integer"),18)], aes(color = diabetes2$Diabetic)) + theme_bw()
for (i in 1:p$nrow) {
for (j in 1:p$ncol) {
p[i,j] <- p[i,j] +
scale_fill_manual(values = c("#000AEB","#E7B800")) +
scale_color_manual(values = c("#000AEB","#E7B800"))
}
}
p
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
`stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Dividimos el conjunto completo de individuos en dos partes, una para entrenar el modelo, que contiene el 80% de los individuos y otra para validarlo que contiene el resto. esto es asi porque si valoramos el modelo con las misma observaciones que usamos para ajustarlo, la bondad del ajuste quedara sobrevalorada
Antes de ajustar cualquier modelo, es conveniente escalar las variables numericas y tenemos que reacondicionar las variables categoricas convirtiendolas en variables ficticias y usando la primera o la ultima categoria como comparación