RIESGO DE ENFERMEDADES EN ADULTOS JÓVENES

Avance 1

1. Descripción del conjunto de datos

El conjunto de datos que se va a trabajar se encuentra en la plataforma de datos Kaggle, en una investigación sobre disease risk from daily habits, de la cual se analizará la información de 1000 datos enfocada en una población de adultos jóvenes (18–25 años).

Se encuentran los hábitos diarios de distintas personas según su edad y género y cómo estos impactan en su vida, dando un diagnóstico final de si es saludable o enfermo.
Se trabajará con 14 variables, descritas a continuación.

🔗 Enlace de la base de datos:
https://www.kaggle.com/datasets/mahdimashayekhi/disease-risk-from-daily-habits


2. Variables

VARIABLE DESCRIPCIÓN TIPO ESCALA DE MEDICIÓN UNIDAD DE MEDICIÓN
Género Hombre / Mujer Cualitativa Nominal No aplica
Tipo de ejercicio Ninguno, Cardio, Fuerza, Combinado Cualitativa Nominal No aplica
Historia Familiar Historia de enfermedades familiares Cualitativa Nominal No aplica
Edad Edad del individuo Cuantitativa Razón Años
IMC Índice de masa corporal Cuantitativa Razón Kg/m²
Peso Peso por persona Cuantitativa Razón Kg
Ingesta de calorías Promedio de consumo de calorías diarias Cuantitativa Razón Kcal
Nivel de estrés Reporte de estrés diario (1–10) Cualitativa Ordinal No aplica
Ingesta de azúcar Ingesta de azúcar diaria Cuantitativa Razón g
Glucosa Nivel de glucosa en sangre Cuantitativa Razón mg/dL
Horas de sueño Promedio diario de horas de sueño Cuantitativa Razón Horas
Colesterol Nivel de colesterol Cuantitativa Razón mg/dL
Tipo de dieta Vegano, Vegetariano, Omnívoro, Keto, Paleo Cualitativa Nominal No aplica
Target Sano o no sano Cualitativa Nominal No aplica

Escala de medición

  • Nominal: Clasifica o identifica elementos en varias categorías sin orden específico.
    Ejemplo: color del cabello, equipos de fútbol.
  • Razón: Permite comparaciones con un cero absoluto.
    Ejemplo: altura, peso, edad.
  • Ordinal: Ordena categorías, pero sin distancias iguales entre ellas.
    Ejemplo: niveles de dolor, rendimiento académico.

3. Filtro de la base de datos

Se realizó un filtro de la base de datos principal con las variables seleccionadas y se obtuvieron los primeros 1000 datos correspondientes a adultos jóvenes (18–25 años).
No se presentaron inconsistencias, datos faltantes o errores en el filtro aplicado.

🔗 Enlace tabla Excel:
https://docs.google.com/spreadsheets/d/1_vrrkOleqCz-uCbpE63Bu7haUQA8HrSB/edit?usp=sharing&ouid=113576828640048076761&rtpof=true&sd=true


4. Análisis descriptivo

Variables cuantitativas

Variable Mínimo Máximo Promedio Mediana Desviación estándar
Edad 18 25 21.47 21 2.29
IMC 10.37 47.25 24.45 24.04 5.95
Peso 40 129.24 69.86 69.21 14.84
Ingesta de calorías 706.51 3455.74 2207.39 2208.24 387.16
Nivel de estrés 0 10 5.02 5 3.14
Ingesta de azúcar -4.53 142 61.1 60.01 19.35
Glucosa 25.36 157.82 99.95 99.53 20.25
Horas de sueño 3 11.20 6.98 7.01 1.49
Colesterol 100.42 288.54 189.40 189.86 31.51

Variables cualitativas

Variable Cantidad (%)
Género 516 mujeres (51.6%), 484 hombres (48.4%)
Tipo de ejercicio 255 cardio (25.5%), 238 combinado (23.8%), 245 ninguno (24.5%), 262 fuerza (26.2%)
Historia Familiar 512 no (51.2%), 488 sí (48.8%)
Tipo de dieta 224 keto (22.4%), 247 omnívoro (24.7%), 265 vegano (26.5%), 264 vegetariano (26.4%)
Target 293 enfermos (29.3%), 707 saludables (70.7%)

Interpretación general

