Problemática
Se estima que en México más de 30 millones de personas viven con hipertensión arterial; es decir, una de cada cuatro tiene este padecimiento, y 46 por ciento lo desconoce.
Casi la mitad de las personas con este problema de salud acude a consulta médica debido a la sintomatología aguda, y en muchos casos con daño en riñones, corazón y cerebro.
A continuación se desarrolla un proyecto con el cual se busca ayudar a identificar patrones de consumo a partir de la base de datos ENSANUT 2022, y se construye un modelo de Regresión Logística en R para predecir la probabilidad de que una persona desarrolle hipertensión.
# Importar librerías
##
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ lubridate 1.9.4 ✔ tibble 3.2.1
## ✔ purrr 1.0.4 ✔ tidyr 1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
## Warning: package 'prettydoc' was built under R version 4.4.3
# Cargar bases de datos
#Base de datos sobre la hipertensión México
hipertension_df <- read_csv("C:\\Users\\luich\\OneDrive\\Documentos\\Aprendiendo_R\\Hipertension_Arterial_Mexico.csv")## Rows: 4363 Columns: 36
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (1): FOLIO_I
## dbl (35): sexo, edad, concentracion_hemoglobina, temperatura_ambiente, valor...
##
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
alimentos_df <- read_sav ("C:\\Users\\luich\\OneDrive\\Documentos\\Aprendiendo_R\\ensafrec_frecuencia.sav")# Estructura y clase de los df
## # A tibble: 5 × 36
## FOLIO_I sexo edad concentracion_hemoglobina temperatura_ambiente
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 2022_01001004 2 41 14.2 22
## 2 2022_01001009 2 65 14.1 9
## 3 2022_01001012 2 68 14.2 22
## 4 2022_01001013 1 35 15.7 11
## 5 2022_01001015 2 65 12.7 7
## # ℹ 31 more variables: valor_acido_urico <dbl>, valor_albumina <dbl>,
## # valor_colesterol_hdl <dbl>, valor_colesterol_ldl <dbl>,
## # valor_colesterol_total <dbl>, valor_creatina <dbl>,
## # resultado_glucosa <dbl>, valor_insulina <dbl>, valor_trigliceridos <dbl>,
## # resultado_glucosa_promedio <dbl>, valor_hemoglobina_glucosilada <dbl>,
## # valor_ferritina <dbl>, valor_folato <dbl>, valor_homocisteina <dbl>,
## # valor_proteinac_reactiva <dbl>, valor_transferrina <dbl>, …
## [1] "spec_tbl_df" "tbl_df" "tbl" "data.frame"
## [1] 4363
## [1] 4363
## # A tibble: 5 × 20
## FOLIO_I FOLIO_INT entidad desc_ent municipio desc_mun id_alim alimento por_est
## <chr> <chr> <chr> <chr> <chr> <chr> <dbl> <chr> <chr>
## 1 2022_0… 2022_010… 01 01 AGUA… 001 001 AGU… 1 Leche L… 1 vaso…
## 2 2022_0… 2022_010… 01 01 AGUA… 001 001 AGU… 2 Otra le… 1 vaso…
## 3 2022_0… 2022_010… 01 01 AGUA… 001 001 AGU… 3 Otra le… 1 vaso…
## 4 2022_0… 2022_010… 01 01 AGUA… 001 001 AGU… 4 Otra le… 1 vaso…
## 5 2022_0… 2022_010… 01 01 AGUA… 001 001 AGU… 5 Leche p… 1 vaso…
## # ℹ 11 more variables: pa1 <dbl+lbl>, esp_alim <dbl+lbl>, pa2 <dbl+lbl>,
## # pa3 <chr+lbl>, pa4 <chr>, ponde_f <dbl>, estrato <dbl+lbl>, est_sel <dbl>,
## # upm <chr>, completa <dbl>, region <dbl+lbl>
## [1] "tbl_df" "tbl" "data.frame"
## [1] 154331
## [1] "FOLIO_I" "FOLIO_INT" "entidad" "desc_ent" "municipio" "desc_mun"
## [7] "id_alim" "alimento" "por_est" "pa1" "esp_alim" "pa2"
## [13] "pa3" "pa4" "ponde_f" "estrato" "est_sel" "upm"
## [19] "completa" "region"
## [1] 941
# Limpieza, selección y transformación de datos “hipertension_df”
#Seleccionar únicamente variables de interés y almacenar en nueva variable
select_hipertension <- hipertension_df %>%
select(FOLIO_I, edad, masa_corporal, valor_colesterol_total, resultado_glucosa, sueno_horas, actividad_total,riesgo_hipertension)
#Renombrar variables para facilitar manejo
select_hipertension <- select_hipertension %>%
rename (colesterol_total = valor_colesterol_total,
imc = masa_corporal,
glucosa = resultado_glucosa)
#Verificar que no existan N/A en nuestro dataframe
sum(is.na(select_hipertension))## [1] 0
## # A tibble: 5 × 8
## FOLIO_I edad imc colesterol_total glucosa sueno_horas actividad_total
## <chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 2022_01001004 41 32.9 139 92 4 120
## 2 2022_01001009 65 1 252 111 2 240
## 3 2022_01001012 68 1 139 92 1 480
## 4 2022_01001013 35 26.3 203 106 5 275
## 5 2022_01001015 65 1 145 109 2 255
## # ℹ 1 more variable: riesgo_hipertension <dbl>
# Limpieza, selección y transformación de datos “alimentacion_df”
#Seleccionar únicamente variables de interés y almacenar en nueva variable
select_alimentos <- alimentos_df %>%
select(FOLIO_I, id_alim, alimento, pa1, pa2, pa4)
#Verificar tipo de dato de las columnas seleccionadas
class(select_alimentos$pa1)## [1] "haven_labelled" "vctrs_vctr" "double"
## [1] "haven_labelled" "vctrs_vctr" "double"
## [1] "character"
#Cambiar el tipo de dato a numeric
select_alimentos <- select_alimentos %>%
mutate(pa1 = as.numeric(pa1),
pa2 = as.numeric(pa2),
pa4 = as.numeric(pa4))
#Verificar tipo de dato de las columnas seleccionadas
class(select_alimentos$pa1)## [1] "numeric"
## [1] "numeric"
## [1] "numeric"
## [1] 248052
# Agregar consumo total a df alimentos
consumo_total <- select_alimentos %>%
mutate(frecuencia_consumo = ifelse(pa1 != 0 & pa2 != 0 & pa4 != 0,
pa1 * pa2 * pa4,
ifelse(pa1 == 0 & pa2 != 0 & pa4 != 0, pa2 * pa4,
ifelse(pa2 == 0 & pa1 != 0 & pa4 != 0, pa1 * pa4,
ifelse(pa4 == 0 & pa1 != 0 & pa2 != 0, pa1 * pa2, NA)))))
# La columna 'total_consumo' se calcula multiplicando las columnas 'pa1', 'pa2' y 'pa4',
# pero omitiendo las columnas con valor 0. Si alguna de las columnas tiene valor 0,
# la multiplicación solo se realiza con las columnas que contienen valores distintos de 0.
# Si todas las columnas involucradas en la operación son 0, el resultado será NA.
head(consumo_total,5)## # A tibble: 5 × 7
## FOLIO_I id_alim alimento pa1 pa2 pa4 frecuencia_consumo
## <chr> <dbl> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 2022_01001001 1 Leche Liconsa 0 0 0 NA
## 2 2022_01001001 2 Otra leche opción A 7 2 1 14
## 3 2022_01001001 3 Otra leche opción B 0 0 0 NA
## 4 2022_01001001 4 Otra leche opción C 0 0 0 NA
## 5 2022_01001001 5 Leche preparada de… 0 0 0 NA
# Agrupar alimentos para clasificarlos
alimentos_clasificado <- consumo_total %>%
mutate(
categoria_alimento = case_when(
id_alim %in% 18:51 ~ "consumo_frutas_y_verduras",
id_alim %in% 52:56 ~ "consumo_comida_rapida",
#Se seleccionan los id de los alimentos por categoría
id_alim %in% c(6,7,16,80:82,86:94,101:103,106,110,112,
113,116,117,120:122,124:128,132:134,147,155) ~ "consumo_azucar",
id_alim %in% 119 ~ "consumo_alcohol",
id_alim %in% c(60,61,74,83,104,131,140,154,157) ~ "consumo_sodio",
id_alim %in% 118 ~ "consumo_aguanatural",
id_alim %in% c(72,85,96,98,99,123,148:150,152,153) ~ "consumo_grasas_sat",
id_alim %in% c(1:5,8:15,107,108,151) ~ "consumo_lacteos",
id_alim %in% c(57:59,62:70) ~ "consumo_proteinas",
id_alim %in% c(76:79,84,100) ~ "consumo_carbohidratos",
TRUE ~ "Otros" # Para los alimentos que no entran en ninguna categoría definida
)
)
head(alimentos_clasificado, 5)## # A tibble: 5 × 8
## FOLIO_I id_alim alimento pa1 pa2 pa4 frecuencia_consumo
## <chr> <dbl> <chr> <dbl> <dbl> <dbl> <dbl>
## 1 2022_01001001 1 Leche Liconsa 0 0 0 NA
## 2 2022_01001001 2 Otra leche opción A 7 2 1 14
## 3 2022_01001001 3 Otra leche opción B 0 0 0 NA
## 4 2022_01001001 4 Otra leche opción C 0 0 0 NA
## 5 2022_01001001 5 Leche preparada de… 0 0 0 NA
## # ℹ 1 more variable: categoria_alimento <chr>
# Generar gráfica de nutrición por categoría con ggplot2
seleccion_plot <- alimentos_clasificado %>%
select(frecuencia_consumo, categoria_alimento)%>% #Seleccionar variables que se graficarán
group_by(categoria_alimento)%>% #Agrupar por categoría
summarize(consumo_total = sum(frecuencia_consumo, na.rm = TRUE)) #Sumar el consumo total por categoría
#Gráfica de barras con las variables seleccionadas
ggplot(seleccion_plot, aes(x = categoria_alimento, y = consumo_total, fill = categoria_alimento)) +
geom_col() +
labs(title = "Consumo total por categoría de alimento",
x = "Categoría de alimento",
y = "Frecuencia de consumo") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1))# Agrupación de categorías y folios en df alimentos
# Agrupar por folio y categoría, sumando el consumo total
consumo_por_categoria <- alimentos_clasificado %>%
group_by(FOLIO_I, categoria_alimento) %>%
summarize(categorias_consumidas = sum(frecuencia_consumo, na.rm = TRUE), .groups = "drop") %>%
ungroup()
# Convertir las categorías en columnas
df_alimentos_final <- consumo_por_categoria %>%
pivot_wider(names_from = categoria_alimento, values_from = categorias_consumidas)
head(df_alimentos_final,5)## # A tibble: 5 × 12
## FOLIO_I Otros consumo_aguanatural consumo_alcohol consumo_azucar
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 2022_01001001 33.5 56 0 37.3
## 2 2022_01001028 25.5 42 0 31
## 3 2022_01001034 52.5 28 0 35.8
## 4 2022_01001041 11 168 0 45.5
## 5 2022_01001042 111 112 144 81.5
## # ℹ 7 more variables: consumo_carbohidratos <dbl>, consumo_comida_rapida <dbl>,
## # consumo_frutas_y_verduras <dbl>, consumo_grasas_sat <dbl>,
## # consumo_lacteos <dbl>, consumo_proteinas <dbl>, consumo_sodio <dbl>
## [1] 941
# para unir con el df de hipertensión
head(df_alimentos_final, 5) #Visualizar el df sobre el que haremos nuestro modelo## # A tibble: 5 × 12
## FOLIO_I Otros consumo_aguanatural consumo_alcohol consumo_azucar
## <chr> <dbl> <dbl> <dbl> <dbl>
## 1 2022_01001001 33.5 56 0 37.3
## 2 2022_01001028 25.5 42 0 31
## 3 2022_01001034 52.5 28 0 35.8
## 4 2022_01001041 11 168 0 45.5
## 5 2022_01001042 111 112 144 81.5
## # ℹ 7 more variables: consumo_carbohidratos <dbl>, consumo_comida_rapida <dbl>,
## # consumo_frutas_y_verduras <dbl>, consumo_grasas_sat <dbl>,
## # consumo_lacteos <dbl>, consumo_proteinas <dbl>, consumo_sodio <dbl>
# Unir df para aplicación del modelo
## [1] "character"
## [1] "character"
df_modelo_regresion <- select_hipertension%>%
inner_join(df_alimentos_final, by= "FOLIO_I") #Unir ambos df
length(unique(df_modelo_regresion$FOLIO_I)) #Comprobar que no hayan repetidos ## [1] 527
# 527 registros únicos concuerda con los registros totales
# en FOLIO_I
# Comprobar concordancia de información entre los 3 df
folio_unido<- df_modelo_regresion %>%
filter (FOLIO_I == "2022_25006003")
folio_hipertension <- select_hipertension %>%
filter (FOLIO_I == "2022_25006003")
folio_alimentos <- df_alimentos_final %>%
filter (FOLIO_I == "2022_25006003")#Seleccionamos un folio de la tabla al azar
#view(folio_alimentos)
#view(folio_hipertension)
#view(folio_unido)# Generar boxplot para analizar consumo de personas con y sin hipertensión
ggplot(df_modelo_regresion, aes(x = as.factor(riesgo_hipertension), y = consumo_sodio, fill = as.factor(riesgo_hipertension))) +
geom_boxplot() +
scale_fill_manual(values = c("cyan", "yellow")) + # Colores
labs(title = "Consumo de sodio según riesgo de hipertensión",
x = "Riesgo de Hipertensión (0 = No, 1 = Sí)",
y = "Consumo de Sodio") +
theme_minimal()# Boxplot consumo de azúcar
ggplot(df_modelo_regresion, aes(x = as.factor(riesgo_hipertension), y = consumo_azucar, fill = as.factor(riesgo_hipertension))) +
geom_boxplot() +
scale_fill_manual(values = c("cyan", "yellow")) + # Colores
labs(title = "Consumo de azúcar según riesgo de hipertensión",
x = "Riesgo de Hipertensión (0 = No, 1 = Sí)",
y = "Consumo de Azúcar") +
theme_minimal()# Boxplot consumo de grasas
ggplot(df_modelo_regresion, aes(x = as.factor(riesgo_hipertension), y = consumo_grasas_sat, fill = as.factor(riesgo_hipertension))) +
geom_boxplot() +
scale_fill_manual(values = c("cyan", "yellow")) + # Colores
labs(title = "Consumo de grasas según riesgo de hipertensión",
x = "Riesgo de Hipertensión (0 = No, 1 = Sí)",
y = "Consumo de Grasas") +
theme_minimal()# Boxplot consumo de frutas y verduras
ggplot(df_modelo_regresion, aes(x = as.factor(riesgo_hipertension), y = consumo_frutas_y_verduras, fill = as.factor(riesgo_hipertension))) +
geom_boxplot() +
scale_fill_manual(values = c("cyan", "yellow")) + # Colores
labs(title = "Consumo de frutas y verduras según riesgo de hipertensión",
x = "Riesgo de Hipertensión (0 = No, 1 = Sí)",
y = "Consumo de frutas y verduras") +
theme_minimal()# Se puede ver que no hay una diferencia significante entre las personas
# que tienen hipertensión y las que no, por lo que la relevancia es baja de acuerdo a los gráficos.Al finalizar esta parte del proyecto, se cuenta con un dataframe final el cual contiene nuestra variable dependiente (Riesgo hipertensión) y las variables independientes (x) que analizaremos con un modelo de regresión logística: o Edad o IMC o Colesterol total o Glucosa en sangre o Consumo de sodio o Consumo de azucar o Consumo de grasas o Nivel de actividad física o Consumo de alcohol o Consumo de comida rapida o Consumo de frutas y verduras o Consumo de agua natural o Horas de sueño
# División de los datos en conjunto de entrenamiento (70%) y prueba (30%)
## Warning: package 'car' was built under R version 4.4.3
## Cargando paquete requerido: carData
## Warning: package 'carData' was built under R version 4.4.3
##
## Adjuntando el paquete: 'car'
## The following object is masked from 'package:purrr':
##
## some
## The following object is masked from 'package:dplyr':
##
## recode
## Warning: package 'caret' was built under R version 4.4.3
## Cargando paquete requerido: lattice
##
## Adjuntando el paquete: 'caret'
## The following object is masked from 'package:purrr':
##
## lift
## Warning: package 'pROC' was built under R version 4.4.3
## Type 'citation("pROC")' for a citation.
##
## Adjuntando el paquete: 'pROC'
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
## Warning: package 'visreg' was built under R version 4.4.3
df_modelo_regresion$riesgo_hipertension <- as.factor(df_modelo_regresion$riesgo_hipertension)
# Convertir la variable respuesta a factor (binaria)
# Fijar semilla para reproducibilidad
set.seed(321)
# Crear índice aleatorio para el 70% de los datos
train_index <- sample(1:nrow(df_modelo_regresion), size = 0.7 * nrow(df_modelo_regresion))
# Crear conjuntos de entrenamiento y prueba
train_set <- df_modelo_regresion[train_index, ]
test_set <- df_modelo_regresion[-train_index, ]
# Verificar tamaños
nrow(train_set) # Debe ser 70% del total## [1] 368
## [1] 159
# Implementación del modelo de regresión logística
# Entrenar el modelo con train_set
modelo <- glm(riesgo_hipertension ~ edad + imc + colesterol_total + glucosa + actividad_total +
consumo_sodio + consumo_azucar + consumo_alcohol + consumo_comida_rapida +
consumo_frutas_y_verduras + consumo_grasas_sat , data = train_set, family =
binomial)
# Resumen del modelo
summary(modelo)##
## Call:
## glm(formula = riesgo_hipertension ~ edad + imc + colesterol_total +
## glucosa + actividad_total + consumo_sodio + consumo_azucar +
## consumo_alcohol + consumo_comida_rapida + consumo_frutas_y_verduras +
## consumo_grasas_sat, family = binomial, data = train_set)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -9.465e+00 1.636e+00 -5.784 7.3e-09 ***
## edad 3.877e-02 1.350e-02 2.873 0.00407 **
## imc 1.973e-01 2.113e-02 9.335 < 2e-16 ***
## colesterol_total 1.896e-02 8.435e-03 2.248 0.02459 *
## glucosa 1.487e-02 1.380e-02 1.078 0.28099
## actividad_total -2.154e-05 2.027e-04 -0.106 0.91539
## consumo_sodio -3.312e-03 1.232e-02 -0.269 0.78796
## consumo_azucar 1.178e-02 6.267e-03 1.880 0.06008 .
## consumo_alcohol 1.446e-03 1.493e-02 0.097 0.92285
## consumo_comida_rapida -6.989e-02 4.496e-02 -1.554 0.12008
## consumo_frutas_y_verduras 3.387e-03 4.297e-03 0.788 0.43053
## consumo_grasas_sat -2.653e-02 1.527e-02 -1.738 0.08228 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 468.94 on 367 degrees of freedom
## Residual deviance: 260.21 on 356 degrees of freedom
## AIC: 284.21
##
## Number of Fisher Scoring iterations: 6
#Hacer predicciones con test_set
predicciones <- predict(modelo, test_set, type = "response")
test_set$pred_clase <- ifelse(predicciones > 0.5, 1, 0) # Convertir a clases 0 o 1
# Matriz de confusión
confusionMatrix(as.factor(test_set$pred_clase), as.factor(test_set$riesgo_hipertension))## Confusion Matrix and Statistics
##
## Reference
## Prediction 0 1
## 0 35 5
## 1 23 96
##
## Accuracy : 0.8239
## 95% CI : (0.7556, 0.8797)
## No Information Rate : 0.6352
## P-Value [Acc > NIR] : 1.484e-07
##
## Kappa : 0.5931
##
## Mcnemar's Test P-Value : 0.001315
##
## Sensitivity : 0.6034
## Specificity : 0.9505
## Pos Pred Value : 0.8750
## Neg Pred Value : 0.8067
## Prevalence : 0.3648
## Detection Rate : 0.2201
## Detection Prevalence : 0.2516
## Balanced Accuracy : 0.7770
##
## 'Positive' Class : 0
##
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
## Area under the curve: 0.8896
Se entrenó un modelo de regresión logística con el conjunto de entrenamiento (train_set), utilizando glm(). Luego, se hicieron predicciones en el conjunto de prueba (test_set) con predict(), y se asignaron clases binarias según un umbral de 0.5. Para evaluar el rendimiento del modelo, se generó una matriz de confusión con confusionMatrix() para medir la precisión de las predicciones.
Finalmente, se construyó la curva ROC con roc() y se calculó el AUC para medir la capacidad del modelo de distinguir entre clases. Si el AUC es cercano a 1, el modelo tiene buen desempeño; si está cerca de 0.5, su precisión es similar a un modelo aleatorio.
#Prueba con variables más significativas
# Entrenar el modelo con train_set
modelo_prueba <- glm(riesgo_hipertension ~ edad + imc + colesterol_total + consumo_azucar
, data = train_set, family = binomial)
# Resumen del modelo
summary(modelo_prueba)##
## Call:
## glm(formula = riesgo_hipertension ~ edad + imc + colesterol_total +
## consumo_azucar, family = binomial, data = train_set)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -8.731726 1.406981 -6.206 5.43e-10 ***
## edad 0.044048 0.013052 3.375 0.000739 ***
## imc 0.193261 0.020557 9.401 < 2e-16 ***
## colesterol_total 0.021415 0.007496 2.857 0.004275 **
## consumo_azucar 0.005826 0.005141 1.133 0.257068
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 468.94 on 367 degrees of freedom
## Residual deviance: 268.10 on 363 degrees of freedom
## AIC: 278.1
##
## Number of Fisher Scoring iterations: 5
#Hacer predicciones con test_set
predicciones <- predict(modelo_prueba, test_set, type = "response")
test_set$pred_clase <- ifelse(predicciones > 0.5, 1, 0) # Convertir a clases 0 o 1
# Matriz de confusión
confusionMatrix(as.factor(test_set$pred_clase), as.factor(test_set$riesgo_hipertension))## Confusion Matrix and Statistics
##
## Reference
## Prediction 0 1
## 0 35 10
## 1 23 91
##
## Accuracy : 0.7925
## 95% CI : (0.7211, 0.8526)
## No Information Rate : 0.6352
## P-Value [Acc > NIR] : 1.326e-05
##
## Kappa : 0.5297
##
## Mcnemar's Test P-Value : 0.03671
##
## Sensitivity : 0.6034
## Specificity : 0.9010
## Pos Pred Value : 0.7778
## Neg Pred Value : 0.7982
## Prevalence : 0.3648
## Detection Rate : 0.2201
## Detection Prevalence : 0.2830
## Balanced Accuracy : 0.7522
##
## 'Positive' Class : 0
##
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
## Area under the curve: 0.8843
Conclusiones finales
Con base en el resumen del modelo de regresión, las variables con mayor influencia en el riesgo de hipertensión son:
IMC (Índice de Masa Corporal): Tiene un valor p menor a 0.001, lo que indica que es altamente significativa en el modelo. Además, su estimado es alto (0.1973), lo que sugiere que un aumento en el IMC tiene un efecto positivo en el riesgo de hipertensión.
Edad: Tiene un valor p de 0.00407, lo que también indica que es significativa. El estimado es 0.03877, lo que sugiere que a medida que la edad aumenta, también lo hace el riesgo de hipertensión.
Colesterol total: Con un valor p de 0.02459, también es significativo, aunque su influencia es menor que la de IMC y edad. El estimado de 0.01896 indica que un aumento en el colesterol total está asociado con un aumento en el riesgo de hipertensión.
Las variables con una influencia más débil (en términos de significancia) son aquellas con valores p mayores que 0.05, como glucosa, actividad total, consumo de sodio, consumo de alcohol, y consumo de frutas y verduras.
Además, el consumo de azúcar y consumo de grasas saturadas también tienen valores p cercanos al umbral de 0.05, lo que sugiere una influencia marginal, pero no concluyente.
# Sugerencias para prevenir la hipertensión
Para prevenir la hipertensión, en base al análisis realizado con las variables que tienen mayor influencia en el riesgo de padecer dicha enfermedad, se pueden tomar las siguientes acciones:
o Controlar el IMC: Fomentar dietas balanceadas y ejercicio regular para reducir el sobrepeso. Ofrecer programas de ejercicio accesibles y consejos nutricionales en centros comunitarios.
o Gestionar el colesterol: Promover una dieta baja en grasas saturadas y colesterol. Realizar chequeos regulares para detectar niveles altos y tratar a tiempo.
o Prevenir según la edad: Hacer revisiones de salud frecuentes a medida que se envejece, con énfasis en la presión arterial y el control del peso.
o Consumir saludablemente: Reducir el consumo de azúcares refinados y grasas saturadas. Desarrollar campañas de concientización y mejorar el acceso a alimentos saludables.