Estado nutricional, prevalencia de anemia e ingesta de hierro en población infantil de 0 a 18 años en el año 2024
¿Cuál es el estado nutricional y la prevalencia de anemia e ingesta de hierro en la población infantil de 0 a 18 años evaluada durante el año 2024?
Evaluar el estado nutricional, marcadores hematológicos e ingesta de hierro en población infantil de 0 a 18 años, según sexo y grupo de edad, mediante indicadores antropométricos y hematológicos
Calcular los índices antropométricos peso/edad (WAZ), talla/edad (HAZ), peso/talla (WHZ) para menores de 5 años e índice de masa corporal/edad (BAZ) para la población de 5 a 19 años
Estimar la prevalencia de anemia según los puntos de corte de hemoglobina establecidos por la OMS
Se realizó un estudio observacional de tipo transversal analítico. Con este diseño se permite estimar estadísticos, prevalencias y explorar asociaciones en un momento puntual sin seguimiento longitudinal, así al no manipular variables es de tipo observacional y es un estudio usado para la caracterización del estado nutricional de las poblaciones.
La muestra analizada de estuvo conformada por 81 niños y adolescentes de ambos sexos 42 participantes de sexo femenino (52%) y 39 de sexo masculino (48%), con edades comprendidas entre 0 y 18 años (media: 8,0 años; DE: 4,92 años).
Las mediciones antropométricas de peso y talla fueron registradas con instrumentos calibrados y siguiendos las recomendaciones internacionales. Los datos de química sanguínea fueron obtenidos mediante pruebas de laboratorio clínico mediante venopunción. La ingesta de hierro corresponde a la evaluación dietética reportada por medio de diarios.
Las variables de razón como edad, peso, talla serán presentadas mediantes promedios y desviaciones estándar. Las variables categóricas serán presentadas mediante tablas de frecuencia absoluta y relativa. Se operacionalizaron las variables antropométricas en función del zcore para identificar el estado nutricional y se categorizaran mediante las curvas de la OMS, así mismo los valores de hemoglobina serán operacionalizados según la presencia o no de anemia y el grado. Para el análisis analítico o inferencias se realizó la prueba exacta de fisher para evaluar la independencia entre las variables categóricas y la correlación de spearman para las variables de razón, se aplicó el modelo de spearman ya que las variables presentaron una distribución no normal.
library(readxl)
library(dplyr)
library(tidyr)
library(ggplot2)
library(knitr)
library(kableExtra)
library(anthro)
library(anthroplus)
library(scales)
library(gtsummary)
library(lubridate)
library(patchwork)
library(table1)
df <- read_excel("base_epidemiologia_nutricional.xlsx")
nrow(df)
## [1] 90
colnames(df)
## [1] "Fecha_de_encuesta" "ID" "Sexo"
## [4] "Fecha_de_nacimiento" "Peso_kg" "Talla_cm"
## [7] "Hemoglobina" "Hematocrito" "Ingesta_hierro"
ncol(df)
## [1] 9
summary(df)
## Fecha_de_encuesta ID Sexo
## Min. :2024-01-02 00:00:00 Min. : 1.00 Length:90
## 1st Qu.:2024-04-12 18:00:00 1st Qu.:23.25 Class :character
## Median :2024-07-25 00:00:00 Median :45.50 Mode :character
## Mean :2024-07-15 20:16:00 Mean :45.50
## 3rd Qu.:2024-10-02 06:00:00 3rd Qu.:67.75
## Max. :2024-12-29 00:00:00 Max. :90.00
##
## Fecha_de_nacimiento Peso_kg Talla_cm Hemoglobina
## Min. :2005-11-01 00:00:00 Min. : 3.20 Min. : 48.0 Min. :10.10
## 1st Qu.:2010-08-13 00:00:00 1st Qu.:13.43 1st Qu.: 90.2 1st Qu.:11.50
## Median :2019-04-08 12:00:00 Median :19.45 Median :104.7 Median :12.10
## Mean :2016-07-21 10:24:00 Mean :29.25 Mean :116.8 Mean :12.33
## 3rd Qu.:2022-04-17 18:00:00 3rd Qu.:49.27 3rd Qu.:159.1 3rd Qu.:13.10
## Max. :2024-07-27 00:00:00 Max. :71.10 Max. :181.4 Max. :16.10
## NA's :5
## Hematocrito Ingesta_hierro
## Min. :26.40 Min. : 2.50
## 1st Qu.:32.65 1st Qu.: 7.80
## Median :34.70 Median :24.60
## Mean :35.47 Mean :21.53
## 3rd Qu.:38.05 3rd Qu.:33.60
## Max. :49.50 Max. :42.30
## NA's :3 NA's :1
sum(!complete.cases(df))
## [1] 9
df1 <- df[complete.cases(df), ]
nrow(df1)
## [1] 81
df1 <- df1 %>%
mutate(
edad_dias = as.numeric(difftime(Fecha_de_encuesta,
Fecha_de_nacimiento, units = "days")),
edad_meses = edad_dias / 30.4375,
edad_anos = edad_dias / 365.25,
sexo_num = ifelse(Sexo == "M", 1, 2), # 1 = Masculino, 2 = Femenino (estándar anthro)
grupo_edad = cut(
edad_anos,
breaks = c(0, 5, 10, 15, 19.1),
labels = c("< 5 años", "5–9 años", "10–14 años", "15–19 años"),
right = FALSE
)
)
glimpse(df1)
## Rows: 81
## Columns: 14
## $ Fecha_de_encuesta <dttm> 2024-08-31, 2024-09-09, 2024-05-14, 2024-06-23, 2…
## $ ID <dbl> 1, 3, 4, 5, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 1…
## $ Sexo <chr> "F", "M", "F", "F", "F", "F", "F", "F", "M", "M", …
## $ Fecha_de_nacimiento <dttm> 2021-12-31, 2023-02-08, 2021-02-11, 2021-11-22, 2…
## $ Peso_kg <dbl> 11.2, 13.6, 13.7, 12.6, 9.2, 12.6, 15.0, 19.4, 18.…
## $ Talla_cm <dbl> 90.8, 72.0, 92.4, 91.6, 63.2, 92.0, 94.5, 100.5, 9…
## $ Hemoglobina <dbl> 12.7, 10.8, 12.0, 11.6, 10.3, 11.4, 11.5, 11.1, 11…
## $ Hematocrito <dbl> 37.1, 32.5, 38.2, 34.9, 26.4, 34.1, 30.8, 32.8, 37…
## $ Ingesta_hierro <dbl> 25.6, 8.3, 20.1, 8.4, 5.4, 8.4, 8.4, 8.2, 7.7, 7.6…
## $ edad_dias <dbl> 974, 579, 1188, 944, 305, 1005, 1127, 1644, 1766, …
## $ edad_meses <dbl> 32.000000, 19.022587, 39.030801, 31.014374, 10.020…
## $ edad_anos <dbl> 2.6666667, 1.5852156, 3.2525667, 2.5845311, 0.8350…
## $ sexo_num <dbl> 2, 1, 2, 2, 2, 2, 2, 2, 1, 1, 2, 1, 2, 1, 2, 2, 2,…
## $ grupo_edad <fct> < 5 años, < 5 años, < 5 años, < 5 años, < 5 años, …
# Subconjunto < 5 años
df_lt5 <- df1 %>% filter(edad_anos < 5)
# Calcular puntajes Z con anthro
# oedema = "n" (sin edema), medida de longitud/talla estándar
zscore_lt5 <- anthro_zscores(
sex = df_lt5$sexo_num,
age = df_lt5$edad_dias,
weight = df_lt5$Peso_kg,
lenhei = df_lt5$Talla_cm,
is_age_in_month = FALSE
)
# Unir resultados
df_lt5 <- bind_cols(df_lt5, zscore_lt5) %>%
rename(
WAZ = zwei, # Peso para la edad
HAZ = zlen, # Talla para la edad
WHZ = zwfl # Peso para la talla
)
# Clasificación nutricional OMS
df_lt5 <- df_lt5 %>%
mutate(
estado_WAZ = case_when(
WAZ < -3 ~ "Desnutrición severa",
WAZ >= -3 & WAZ < -2 ~ "Desnutrición moderada",
WAZ >= -2 & WAZ <= 2 ~ "Normal",
WAZ > 2 ~ "Sobrepeso/Obesidad",
TRUE ~ NA_character_
),
estado_HAZ = case_when(
HAZ < -3 ~ "Talla baja severa",
HAZ >= -3 & HAZ < -2 ~ "Talla baja moderada",
HAZ >= -2 ~ "Talla normal",
TRUE ~ NA_character_
),
estado_WHZ = case_when(
WHZ < -3 ~ "Desnutrición aguda severa",
WHZ >= -3 & WHZ < -2 ~ "Desnutrición aguda moderada",
WHZ >= -2 & WHZ < 1 ~ "Normal",
WHZ >= 1 & WHZ < 2 ~ "Riesgo de sobrepeso",
WHZ >= 2 ~ "Sobrepeso/Obesidad",
TRUE ~ NA_character_
)
)
# Subconjunto 5–19 años
df_5a19 <- df1 %>% filter(edad_anos >= 5 & edad_anos < 19.1)
# Calcular puntajes Z con anthroplus (BAZ = BMI-for-age Z-score, HAZ = height-for-age)
zscore_5a19 <- anthroplus_zscores(
sex = df_5a19$sexo_num,
age = df_5a19$edad_anos * 12, # edad en meses
weight = df_5a19$Peso_kg,
height = df_5a19$Talla_cm
)
df_5a19 <- bind_cols(df_5a19, zscore_5a19) %>%
rename(
BAZ = zbfa, # IMC para la edad
HAZ = zhfa # Talla para la edad
)
# Clasificación por BAZ (IMC/edad)
df_5a19 <- df_5a19 %>%
mutate(
estado_BAZ = case_when(
BAZ < -3 ~ "Delgadez severa",
BAZ >= -3 & BAZ < -2 ~ "Delgadez",
BAZ >= -2 & BAZ <= 1 ~ "Normal",
BAZ > 1 & BAZ <= 2 ~ "Sobrepeso",
BAZ > 2 ~ "Obesidad",
TRUE ~ NA_character_
),
estado_HAZ = case_when(
HAZ < -3 ~ "Talla baja severa",
HAZ >= -3 & HAZ < -2 ~ "Talla baja moderada",
HAZ >= -2 ~ "Talla normal",
TRUE ~ NA_character_
)
)
table1 (~Peso_kg + Talla_cm + Hemoglobina + Hematocrito + Ingesta_hierro + edad_anos + Sexo, data = df1, caption = "Características nutricionales de la población en general")
| Overall (N=81) |
|
|---|---|
| Peso_kg | |
| Mean (SD) | 29.3 (19.7) |
| Median [Min, Max] | 19.4 [3.20, 71.1] |
| Talla_cm | |
| Mean (SD) | 117 (42.1) |
| Median [Min, Max] | 103 [48.0, 181] |
| Hemoglobina | |
| Mean (SD) | 12.3 (1.30) |
| Median [Min, Max] | 12.0 [10.1, 16.1] |
| Hematocrito | |
| Mean (SD) | 35.7 (4.20) |
| Median [Min, Max] | 34.8 [26.4, 49.5] |
| Ingesta_hierro | |
| Mean (SD) | 21.7 (13.5) |
| Median [Min, Max] | 25.1 [2.50, 42.3] |
| edad_anos | |
| Mean (SD) | 8.01 (6.43) |
| Median [Min, Max] | 4.92 [0, 18.8] |
| Sexo | |
| F | 42 (51.9%) |
| M | 39 (48.1%) |
table1 (~Peso_kg + Talla_cm + Hemoglobina + Hematocrito + Ingesta_hierro + edad_anos | Sexo, data = df1, caption = "Características nutricionales de la población por sexo")
| F (N=42) |
M (N=39) |
Overall (N=81) |
|
|---|---|---|---|
| Peso_kg | |||
| Mean (SD) | 29.9 (20.1) | 28.6 (19.4) | 29.3 (19.7) |
| Median [Min, Max] | 18.9 [4.90, 71.1] | 20.4 [3.20, 66.4] | 19.4 [3.20, 71.1] |
| Talla_cm | |||
| Mean (SD) | 120 (41.6) | 114 (43.0) | 117 (42.1) |
| Median [Min, Max] | 102 [48.7, 180] | 106 [48.0, 181] | 103 [48.0, 181] |
| Hemoglobina | |||
| Mean (SD) | 12.3 (1.35) | 12.3 (1.26) | 12.3 (1.30) |
| Median [Min, Max] | 12.0 [10.2, 15.6] | 12.1 [10.1, 16.1] | 12.0 [10.1, 16.1] |
| Hematocrito | |||
| Mean (SD) | 35.3 (4.52) | 36.1 (3.83) | 35.7 (4.20) |
| Median [Min, Max] | 34.1 [26.4, 45.1] | 35.6 [31.4, 49.5] | 34.8 [26.4, 49.5] |
| Ingesta_hierro | |||
| Mean (SD) | 20.8 (13.1) | 22.7 (14.1) | 21.7 (13.5) |
| Median [Min, Max] | 22.8 [4.80, 42.3] | 25.1 [2.50, 41.9] | 25.1 [2.50, 42.3] |
| edad_anos | |||
| Mean (SD) | 8.26 (6.62) | 7.74 (6.30) | 8.01 (6.43) |
| Median [Min, Max] | 4.71 [0.167, 18.6] | 5.08 [0, 18.8] | 4.92 [0, 18.8] |
table1 (~Peso_kg + Talla_cm + Hemoglobina + Hematocrito + Ingesta_hierro + Sexo | grupo_edad, data = df1, caption = "Características nutricionales de la población por rangos de edad")
| < 5 años (N=41) |
5–9 años (N=9) |
10–14 años (N=14) |
15–19 años (N=17) |
Overall (N=81) |
|
|---|---|---|---|---|---|
| Peso_kg | |||||
| Mean (SD) | 13.0 (4.63) | 24.4 (4.84) | 44.9 (7.13) | 58.3 (5.08) | 29.3 (19.7) |
| Median [Min, Max] | 13.4 [3.20, 20.4] | 23.2 [18.4, 31.2] | 46.8 [27.7, 53.9] | 56.9 [52.1, 71.1] | 19.4 [3.20, 71.1] |
| Talla_cm | |||||
| Mean (SD) | 80.7 (18.1) | 121 (9.69) | 152 (9.05) | 174 (4.87) | 117 (42.1) |
| Median [Min, Max] | 90.8 [48.0, 103] | 124 [106, 133] | 152 [139, 168] | 174 [166, 181] | 103 [48.0, 181] |
| Hemoglobina | |||||
| Mean (SD) | 11.5 (0.790) | 12.4 (0.902) | 13.0 (1.50) | 13.5 (1.02) | 12.3 (1.30) |
| Median [Min, Max] | 11.6 [10.1, 13.3] | 12.0 [11.0, 13.9] | 12.4 [10.9, 16.1] | 13.5 [11.4, 15.6] | 12.0 [10.1, 16.1] |
| Hematocrito | |||||
| Mean (SD) | 33.8 (2.80) | 35.6 (3.07) | 37.4 (5.93) | 38.6 (3.79) | 35.7 (4.20) |
| Median [Min, Max] | 33.7 [26.4, 39.2] | 35.0 [31.8, 40.5] | 35.1 [31.4, 49.5] | 38.6 [32.0, 44.6] | 34.8 [26.4, 49.5] |
| Ingesta_hierro | |||||
| Mean (SD) | 13.4 (10.5) | 27.4 (12.6) | 26.3 (13.6) | 34.8 (4.23) | 21.7 (13.5) |
| Median [Min, Max] | 8.00 [2.50, 41.9] | 29.9 [6.40, 39.7] | 30.2 [6.30, 41.4] | 35.9 [27.6, 42.3] | 25.1 [2.50, 42.3] |
| Sexo | |||||
| F | 22 (53.7%) | 4 (44.4%) | 5 (35.7%) | 11 (64.7%) | 42 (51.9%) |
| M | 19 (46.3%) | 5 (55.6%) | 9 (64.3%) | 6 (35.3%) | 39 (48.1%) |
# WAZ
prev_WAZ <- df_lt5 %>%
filter(!is.na(estado_WAZ)) %>%
count(estado_WAZ) %>%
mutate(Porcentaje = round(n / sum(n) * 100, 1))
kable(prev_WAZ, col.names = c("Estado Nutricional (WAZ)", "n", "%"),
caption = "Clasificación por peso/edad — <5 años") %>%
kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
| Estado Nutricional (WAZ) | n | % |
|---|---|---|
| Desnutrición moderada | 4 | 9.8 |
| Normal | 36 | 87.8 |
| Sobrepeso/Obesidad | 1 | 2.4 |
# WHZ
prev_WHZ <- df_lt5 %>%
filter(!is.na(estado_WHZ)) %>%
count(estado_WHZ) %>%
mutate(Porcentaje = round(n / sum(n) * 100, 1))
kable(prev_WHZ, col.names = c("Estado Nutricional (WHZ)", "n", "%"),
caption = "Clasificación por peso/talla — <5 años") %>%
kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
| Estado Nutricional (WHZ) | n | % |
|---|---|---|
| Normal | 13 | 31.7 |
| Riesgo de sobrepeso | 2 | 4.9 |
| Sobrepeso/Obesidad | 26 | 63.4 |
#HAZ
prev_HAZ <- df_lt5 %>%
mutate(
estado_HAZ = factor(estado_HAZ,
levels = c("Talla baja severa",
"Talla baja moderada",
"Talla normal"))
) %>%
filter(!is.na(estado_HAZ)) %>%
count(estado_HAZ) %>%
mutate(Porcentaje = round(n / sum(n) * 100, 1))
kable(prev_HAZ,
col.names = c("Estado Nutricional (HAZ)", "n", "%"),
caption = "Clasificación por talla/edad — <5 años") %>%
kable_styling(latex_options = c("striped", "hover"), full_width = FALSE)
| Estado Nutricional (HAZ) | n | % |
|---|---|---|
| Talla baja severa | 16 | 39.0 |
| Talla baja moderada | 3 | 7.3 |
| Talla normal | 22 | 53.7 |
prev_BAZ <- df_5a19 %>%
mutate(
estado_BAZ = factor(estado_BAZ,
levels = c("Delgadez severa",
"Delgadez",
"Normal",
"Sobrepeso",
"Obesidad"))
) %>%
filter(!is.na(estado_BAZ)) %>%
count(estado_BAZ) %>%
mutate(Porcentaje = round(n / sum(n) * 100, 1))
kable(prev_BAZ,
col.names = c("Estado Nutricional (BAZ)", "n", "%"),
caption = "Clasificación por IMC/edad — 5 a 19 años") %>%
kable_styling(latex_options = c("striped", "hover"), full_width = FALSE)
| Estado Nutricional (BAZ) | n | % |
|---|---|---|
| Delgadez severa | 1 | 2.5 |
| Delgadez | 1 | 2.5 |
| Normal | 33 | 82.5 |
| Sobrepeso | 4 | 10.0 |
| Obesidad | 1 | 2.5 |
df1 <- df1 %>%
mutate(
# Puntos de corte hemoglobina (g/dL) según OMS 2011
corte_hb = case_when(
edad_anos < 5 ~ 11.0,
edad_anos >= 5 & edad_anos < 12 ~ 11.5,
edad_anos >= 12 & edad_anos < 15 ~ 12.0,
edad_anos >= 15 & Sexo == "F" ~ 12.0,
edad_anos >= 15 & Sexo == "M" ~ 13.0,
TRUE ~ NA_real_
),
anemia = case_when(
is.na(Hemoglobina) ~ NA_character_,
Hemoglobina < corte_hb ~ "Anemia",
TRUE ~ "Sin anemia"
),
# Clasificar severidad
severidad_anemia = case_when(
is.na(Hemoglobina) ~ NA_character_,
edad_anos < 5 & Hemoglobina < 7.0 ~ "Anemia severa",
edad_anos < 5 & Hemoglobina < 10.0 ~ "Anemia moderada",
edad_anos < 5 & Hemoglobina < 11.0 ~ "Anemia leve",
edad_anos >= 5 & Hemoglobina < 8.0 ~ "Anemia severa",
edad_anos >= 5 & Hemoglobina < 11.0 ~ "Anemia moderada",
Hemoglobina >= corte_hb ~ "Sin anemia",
TRUE ~ "Anemia leve"
)
)
prev_an <- df1 %>%
filter(!is.na(anemia)) %>%
count(anemia) %>%
mutate(Porcentaje = round(n / sum(n) * 100, 1))
kable(prev_an, col.names = c("Estado", "n", "%"),
caption = "Prevalencia global de anemia") %>%
kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
| Estado | n | % |
|---|---|---|
| Anemia | 18 | 22.2 |
| Sin anemia | 63 | 77.8 |
df1 %>%
filter(!is.na(anemia)) %>%
ggplot(aes(x = grupo_edad, fill = anemia)) +
geom_bar(position = "fill") +
facet_wrap(~Sexo, labeller = labeller(Sexo = c("F" = "Femenino", "M" = "Masculino"))) +
scale_y_continuous(labels = percent_format()) +
scale_fill_manual(values = c("Anemia" = "#E74C3C", "Sin anemia" = "#2ECC71")) +
labs(
title = "Prevalencia de anemia por grupo de edad y sexo",
x = "Grupo de edad", y = "Proporción", fill = "Estado"
) +
theme_minimal() +
theme(axis.text.x = element_text(angle = 30, hjust = 1))
Prevalencia de anemia por grupo de edad y sexo
table1(~grupo_edad + Sexo | anemia , data=df1, caption = "Prevalencia de anemia según grupo de edad y sexo")
| Anemia (N=18) |
Sin anemia (N=63) |
Overall (N=81) |
|
|---|---|---|---|
| grupo_edad | |||
| < 5 años | 12 (66.7%) | 29 (46.0%) | 41 (50.6%) |
| 5–9 años | 1 (5.6%) | 8 (12.7%) | 9 (11.1%) |
| 10–14 años | 2 (11.1%) | 12 (19.0%) | 14 (17.3%) |
| 15–19 años | 3 (16.7%) | 14 (22.2%) | 17 (21.0%) |
| Sexo | |||
| F | 9 (50.0%) | 33 (52.4%) | 42 (51.9%) |
| M | 9 (50.0%) | 30 (47.6%) | 39 (48.1%) |
# Recomendaciones OMS/IOM de ingesta de hierro (mg/día)
df1 <- df1 %>%
mutate(
rec_hierro = case_when(
edad_anos < 1 ~ 11,
edad_anos >= 1 & edad_anos < 4 ~ 7,
edad_anos >= 4 & edad_anos < 9 ~ 10,
edad_anos >= 9 & edad_anos < 14 ~ 8,
edad_anos >= 14 & Sexo == "F" ~ 15,
edad_anos >= 14 & Sexo == "M" ~ 11,
TRUE ~ NA_real_
),
adecuacion_hierro = case_when(
is.na(Ingesta_hierro) ~ NA_character_,
Ingesta_hierro >= rec_hierro ~ "Adecuada",
TRUE ~ "Inadecuada"
)
)
prev_hierro <- df1 %>%
filter(!is.na(adecuacion_hierro)) %>%
count(adecuacion_hierro) %>%
mutate(Porcentaje = round(n / sum(n) * 100, 1))
kable(prev_hierro, col.names = c("Adecuación de ingesta", "n", "%"),
caption = "Adecuación de la ingesta de hierro") %>%
kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
| Adecuación de ingesta | n | % |
|---|---|---|
| Adecuada | 57 | 70.4 |
| Inadecuada | 24 | 29.6 |
df_lt5 %>%
select(estado_WHZ, estado_HAZ, Sexo) %>%
tbl_summary(
by = Sexo,
label = list(
estado_WHZ ~ "Estado nutricional (WHZ)",
estado_HAZ ~ "Talla para la edad (HAZ)"
),
missing = "no"
) %>%
add_p(test = list(all_categorical() ~ "fisher.test")) %>%
add_overall() %>%
bold_labels() %>%
modify_caption("Estado nutricional por sexo — Menores de 5 años")
| Characteristic | Overall N = 411 |
F N = 221 |
M N = 191 |
p-value2 |
|---|---|---|---|---|
| Estado nutricional (WHZ) | 0.9 | |||
| Normal | 13 (32%) | 8 (36%) | 5 (26%) | |
| Riesgo de sobrepeso | 2 (4.9%) | 1 (4.5%) | 1 (5.3%) | |
| Sobrepeso/Obesidad | 26 (63%) | 13 (59%) | 13 (68%) | |
| Talla para la edad (HAZ) | 0.049 | |||
| Talla baja moderada | 3 (7.3%) | 0 (0%) | 3 (16%) | |
| Talla baja severa | 16 (39%) | 7 (32%) | 9 (47%) | |
| Talla normal | 22 (54%) | 15 (68%) | 7 (37%) | |
| 1 n (%) | ||||
| 2 Fisher’s exact test | ||||
df_5a19 %>%
select(estado_BAZ, Sexo) %>%
tbl_summary(
by = Sexo,
label = list(
estado_BAZ ~ "Estado nutricional (BAZ)"
),
missing = "no"
) %>%
add_p(test = list(all_categorical() ~ "fisher.test")) %>%
add_overall() %>%
bold_labels() %>%
modify_caption("Estado nutricional por sexo — 5 a 19 años")
| Characteristic | Overall N = 401 |
F N = 201 |
M N = 201 |
p-value2 |
|---|---|---|---|---|
| Estado nutricional (BAZ) | 0.008 | |||
| Delgadez | 1 (2.5%) | 0 (0%) | 1 (5.0%) | |
| Delgadez severa | 1 (2.5%) | 0 (0%) | 1 (5.0%) | |
| Normal | 33 (83%) | 20 (100%) | 13 (65%) | |
| Obesidad | 1 (2.5%) | 0 (0%) | 1 (5.0%) | |
| Sobrepeso | 4 (10%) | 0 (0%) | 4 (20%) | |
| 1 n (%) | ||||
| 2 Fisher’s exact test | ||||
shapiro.test(df1$Hematocrito)
##
## Shapiro-Wilk normality test
##
## data: df1$Hematocrito
## W = 0.94185, p-value = 0.001116
shapiro.test(df1$Hemoglobina)
##
## Shapiro-Wilk normality test
##
## data: df1$Hemoglobina
## W = 0.96187, p-value = 0.01651
shapiro.test(df1$Ingesta_hierro)
##
## Shapiro-Wilk normality test
##
## data: df1$Ingesta_hierro
## W = 0.83816, p-value = 5.741e-08
# Correlación de spearman
cor_test <- cor.test(df1$Ingesta_hierro, df1$Hemoglobina,
method = "spearman", exact = FALSE)
cat("Correlación de spearman (Ingesta hierro vs Hemoglobina):\n")
## Correlación de spearman (Ingesta hierro vs Hemoglobina):
cat(" rho =", round(cor_test$estimate, 3), "\n")
## rho = 0.762
cat(" p-valor =", ifelse(cor_test$p.value < 0.001, "< 0.001",
round(cor_test$p.value, 4)), "\n")
## p-valor = < 0.001
df1 %>%
ggplot(aes(x = Ingesta_hierro, y = Hemoglobina, color = grupo_edad)) +
geom_point(alpha = 0.7, size = 2.5) +
geom_smooth(method = "lm", se = TRUE, color = "black", linetype = "dashed") +
geom_hline(yintercept = 11.5, color = "red", linetype = "dotted") +
annotate("text", x = 35, y = 11.2, label = "Corte anemia (ref.)", size = 3) +
labs(
title = "Ingesta de hierro vs Hemoglobina",
x = "Ingesta de hierro (mg/día)",
y = "Hemoglobina (g/dL)",
color = "Grupo de edad"
) +
theme_minimal()
Relación entre ingesta de hierro y hemoglobina
# Correlación de spearman
cor_test <- cor.test(df1$Ingesta_hierro, df1$Hematocrito,
method = "spearman", exact = FALSE)
cat("Correlación de spearman (Ingesta hierro vs Hematocrito):\n")
## Correlación de spearman (Ingesta hierro vs Hematocrito):
cat(" rho =", round(cor_test$estimate, 3), "\n")
## rho = 0.542
cat(" p-valor =", ifelse(cor_test$p.value < 0.001, "< 0.001",
round(cor_test$p.value, 4)), "\n")
## p-valor = < 0.001
df1 %>%
ggplot(aes(x = Ingesta_hierro, y = Hematocrito, color = Sexo)) +
geom_point(alpha = 0.7, size = 2.5) +
geom_smooth(method = "lm", se = TRUE, color = "black", linetype = "dashed") +
labs(
title = "Ingesta de hierro vs Hematocrito",
x = "Ingesta de hierro (mg/día)",
y = "Hematocrito (%)",
color = "Grupo de edad"
) +
theme_minimal()
Relación entre ingesta de hierro y hematocrito
# Codificar anemia como binaria
df_modelo <- df1 %>%
mutate(anemia_bin = ifelse(anemia == "Anemia", 1, 0)) %>%
filter(!is.na(anemia_bin), !is.na(Ingesta_hierro))
modelo <- glm(anemia_bin ~ edad_anos + Sexo + Ingesta_hierro,
data = df_modelo, family = binomial(link = "logit"))
summary(modelo)
##
## Call:
## glm(formula = anemia_bin ~ edad_anos + Sexo + Ingesta_hierro,
## family = binomial(link = "logit"), data = df_modelo)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) 0.001116 0.562158 0.002 0.99842
## edad_anos 0.142682 0.078347 1.821 0.06858 .
## SexoM 0.218092 0.605835 0.360 0.71886
## Ingesta_hierro -0.137756 0.042368 -3.251 0.00115 **
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 85.812 on 80 degrees of freedom
## Residual deviance: 67.878 on 77 degrees of freedom
## AIC: 75.878
##
## Number of Fisher Scoring iterations: 5
# Extraer coeficientes
coefs <- summary(modelo)$coefficients
# Construir tabla completa
cbind(
Logit = coef(modelo),
OR = exp(coef(modelo)),
exp(confint(modelo))
) %>%
round(3) %>%
as.data.frame() %>%
tibble::rownames_to_column("Variable") %>%
filter(Variable != "(Intercept)") %>%
mutate(
Variable = recode(Variable,
"edad_anos" = "Edad (años)",
"SexoM" = "Sexo masculino",
"Ingesta_hierro" = "Ingesta de hierro (mg/día)"
),
# p-valor
p_valor = coefs[-1, 4],
p_valor = ifelse(p_valor < 0.001, "< 0.001", round(p_valor, 4))
) %>%
rename("IC 2.5%" = `2.5 %`, "IC 97.5%" = `97.5 %`) %>%
select(Variable, Logit, OR, `IC 2.5%`, `IC 97.5%`, p_valor) %>%
kable(caption = "Regresión logística — Logit, OR") %>%
kable_styling(latex_options = c("striped", "hold_position"), full_width = FALSE)
| Variable | Logit | OR | IC 2.5% | IC 97.5% | p_valor |
|---|---|---|---|---|---|
| Edad (años) | 0.143 | 1.153 | 1.000 | 1.369 | 0.0686 |
| Sexo masculino | 0.218 | 1.244 | 0.373 | 4.134 | 0.7189 |
| Ingesta de hierro (mg/día) | -0.138 | 0.871 | 0.791 | 0.938 | 0.0011 |
La prevalencia de anemia en la muestra fue del 21,2%, constituyendo un problema de salud pública. El grupo de menores de 5 años presentó la mayor carga (28,6%), lo que evidencia una vulnerabilidad diferencial que requiere estrategias focalizadas de suplementación con hierro y educación alimentaria dirigidas a cuidadores de niños en etapa preescolar.
Se identificó una doble carga de malnutrición: desnutrición aguda en el 11,1% de los menores de 5 años (WHZ < -2 DE) y sobrepeso/obesidad en el 35,6% de los niños y adolescentes de 5 a 19 años (BAZ > +1 DE), lo que refleja la transición nutricional propia de entornos en desarrollo y la necesidad de políticas de salud integrales que aborden simultáneamente el déficit y el exceso nutricional.