La población analizada es predominantemente joven (21 años en promedio) con un IMC medio de 24.4, cercano al rango normal.
El peso promedio (69.8 kg) es coherente con esta tendencia.

El consumo calórico medio es de 2207 kcal, con gran variabilidad, y la ingesta de azúcar promedio (61 g) es elevada.
Los niveles de glucosa y colesterol se mantienen dentro de rangos normales, aunque los valores extremos indican posibles riesgos metabólicos.

El nivel de estrés medio (5/10) podría influir en la calidad del sueño (7 horas promedio).
La distribución de género y tipos de ejercicio es equilibrada, mientras que un 29.3% presenta enfermedades, mostrando que incluso los adultos jóvenes no están exentos de riesgo.


5. Visualización de datos

library(dplyr)
library(ggplot2)

ggplot(datos, aes(x = age)) +
  geom_histogram(bins = 20, fill = "skyblue", color = "black") +
  labs(title = "Distribución de la edad", 
       x = "Edad", 
       y = "Frecuencia")

library(ggplot2)

ggplot(datos, aes(x = gender)) +
  geom_bar(fill = "steelblue", color = "black") +
  labs(title = "Distribución por género", 
       x = "Género", 
       y = "Frecuencia")

library(ggplot2)

ggplot(datos, aes(x = diet_type)) +
  geom_bar(fill = "orange", color = "black") +
  labs(title = "Tipos de dieta", 
       x = "Tipo de dieta", 
       y = "Frecuencia")

library(ggplot2)

ggplot(datos, aes(x = exercise_type)) +
  geom_bar(fill = "tomato", color = "black") +
  labs(title = "Tipos de ejercicio", 
       x = "Tipo de ejercicio", 
       y = "Frecuencia")

library(ggplot2)

ggplot(datos, aes(x = family_history)) +
  geom_bar(fill = "lightgreen", color = "black") +
  labs(title = "Antecedentes familiares", 
       x = "Antecedentes familiares", 
       y = "Frecuencia")

library(ggplot2)

ggplot(datos, aes(y = weight)) +
  geom_boxplot(fill = "lightblue", color = "black") +
  labs(title = "Distribución del peso", y = "Peso (kg)")

library(ggplot2)

ggplot(datos, aes(y = bmi)) +
  geom_boxplot(fill = "lightgreen", color = "black") +
  labs(title = "Distribución del BMI", y = "BMI")

library(ggplot2)

ggplot(datos, aes(x = stress_level)) +
  geom_histogram(binwidth = 1, fill = "plum", color = "black") +
  scale_x_continuous(breaks = 0:10) +
  labs(title = "Distribución del nivel de estrés",
       x = "Nivel de Estrés",
       y = "Frecuencia")

library(ggplot2)

ggplot(datos, aes(x = sugar_intake)) +
  geom_histogram(bins = 20, fill = "coral", color = "black") +
  labs(title = "Distribución del consumo de azúcar",
       x = "Consumo de azúcar (g)",
       y = "Frecuencia")

library(ggplot2)

ggplot(datos, aes(x = calorie_intake)) +
  geom_histogram(bins = 20, fill = "gold", color = "black") +
  labs(title = "Distribución del consumo de calorías",
       x = "Consumo de calorías (kcal)",
       y = "Frecuencia")

library(ggplot2)

ggplot(datos, aes(y = glucose)) +
  geom_boxplot(fill = "lightblue", color = "black") +
  labs(title = "Distribución de la glucosa",
       y = "Glucosa (mg/dL)")

library(ggplot2)

ggplot(datos, aes(y = cholesterol)) +
  geom_boxplot(fill = "lightpink", color = "black") +
  labs(title = "Distribución del colesterol",
       y = "Colesterol (mg/dL)")

library(ggplot2)

ggplot(datos, aes(x = sleep_hours)) +
  geom_histogram(binwidth = 0.5, fill = "lightgreen", color = "black") +
  labs(title = "Distribución de horas de sueño",
       x = "Horas de sueño",
       y = "Frecuencia")


Conclusiones generales

El estudio permitió establecer que los hábitos cotidianos —como la alimentación, el ejercicio físico, las horas de sueño y la ingesta de azúcar y calorías— están estrechamente relacionados con el riesgo de enfermedades en adultos jóvenes.

Estos factores afectan marcadores clínicos como el colesterol, la glucosa y el IMC, mostrando cómo las rutinas diarias impactan la salud.
Las variables cualitativas y cuantitativas ofrecen perspectivas complementarias para entender los riesgos.

Se concluye que, aunque los adultos jóvenes suelen ser considerados saludables, las costumbres poco beneficiosas pueden generar riesgos importantes.
Adoptar un estilo de vida balanceado, controlar el estrés y realizar actividad física regular reduce significativamente la probabilidad de enfermedades futuras.


base_datos_riesgo_enfermedades <- read.csv("/cloud/project/base_datos_riesgo_enfermedades.csv",
                                           sep = ";", stringsAsFactors = TRUE)
summary(base_datos_riesgo_enfermedades)
##   survey_code          age           gender        weight            bmi       
##  Min.   :   1.0   Min.   :18.00   Female:516   Min.   : 40.00   Min.   :10.37  
##  1st Qu.: 250.8   1st Qu.:19.00   Male  :484   1st Qu.: 60.13   1st Qu.:20.35  
##  Median : 500.5   Median :21.00                Median : 69.22   Median :24.04  
##  Mean   : 500.5   Mean   :21.47                Mean   : 69.86   Mean   :24.45  
##  3rd Qu.: 750.2   3rd Qu.:23.00                3rd Qu.: 79.25   3rd Qu.:28.14  
##  Max.   :1000.0   Max.   :25.00                Max.   :129.24   Max.   :47.25  
##   cholesterol       glucose        sleep_hours     calorie_intake  
##  Min.   :100.4   Min.   : 25.36   Min.   : 3.000   Min.   : 706.5  
##  1st Qu.:168.5   1st Qu.: 85.63   1st Qu.: 6.008   1st Qu.:1937.6  
##  Median :189.9   Median : 99.53   Median : 7.010   Median :2208.2  
##  Mean   :189.4   Mean   : 99.95   Mean   : 6.976   Mean   :2207.4  
##  3rd Qu.:210.2   3rd Qu.:114.20   3rd Qu.: 8.070   3rd Qu.:2479.0  
##  Max.   :288.5   Max.   :157.82   Max.   :11.200   Max.   :3455.7  
##   sugar_intake     stress_level         diet_type    exercise_type
##  Min.   : -4.53   Min.   : 0.000   Keto      :223   Cardio  :255  
##  1st Qu.: 48.08   1st Qu.: 2.000   Omnivore  :248   Mixed   :238  
##  Median : 60.01   Median : 5.000   Vegan     :265   None    :245  
##  Mean   : 60.71   Mean   : 5.019   Vegetarian:264   Strength:262  
##  3rd Qu.: 73.96   3rd Qu.: 8.000                                  
##  Max.   :134.87   Max.   :10.000                                  
##  family_history      target   
##  No :512        diseased:293  
##  Yes:488        healthy :707  
##                               
##                               
##                               
## 

Avance 2

base_num <- base_datos_riesgo_enfermedades[, c("cholesterol", "sleep_hours", "glucose", 
                                               "sugar_intake", "weight", "bmi", 
                                               "age", "calorie_intake")]

matriz_cor <- cor(base_num, use = "complete.obs", method = "pearson")
round(matriz_cor, 2)
##                cholesterol sleep_hours glucose sugar_intake weight   bmi   age
## cholesterol           1.00        0.01   -0.01         0.01  -0.02 -0.02  0.05
## sleep_hours           0.01        1.00    0.01        -0.06   0.03  0.01 -0.01
## glucose              -0.01        0.01    1.00        -0.05  -0.06 -0.03  0.02
## sugar_intake          0.01       -0.06   -0.05         1.00  -0.02 -0.01 -0.01
## weight               -0.02        0.03   -0.06        -0.02   1.00  0.86  0.01
## bmi                  -0.02        0.01   -0.03        -0.01   0.86  1.00  0.03
## age                   0.05       -0.01    0.02        -0.01   0.01  0.03  1.00
## calorie_intake        0.03        0.04    0.00        -0.01   0.01  0.01  0.04
##                calorie_intake
## cholesterol              0.03
## sleep_hours              0.04
## glucose                  0.00
## sugar_intake            -0.01
## weight                   0.01
## bmi                      0.01
## age                      0.04
## calorie_intake           1.00

Analizando los resultados de la matriz de correlación, pudimos observar que los datos en la base de datos no se encuentran muy correlacionados, únicamente tuvimos una correlación alta entre el bmi y weight. Entonces, seleccionarémos estas 2 y las analizaremos.

ggplot(base_datos_riesgo_enfermedades, aes(x = weight, y = bmi)) +
  geom_point(color = "steelblue", alpha = 0.6) +
  geom_smooth(method = "lm", color = "red", se = TRUE) +
  labs(title = "Relación entre Peso y BMI",
       x = "Peso (kg)", 
       y = "Índice de Masa Corporal (BMI)") +
  theme_minimal()

modelo <- lm(bmi ~ weight, data = base_datos_riesgo_enfermedades)
summary(modelo)
## 
## Call:
## lm(formula = bmi ~ weight, data = base_datos_riesgo_enfermedades)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -11.7573  -2.0748  -0.2647   1.6914  12.5694 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 0.307148   0.460834   0.667    0.505    
## weight      0.345579   0.006453  53.554   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 3.027 on 998 degrees of freedom
## Multiple R-squared:  0.7419, Adjusted R-squared:  0.7416 
## F-statistic:  2868 on 1 and 998 DF,  p-value: < 2.2e-16

Interpretación del modelo lineal simple

Toma de variable cuantitativa y cualitativa

Con el propósito de explorar una posible asociación, se analiza la distribución del colesterol según el tipo de dieta reportado en el conjunto de datos.

ggplot(base_datos_riesgo_enfermedades,
       aes(x = diet_type, y = cholesterol)) +
  geom_boxplot(fill = "skyblue", color = "darkblue", alpha = 0.7) +
  labs(title = "Colesterol según tipo de dieta",
       x = "Tipo de dieta",
       y = "Colesterol (mg/dL)") +
  theme_minimal()

Interpretación: El gráfico muestra que el colesterol varía según la dieta: las personas con dieta keto y omnívora tienen niveles más altos, mientras que los veganos presentan los más bajos y los vegetarianos valores intermedios. En general, las dietas vegetales parecen asociarse con menor colesterol.

Toma de variables cualitativas

# Comando para generar la tabla cruzada
table(base_datos_riesgo_enfermedades$diet_type,
      base_datos_riesgo_enfermedades$exercise_type)
##             
##              Cardio Mixed None Strength
##   Keto           59    68   47       49
##   Omnivore       58    51   71       68
##   Vegan          75    54   64       72
##   Vegetarian     63    65   63       73

Interpretación:
La tabla cruzada muestra la relación entre el tipo de dieta y el tipo de ejercicio.
Se observa que algunos tipos de dieta tienden a asociarse con ciertos tipos de ejercicio.
Por ejemplo, las dietas balanceadas o veganas pueden estar más vinculadas a ejercicios aeróbicos o de bajo impacto, mientras que las dietas altas en proteínas (como la keto) suelen relacionarse con ejercicios de fuerza o entrenamiento intenso.
En general, esta relación sugiere que los hábitos alimenticios y la actividad física están correlacionados y reflejan distintos estilos de vida.

ggplot(base_datos_riesgo_enfermedades, 
       aes(x = diet_type, fill = exercise_type)) + 
  geom_bar(position = "stack") + # Clave: Apilamiento de frecuencias
  labs(title = "Relación entre tipo de dieta y tipo de ejercicio",
       x = "Tipo de dieta",
       y = "Frecuencia",
       fill = "Tipo de ejercicio") +
  theme_minimal()

Interpretación: Todas las dietas tienen frecuencias similares, destacando el ejercicio mixto y el cardio como los más comunes. Los vegetarianos sobresalen en fuerza y los omnívoros en inactividad, mostrando una distribución general balanceada entre dieta y tipo de ejercicio.

Pronostico

Este conjunto de datos corresponde a una muestra estática, es decir, los valores fueron recolectados en un único momento o periodo específico. Por lo tanto, no presenta una dimensión temporal que permita analizar cómo las variables cambian a lo largo del tiempo. Debido a la ausencia de una serie temporal o registros secuenciales, no es posible aplicar modelos de pronóstico, ya que éstos requieren observar tendencias, estacionalidad o variaciones a lo largo del tiempo para realizar predicciones futuras.