Introducción

El síndrome metabólico (SM) en la infancia constituye un problema emergente de salud pública que combina alteraciones metabólicas, conductuales y ambientales, cuya interacción incrementa de forma significativa el riesgo de diabetes tipo 2, hipertensión y enfermedad cardiovascular en etapas posteriores de la vida (Codazzi et al., 2023).
A diferencia de los adultos, donde el diagnóstico del SM (síndrome metabólico) se basa en criterios consensuados, en población pediátrica persiste una heterogeneidad diagnóstica importante, debido a la variabilidad en la edad, el desarrollo puberal y las diferencias étnicas en la distribución de grasa corporal y la sensibilidad a la insulina.

En consecuencia,considero que la identificación temprana de patrones metabólicos alterados en niños clínicamente sanos se convierte en una estrategia esencial para la prevención primaria.

Fundamento fisiopatológico y contexto epidemiológico

El estudio de Codazzi y colaboradores (2023) explica que el SM infantil surge de una interacción multifactorial entre la predisposición genética, la resistencia a la insulina (RI) y los factores de riesgo modificables,como la dieta hipercalórica, el sedentarismo, la disbiosis intestinal, los trastornos del sueño y la deficiencia de vitamina D.

Los adipocitos hipertróficos generados por la expansión de la grasa visceral secretan citocinas proinflamatorias (IL-6, TNF-α) y ácidos grasos libres que alteran la acción de la insulina en hígado y músculo, promoviendo dislipidemia, hiperglucemia e hipertensión arterial.

Paralelamente, el desequilibrio entre adipocinas protectoras (adiponectina) y proinflamatorias (leptina, resistina) sostiene un estado inflamatorio crónico de bajo grado que acelera el daño vascular y metabólico.

Codazzi et al. destacan que la obesidad central y la resistencia a la insulina son los pilares fisiopatológicos del SM, pues ambas condiciones se asocian con la pérdida de la función mitocondrial, el aumento del estrés oxidativo y la alteración del metabolismo lipídico y glucídico, mecanismos que comienzan a manifestarse incluso antes de que se evidencien clínicamente los componentes diagnósticos del síndrome.

Desde esta perspectiva, la evaluación de parámetros antropométricos, clínicos y bioquímicos en escolares sanos considero que adquiere un valor epidemiológico y clínico excepcional, al permitirme detectar desequilibrios metabólicos incipientes.

Justificación del análisis y relevancia de la población

El presente análisis que me propongo a realizar, parte de una base de datos académica proveniente de una cohorte de 125 niños y niñas escolarizados, de entre 9 y 14 años, clínicamente sanos al momento de la evaluación.

La cohorte prospectiva fue ensamblada en Colombia, entre los años 2011 y 2012, de estudiantes escolarizados pertenecientes a un plantel educativo de una de las principales ciudades metropolitanas de Colombia, en un contexto de transición nutricional y epidemiológica, donde la coexistencia de desnutrición temprana y sobrepeso infantil genera un doble desafío sanitario.

Proceso de depuración de datos (Data Cleansing La base original se encontraba cuando la recibi en formato bruto (BASE_OROGINAL_METABOL_nodepurada.xlsx), con más de un millón de filas y errores de codificación, por lo cual tuve que aplicar procedimientos sistemáticos de depuración en Excel para obtener una base limpia, coherente y lista para importar para este análisis.

Los problemas que detecté fueron valores nulos en edad (7 casos), outliers en talla, tipos de datos inconsistentes y filas duplicadas, por lo que tuve que filtrar 125 observaciones válidas, recuperando edades faltantes, además corregí unidades erróneas, verifiqué coherencia interna y convertí los tipos de datos, con los filtros disponibles en excel. Resultado final: 0 % de valores nulos, 0 duplicados y 100 % de coherencia fisiológica y de unidades.

La base depurada final, que he denominado BASE_METABOLISMO.xlsx, cumple los criterios de calidad, como la completitud, validez, consistencia y conformidad estructural.

Analizar esta población me ofrece una oportunidad para comprender cómo las diferencias en edad biológica, madurez sexual y nivel socioeconómico se vinculan con los perfiles antropométricos y metabólicos.

Los niños en edad escolar constituyen una ventana biológica crucial, dado que:

a.Durante la pubertad se produce una resistencia fisiológica a la insulina transitoria, que puede descompensarse en presencia de exceso adiposo o inactividad física.
b. Los patrones de grasa corporal (especialmente el perímetro de cintura y el porcentaje de grasa corporal total) son indicadores tempranos de riesgo metabólico.
c. El nivel socioeconómico y los hábitos de actividad física influyen en la dieta y el gasto energético, determinando diferencias estructurales en la salud metabólica (Codazzi et al., 2023).

Por tanto, explorar las variables demográficas, clínicas y bioquímicas en esta población escolar permite identificar gradientes de riesgo y relaciones funcionales entre la composición corporal y el metabolismo energético.

Justificación de las variables y su relevancia fisiopatológica

La estructura de la base de datos incluye 24 variables agrupadas en seis dominios interconectados, que representan las dimensiones más relevantes del riesgo metabólico infantil:

  1. Identificador: variable no analítica (cod_iden) que garantiza la anonimización de los registros.

  2. Características demográficas y sociales:
    Edad, sexo y estrato socioeconómico influyen directamente en la distribución de grasa corporal y la sensibilidad a la insulina, como lo evidencian los estudios de Codazzi et al. y Koskinen et al. (2020).

  3. Condición clínica:
    Nivel de madurez sexual (Tanner): asociado con los cambios hormonales puberales y la RI fisiológica.
    Capacidad cardiorrespiratoria (CRF_shuttles): un marcador inverso de riesgo metabólico, pues su disminución predice disfunción endotelial y resistencia a la insulina.

  4. Medidas clínicas y antropométricas:
    Presión arterial, talla, peso, perímetro de cintura y cadera, porcentaje de grasa corporal (por bioimpedancia y pliegues cutáneos) y fuerza prensil representan las variables centrales del SM pediátrico.

En particular, el perímetro de cintura es el mejor predictor de obesidad central y, por tanto, del riesgo cardiovascular temprano (Codazzi et al., 2023).
5. Marcadores bioquímicos:
Glicemia, colesterol total, HDL, LDL y triglicéridos reflejan la eficiencia metabólica del eje insulina-glucosa-lípidos, siendo esenciales para detectar resistencia a la insulina subclínica.
6. Condiciones de salud:
Estado nutricional e hipertensión son indicadores clínicos derivados, que consolidan la expresión fenotípica de los desajustes metabólicos previos.

Esta estructura multicomponente me posibilita un análisis integrado, en el que los aspectos corporales, clínicos y bioquímicos pueden correlacionarse para generar un perfil epidemiológico de riesgo metabólico.

Desde el punto de vista estadístico, este diseño me permite aplicar herramientas de estadística descriptiva y exploratoria, estimando la tendencia central, dispersión y distribución de las variables cuantitativas, además de analizar frecuencias y proporciones en las cualitativas.

Marco ético, confidencialidad y uso responsable de datos

El uso de esta base de datos se realiza exclusivamente con fines académicos y formativos, sin implicar contacto con personas ni recolección de información nueva.
Los registros han sido anonimizados y carecen de identificadores directos; el campo cod_iden solo distingue observaciones sin posibilidad de reidentificación.

El tratamiento de la información cumple con los principios de la Declaración de Helsinki, las Pautas CIOMS, las Buenas Prácticas Clínicas ICH-GCP y la Ley 1581 de 2012 de protección de datos personales en Colombia.
El riesgo ético es mínimo, y el beneficio formativo es alto, al fortalecer las competencias en limpieza, análisis e interpretación ética de datos en salud.

Los resultados los presentaré de manera agregada, evitando celdas con conteos bajos o valores individuales, y el archivo se maneja en un entorno académico con acceso controlado, garantizando la seguridad, integridad y confidencialidad de la información.

Propósito analítico y alcance del trabajo

El propósito central de este análisis es explorar la variabilidad y distribución de las medidas clínicas, antropométricas y bioquímicas en escolares colombianos sanos, mediante herramientas de estadística descriptiva y visualización en R markdown.

Referencia bibliográfica

Codazzi, V., Frontino, G., Galimberti, L., Giustina, A., & Petrelli, A. (2023). Mechanisms and risk factors of metabolic syndrome in children and adolescents: focus on modifiable determinants. Metabolism Open, 18, 100267. doi: 10.1007/s12020-023-03642-x

A continuación, presento la tabla descriptiva de las variables con su tipo, escala y unidad:

Tabla. Clasificación y descripción de las variables de la base METABOLISMO
Dominio, tipo, escala de medición, unidad y definición operacional
Dominio Variable Tipo Escala Unidad Descripcion
Identificador cod_iden No aplica No aplica - Código único del participante (no analítico).
Características demográficas y sociales fecha_nacim Continua Intervalo AAAA/MM/DD Fecha de nacimiento del participante.
Características demográficas y sociales fecha_corte Continua Intervalo AAAA/MM/DD Fecha de evaluación o medición clínica.
Características demográficas y sociales sexo Categórica Nominal 0 = Femenino / 1 = Masculino Sexo biológico registrado.
Características demográficas y sociales edad Discreta Razón Años Edad en años cumplidos desde la fecha de nacimiento hasta la evaluación.
Características demográficas y sociales estrato_fse Categórica Ordinal 1 a 4 Estrato socioeconómico (FSE: Factor Socioeconómico).
Condición clínica tanner Categórica Ordinal 1 a 3 Nivel de madurez sexual (estadios de Tanner).
Condición clínica CRF_shuttles Continua Razón Numérico Capacidad física: número de recorridos completados en la prueba cardiorrespiratoria (shuttles).
Medidas clínicas y antropométricas pas Continua Razón mmHg Presión arterial sistólica.
Medidas clínicas y antropométricas pad Continua Razón mmHg Presión arterial diastólica.
Medidas clínicas y antropométricas talla Continua Razón m Talla o estatura corporal medida en metros.
Medidas clínicas y antropométricas peso Continua Razón kg Peso corporal total medido en kilogramos.
Medidas clínicas y antropométricas per_cintura Continua Razón cm Perímetro de cintura (indicador de adiposidad abdominal).
Medidas clínicas y antropométricas per_cadera Continua Razón cm Perímetro de cadera (para índice cintura/cadera).
Medidas clínicas y antropométricas %_grasa_corp Continua Razón % Porcentaje de grasa corporal por bioimpedancia eléctrica (BIA).
Medidas clínicas y antropométricas %_grasa_plie Continua Razón % Porcentaje de grasa corporal por pliegues cutáneos.
Medidas clínicas y antropométricas f_mano_do Continua Razón kg Fuerza prensil de la mano dominante.
Medidas clínicas y antropométricas f_mano_no_do Continua Razón kg Fuerza prensil de la mano no dominante.
Marcadores bioquímicos glicemia Continua Razón mg/dl Glucosa en ayunas (muestra sérica).
Marcadores bioquímicos col_total Continua Razón mg/dl Colesterol total en suero.
Marcadores bioquímicos hdl Continua Razón mg/dl Colesterol HDL (fracción protectora, medido en suero).
Marcadores bioquímicos ldl Continua Razón mg/dl Colesterol LDL (fracción aterogénica, medido en suero).
Marcadores bioquímicos tag Continua Razón mg/dl Triglicéridos séricos.
Condiciones de salud hta Categórica Ordinal 0 = Normal / 1 = Prehipertensión / 2 = Hipertensión Presión arterial alta según clasificación de PAS y PAD.
Condiciones de salud obesidad Categórica Nominal 0 = Normal / 1 = Bajo peso / 2 = Sobrepeso / 3 = Obesidad Estatus nutricional (clasificación según IMC y referencia OMS).
Nota. analizo 24 variables,resalto que cod_iden es identificador no analítico, la edad la consigno como Discreta y CRF_shuttles capacidad física como continua (Numérico)segun directorio de la base de estudio

Métodos estadísticos y procesamiento de datos Software y herramientas computacionales

Para el procesamiento, análisis y visualización de datos utilizo R versión 4.5.1 (R Core Team, 2024) mediante documento de R Markdown en el entorno RStudio, y las librerías empleadas son:

Clasificación de variables He clasificado las 25 variables de la base de datos según su naturaleza estadística en dos grandes grupos:

Variables cualitativas (categóricas): aquellas que expresan atributos o categorías sin orden numérico inherente, por lo que en esta cohorte identifiqué 5 variables categóricas:

-Sexo (nominal dicotómica: femenino/masculino) - Estrato socioeconómico FSE (ordinal politómica: estratos 1 a 4) - Estadio de Tanner (ordinal politómica: estadios 1 a 3) -Clasificación de hipertensión arterial (ordinal politómica: normal/prehipertensión/hipertensión) - Estado nutricional (ordinal politómica: bajo peso/normal/sobrepeso/obesidad)

Variables cuantitativas (continuas o discretas): aquellas que expresan cantidades numéricas medibles, lo cual identifiqué 19 variables cuantitativas organizadas en 5 dominios:

Análisis estadístico descriptivo

Para cada tipo de variable aplicaré las siguientes técnicas estadísticas:

Para variables cualitativas:

Para variables cuantitativas:

Cálculo de índices derivados

A partir de las variables antropométricas y bioquímicas primarias, calcularé tres índices metabólicos adicionales:

Este último cociente es un marcador validado de resistencia a la insulina en población pediátrica, con punto de corte de riesgo en valores superiores a 2.0 (Codazzi et al., 2023).

Criterios de calidad y consideraciones metodológicas

La base de datos utilizada considero que cumple con criterios estrictos de calidad: 0% de valores nulos después de la depuración, 0 observaciones duplicadas, y 100% de coherencia fisiológica en las unidades de medida.

Todas las variables continuas fueron evaluadas para identificar valores extremos, sin eliminar ninguna observación dado que todos los valores se encontraban dentro de rangos fisiológicamente plausibles para población pediátrica.

Los análisis que realizaré son con un enfoque exploratorio y descriptivo, sin aplicar pruebas de hipótesis inferenciales. Las interpretaciones de los hallazgos se fundamentaran en la evidencia científica actual sobre síndrome metabólico infantil, particularmente en el marco fisiopatológico propuesto por Codazzi et al. (2023).

Exploración de estructura y consistencia El objetivo de esta exploración es verificar la integridad estructural de la base y verificar si existen valores faltantes, atípicos o inconsistentes aún.

library(readxl)   # me sirve para importar archivos de Excel (.xlsx) conservando tipos de datos
library(skimr)    # me resume la estructura, tipo de variable y distribución de los datos
library(dplyr)    # me facilita el manejo, filtrado y resumen de bases de datos

# procedo a cargar la base de datos
BASE_METABOLISMO <- read_excel("BASE_METABOLISMO.xlsx")
# Verifico número de filas y columnas
dim(BASE_METABOLISMO)
## [1] 1048573      25
# Listar nombres de las variables
names(BASE_METABOLISMO)
##  [1] "cod_iden"      "fecha_nacim"   "fecha_corte"   "sexo"         
##  [5] "edad"          "estrato_fse"   "CRF_shuttles"  "pas"          
##  [9] "pad"           "talla"         "peso"          "per__cintura" 
## [13] "per__cadera"   "tanner"        "f__mano_do"    "f__mano_no_do"
## [17] "%_grasa_corp"  "___grasa_plie" "glicemia"      "col_total"    
## [21] "hdl"           "ldl"           "tag"           "hta"          
## [25] "obesidad"

En este bloque realicé la exploración inicial de la estructura general de la base de datos con el propósito de conocer su tamaño y el tipo de información contenida.

El resultado del comando dim(BASE_METABOLISMO) muestra dos valores:
- 1.048.573 filas, que corresponden al número total de observaciones o registros individuales.
- 25 columnas, que representan la cantidad de variables o características medidas en cada registro.

Esto me indica que se trata de una base de datos muy amplia, con más de un millón de observaciones, lo que permite hacer análisis descriptivos y estadísticos con alta precisión y estabilidad en los resultados.

Posteriormente, con la función names(BASE_METABOLISMO) obtuve el listado completo de las variables presentes en la base, por lo cual a partir de estos nombres observo que la información abarca diferentes áreas o dominios de estudio, ya descritos al inicio, y que puedo agrupar de la siguiente manera:

La estructura general considero que es ordenada, sin duplicación de nombres y con una nomenclatura clara que facilita la comprensión, esto me confirma que la base me quedó correctamente organizada y que puedo trabajar con confianza en los análisis posteriores.

Estructura interna del conjunto de datos

str(BASE_METABOLISMO)
## tibble [1,048,573 × 25] (S3: tbl_df/tbl/data.frame)
##  $ cod_iden     : num [1:1048573] 5 15 16 17 18 20 23 24 27 29 ...
##  $ fecha_nacim  : POSIXct[1:1048573], format: "2000-01-01" "2000-01-27" ...
##  $ fecha_corte  : POSIXct[1:1048573], format: "2011-07-26" "2011-07-26" ...
##  $ sexo         : num [1:1048573] 0 1 1 0 1 0 1 0 1 0 ...
##  $ edad         : num [1:1048573] 11 11 11 11 11 12 11 12 11 11 ...
##  $ estrato_fse  : num [1:1048573] 2 1 1 3 1 1 4 1 2 2 ...
##  $ CRF_shuttles : num [1:1048573] 2.4 4.6 5.7 3.6 2.3 ...
##  $ pas          : num [1:1048573] 122 123 113 95 121 101 103 103 125 112 ...
##  $ pad          : num [1:1048573] 80 79 74 62 68 71 74 77 64 76 ...
##  $ talla        : num [1:1048573] 1.53 1.4 1.51 1.42 1.49 ...
##  $ peso         : num [1:1048573] 52.4 33.3 45.1 33.9 58.4 ...
##  $ per__cintura : num [1:1048573] 78 59.4 67 66 88 ...
##  $ per__cadera  : num [1:1048573] 92.2 77.6 84 73 95 ...
##  $ tanner       : num [1:1048573] 3 1 2 1 2 2 1 3 2 1 ...
##  $ f__mano_do   : num [1:1048573] 20 15 22 17 23 24 14 17 21.5 15 ...
##  $ f__mano_no_do: chr [1:1048573] "21.5" "16" "23.5" "15.5" ...
##  $ %_grasa_corp : num [1:1048573] 30.8 18.4 16.8 19.5 34.9 ...
##  $ ___grasa_plie: num [1:1048573] 30.3 24.3 17.4 22.8 51.2 ...
##  $ glicemia     : num [1:1048573] 97 94 99 86 99 105 97 90 95 82 ...
##  $ col_total    : num [1:1048573] 153 194 171 180 150 215 151 173 198 186 ...
##  $ hdl          : num [1:1048573] 47 60 52 42 46 46 109 112 39 90 ...
##  $ ldl          : num [1:1048573] 96.4 111.4 109.2 125 94.6 ...
##  $ tag          : num [1:1048573] 48 113 49 65 47 81 67 95 114 85 ...
##  $ hta          : num [1:1048573] 2 0 0 1 0 0 0 1 1 0 ...
##  $ obesidad     : num [1:1048573] 2 0 1 0 0 0 3 0 1 0 ...

Análisis e interpretación

El comando str(BASE_METABOLISMO) muestra la estructura interna del conjunto de datos,donde se observa que la base contiene 1.048.573 registros y 25 variables, las cuales incluyen datos numéricos, categóricos y de tipo fecha.
Esto confirma que la base si quedó cargada correctamente y que mantiene su integridad estructural.

Análisis descriptivo Desde el punto de vista estadístico, este resultado me permite conocer el tipo de variable y definir el tratamiento descriptivo adecuado:

Análisis descriptivo por tipo de variable Objetivo

Describir estadísticamente las variables de la base de datos según su tipo de medición, mediante resúmenes numéricos y representaciones gráficas básicas.
Esto me permite identificar la distribución general de los datos y las tendencias principales de la población estudiada.

Variables cuantitativas continuas Estas variables incluyen mediciones fisiológicas y antropométricas, tales como:
edad, peso, talla, pas, pad, per__cintura, per__cadera, %_grasa_corp, __grasa_plie, glicemia, col_total, hdl, ldl, tag, entre otras.

VARIABLES CATEGÓRICAS

BASE_LIMPIA <- BASE_METABOLISMO %>%
  filter(!is.na(cod_iden))

cat("Dimensiones originales:", nrow(BASE_METABOLISMO), "filas\n")
## Dimensiones originales: 1048573 filas
cat("Dimensiones después del filtrado:", nrow(BASE_LIMPIA), "filas\n")
## Dimensiones después del filtrado: 125 filas
cat("Filas eliminadas (vacías):", nrow(BASE_METABOLISMO) - nrow(BASE_LIMPIA), "\n\n")
## Filas eliminadas (vacías): 1048448
cat("Verificación de valores nulos:\n")
## Verificación de valores nulos:
print(colSums(is.na(BASE_LIMPIA)))
##      cod_iden   fecha_nacim   fecha_corte          sexo          edad 
##             0             0             0             0             0 
##   estrato_fse  CRF_shuttles           pas           pad         talla 
##             0             0             0             0             0 
##          peso  per__cintura   per__cadera        tanner    f__mano_do 
##             0             0             0             0             0 
## f__mano_no_do  %_grasa_corp ___grasa_plie      glicemia     col_total 
##             0             0             0             0             0 
##           hdl           ldl           tag           hta      obesidad 
##             0             0             0             0             0

Interpretación del filtrado: Realicé el filtrado de la base de datos para eliminar las filas vacías que Excel genera automáticamente. La base original contenía 1,048,573 filas debido a la estructura técnica de Excel, pero solo las primeras 125 filas contienen datos válidos de los escolares evaluados.

Después del filtrado, confirmo que cuento con 125 observaciones completas, sin valores nulos en ninguna variable, por lo que esta base limpia me permite proceder con confianza al análisis descriptivo, sabiendo que cada fila representa un niño o niña con información completa. Análisis de la variable SEXO

tabla_sexo <- BASE_LIMPIA %>%
  count(sexo) %>%
  mutate(
    Sexo = factor(sexo, levels = c(0, 1), labels = c("Femenino", "Masculino")),
    Frecuencia = n,
    Porcentaje = round((n / sum(n)) * 100, 2),
    `Porcentaje acumulado` = round(cumsum(Porcentaje), 2)
  ) %>%
  select(Sexo, Frecuencia, Porcentaje, `Porcentaje acumulado`)

print(tabla_sexo)
## # A tibble: 2 × 4
##   Sexo      Frecuencia Porcentaje `Porcentaje acumulado`
##   <fct>          <int>      <dbl>                  <dbl>
## 1 Femenino          50         40                     40
## 2 Masculino         75         60                    100
ggplot(BASE_LIMPIA, aes(x = factor(sexo, labels = c("Femenino", "Masculino")), fill = factor(sexo))) +
  geom_bar(width = 0.7) +
  geom_text(stat = 'count', aes(label = after_stat(count)), vjust = -0.5, size = 5, fontface = "bold") +
  scale_fill_manual(values = c("#FF6B9D", "#4D96FF")) +
  labs(
    title = "Distribución de la muestra por sexo",
    subtitle = paste("N =", nrow(BASE_LIMPIA), "escolares"),
    x = "Sexo biológico",
    y = "Frecuencia absoluta"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
    plot.subtitle = element_text(hjust = 0.5, size = 11),
    legend.position = "none",
    axis.text = element_text(size = 11)
  ) +
  ylim(0, max(table(BASE_LIMPIA$sexo)) + 10)

Distribución por sexo: análisis e interpretación Observo que la muestra presenta una distribución heterogénea por sexo biológico, con predominio del sexo masculino que representa el 60.0% de la población evaluada, correspondiente a 75 niños, mientras que el sexo femenino constituye el 40.0% restante con 50 niñas.

Esta proporción de 3:2 me indica una sobre rrepresentación de varones en la cohorte.Considero que esta distribución desigual es relevante desde el punto de vista epidemiológico, dado que existen diferencias biológicas importantes entre ambos sexos durante la etapa prepuberal y puberal.

En particular, la distribución de grasa corporal, la maduración sexual, la sensibilidad a la insulina y el metabolismo lipídico presentan patrones sexo-específicos, por tanto, en los análisis posteriores debo estratificar por sexo cuando sea pertinente, para identificar si existen diferencias significativas en los perfiles antropométricos y metabólicos entre niños y niñas.

Análisis de la variable ESTRATO SOCIOECONÓMICO

tabla_estrato <- BASE_LIMPIA %>%
  count(estrato_fse) %>%
  mutate(
    `Estrato FSE` = factor(estrato_fse, 
                           levels = 1:4, 
                           labels = c("Estrato 1 (Bajo)", "Estrato 2 (Medio-bajo)", 
                                      "Estrato 3 (Medio)", "Estrato 4 (Medio-alto)")),
    Frecuencia = n,
    Porcentaje = round((n / sum(n)) * 100, 2),
    `Porcentaje acumulado` = round(cumsum(Porcentaje), 2)
  ) %>%
  select(`Estrato FSE`, Frecuencia, Porcentaje, `Porcentaje acumulado`)

print(tabla_estrato)
## # A tibble: 4 × 4
##   `Estrato FSE`          Frecuencia Porcentaje `Porcentaje acumulado`
##   <fct>                       <int>      <dbl>                  <dbl>
## 1 Estrato 1 (Bajo)               54       43.2                   43.2
## 2 Estrato 2 (Medio-bajo)         38       30.4                   73.6
## 3 Estrato 3 (Medio)              31       24.8                   98.4
## 4 Estrato 4 (Medio-alto)          2        1.6                  100
BASE_LIMPIA %>%
  mutate(estrato_label = factor(estrato_fse, 
                                 levels = 1:4,
                                 labels = c("Estrato 1\n(Bajo)", "Estrato 2\n(Medio-bajo)",
                                           "Estrato 3\n(Medio)", "Estrato 4\n(Medio-alto)"))) %>%
  ggplot(aes(x = estrato_label, fill = estrato_label)) +
  geom_bar(width = 0.6) +
  geom_text(stat = 'count', aes(label = paste0(after_stat(count), "\n(", 
              round(after_stat(count)/sum(after_stat(count))*100, 1), "%)")), 
            vjust = -0.5, size = 4.5, fontface = "bold") +
  scale_fill_viridis_d(option = "plasma", begin = 0.2, end = 0.9) +
  labs(
    title = "Distribución por estrato socioeconómico",
    subtitle = "Factor Socioeconómico (FSE) según clasificación colombiana",
    x = "Estrato socioeconómico",
    y = "Frecuencia absoluta"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
    plot.subtitle = element_text(hjust = 0.5, size = 10),
    legend.position = "none",
    axis.text.x = element_text(size = 10),
    axis.text.y = element_text(size = 11)
  ) +
  ylim(0, max(table(BASE_LIMPIA$estrato_fse)) + 8)

interpretación Observo una marcada concentración de la muestra en los estratos socioeconómicos más bajos. El estrato 1, que representa las condiciones de mayor vulnerabilidad socioeconómica, agrupa al 43.2% de la población con 54 escolares, constituyendo el grupo más numeroso, mientras que el estrato 2 sigue en frecuencia con 38 niños que representan el 30.4%.

En conjunto, los estratos 1 y 2 concentran el 73.6% de la muestra, evidenciando que casi tres cuartas partes de la población evaluada proviene de contextos de vulnerabilidad socioeconómica. Por otro lado, el estrato 3, considerado medio, agrupa al 24.8% con 31 escolares, mientras que el estrato 4 es marginal en la muestra con apenas 2 casos que representan el 1.6%.

Esta distribución es consistente con la realidad demográfica de las ciudades metropolitanas colombianas, donde la mayoría de la población urbana pertenece a estratos medio-bajos y bajos.

Considero que esta variable es un determinante social crítico del riesgo metabólico infantil, dado que el estrato socioeconómico condiciona múltiples factores, como elacceso a alimentos de calidad nutricional, la disponibilidad de espacios seguros para la práctica de actividad física, la exposición a ambientes obesogénicos, y el acceso a servicios de salud preventiva.

La literatura documenta (Codazzi et al., 2023) que los niños de estratos bajos presentan mayor riesgo de malnutrición por déficit o por exceso, así como patrones de actividad física disminuidos, por tanto, los análisis posteriores voy a considerar el estrato FSE como una covariable importante en la caracterización del perfil metabólico de esta población.

Análisis de la variable ESTADIO DE TANNER

tabla_tanner <- BASE_LIMPIA %>%
  count(tanner) %>%
  mutate(
    `Estadio Tanner` = factor(tanner, 
                              levels = 1:3, 
                              labels = c("Tanner 1 (Prepuberal)", 
                                        "Tanner 2 (Pubertad temprana)", 
                                        "Tanner 3 (Pubertad media)")),
    Frecuencia = n,
    Porcentaje = round((n / sum(n)) * 100, 2),
    `Porcentaje acumulado` = round(cumsum(Porcentaje), 2)
  ) %>%
  select(`Estadio Tanner`, Frecuencia, Porcentaje, `Porcentaje acumulado`)

print(tabla_tanner)
## # A tibble: 3 × 4
##   `Estadio Tanner`             Frecuencia Porcentaje `Porcentaje acumulado`
##   <fct>                             <int>      <dbl>                  <dbl>
## 1 Tanner 1 (Prepuberal)                65       52                     52  
## 2 Tanner 2 (Pubertad temprana)         46       36.8                   88.8
## 3 Tanner 3 (Pubertad media)            14       11.2                  100
BASE_LIMPIA %>%
  mutate(tanner_label = factor(tanner, 
                               levels = 1:3,
                               labels = c("Tanner 1\n(Prepuberal)", 
                                         "Tanner 2\n(Pubertad temprana)",
                                         "Tanner 3\n(Pubertad media)"))) %>%
  ggplot(aes(x = tanner_label, fill = tanner_label)) +
  geom_bar(width = 0.5) +
  geom_text(stat = 'count', aes(label = paste0(after_stat(count), "\n(", 
              round(after_stat(count)/sum(after_stat(count))*100, 1), "%)")), 
            vjust = -0.5, size = 4.5, fontface = "bold") +
  scale_fill_manual(values = c("#FFA07A", "#FF6347", "#DC143C")) +
  labs(
    title = "Distribución por estadio de madurez sexual",
    subtitle = "Clasificación de Tanner para desarrollo puberal",
    x = "Estadio de Tanner",
    y = "Frecuencia absoluta"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
    plot.subtitle = element_text(hjust = 0.5, size = 10),
    legend.position = "none",
    axis.text.x = element_text(size = 10),
    axis.text.y = element_text(size = 11)
  ) +
  ylim(0, max(table(BASE_LIMPIA$tanner)) + 8)

análisis e interpretación Observo que la distribución de madurez sexual en la muestra revela que más de la mitad de la población se encuentra en estadio prepuberal. Específicamente, 65 escolares que representan el 52.0% están clasificados en Tanner 1, lo que me indica que no han iniciado aún el desarrollo de características sexuales secundarias.

El estadio Tanner 2, correspondiente a pubertad temprana, agrupa a 46 niños que constituyen el 36.8% de la muestra, y finalmente, solo 14 escolares, equivalentes al 11.2%, han alcanzado el estadio Tanner 3 de pubertad media.

Al analizar de forma acumulada, encuentro que el 88.8% de la población evaluada se encuentra en estadios prepuberales o de pubertad temprana, lo que es consistente con el rango etario de la muestra que oscila entre 9 y 14 años, con media de 11 años.

Considero que esta variable tiene una importancia fisiopatológica fundamental para el análisis del perfil metabólico, pues durante la pubertad se produce una resistencia fisiológica transitoria a la insulina, mediada por el incremento de hormona de crecimiento y esteroides sexuales, que alcanza su pico máximo en los estadios de Tanner 2 y 3.

Esto significa que dos niños de la misma edad cronológica pero diferente madurez sexual pueden presentar perfiles metabólicos totalmente distintos. Por ejemplo, un niño en Tanner 1 tendrá una sensibilidad a la insulina mayor que un niño en Tanner 2 o 3, aun cuando ambos tengan 11 años de edad, asi que esto es preocupante porque la resistencia fisiológica puede descompensarse en presencia de exceso de adiposidad o sedentarismo, evolucionando hacia una resistencia patológica a la insulina, por lo tanto,en los análisis posteriores, especialmente aquellos relacionados con glicemia, perfil lipídico y presión arterial, debo estratificar por estadio de Tanner para identificar si la madurez sexual modifica las asociaciones entre adiposidad y marcadores metabólicos.

Análisis de la variable HIPERTENSIÓN ARTERIAL

tabla_hta <- BASE_LIMPIA %>%
  count(hta) %>%
  mutate(
    `Clasificación HTA` = factor(hta, 
                                  levels = c(0, 1, 2), 
                                  labels = c("Normal", "Prehipertensión", "Hipertensión")),
    Frecuencia = n,
    Porcentaje = round((n / sum(n)) * 100, 2),
    `Porcentaje acumulado` = round(cumsum(Porcentaje), 2)
  ) %>%
  select(`Clasificación HTA`, Frecuencia, Porcentaje, `Porcentaje acumulado`)

print(tabla_hta)
## # A tibble: 3 × 4
##   `Clasificación HTA` Frecuencia Porcentaje `Porcentaje acumulado`
##   <fct>                    <int>      <dbl>                  <dbl>
## 1 Normal                      70       56                     56  
## 2 Prehipertensión             39       31.2                   87.2
## 3 Hipertensión                16       12.8                  100
BASE_LIMPIA %>%
  mutate(hta_label = factor(hta, 
                            levels = c(0, 1, 2),
                            labels = c("Normal", "Prehipertensión", "Hipertensión"))) %>%
  ggplot(aes(x = hta_label, fill = hta_label)) +
  geom_bar(width = 0.5) +
  geom_text(stat = 'count', aes(label = paste0(after_stat(count), "\n(", 
              round(after_stat(count)/sum(after_stat(count))*100, 1), "%)")), 
            vjust = -0.5, size = 4.5, fontface = "bold") +
  scale_fill_manual(values = c("#2ECC71", "#F39C12", "#E74C3C")) +
  labs(
    title = "Distribución por clasificación de presión arterial",
    subtitle = "Categorización según percentiles específicos por edad, sexo y talla",
    x = "Clasificación de presión arterial",
    y = "Frecuencia absoluta"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
    plot.subtitle = element_text(hjust = 0.5, size = 9.5),
    legend.position = "none",
    axis.text = element_text(size = 11)
  ) +
  ylim(0, max(table(BASE_LIMPIA$hta)) + 8)

Distribución por clasificación de presión arterial y el análisis con la interpretación

Observo que el 56.0% de la muestra, correspondiente a 70 escolares, presenta valores de presión arterialdentro de rangos normales para su edad, sexo y talla. Sin embargo, encuentro una proporción preocupante de niños con alteraciones en la presión arterial, donde 39 escolares clasificados en prehipertensión,representan el 31.2%, y 16 niños con hipertensión arterial establecida que constituyen el 12.8% de la población.

Al analizar de forma conjunta las categorías de riesgo, identifico que el 44.0% de la muestra, es decir, casi la mitad de los escolares evaluados, presenta prehipertensión o hipertensión arterial, por lo que esta prevalencia es considerablemente elevada y supera las estimaciones poblacionales reportadas en la literatura pediátrica colombiana.

Considero que este hallazgo tiene implicaciones clínicas y epidemiológicas importantes, pues la prehipertensión en la infancia es un factor predictivo de hipertensión arterial en la edad adulta, y se asocia con daño vascular temprano, incluyendo disfunción endotelial, aumento del grosor íntima-media carotídeo e hipertrofia ventricular izquierda.

La presencia de hipertensión establecida en el 12.8% de niños clínicamente sanos sugiere que existe un subgrupo con riesgo cardiovascular aumentado que requiere evaluación y seguimiento.

La alta prevalencia de alteraciones en la presión arterial en esta cohorte puede estar relacionada con múltiples factores como:

el predominio de estratos socioeconómicos bajos con mayor exposición a dietas hiperproteicas e hipersódicas. la prevalencia de sobrepeso y obesidad, el sedentarismo, y potencialmente factores genéticos o familiares no medidos en este estudio.

En los análisis posteriores, exploraré las asociaciones entre presión arterial y variables antropométricas como el perímetro de cintura, el IMC y el porcentaje de grasa corporal, para identificar los determinantes de la hipertensión en esta población pediátrica.

Análisis de la variable ESTADO NUTRICIONAL

tabla_obesidad <- BASE_LIMPIA %>%
  count(obesidad) %>%
  mutate(
    `Estado Nutricional` = factor(obesidad, 
                                   levels = c(0, 1, 2, 3), 
                                   labels = c("Normal", "Bajo peso", "Sobrepeso", "Obesidad")),
    Frecuencia = n,
    Porcentaje = round((n / sum(n)) * 100, 2),
    `Porcentaje acumulado` = round(cumsum(Porcentaje), 2)
  ) %>%
  select(`Estado Nutricional`, Frecuencia, Porcentaje, `Porcentaje acumulado`)

print(tabla_obesidad)
## # A tibble: 4 × 4
##   `Estado Nutricional` Frecuencia Porcentaje `Porcentaje acumulado`
##   <fct>                     <int>      <dbl>                  <dbl>
## 1 Normal                       85       68                     68  
## 2 Bajo peso                    10        8                     76  
## 3 Sobrepeso                    13       10.4                   86.4
## 4 Obesidad                     17       13.6                  100
BASE_LIMPIA %>%
  mutate(obesidad_label = factor(obesidad, 
                                 levels = c(0, 1, 2, 3),
                                 labels = c("Normal", "Bajo peso", "Sobrepeso", "Obesidad"))) %>%
  ggplot(aes(x = obesidad_label, fill = obesidad_label)) +
  geom_bar(width = 0.5) +
  geom_text(stat = 'count', aes(label = paste0(after_stat(count), "\n(", 
              round(after_stat(count)/sum(after_stat(count))*100, 1), "%)")), 
            vjust = -0.5, size = 4.5, fontface = "bold") +
  scale_fill_manual(values = c("#27AE60", "#3498DB", "#F39C12", "#E74C3C")) +
  labs(
    title = "Distribución por estado nutricional",
    subtitle = "Clasificación según IMC y curvas de referencia OMS 2007",
    x = "Estado nutricional",
    y = "Frecuencia absoluta"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(hjust = 0.5, size = 14, face = "bold"),
    plot.subtitle = element_text(hjust = 0.5, size = 10),
    legend.position = "none",
    axis.text = element_text(size = 11)
  ) +
  ylim(0, max(table(BASE_LIMPIA$obesidad)) + 8)

análisis e interpretación Observo que el 68.0% de la muestra, correspondiente a 85 escolares, presenta un estado nutricional normal según la clasificación del IMC ajustado por edad y sexo con las curvas de referencia de la OMS 2007. Sin embargo, identifico que el 32.0% restante presenta alguna alteración en su estado nutricional, lo cual merece un análisis detallado.

El bajo peso afecta al 8.0% de la población con 10 niños, reflejando la persistencia de desnutrición infantil en sectores vulnerables,y por otro lado, el sobrepeso está presente en 13 escolares que representan el 10.4%, mientras que la obesidad se identifica en 17 niños, constituyendo el 13.6% de la muestra.

Al sumar las categorías de exceso de peso, encuentro que el 24.0% de la población evaluada presenta sobrepeso u obesidad, lo que representa prácticamente una cuarta parte de la cohorte. Considero que esta distribución del estado nutricional es característica del proceso de transición epidemiológica y nutricional que ha experimentado Colombia en los últimos años, además la coexistencia de bajo peso y exceso de peso en la misma población refleja la doble carga de malnutrición, pues por un lado, persisten casos de desnutrición asociados a pobreza y vulnerabilidad socioeconómica, y por otro lado, emerge la obesidad infantil vinculada a cambios en los patrones dietéticos hacia alimentos ultraprocesados, sedentarismo y reducción de la actividad física, aún al día de hoy.

La prevalencia del 24.0% de sobrepeso y obesidad es preocupante desde la perspectiva de salud pública, dado que el exceso de adiposidad en la infancia es el factor de riesgo más importante para el desarrollo de resistencia a la insulina, síndrome metabólico, diabetes tipo 2 e hipertensión arterial en etapas posteriores de la vida. El 24% proviene de SUMAR:Sobrepeso (10.4%) + Obesidad (13.6%) = 24.0%

Además, la obesidad infantil tiende a persistir en la adolescencia y edad adulta, configurando trayectorias de riesgo cardiovascular a largo plazo.

Análisis descriptivo de variables cuantitativas

Análisis de la variable EDAD La variable edad corresponde a una medida continua expresada en años, que permite caracterizar la distribución etaria de la población pediátrica evaluada.

# Cálculo de estadísticos descriptivos básicos y extendidos
summary(BASE_LIMPIA$edad)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    9.00   11.00   11.00   11.08   11.00   14.00
library(psych)
describe(BASE_LIMPIA$edad)
##    vars   n  mean   sd median trimmed mad min max range skew kurtosis   se
## X1    1 125 11.08 0.96     11   11.03   0   9  14     5 0.45     0.78 0.09
# Histograma optimizado con ggplot2
library(ggplot2)

ggplot(BASE_LIMPIA, aes(x = edad)) +
  geom_histogram(
    bins = 10,
    fill = "#69B3A2",
    color = "white",
    alpha = 0.9
  ) +
  labs(
    title = "Distribución de la edad en la cohorte",
    x = "Edad (años)",
    y = "Frecuencia"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5),
    axis.title.x = element_text(face = "bold"),
    axis.title.y = element_text(face = "bold")
  )

# Boxplot 
ggplot(BASE_LIMPIA, aes(x = "", y = edad)) +
  geom_boxplot(
    fill = "#4DBBD5",
    color = "black",
    width = 0.25,
    outlier.color = "red",
    outlier.shape = 16
  ) +
  geom_jitter(
    width = 0.05,
    alpha = 0.6,
    color = "gray40"
  ) +
  labs(
    title = "Diagrama de caja con distribución individual de la edad",
    y = "Edad (años)",
    x = ""
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", hjust = 0.5),
    axis.title.y = element_text(face = "bold")
  )

Interpretación descriptiva de la variable EDAD

La variable edad (años) describe la distribución etaria de los 125 participantes pediátricos de la cohorte.
Resultados generales - n = 125 participantes
- Media = 11,08 años
- Desviación estándar (DE) = 0,96 años
- Mediana = 11 años
- Mínimo = 9 años
- Máximo = 14 años
- Rango = 5 años
- Asimetría (skew) = 0,45
- Curtosis = 0,78
- Error estándar (SE) = 0,09 La edad promedio que obtuve fue de 11,08 años, con una desviación estándar de 0,96 años, lo cual significa que la mayoría de los niños y niñas tienen edades muy cercanas entre sí, con variaciones menores a un año. En cuanto al valor mínimo fue 9 años y el máximo 14 años, lo que me muestra un rango relativamente estrecho de 5 años, propio de una población escolar o pediátrica homogénea.

Cuando observo que la media (11,08) y la mediana (11) son prácticamente iguales, entiendo que los datos están equilibrados y sin sesgo hacia edades más altas o más bajas, por lo cual me confirma que la distribución de la edad en mi base de datos es estable y representativa del grupo que estudio.

Comportamiento estadístico de la variable Al revisar la asimetría (0,45) noto que existe una ligera tendencia hacia edades un poco mayores, pero este valor es bajo, por lo que no altera de forma significativa la distribución.
Por otro lado, la curtosis (0,78) me indica que la mayoría de los niños(as) se agrupan cerca del valor promedio, sin una dispersión excesiva ni presencia de valores atípicos.

En mis palabras, esto significa que la edad se comporta de forma normal, lo que me da confianza para aplicar posteriormente pruebas estadísticas paramétricas, como comparaciones de medias o correlaciones con otras variables continuas.

Perfil etario de la cohorte Cuando observo que la mayoría de los participantes tienen entre 10 y 12 años, comprendo que estoy trabajando con una población que se encuentra en una etapa prepuberal o puberal temprana.
Esta etapa es particularmente importante porque en ella comienzan los cambios hormonales y metabólicos que influyen directamente en el crecimiento, la composición corporal y la sensibilidad a la insulina.

Desde una mirada clínica y epidemiológica, me interesa analizar esta edad porque es justamente el momento donde pueden empezar a manifestarse signos tempranos de riesgo cardiometabólico, como sobrepeso, dislipidemia o hipertensión incipiente.

Dispersión y homogeneidad La baja desviación estándar (0,96) y el rango estrecho de edades me permiten afirmar que mi muestra es homogénea.
Esto es positivo porque evita que la edad actúe como un factor de confusión en los análisis posteriores, y al no existir grandes diferencias etarias entre los sujetos, puedo comparar variables como el IMC, la grasa corporal o la presión arterial con mayor precisión, sabiendo que las diferencias no se deben a la edad.

Además, esta homogeneidad mejora la validez interna del estudio y la coherencia de los resultados estadísticos.

Análisis visual El histograma que generé muestra una distribución unimodal, con una clara concentración de casos en torno a los 11 años, y sin valores extremos o anómalos, y en el boxplot se confirma que la mediana está centrada y no hay outliers importantes, lo que visualmente respalda la idea de una cohorte uniforme, compacta y sin sesgos marcados.

Ambas representaciones me ayudan a confirmar que la variable edad se comporta de manera normal, estable y bien definida dentro de esta población.

Análisis descriptivo de la variable TALLA

BASE_LIMPIA <- BASE_LIMPIA %>%
  mutate(talla = ifelse(talla > 2, talla / 100, talla))

cat("1. RESUMEN BÁSICO:\n")
## 1. RESUMEN BÁSICO:
print(summary(BASE_LIMPIA$talla))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##    1.29    1.40    1.44    1.45    1.50    1.67
cat("\n2. MEDIDAS DE TENDENCIA CENTRAL:\n")
## 
## 2. MEDIDAS DE TENDENCIA CENTRAL:
cat("Media:   ", round(mean(BASE_LIMPIA$talla, na.rm = TRUE), 3), "m\n")
## Media:    1.45 m
cat("Mediana: ", round(median(BASE_LIMPIA$talla, na.rm = TRUE), 3), "m\n")
## Mediana:  1.44 m
cat("\n3. MEDIDAS DE DISPERSIÓN:\n")
## 
## 3. MEDIDAS DE DISPERSIÓN:
cat("Desviación Estándar: ", round(sd(BASE_LIMPIA$talla, na.rm = TRUE), 3), "m\n")
## Desviación Estándar:  0.08 m
cat("Varianza:            ", round(var(BASE_LIMPIA$talla, na.rm = TRUE), 4), "m²\n")
## Varianza:             0.0065 m²
cat("Rango:               ", round(max(BASE_LIMPIA$talla, na.rm = TRUE) - min(BASE_LIMPIA$talla, na.rm = TRUE), 3), "m\n")
## Rango:                0.38 m
cat("Rango IQ:            ", round(IQR(BASE_LIMPIA$talla, na.rm = TRUE), 3), "m\n")
## Rango IQ:             0.1 m
cat("Coef. Variación:     ", round((sd(BASE_LIMPIA$talla, na.rm = TRUE) / mean(BASE_LIMPIA$talla, na.rm = TRUE)) * 100, 2), "%\n")
## Coef. Variación:      5.55 %
cat("\n4. MEDIDAS DE POSICIÓN:\n")
## 
## 4. MEDIDAS DE POSICIÓN:
cat("Mínimo:  ", round(min(BASE_LIMPIA$talla, na.rm = TRUE), 2), "m\n")
## Mínimo:   1.29 m
cat("Q1 (P25):", round(quantile(BASE_LIMPIA$talla, 0.25, na.rm = TRUE), 2), "m\n")
## Q1 (P25): 1.4 m
cat("Q2 (P50):", round(quantile(BASE_LIMPIA$talla, 0.50, na.rm = TRUE), 2), "m\n")
## Q2 (P50): 1.44 m
cat("Q3 (P75):", round(quantile(BASE_LIMPIA$talla, 0.75, na.rm = TRUE), 2), "m\n")
## Q3 (P75): 1.5 m
cat("Máximo:  ", round(max(BASE_LIMPIA$talla, na.rm = TRUE), 2), "m\n")
## Máximo:   1.67 m
cat("\n5. MEDIDAS DE FORMA:\n")
## 
## 5. MEDIDAS DE FORMA:
cat("Asimetría (Skewness): ", round(skewness(BASE_LIMPIA$talla, na.rm = TRUE), 3), "\n")
## Asimetría (Skewness):  0.432
cat("Curtosis (Kurtosis):  ", round(kurtosis(BASE_LIMPIA$talla, na.rm = TRUE), 3), "\n")
## Curtosis (Kurtosis):   2.87
tabla_talla <- BASE_LIMPIA %>%
  summarise(
    N = n(),
    Media = round(mean(talla, na.rm = TRUE), 3),
    Mediana = round(median(talla, na.rm = TRUE), 3),
    `Desv. Est.` = round(sd(talla, na.rm = TRUE), 3),
    Varianza = round(var(talla, na.rm = TRUE), 4),
    Mínimo = round(min(talla, na.rm = TRUE), 2),
    `Q1 (P25)` = round(quantile(talla, 0.25, na.rm = TRUE), 2),
    `Q2 (P50)` = round(quantile(talla, 0.50, na.rm = TRUE), 2),
    `Q3 (P75)` = round(quantile(talla, 0.75, na.rm = TRUE), 2),
    Máximo = round(max(talla, na.rm = TRUE), 2),
    Rango = round(max(talla, na.rm = TRUE) - min(talla, na.rm = TRUE), 2),
    `Rango IQ` = round(IQR(talla, na.rm = TRUE), 2),
    `CV (%)` = round((sd(talla, na.rm = TRUE) / mean(talla, na.rm = TRUE)) * 100, 2),
    Asimetría = round(skewness(talla, na.rm = TRUE), 2),
    Curtosis = round(kurtosis(talla, na.rm = TRUE), 2)
  ) %>%
  t() %>%
  as.data.frame() %>%
  tibble::rownames_to_column(var = "Estadístico")

colnames(tabla_talla)[2] <- "Valor"

kable(tabla_talla, 
      caption = "Estadísticas descriptivas de la variable TALLA",
      align = c("l", "c")) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#2C3E50") %>%
  row_spec(c(1:3), background = "#E8F8F5") %>%
  row_spec(c(4:5), background = "#FEF9E7") %>%
  row_spec(c(6:12), background = "#F4ECF7") %>%
  row_spec(c(13:15), background = "#E8F6F3")
Estadísticas descriptivas de la variable TALLA
Estadístico Valor
N 125.0000
Media 1.4500
Mediana 1.4400
Desv. Est. 0.0800
Varianza 0.0065
Mínimo 1.2900
Q1 (P25) 1.4000
Q2 (P50) 1.4400
Q3 (P75) 1.5000
Máximo 1.6700
Rango 0.3800
Rango IQ 0.1000
CV (%) 5.5500
Asimetría 0.4300
Curtosis 2.8700
par(mfrow = c(1, 2), mar = c(5, 5, 4, 2))

hist(BASE_LIMPIA$talla, 
     breaks = seq(1.25, 1.70, by = 0.05),
     col = "#9B59B6", 
     border = "white",
     main = "Distribución de Talla",
     xlab = "Talla (metros)",
     ylab = "Frecuencia absoluta",
     las = 1,
     xlim = c(1.25, 1.70),
     cex.main = 1.3,
     cex.lab = 1.1)

abline(v = mean(BASE_LIMPIA$talla, na.rm = TRUE), col = "#E67E22", lwd = 3, lty = 2)
abline(v = median(BASE_LIMPIA$talla, na.rm = TRUE), col = "#16A085", lwd = 3, lty = 2)

legend("topright", 
       legend = c(paste0("Media = ", round(mean(BASE_LIMPIA$talla, na.rm = TRUE), 3), " m"),
                  paste0("Mediana = ", round(median(BASE_LIMPIA$talla, na.rm = TRUE), 3), " m")),
       col = c("#E67E22", "#16A085"), 
       lty = 2, lwd = 3, cex = 0.9, bg = "white")

grid(nx = NA, ny = NULL, col = "gray80", lty = "dotted")

boxplot(BASE_LIMPIA$talla, 
        col = "#F39C12",
        border = "#D35400",
        main = "Diagrama de Caja: Talla",
        ylab = "Talla (metros)",
        las = 1,
        lwd = 2.5,
        boxwex = 0.4,
        outcol = "#C0392B",
        outpch = 19,
        outcex = 1.5,
        cex.main = 1.3,
        cex.lab = 1.1,
        ylim = c(1.25, 1.70),
        frame.plot = FALSE)

text(1.25, median(BASE_LIMPIA$talla, na.rm = TRUE), 
     paste0("Med = ", round(median(BASE_LIMPIA$talla, na.rm = TRUE), 2), " m"), 
     pos = 4, cex = 1.0, col = "#8E44AD", font = 2)

text(1.25, quantile(BASE_LIMPIA$talla, 0.75, na.rm = TRUE), 
     paste0("Q3 = ", round(quantile(BASE_LIMPIA$talla, 0.75, na.rm = TRUE), 2), " m"), 
     pos = 4, cex = 0.9, col = "#D35400", font = 2)

text(1.25, quantile(BASE_LIMPIA$talla, 0.25, na.rm = TRUE), 
     paste0("Q1 = ", round(quantile(BASE_LIMPIA$talla, 0.25, na.rm = TRUE), 2), " m"), 
     pos = 4, cex = 0.9, col = "#D35400", font = 2)

abline(h = mean(BASE_LIMPIA$talla, na.rm = TRUE), col = "#E67E22", lty = 2, lwd = 2)

grid(nx = NA, ny = NULL, col = "gray80", lty = "dotted")

par(mfrow = c(1, 1))

ANÁLISIS DESCRIPTIVO ESTADÍSTICO: VARIABLE TALLA (m)

La variable talla (m) es cuantitativa continua y se mide en escala de razón, ya que posee un cero absoluto (ausencia de longitud) y permite comparaciones proporcionales entre individuos.
Esta característica justifica el uso de medidas de tendencia central, dispersión, posición y forma, que describen de manera integral su comportamiento estadístico y biológico.

MEDIDAS DE TENDENCIA CENTRAL

Media = 1.45 m (145 cm)
La media aritmética representa el promedio de las tallas de los 125 escolares, por lo que se obtuvo sumando todas las observaciones y dividiendo entre el total, además esta medida resume el “centro” de los datos en un solo valor y permite comparaciones con otros grupos o estándares de referencia.

Una media de 1.45 m me indica que un escolar típico de esta cohorte mide aproximadamente 145 cm, valor coherente con el percentil 50 de las curvas de crecimiento de la OMS para niños de 11 años, lo cual sugiere un crecimiento adecuado y un desarrollo físico dentro de la normalidad.

Mediana = 1.44 m (144 cm)
La mediana divide la distribución en dos mitades iguales: el 50% de los escolares mide ≤1.44 m y el otro 50% mide ≥1.44 m.
Uso esta medida porque es robusta frente a valores extremos; si existieran niños con tallas atípicas (muy bajas o muy altas), la mediana no se vería afectada significativamente.

La diferencia mínima entre la media (1.45) y la mediana (1.44), de apenas 1 cm, confirma que la distribución es simétrica, sin sesgos ni valores extremos que distorsionen el promedio.

MEDIDAS DE DISPERSIÓN

Desviación Estándar (DE) = 0.08 m (8 cm)
La DE mide cuánto se alejan, en promedio, las tallas individuales respecto a la media.Uso esta medida porque cuantifica la variabilidad de los datos, permitiendo evaluar si la población es homogénea o diversa.

Una DE de 8 cm es moderadamente baja, indicando homogeneidad antropométrica. Según la regla (68-95-99.7), el 68% de los escolares tiene tallas entre 1.37 m y 1.53 m (media ± 1 DE), concentrándose cerca del promedio.

Coeficiente de Variación (CV) = 5.55%
El CV expresa la variabilidad relativa respecto a la mediaa asi: (0.08 / 1.45) × 100 = 5.55%.
Uso esta medida porque me permite comparar la dispersión relativa entre variables con diferentes unidades o magnitudes.

Un CV inferior al 15% lo interpreto como baja variabilidad, lo cual me confirma que el grupo es antropométricamente homogéneo, posiblemente con condiciones socioeconómicas y nutricionales similares.

Rango = 0.38 m (38 cm)
El rango representa la amplitud total de las observaciones: 1.67 m (máximo) – 1.29 m (mínimo) = 0.38 m.
Uso esta medida porque muestra la dispersión extrema de los datos, aunque puede verse afectada por valores atípicos.

Una diferencia de 38 cm entre el escolar más bajo y el más alto es fisiológicamente esperada en población de 9 a 14 años, etapa caracterizada por:

a.Diferentes estadios puberales (Tanner 1 a 3)
b.Ritmos variables en el estirón puberal
c.Influencias genéticas y ambientales naturales

Rango Intercuartílico (RIQ) = 0.10 m (10 cm)
El RIQ refleja la dispersión del 50% central de los datos: Q3 (1.50) – Q1 (1.40) = 0.10 m.
Uso esta medida porque es robusta frente a valores extremos y me permite evaluar la consistencia del grupo medio.

El 50% central de los escolares se concentra en un rango de apenas 10 cm, lo que me confirma una gran uniformidad en talla, y aunque el rango total es amplio, la mayoría de los participantes presenta valores muy similares.

MEDIDAS DE POSICIÓN (CUARTILES)

Los cuartiles dividen la distribución en cuatro partes iguales y permiten identificar dónde se concentran los valores:

Interpretación por segmentos: - Primer cuartil (1.29–1.40 m): escolares prepuberales o con menor potencial genético.
- Segundo y tercer cuartil (1.40–1.50 m): grupo mayoritario con tallas promedio típicas.
- Cuarto cuartil (1.50–1.67 m): escolares en pleno estirón puberal o con mejor estado nutricional.

MEDIDAS DE FORMA

Asimetría (Skewness) = 0.432
Esta medida evalúa el grado de simetría de la distribución en relación con la media, y se clasifica así:

a.Skewness = 0 → distribución perfectamente simétrica
b.Skewness > 0 → asimetría positiva (cola hacia la derecha)
c.Skewness < 0 → asimetría negativa (cola hacia la izquierda)

Uso esta medida porque me permite identificar sesgos estructurales en la variable, por ejemplo un valor de 0.432 indica ligera asimetría positiva, es decir, existe una pequeña cola hacia tallas mayores.

Sin embargo, este valor está dentro del rango aceptable (-0.5 < Skewness < 0.5), por lo que la distribución puede considerarse prácticamente simétrica.

Curtosis = 2.87
La curtosis me mide el grado de apuntamiento o concentración de los valores alrededor de la media.

Uso esta medida porque me informa sobre la dispersión vertical de la variable, indicando si los valores se agrupan o dispersan excesivamente.
Un valor de 2.87 ≈ 3 señala una distribución mesocúrtica, lo que implica una concentración de tallas alrededor de la media muy similar a la distribución normal teórica.

INTERPRETACIÓN DE LOS GRÁFICOS

Histograma (color morado):
El histograma me muestra una distribución unimodal, con un único pico centrado entre 1.40 y 1.50 m.
La forma de campana respalda la normalidad estadística, y la proximidad entre las líneas de media (naranja) y mediana (verde) confirma la simetría de los datos, y la ligera extensión hacia la derecha (1.60–1.67 m) explica la asimetría positiva leve, fisiológicamente esperada.

Boxplot (color naranja):
El diagrama de caja muestra una caja estrecha (RIQ ≈ 0.10 m), que representa una alta concentración del 50% central.
La mediana está ligeramente desplazada hacia abajo, coherente con la asimetría positiva observada, y se observa un único outlier (1.67 m), que corresponde a un escolar significativamente más alto, posiblemente un adolescente en estirón puberal; por tanto, no representa error de medición.

CONCLUSIÓN GENERAL

La variable talla (m) presenta una distribución normal, homogénea y simétrica, con variabilidad baja y consistencia interna elevada.

Las medidas de tendencia central, dispersión y forma coinciden en mostrar una cohorte antropométricamente equilibrada, representativa de un grupo pediátrico en crecimiento normal, por lo que esta estabilidad estadística respalda el uso de pruebas paramétricas en análisis posteriores y refuerza la validez interna del estudio.

En síntesis,creo que los datos de talla reflejan una población infantil y adolescente en desarrollo saludable, con distribución normal, bajo error de medición y alta confiabilidad metodológica.

VARIABLE PESO

cat("1. RESUMEN BÁSICO:\n")
## 1. RESUMEN BÁSICO:
print(summary(BASE_LIMPIA$peso))
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##   26.20   34.00   38.80   41.15   46.80   68.80
cat("\n2. MEDIDAS DE TENDENCIA CENTRAL:\n")
## 
## 2. MEDIDAS DE TENDENCIA CENTRAL:
cat("Media:   ", round(mean(BASE_LIMPIA$peso, na.rm = TRUE), 2), "kg\n")
## Media:    41.15 kg
cat("Mediana: ", round(median(BASE_LIMPIA$peso, na.rm = TRUE), 2), "kg\n")
## Mediana:  38.8 kg
cat("\n3. MEDIDAS DE DISPERSIÓN:\n")
## 
## 3. MEDIDAS DE DISPERSIÓN:
cat("Desviación Estándar: ", round(sd(BASE_LIMPIA$peso, na.rm = TRUE), 2), "kg\n")
## Desviación Estándar:  9.9 kg
cat("Varianza:            ", round(var(BASE_LIMPIA$peso, na.rm = TRUE), 2), "kg²\n")
## Varianza:             97.91 kg²
cat("Rango:               ", round(max(BASE_LIMPIA$peso, na.rm = TRUE) - min(BASE_LIMPIA$peso, na.rm = TRUE), 2), "kg\n")
## Rango:                42.6 kg
cat("Rango IQ:            ", round(IQR(BASE_LIMPIA$peso, na.rm = TRUE), 2), "kg\n")
## Rango IQ:             12.8 kg
cat("Coef. Variación:     ", round((sd(BASE_LIMPIA$peso, na.rm = TRUE) / mean(BASE_LIMPIA$peso, na.rm = TRUE)) * 100, 2), "%\n")
## Coef. Variación:      24.04 %
cat("\n4. MEDIDAS DE POSICIÓN:\n")
## 
## 4. MEDIDAS DE POSICIÓN:
cat("Mínimo:  ", round(min(BASE_LIMPIA$peso, na.rm = TRUE), 2), "kg\n")
## Mínimo:   26.2 kg
cat("Q1 (P25):", round(quantile(BASE_LIMPIA$peso, 0.25, na.rm = TRUE), 2), "kg\n")
## Q1 (P25): 34 kg
cat("Q2 (P50):", round(quantile(BASE_LIMPIA$peso, 0.50, na.rm = TRUE), 2), "kg\n")
## Q2 (P50): 38.8 kg
cat("Q3 (P75):", round(quantile(BASE_LIMPIA$peso, 0.75, na.rm = TRUE), 2), "kg\n")
## Q3 (P75): 46.8 kg
cat("Máximo:  ", round(max(BASE_LIMPIA$peso, na.rm = TRUE), 2), "kg\n")
## Máximo:   68.8 kg
cat("\n5. MEDIDAS DE FORMA:\n")
## 
## 5. MEDIDAS DE FORMA:
cat("Asimetría (Skewness): ", round(skewness(BASE_LIMPIA$peso, na.rm = TRUE), 3), "\n")
## Asimetría (Skewness):  0.757
cat("Curtosis (Kurtosis):  ", round(kurtosis(BASE_LIMPIA$peso, na.rm = TRUE), 3), "\n")
## Curtosis (Kurtosis):   2.914
cat("\n===============================================\n\n")
## 
## ===============================================
tabla_peso <- BASE_LIMPIA %>%
  summarise(
    N = n(),
    Media = round(mean(peso, na.rm = TRUE), 2),
    Mediana = round(median(peso, na.rm = TRUE), 2),
    `Desv. Est.` = round(sd(peso, na.rm = TRUE), 2),
    Varianza = round(var(peso, na.rm = TRUE), 2),
    Mínimo = round(min(peso, na.rm = TRUE), 2),
    `Q1 (P25)` = round(quantile(peso, 0.25, na.rm = TRUE), 2),
    `Q2 (P50)` = round(quantile(peso, 0.50, na.rm = TRUE), 2),
    `Q3 (P75)` = round(quantile(peso, 0.75, na.rm = TRUE), 2),
    Máximo = round(max(peso, na.rm = TRUE), 2),
    Rango = round(max(peso, na.rm = TRUE) - min(peso, na.rm = TRUE), 2),
    `Rango IQ` = round(IQR(peso, na.rm = TRUE), 2),
    `CV (%)` = round((sd(peso, na.rm = TRUE) / mean(peso, na.rm = TRUE)) * 100, 2),
    Asimetría = round(skewness(peso, na.rm = TRUE), 2),
    Curtosis = round(kurtosis(peso, na.rm = TRUE), 2)
  ) %>%
  t() %>%
  as.data.frame() %>%
  tibble::rownames_to_column(var = "Estadístico")

colnames(tabla_peso)[2] <- "Valor"

kable(tabla_peso, 
      caption = "Estadísticas descriptivas de la variable PESO",
      align = c("l", "c")) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#2C3E50") %>%
  row_spec(c(1:3), background = "#E8F8F5") %>%
  row_spec(c(4:5), background = "#FEF9E7") %>%
  row_spec(c(6:12), background = "#F4ECF7") %>%
  row_spec(c(13:15), background = "#E8F6F3")
Estadísticas descriptivas de la variable PESO
Estadístico Valor
N 125.00
Media 41.15
Mediana 38.80
Desv. Est. 9.90
Varianza 97.91
Mínimo 26.20
Q1 (P25) 34.00
Q2 (P50) 38.80
Q3 (P75) 46.80
Máximo 68.80
Rango 42.60
Rango IQ 12.80
CV (%) 24.04
Asimetría 0.76
Curtosis 2.91
par(mfrow = c(1, 2), mar = c(5, 5, 4, 2))

hist(BASE_LIMPIA$peso, 
     breaks = 12,
     col = "#3498DB", 
     border = "white",
     main = "Distribución de Peso",
     xlab = "Peso (kg)",
     ylab = "Frecuencia absoluta",
     las = 1,
     cex.main = 1.3,
     cex.lab = 1.1)

abline(v = mean(BASE_LIMPIA$peso, na.rm = TRUE), col = "#E74C3C", lwd = 3, lty = 2)
abline(v = median(BASE_LIMPIA$peso, na.rm = TRUE), col = "#27AE60", lwd = 3, lty = 2)

legend("topright", 
       legend = c(paste0("Media = ", round(mean(BASE_LIMPIA$peso, na.rm = TRUE), 2), " kg"),
                  paste0("Mediana = ", round(median(BASE_LIMPIA$peso, na.rm = TRUE), 2), " kg")),
       col = c("#E74C3C", "#27AE60"), 
       lty = 2, lwd = 3, cex = 0.9, bg = "white")

grid(nx = NA, ny = NULL, col = "gray80", lty = "dotted")

boxplot(BASE_LIMPIA$peso, 
        col = "#85C1E2",
        border = "#2E86C1",
        main = "Diagrama de Caja: Peso",
        ylab = "Peso (kg)",
        las = 1,
        lwd = 2.5,
        boxwex = 0.4,
        outcol = "#C0392B",
        outpch = 19,
        outcex = 1.5,
        cex.main = 1.3,
        cex.lab = 1.1,
        frame.plot = FALSE)

text(1.25, median(BASE_LIMPIA$peso, na.rm = TRUE), 
     paste0("Med = ", round(median(BASE_LIMPIA$peso, na.rm = TRUE), 2), " kg"), 
     pos = 4, cex = 1.0, col = "#8E44AD", font = 2)

text(1.25, quantile(BASE_LIMPIA$peso, 0.75, na.rm = TRUE), 
     paste0("Q3 = ", round(quantile(BASE_LIMPIA$peso, 0.75, na.rm = TRUE), 2), " kg"), 
     pos = 4, cex = 0.9, col = "#2E86C1", font = 2)

text(1.25, quantile(BASE_LIMPIA$peso, 0.25, na.rm = TRUE), 
     paste0("Q1 = ", round(quantile(BASE_LIMPIA$peso, 0.25, na.rm = TRUE), 2), " kg"), 
     pos = 4, cex = 0.9, col = "#2E86C1", font = 2)

abline(h = mean(BASE_LIMPIA$peso, na.rm = TRUE), col = "#E74C3C", lty = 2, lwd = 2)

grid(nx = NA, ny = NULL, col = "gray80", lty = "dotted")

par(mfrow = c(1, 1))

ANÁLISIS DESCRIPTIVO ESTADÍSTICO: VARIABLE PESO (kg)

La variable peso (kg) es cuantitativa continua y se mide en escala de razón, ya que posee un cero absoluto (ausencia de masa corporal) y permite comparaciones proporcionales entre individuos. Esta característica justifica el uso de medidas de tendencia central, dispersión, posición y forma, que describen de manera integral su comportamiento estadístico y su relevancia como indicador antropométrico del estado nutricional.

MEDIDAS DE TENDENCIA CENTRAL

Media = 41.15 kg La media aritmética representa el promedio de los pesos de los 125 escolares, por lo que se obtuvo sumando todas las observaciones y dividiendo entre el total, además esta medida me resume el “centro” de los datos en un solo valor y permite comparaciones con otros grupos o estándares de referencia.

Una media de 41.15 kg me indica que un escolar típico de esta cohorte pesa aproximadamente 41 kg, valor que resulta coherente para niños con edad promedio de 11.08 años y talla promedio de 145 cm, lo cual sugiere un desarrollo ponderal dentro de rangos esperados para población escolar latinoamericana.

Mediana = 38.80 kg La mediana divide la distribución en dos mitades iguales: el 50% de los escolares pesa ≤38.8 kg y el otro 50% pesa ≥38.8 kg. Uso esta medida porque es robusta frente a valores extremos; si existieran niños con pesos atípicos (muy bajos o muy altos), la mediana no se vería afectada significativamente.

La diferencia entre la media (41.15) y la mediana (38.80) es de 2.35 kg, lo cual me indica que la distribución presenta asimetría positiva, es decir, existe una pequeña proporción de escolares con pesos más elevados que me “jalan” la media hacia arriba, mientras que la mediana se mantiene más representativa del grupo central.

MEDIDAS DE DISPERSIÓN

Desviación Estándar (DE) = 9.90 kg La DE mide cuánto se alejan, en promedio, los pesos individuales respecto a la media. Uso esta medida porque cuantifica la variabilidad de los datos, permitiendo evaluar si la población es homogénea o diversa.

Una DE de 9.90 kg es considerablemente mayor comparada con otras variables antropométricas (por ejemplo, talla con DE = 0.08 m), lo que me indica heterogeneidad en la composición corporal; según la regla empírica (68-95-99.7), el 68% de los escolares tiene pesos entre 31.25 kg y 51.05 kg (media ± 1 DE), mostrando una dispersión moderada-alta.

Coeficiente de Variación (CV) = 24.04% El CV expresa la variabilidad relativa respecto a la media así: (9.90 / 41.15) × 100 = 24.04%. Uso esta medida porque me permite comparar la dispersión relativa entre variables con diferentes unidades o magnitudes.

Un CV de 24.04% es significativamente mayor que el observado en talla (5.55%), lo cual me confirma que el peso presenta mayor variabilidad entre individuos, siendo esto fisiológicamente esperado porque el peso refleja no solo la estructura ósea y talla, sino también la composición corporal (masa grasa, masa muscular, hidratación), la cual varía considerablemente según alimentación, actividad física y madurez sexual.

Rango = 42.60 kg El rango representa la amplitud total de las observaciones: 68.80 kg (máximo) – 26.20 kg (mínimo) = 42.60 kg. Uso esta medida porque muestra la dispersión extrema de los datos, aunque puede verse afectada por valores atípicos.

Una diferencia de 42.6 kg entre el escolar más liviano y el más pesado representa un 103.5% de la media, lo cual evidencia alta variabilidad ponderal, siendo este rango amplio y esperable en población de 9 a 14 años, etapa caracterizada por:

  1. Diferentes estadios de madurez sexual (prepuberal vs puberal)
  2. Inicio del estirón puberal en algunos escolares (aumento acelerado de peso)
  3. Variabilidad en composición corporal (algunos con mayor masa grasa, otros con mayor masa muscular)
  4. Diferencias en patrones alimentarios y actividad física

Rango Intercuartílico (RIQ) = 12.80 kg El RIQ refleja la dispersión del 50% central de los datos: Q3 (46.80) – Q1 (34.00) = 12.80 kg. Uso esta medida porque es robusta frente a valores extremos y me permite evaluar la consistencia del grupo medio.

El 50% central de los escolares presenta una variación de 12.8 kg, lo cual representa aproximadamente un 31% de la media. Esto me confirma que, aunque hay un outlier extremo (68.8 kg), la mayoría de la población presenta pesos relativamente concentrados, aunque con mayor dispersión que en talla. MEDIDAS DE POSICIÓN (CUARTILES)

Los cuartiles dividen la distribución en cuatro partes iguales y permiten identificar dónde se concentran los valores: Q1 = 34.00 kg: el 25% de los escolares pesa ≤34 kg(los más livianos) Q2 = 38.80 kg: corresponde a la mediana (50% pesa ≤38.8 kg). Q3 = 46.80 kg: el 75% pesa ≤46.8 kg (los más pesados dentro del grupo medio).

Uso estas medidas porque permiten examinar la estructura interna de la distribución y me ayuda a detectar concentraciones o asimetrías.

Interpretación por segmentos:

a.Primer cuartil (26.2–34.0 kg): escolares con bajo peso o en estadios prepuberales tempranos, posiblemente con menor masa muscular o adiposa. b.Segundo y tercer cuartil (34.0–46.8 kg): grupo mayoritario con pesos dentro de rangos normales para la edad y talla promedio. c.Cuarto cuartil (46.8–68.8 kg): escolares con mayor masa corporal, que podría reflejar tanto sobrepeso/obesidad como mayor desarrollo muscular en escolares más avanzados puberalmente o con mejor estado nutricional.

MEDIDAS DE FORMA

Asimetría (Skewness) = 0.757 Esta medida evalúa el grado de simetría de la distribución en relación con la media, y se clasifica así:

  1. Skewness = 0 → distribución perfectamente simétrica
  2. Skewness > 0 → asimetría positiva (cola hacia la derecha)
  3. Skewness < 0 → asimetría negativa (cola hacia la izquierda)

Uso esta medida porque me permite identificar sesgos estructurales en la variable. Por ejemplo, un valor de 0.757 me indica asimetría positiva moderada, es decir, existe una cola pronunciada hacia pesos mayores.

Este valor supera el umbral de simetría (0.5), lo que me confirma que la distribución NO es perfectamente simétrica. La presencia del outlier en 68.8 kg y la diferencia entre media y mediana (2.35 kg) respaldan esta asimetría positiva.

Interpretación clínica: Esta asimetría me sugiere que, aunque la mayoría de los escolares tiene pesos normales, existe un subgrupo con sobrepeso u obesidad que desplaza la distribución hacia la derecha.

Curtosis = 2.914 La curtosis me mide el grado de apuntamiento o concentración de los valores alrededor de la media.

Curtosis = 3 → distribución normal (mesocúrtica)
Curtosis > 3 → distribución puntiaguda (leptocúrtica)
Curtosis < 3 → distribución aplanada (platicúrtica)

Uso esta medida porque me informa sobre la dispersión vertical de la variable, indicando si los valores se agrupan o dispersan excesivamente.

Un valor de 2.914 ≈ 3 señala una distribución prácticamente mesocúrtica, lo que implica una concentración de pesos alrededor de la media muy similar a la distribución normal teórica, aunque ligeramente aplanada.

INTERPRETACIÓN DE LOS GRÁFICOS

Histograma (color azul): El histograma me muestra una distribución unimodal, con un pico principal entre 35 y 40 kg, seguido de una cola extendida hacia la derecha (pesos altos).

La separación visible entre las líneas de media (roja, 41.15 kg) y mediana (verde, 38.80 kg)me confirma visualmente la asimetría positiva. La media está desplazada hacia la derecha debido a la influencia de pesos más elevados.

La presencia de frecuencias bajas pero persistentes entre 50-70 kg explica la asimetría moderada, evidenciando que existe un pequeño grupo de escolares con sobrepeso u obesidad.

Boxplot (color azul claro): El diagrama de caja muestra una caja más ancha (RIQ = 12.8 kg) comparada con talla, lo cual representa mayor dispersión del 50% central.

La mediana está desplazada hacia el borde inferior de la caja, lo cual es consistente con la asimetría positiva que detecté numéricamente (0.757).

Se observa un outlier extremo (punto rojo en 68.8 kg), que corresponde a un escolar significativamente más pesado que el resto. Este valor está 3.03 desviaciones estándar por encima de la mediana, lo cual me sugiere posible obesidad severa o error de medición, aunque considero que el primero es más probable dado el contexto pediátrico.

CONCLUSIÓN GENERAL

La variable peso (kg) presenta una distribución con asimetría positiva moderada y mayor heterogeneidad comparada con talla, reflejando la variabilidad natural en composición corporal durante el desarrollo puberal.

Las medidas de tendencia central difieren significativamente (media = 41.15 kg vs mediana = 38.80 kg), lo cual me confirma la presencia de valores elevados que influyen en el promedio, y el coeficiente de variación alto (24.04%) indica que el peso es una variable más dispersa que la talla, lo cual es fisiológicamente esperado porque integra múltiples componentes (hueso, músculo, grasa, agua).

La asimetría positiva (0.757) y la presencia de un outlier (68.8 kg) sugieren que existe un subgrupo de escolares con sobrepeso u obesidad, lo cual tiene relevancia epidemiológica para la caracterización del riesgo cardiometabólico en esta cohorte.

En síntesis, creo que los datos de peso reflejan una población infantil y adolescente con variabilidad ponderal normal, aunque con señales de alerta respecto a exceso de peso en algunos individuos, lo cual justifica análisis posteriores estratificados por estado nutricional (IMC) y composición corporal (% grasa) para identificar perfiles de riesgo metabólico.

ANÁLISIS VARIABLES CARDIOVASCULARES Presión Arterial Sistólica (PAS) y Diastólica (PAD)

tabla_pas <- BASE_LIMPIA %>%
  summarise(
    N = n(),
    Media = round(mean(pas, na.rm = TRUE), 2),
    Mediana = round(median(pas, na.rm = TRUE), 2),
    `Desv. Est.` = round(sd(pas, na.rm = TRUE), 2),
    Varianza = round(var(pas, na.rm = TRUE), 2),
    Minimo = round(min(pas, na.rm = TRUE), 1),
    `Q1 (P25)` = round(quantile(pas, 0.25, na.rm = TRUE), 1),
    `Q2 (P50)` = round(quantile(pas, 0.50, na.rm = TRUE), 1),
    `Q3 (P75)` = round(quantile(pas, 0.75, na.rm = TRUE), 1),
    Maximo = round(max(pas, na.rm = TRUE), 1),
    Rango = round(max(pas, na.rm = TRUE) - min(pas, na.rm = TRUE), 1),
    `Rango IQ` = round(IQR(pas, na.rm = TRUE), 1),
    `CV (%)` = round((sd(pas, na.rm = TRUE) / mean(pas, na.rm = TRUE)) * 100, 2),
    Asimetria = round(skewness(pas, na.rm = TRUE), 3),
    Curtosis = round(kurtosis(pas, na.rm = TRUE), 3)
  ) %>%
  t() %>%
  as.data.frame() %>%
  tibble::rownames_to_column(var = "Estadistico")

colnames(tabla_pas)[2] <- "PAS (mmHg)"

tabla_pad <- BASE_LIMPIA %>%
  summarise(
    N = n(),
    Media = round(mean(pad, na.rm = TRUE), 2),
    Mediana = round(median(pad, na.rm = TRUE), 2),
    `Desv. Est.` = round(sd(pad, na.rm = TRUE), 2),
    Varianza = round(var(pad, na.rm = TRUE), 2),
    Minimo = round(min(pad, na.rm = TRUE), 1),
    `Q1 (P25)` = round(quantile(pad, 0.25, na.rm = TRUE), 1),
    `Q2 (P50)` = round(quantile(pad, 0.50, na.rm = TRUE), 1),
    `Q3 (P75)` = round(quantile(pad, 0.75, na.rm = TRUE), 1),
    Maximo = round(max(pad, na.rm = TRUE), 1),
    Rango = round(max(pad, na.rm = TRUE) - min(pad, na.rm = TRUE), 1),
    `Rango IQ` = round(IQR(pad, na.rm = TRUE), 1),
    `CV (%)` = round((sd(pad, na.rm = TRUE) / mean(pad, na.rm = TRUE)) * 100, 2),
    Asimetria = round(skewness(pad, na.rm = TRUE), 3),
    Curtosis = round(kurtosis(pad, na.rm = TRUE), 3)
  ) %>%
  t() %>%
  as.data.frame()

colnames(tabla_pad) <- "PAD (mmHg)"

tabla_presion <- cbind(tabla_pas, tabla_pad)

kable(tabla_presion, 
      caption = "Estadisticas descriptivas: Presion Arterial Sistolica y Diastolica",
      align = c("l", "c", "c")) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#C0392B") %>%
  row_spec(c(1:3), background = "#FADBD8") %>%
  row_spec(c(4:5), background = "#FEF5E7") %>%
  row_spec(c(6:12), background = "#EBF5FB") %>%
  row_spec(c(13:15), background = "#E8F8F5")
Estadisticas descriptivas: Presion Arterial Sistolica y Diastolica
Estadistico PAS (mmHg) PAD (mmHg)
N N 125.000 125.000
Media Media 115.110 73.270
Mediana Mediana 115.000 74.000
Desv. Est. Desv. Est. 11.220 9.060
Varianza Varianza 125.940 82.090
Minimo Minimo 88.000 55.000
Q1 (P25) Q1 (P25) 108.000 67.000
Q2 (P50) Q2 (P50) 115.000 74.000
Q3 (P75) Q3 (P75) 122.000 79.000
Maximo Maximo 142.000 100.000
Rango Rango 54.000 45.000
Rango IQ Rango IQ 14.000 12.000
CV (%) CV (%) 9.750 12.370
Asimetria Asimetria 0.178 0.272
Curtosis Curtosis 2.834 3.039
par(mfrow = c(2, 2), mar = c(4.5, 4.5, 3.5, 2))

hist(BASE_LIMPIA$pas, 
     breaks = 15,
     col = "#E74C3C", 
     border = "white",
     main = "Distribucion de PAS",
     xlab = "PAS (mmHg)",
     ylab = "Frecuencia",
     las = 1,
     cex.main = 1.2,
     cex.lab = 1.0)
abline(v = mean(BASE_LIMPIA$pas), col = "#C0392B", lwd = 3, lty = 2)
abline(v = median(BASE_LIMPIA$pas), col = "#27AE60", lwd = 3, lty = 2)
legend("topright", 
       legend = c(paste0("Media=", round(mean(BASE_LIMPIA$pas), 1)),
                  paste0("Mediana=", round(median(BASE_LIMPIA$pas), 1))),
       col = c("#C0392B", "#27AE60"), lty = 2, lwd = 2.5, cex = 0.85)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

boxplot(BASE_LIMPIA$pas, 
        col = "#F1948A",
        border = "#922B21",
        main = "Diagrama de Caja: PAS",
        ylab = "PAS (mmHg)",
        las = 1,
        lwd = 2,
        boxwex = 0.5,
        outcol = "#8E44AD",
        outpch = 19,
        cex.main = 1.2,
        cex.lab = 1.0)
abline(h = 120, col = "#E67E22", lty = 2, lwd = 2)
text(1.32, 120, "Limite HTA", pos = 3, cex = 0.8, col = "#E67E22", font = 2)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

hist(BASE_LIMPIA$pad, 
     breaks = 15,
     col = "#3498DB", 
     border = "white",
     main = "Distribucion de PAD",
     xlab = "PAD (mmHg)",
     ylab = "Frecuencia",
     las = 1,
     cex.main = 1.2,
     cex.lab = 1.0)
abline(v = mean(BASE_LIMPIA$pad), col = "#2874A6", lwd = 3, lty = 2)
abline(v = median(BASE_LIMPIA$pad), col = "#27AE60", lwd = 3, lty = 2)
legend("topright", 
       legend = c(paste0("Media=", round(mean(BASE_LIMPIA$pad), 1)),
                  paste0("Mediana=", round(median(BASE_LIMPIA$pad), 1))),
       col = c("#2874A6", "#27AE60"), lty = 2, lwd = 2.5, cex = 0.85)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

boxplot(BASE_LIMPIA$pad, 
        col = "#85C1E2",
        border = "#1B4F72",
        main = "Diagrama de Caja: PAD",
        ylab = "PAD (mmHg)",
        las = 1,
        lwd = 2,
        boxwex = 0.5,
        outcol = "#8E44AD",
        outpch = 19,
        cex.main = 1.2,
        cex.lab = 1.0)
abline(h = 80, col = "#E67E22", lty = 2, lwd = 2)
text(1.32, 80, "Limite HTA", pos = 3, cex = 0.8, col = "#E67E22", font = 2)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

par(mfrow = c(1, 1))

presion_pulso <- BASE_LIMPIA$pas - BASE_LIMPIA$pad
tabla_pp <- data.frame(
  Estadistico = c("Media", "Mediana", "Desv. Est.", "Rango", "CV (%)"),
  Valor = c(
    round(mean(presion_pulso), 2),
    round(median(presion_pulso), 2),
    round(sd(presion_pulso), 2),
    paste(round(min(presion_pulso), 1), "-", round(max(presion_pulso), 1)),
    round((sd(presion_pulso)/mean(presion_pulso))*100, 2)
  )
)

kable(tabla_pp, 
      caption = "Presion de Pulso (PAS - PAD)",
      align = c("l", "c")) %>%
  kable_styling(bootstrap_options = c("striped", "hover"),
                full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#8E44AD")
Presion de Pulso (PAS - PAD)
Estadistico Valor
Media 41.84
Mediana 41
Desv. Est. 10.86
Rango 18 - 77
CV (%) 25.97

INTERPRETACIÓN ESTADÍSTICA Y CLÍNICA PRESIÓN ARTERIAL SISTÓLICA (PAS)

Medidas de tendencia central La media de PAS fue 115.11 mmHg y la mediana 115.00 mmHg, valores prácticamente idénticos que me confirman una distribución simétrica sin sesgos. Esta presión promedio se sitúa en el límite superior del rango normal para escolares de 11 años (95-115 mmHg según tablas pediátricas), lo cual me sugiere que, aunque la mayoría tiene presión normal, un porcentaje importante se encuentra en la zona de prehipertensión (115-125 mmHg).

Medidas de dispersión

La desviación estándar de 11.22 mmHg me indica una variabilidad moderada, con un coeficiente de variación del 9.75%, lo cual representa una dispersión baja en términos relativos. El rango intercuartílico de 14 mmHg (Q1=108 a Q3=122) me muestra que el 50% central de los escolares tiene presiones concentradas en un intervalo relativamente estrecho, aunque el rango total de 54 mmHg (88-142 mmHg) evidencia que existen escolares tanto con presiones bajas como con valores claramente elevados.

Medidas de forma La asimetría cercana a cero y la curtosis próxima a 3 me confirman que la PAS se distribuye de forma prácticamente normal, lo cual valida el uso de pruebas paramétricas y facilita la comparación con percentiles de referencia.

PRESIÓN ARTERIAL DIASTÓLICA (PAD) Medidas de tendencia central

La media de PAD fue 73.27 mmHg y la mediana 74.00 mmHg, con una diferencia mínima que también me indica simetría. Este valor promedio se encuentra dentro del rango normal para la edad (60-80 mmHg), aunque en el límite superior, lo cual me sugiere que la mayoría de los escolares presenta presiones diastólicas adecuadas pero con tendencia hacia valores más altos.

Medidas de dispersión La desviación estándar de 9.06 mmHg y el CV de 12.36% son ligeramente menores que en PAS, indicando variabilidad moderada similar. El rango de 45 mmHg (55-100 mmHg) y el RIQ de 12 mmHg (Q1=67 a Q3=79) me muestran un patrón similar al observado en PAS, pues la concentración del grupo es central pero con valores extremos en ambas direcciones, y la presencia de un valor máximo de 100 mmHg es particularmente preocupante, ya que corresponde a hipertensión diastólica severa.

COMPARACIÓN PAS VS PAD Al comparar ambas variables, observo que:

PAS presenta mayor dispersión absoluta (DE=11.22 mmHg) comparada con PAD (DE=9.06 mmHg) PAD presenta mayor dispersión relativa (CV=12.36%) comparada con PAS (CV=9.75%) Ambas tienen RIQ similares: PAS=14 mmHg, PAD=12 mmHg

Esto es fisiológicamente esperado porque la presión sistólica refleja la fuerza de eyección cardíaca (que varía más entre individuos según estado físico, ansiedad, actividad), mientras que la diastólica depende más de la resistencia vascular periférica (más estable pero con mayor variabilidad relativa en población pediátrica), según la literatura.

INTERPRETACIÓN CONJUNTA: PERFIL DE PRESIÓN ARTERIAL Presión de pulso (PP = PAS - PAD) La presión de pulso promedio fue 41.84 mmHg, con una mediana de 41 mmHg, valores que se encuentran dentro del rango normal (40-50 mmHg). La desviación estándar de 10.86 mmHg y el CV de 25.97% me indican una variabilidad considerable, mayor que la observada en PAS y PAD individualmente.

El rango amplio de 18-77 mmHg evidencia heterogeneidad en la elasticidad arterial de la cohorte, además la PP refleja la distensibilidad arterial y me indica qué tan “rígidas” o “elásticas” están las arterias, pues una PP promedio normal sugiere que, en general, la cohorte presenta buena elasticidad vascular, característica esperable en población pediátrica sin daño vascular crónico,sin embargo, la alta variabilidad (CV=25.97%) me alerta sobre posibles diferencias en el estado cardiovascular entre subgrupos.

Distribución visual Los histogramas me muestran distribuciones unimodales y simétricas para ambas presiones, con picos centrados en valores normales-altos pero con colas extendidas hacia valores elevados, especialmente en PAS, además los boxplots confirman esta distribución, evidenciada por:

PAS máxima: 142 mmHg (claramente hipertensiva) PAD máxima: 100 mmHg (hipertensión diastólica severa) Límite de HTA marcado en 120 mmHg (PAS) y 80 mmHg (PAD)

Visualmente, observo que aproximadamente el 50% de los escolares supera 115 mmHg en PAS y el 50% supera 74 mmHg en PAD, confirmando la tendencia hacia presiones en el límite superior de la normalidad.

Relación PAS/PAD La proporción media PAS/PAD = 115.11/73.27 = 1.57 se encuentra dentro del rango esperado (1.5-2.0), lo cual me indica que la relación fisiológica entre presiones se mantiene preservada en la mayoría de los escolares. Una alteración de esta relación podría sugerir patología cardiovascular específica.

Prevalencia estimada de alteraciones Basándome en la distribución observada y los puntos de corte pediátricos, estimo que:

PAS <115 mmHg (normal): aproximadamente 50% de los escolares PAS 115-122 mmHg (prehipertensión): aproximadamente 35-40% PAS >122 mmHg (hipertensión): aproximadamente 10-15%

Esta distribución me muestra que, aunque la mitad tiene presión normal, existe un subgrupo significativo con valores elevados que requeriría evaluación médica y seguimiento clínico.

Implicaciones epidemiológicas La presencia de valores de PAS y PAD promedio en el límite superior de la normalidad (115.11 y 73.27 mmHg respectivamente) y la prevalencia estimada de 50% con prehipertensión o hipertensión constituyen hallazgos de alerta epidemiológica para esta cohorte, y podría estar relacionado con: a. Sobrepeso y obesidad (ya detectados en el análisis de peso con media=41.15 kg y asimetría positiva) b. Sedentarismo y baja aptitud cardiorrespiratoria c. Dieta alta en sodio (común en población escolar colombiana) d. Factores genéticos y antecedentes familiares de hipertensión e. Estrés académico y ansiedad en escolares

Estos resultados justifican estrategias de prevención cardiovascular temprana, incluyendo:

1.Promoción de actividad física regular (mínimo 30 min/día según OMS) 2.Educación nutricional (reducción de sodio, aumento de potasio) 3.Tamizaje periódico de factores de riesgo metabólico 4.Evaluación de antecedentes familiares de HTA 5.Monitoreo ambulatorio de presión arterial en casos limítrofes

CONCLUSIÓN Creo que las variables cardiovasculares reflejan a una población con presiones arteriales en promedio normales-altas, con ambas presiones (sistólica y diastólica) situadas en el límite superior del rango pediátrico normal.

La presión de pulso normal (41.84 mmHg) me indica que la elasticidad arterial se mantiene preservada a nivel poblacional, aunque la alta variabilidad individual (CV=25.97%) sugiere diferencias en el estado cardiovascular entre subgrupos.

Existe un subgrupo significativo en riesgo (aproximadamente 50% con valores ≥115/74 mmHg) que requeríria intervención preventiva para evitar el desarrollo de hipertensión arterial crónica en la vida adulta, especialmente considerando que la hipertensión infantil es un predictor fuerte de hipertensión en la adultez.

ANÁLISIS VARIABLES ANTROPOMÉTRICAS: PERÍMETROS CORPORALES Perímetro de Cintura y Perímetro de Cadera

tabla_cintura <- BASE_LIMPIA %>%
  summarise(
    N = n(),
    Media = round(mean(per__cintura, na.rm = TRUE), 2),
    Mediana = round(median(per__cintura, na.rm = TRUE), 2),
    `Desv. Est.` = round(sd(per__cintura, na.rm = TRUE), 2),
    Varianza = round(var(per__cintura, na.rm = TRUE), 2),
    Minimo = round(min(per__cintura, na.rm = TRUE), 1),
    `Q1 (P25)` = round(quantile(per__cintura, 0.25, na.rm = TRUE), 1),
    `Q2 (P50)` = round(quantile(per__cintura, 0.50, na.rm = TRUE), 1),
    `Q3 (P75)` = round(quantile(per__cintura, 0.75, na.rm = TRUE), 1),
    Maximo = round(max(per__cintura, na.rm = TRUE), 1),
    Rango = round(max(per__cintura, na.rm = TRUE) - min(per__cintura, na.rm = TRUE), 1),
    `Rango IQ` = round(IQR(per__cintura, na.rm = TRUE), 1),
    `CV (%)` = round((sd(per__cintura, na.rm = TRUE) / mean(per__cintura, na.rm = TRUE)) * 100, 2),
    Asimetria = round(skewness(per__cintura, na.rm = TRUE), 3),
    Curtosis = round(kurtosis(per__cintura, na.rm = TRUE), 3)
  ) %>%
  t() %>%
  as.data.frame() %>%
  tibble::rownames_to_column(var = "Estadistico")

colnames(tabla_cintura)[2] <- "Cintura (cm)"

tabla_cadera <- BASE_LIMPIA %>%
  summarise(
    N = n(),
    Media = round(mean(per__cadera, na.rm = TRUE), 2),
    Mediana = round(median(per__cadera, na.rm = TRUE), 2),
    `Desv. Est.` = round(sd(per__cadera, na.rm = TRUE), 2),
    Varianza = round(var(per__cadera, na.rm = TRUE), 2),
    Minimo = round(min(per__cadera, na.rm = TRUE), 1),
    `Q1 (P25)` = round(quantile(per__cadera, 0.25, na.rm = TRUE), 1),
    `Q2 (P50)` = round(quantile(per__cadera, 0.50, na.rm = TRUE), 1),
    `Q3 (P75)` = round(quantile(per__cadera, 0.75, na.rm = TRUE), 1),
    Maximo = round(max(per__cadera, na.rm = TRUE), 1),
    Rango = round(max(per__cadera, na.rm = TRUE) - min(per__cadera, na.rm = TRUE), 1),
    `Rango IQ` = round(IQR(per__cadera, na.rm = TRUE), 1),
    `CV (%)` = round((sd(per__cadera, na.rm = TRUE) / mean(per__cadera, na.rm = TRUE)) * 100, 2),
    Asimetria = round(skewness(per__cadera, na.rm = TRUE), 3),
    Curtosis = round(kurtosis(per__cadera, na.rm = TRUE), 3)
  ) %>%
  t() %>%
  as.data.frame()

colnames(tabla_cadera) <- "Cadera (cm)"

tabla_perimetros <- cbind(tabla_cintura, tabla_cadera)

kable(tabla_perimetros, 
      caption = "Estadisticas descriptivas: Perimetro de Cintura y Cadera",
      align = c("l", "c", "c")) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#E67E22") %>%
  row_spec(c(1:3), background = "#FCF3CF") %>%
  row_spec(c(4:5), background = "#D5F4E6") %>%
  row_spec(c(6:12), background = "#EBF5FB") %>%
  row_spec(c(13:15), background = "#F4ECF7")
Estadisticas descriptivas: Perimetro de Cintura y Cadera
Estadistico Cintura (cm) Cadera (cm)
N N 125.000 125.000
Media Media 67.730 79.590
Mediana Mediana 66.000 77.590
Desv. Est. Desv. Est. 10.330 9.850
Varianza Varianza 106.770 97.050
Minimo Minimo 34.600 57.700
Q1 (P25) Q1 (P25) 61.000 73.000
Q2 (P50) Q2 (P50) 66.000 77.600
Q3 (P75) Q3 (P75) 72.000 85.900
Maximo Maximo 101.000 104.200
Rango Rango 66.400 46.500
Rango IQ Rango IQ 11.000 12.900
CV (%) CV (%) 15.260 12.380
Asimetria Asimetria 0.652 0.374
Curtosis Curtosis 4.049 2.694
par(mfrow = c(2, 2), mar = c(4.5, 4.5, 3.5, 2))

hist(BASE_LIMPIA$per__cintura, 
     breaks = 15,
     col = "#F39C12", 
     border = "white",
     main = "Distribucion de Perimetro de Cintura",
     xlab = "Cintura (cm)",
     ylab = "Frecuencia",
     las = 1,
     cex.main = 1.2,
     cex.lab = 1.0)
abline(v = mean(BASE_LIMPIA$per__cintura), col = "#D68910", lwd = 3, lty = 2)
abline(v = median(BASE_LIMPIA$per__cintura), col = "#27AE60", lwd = 3, lty = 2)
legend("topright", 
       legend = c(paste0("Media=", round(mean(BASE_LIMPIA$per__cintura), 1)),
                  paste0("Mediana=", round(median(BASE_LIMPIA$per__cintura), 1))),
       col = c("#D68910", "#27AE60"), lty = 2, lwd = 2.5, cex = 0.85)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

boxplot(BASE_LIMPIA$per__cintura, 
        col = "#F8C471",
        border = "#935116",
        main = "Diagrama de Caja: Cintura",
        ylab = "Cintura (cm)",
        las = 1,
        lwd = 2,
        boxwex = 0.5,
        outcol = "#C0392B",
        outpch = 19,
        cex.main = 1.2,
        cex.lab = 1.0)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

hist(BASE_LIMPIA$per__cadera, 
     breaks = 15,
     col = "#52BE80", 
     border = "white",
     main = "Distribucion de Perimetro de Cadera",
     xlab = "Cadera (cm)",
     ylab = "Frecuencia",
     las = 1,
     cex.main = 1.2,
     cex.lab = 1.0)
abline(v = mean(BASE_LIMPIA$per__cadera), col = "#229954", lwd = 3, lty = 2)
abline(v = median(BASE_LIMPIA$per__cadera), col = "#E67E22", lwd = 3, lty = 2)
legend("topright", 
       legend = c(paste0("Media=", round(mean(BASE_LIMPIA$per__cadera), 1)),
                  paste0("Mediana=", round(median(BASE_LIMPIA$per__cadera), 1))),
       col = c("#229954", "#E67E22"), lty = 2, lwd = 2.5, cex = 0.85)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

boxplot(BASE_LIMPIA$per__cadera, 
        col = "#A9DFBF",
        border = "#196F3D",
        main = "Diagrama de Caja: Cadera",
        ylab = "Cadera (cm)",
        las = 1,
        lwd = 2,
        boxwex = 0.5,
        outcol = "#C0392B",
        outpch = 19,
        cex.main = 1.2,
        cex.lab = 1.0)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

par(mfrow = c(1, 1))

icc <- BASE_LIMPIA$per__cintura / BASE_LIMPIA$per__cadera
tabla_icc <- data.frame(
  Estadistico = c("Media", "Mediana", "Desv. Est.", "Rango", "CV (%)"),
  Valor = c(
    round(mean(icc, na.rm = TRUE), 3),
    round(median(icc, na.rm = TRUE), 3),
    round(sd(icc, na.rm = TRUE), 3),
    paste(round(min(icc, na.rm = TRUE), 2), "-", round(max(icc, na.rm = TRUE), 2)),
    round((sd(icc, na.rm = TRUE)/mean(icc, na.rm = TRUE))*100, 2)
  )
)

kable(tabla_icc, 
      caption = "Indice Cintura/Cadera (ICC)",
      align = c("l", "c")) %>%
  kable_styling(bootstrap_options = c("striped", "hover"),
                full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#8E44AD")
Indice Cintura/Cadera (ICC)
Estadistico Valor
Media 0.852
Mediana 0.846
Desv. Est. 0.08
Rango 0.44 - 1.25
CV (%) 9.35

INTERPRETACIÓN ESTADÍSTICA Y CLÍNICA: PERÍMETROS CORPORALESPERÍMETRO DE CINTURA

Medidas de tendencia central

La media de perímetro de cintura fue 67.73 cm y la mediana 66.00 cm, con una diferencia de 1.73 cm que me sugiere una ligera asimetría positiva.

Este perímetro promedio es particularmente relevante porque el perímetro de cintura elevado es uno de los cinco criterios diagnósticos centrales del síndrome metabólico tanto en adultos como en niños, según las definiciones propuestas por diferentes organizaciones internacionales.

Específicamente, la International Diabetes Federation (IDF) establece que para adolescentes de 10 a 16 años, un perímetro de cintura ≥percentil 90 (ajustado por edad, sexo y etnia) constituye un criterio obligatorio para el diagnóstico de síndrome metabólico, ya que la obesidad abdominal es considerada el factor desencadenante central de las alteraciones metabólicas.

En esta cohorte con edad promedio de 11.08 años, un perímetro de cintura medio de 67.73 cm se sitúa aproximadamente en el percentil 75-85 según referencias de NHANES III, lo cual me indica una tendencia poblacional hacia adiposidad central elevada.

Medidas de dispersión

La desviación estándar de 10.33 cm me indica una variabilidad considerable, con un coeficiente de variación del 15.25%, valor que representa dispersión moderada-alta y es significativamente mayor que la observada en talla (CV=5.55%).

Esta alta variabilidad refleja la heterogeneidad en la distribución de grasa visceral entre los escolares, lo cual tiene implicaciones clínicas importantes porque la obesidad visceral, más que el índice de masa corporal, es el principal determinante de la resistencia a la insulina y las complicaciones metabólicas en población pediátrica.

El rango de 65.4 cm (34.6-100 cm) es extraordinariamente amplio y evidencia la coexistencia de escolares con cinturas muy delgadas junto a otros con obesidad abdominal severa.

La presencia de escolares con perímetros de cintura superiores a 85-90 cm es clínicamente alarmante, ya que estudios como el de Taksali et al. han demostrado que la grasa visceral elevada es el determinante de un fenotipo metabólico adverso en adolescentes obesos, caracterizado por mayor resistencia a la insulina, dislipidemia aterogénica e hígado graso [22].

El rango intercuartílico de 11 cm me muestra que incluso el 50% central presenta variabilidad importante, lo cual sugiere que no todos los niños con sobrepeso desarrollan el mismo patrón de distribución grasa.

Esto es consistente con la descripción de dos fenotipos distintos en niños obesos:

-metabolically healthy obese (MHO) y metabolically unhealthy obese (MUO), donde la diferencia clave radica en el grado de acumulación de grasa visceral y la consecuente sensibilidad a la insulina.

Distribución visual e implicaciones fisiopatológicas

El histograma me muestra una distribución con asimetría positiva pronunciada con un pico centrado entre 60-70 cm pero con una cola extendida hacia valores muy altos (80-100 cm).

El boxplot confirma la presencia de múltiples outliers en el extremo superior, representando escolares con perímetros claramente patológicos.

Esta adiposidad central tiene profundas implicaciones metabólicas porque los adipocitos hipertróficos del tejido adiposo visceral secretan moléculas proinflamatorias (TNF-α, IL-6, leptina) y presentan reducida supresión de la lipólisis mediada por insulina, lo cual resulta en aumento de ácidos grasos libres circulantes que se acumulan ectópicamente en páncreas, hígado y músculo, generando lipotoxicidad y resistencia a la insulina.

PERÍMETRO DE CADERA Medidas de tendencia central

La media de perímetro de cadera fue 79.59 cm y la mediana 77.59 cm, con una diferencia de 2 cm que también me indica asimetría positiva leve, por lo que este valor promedio es consistente con el desarrollo esperado para escolares de 11 años con talla promedio de 145 cm y refleja principalmente la grasa glúteo-femoral subcutánea, que tiene un perfil metabólico más favorable comparado con la grasa visceral [20,90].

Medidas de dispersión La desviación estándar de 9.85 cm y el CV de 12.38% me indican variabilidad moderada, ligeramente menor que la observada en cintura (CV=15.25%), y siendo esta diferencia fisiológicamente relevante porque sugiere que la variabilidad se concentra más en la región abdominal (grasa visceral proinflamatoria) que en la región glútea (grasa subcutánea protectora).

El rango de 42.3 cm (57.7-100 cm) es amplio pero proporcionalmente menor que el de cintura (65.4 cm), lo cual me confirma que la heterogeneidad metabólica de la cohorte se debe principalmente a diferencias en la acumulación de grasa central, no periférica.

Distribución visual El histograma me muestra una distribución más simétrica y unimodal comparada con cintura, con un pico claro entre 75-80 cm y menor extensión de la cola derecha.

El boxplot confirma menos outliers extremos que en cintura, lo cual es consistente con el hecho de que la grasa subcutánea glúteo-femoral tiene menor capacidad de expansión patológica comparada con el compartimento visceral.

COMPARACIÓN CINTURA VS CADERA: PATRÓN DE DISTRIBUCIÓN ADIPOSA Al comparar ambas variables, observo patrones contrastantes con relevancia fisiopatológica:

Cintura presenta mayor variabilidad absoluta (DE=10.33 vs 9.85),la cintura muestra más outliers extremos en valores altos

El rango de cintura es desproporcionadamente mayor (65.4 cm vs 42.3 cm),donde la asimetría positiva es más pronunciada en cintura

Esta diferencia es clínicamente significativa porque me confirma que la acumulación de grasa abdominal presenta mayor heterogeneidad y valores más extremos que la grasa periférica y desde la perspectiva fisiopatológica, esto tiene sentido porque la grasa visceral es un órgano endocrino activo que secreta adipoquinas proinflamatorias como leptina (que contribuye a hipertensión por activación del sistema nervioso simpático), TNF-α (que induce fosforilación de serina del IRS-1 y disminuye expresión de GLUT4, generando resistencia a la insulina) e IL-6 (que estimula producción hepática de proteína C reactiva, perpetuando la inflamación crónica de bajo grado característica de la obesidad).

Por el contrario, la grasa subcutánea produce mayor cantidad de adiponectina, una adipoquina con efectos antiinflamatorios y protectores que inhibe los receptores tipo Toll (TLRs) y estimula la oxidación de ácidos grasos libres, previniendo la acumulación lipídica ectópica.

INTERPRETACIÓN CONJUNTA: ÍNDICE CINTURA/CADERA (ICC) Significado clínico y fisiopatológico del ICC

El ICC = cintura/cadera es un indicador validado de patrón de distribución de grasa corporal que distingue entre dos fenotipos metabólicos:

-ICC bajo (<0.85): distribución ginoide (grasa principalmente en cadera/muslos) → menor riesgo metabólico, mayor adiponectina, menor inflamación.

-ICC alto (>0.90 en niños, >0.85 en niñas): distribución androide (grasa central/abdominal) → mayor riesgo cardiometabólico, menor adiponectina, mayor TNF-α e IL-6

Este índice es particularmente útil en población pediátrica porque permite identificar el fenotipo MUO (metabolically unhealthy obese) independientemente del IMC, ya que dos niños con el mismo IMC pueden tener perfiles metabólicos radicalmente distintos según su patrón de distribución grasa.

Resultados del ICC en la cohorte

La media de ICC fue 0.852 con mediana 0.846, valores prácticamente idénticos que me confirman distribución simétrica. Este ICC promedio se encuentra en el límite superior aceptable para población pediátrica mixta, lo cual me sugiere una tendencia hacia distribución androide a nivel poblacional.

La desviación estándar de 0.08 y el CV de 9.35% me indican baja variabilidad relativa del índice, lo cual es aparentemente paradójico considerando la alta variabilidad de cintura y cadera individualmente.

Esta aparente contradicción considero que es porque ambos perímetros varían de forma proporcional en la mayoría de los escolares, manteniendo un ratio relativamente constante dentro del rango normal-alto.

Hallazgo crítico: rango extremo del ICC El rango de 0.44 a 1.25 me alerta sobre la existencia de subgrupos con patrones de distribución grasa metabólicamente muy distintos:

-ICC 0.44-0.70: escolares con distribución ginoide marcada (probablemente prepuberales o con patrón femenino), con grasa predominante en región glúteo-femoral y menor riesgo de síndrome metabólico

-ICC 0.80-0.90: distribución intermedia (mayoría de la cohorte), representa el patrón típico de niños en transición puberal ICC >1.00: escolares con obesidad central severa, donde la cintura supera la cadera (patrón androide extremo)

La presencia de escolares con ICC = 1.25 es extremadamente preocupante y clínicamente inusual en población pediátrica. Un ICC de 1.25 significa que la cintura es 25% mayor que la cadera, patrón casi exclusivo de obesidad visceral masiva.

Este fenotipo se ha asociado fuertemente con síndrome metabólico completo, resistencia severa a la insulina, esteatosis hepática no alcohólica, hipertensión y dislipidemia aterogénica en niños y adolescentes.

Desde el punto de vista fisiopatológico, un ICC tan elevado implica acumulación masiva de grasa visceral, lo cual genera: a. Exceso de ácidos grasos libres liberados hacia la vena porta, que llegan directamente al hígado causando lipotoxicidad hepática, resistencia a la insulina hepática y esteatosis.

  1. Estado proinflamatorio sistémico por secreción aumentada de TNF-α e IL-6 desde el tejido adiposo visceral, con activación de macrófagos M1 infiltrantes.

  2. Reducción de adiponectina sérica, eliminando el efecto protector de esta adipoquina sobre la sensibilidad a la insulina y la función endotelial.

  3. Hiperproducción de leptina con desarrollo de “resistencia a la leptina”, lo cual perpetúa el balance energético positivo y estimula el sistema nervioso simpático, contribuyendo a hipertensión.

Prevalencia estimada de obesidad central por ICC Basándome en la distribución del ICC y considerando puntos de corte pediátricos, estimo que aproximadamente:

-ICC <0.85 (riesgo metabólico bajo): ~50% de los escolares -ICC 0.85-0.95 (riesgo moderado): ~40% -ICC >0.95 (riesgo alto): ~10%

Esta prevalencia de 10-15% con obesidad central severa es consistente con los outliers observados en el boxplot de cintura y con la prevalencia global de síndrome metabólico pediátrico reportada, que afecta aproximadamente al 10% de niños con obesidad.

IMPLICACIONES EPIDEMIOLÓGICAS Y CLÍNICAS BASADAS EN EVIDENCIA Adiposidad central como predictor de síndrome metabólico El perímetro de cintura elevado y el ICC alto son predictores independientes de síndrome metabólico en niños, incluso más potentes que el IMC solo.

La razón fisiopatológica es que la obesidad visceral es el “gatillo” que activa la cascada metabólica, mientras que la resistencia a la insulina es el mecanismo que perpetúa y amplifica las alteraciones.

Específicamente, Weiss et al. (2004) demostraron en el estudio de Yale que adolescentes obesos con mayor grasa visceral (medida por resonancia magnética) presentaban mayor prevalencia de prediabetes, dislipidemia aterogénica e hipertensión, independientemente del grado de obesidad general.

Similarmente, el estudio Bogalusa Heart demostró que tanto la obesidad infantil como la resistencia a la insulina predicen síndrome metabólico en la adultez, pero después de ajustar por ambas variables, solo la obesidad mantenía asociación significativa, lo cual subraya la primacía de la adiposidad (especialmente visceral) como factor causal [84].

Mecanismos moleculares y repercusiones cardiometabólicas

En esta cohorte pediátrica, los resultados antropométricos evidencian una tendencia marcada hacia la adiposidad central. El perímetro de cintura promedio fue de 67.73 cm, ubicándose entre los percentiles 75 y 85, lo que representa el límite de riesgo según los criterios de la International Diabetes Federation (IDF). De manera coherente, el índice cintura/cadera (ICC = 0.85) se situó en el límite superior del rango normal, reflejando un patrón de distribución grasa de tipo androide, característico de la obesidad visceral y predictor más sensible de riesgo metabólico que el IMC en población pediátrica.

Desde el punto de vista fisiopatológico, la progresión desde obesidad central hasta síndrome metabólico sigue una secuencia molecular bien definida, donde la expansión del tejido adiposo visceral provoca hipertrofia adipocitaria e hipoxia local, lo que estimula la infiltración de macrófagos M1 proinflamatorios, y estos liberan TNF-α e IL-6, activando la vía de NF-κB, que interfiere con la señal de la insulina mediante la fosforilación del IRS-1, generando resistencia insulínica.

Paralelamente, la reducción de adiponectina elimina su efecto protector sobre la sensibilidad a la insulina y la función endotelial.

Como consecuencia, se incrementa la lipólisis y la liberación de ácidos grasos libres, que se acumulan de forma ectópica en hígado, músculo y páncreas, generando esteatosis hepática, resistencia a la insulina periférica y lipotoxicidad de células β.

Este proceso da lugar a un hígado graso resistente a la insulina, responsable de hiperglucemia (por gluconeogénesis no suprimida) y dislipidemia aterogénica (por aumento de VLDL y reducción de HDL).

Finalmente, el estrés oxidativo, junto con la activación del sistema renina-angiotensina, produce disfunción endotelial y vasoconstricción, explicando los valores observados de presión arterial promedio (PAS = 115.11 mmHg, PAD = 73.27 mmHg) en el límite superior normal.

Correlación con variabilidad antropométrica y perfil cardiovascular

La variabilidad del peso (CV = 24.04%) se refleja proporcionalmente en la variabilidad de cintura (CV = 15.25%), lo que me indica que la heterogeneidad ponderal se traduce en diferencias en la acumulación de grasa abdominal, además, la asimetría positiva del peso (0.76) y del ICC confirman la existencia de un subgrupo con sobrepeso u obesidad con predominio de adiposidad visceral.

Este patrón está directamente relacionado con la elevación discreta de la presión arterial, mediada por hiperleptinemia, vasoconstricción inducida por ácidos grasos libres, activación del sistema renina-angiotensina-aldosterona y disfunción endotelial crónica.

Influencia del desarrollo puberal

El índice cintura/cadera varía fisiológicamente según el estadio de Tanner. En los estadios 1–2 (prepuberales), el ICC tiende a ser bajo (<0.80) por predominio de grasa subcutánea, mientras que en los estadios 3–5 (puberales y pospuberales) aumenta (>0.85), especialmente en varones, por efecto de los andrógenos que redistribuyen la grasa hacia el abdomen.

Durante la pubertad, la resistencia fisiológica a la insulina inducida por la hormona del crecimiento puede acelerar la aparición del síndrome metabólico en niños con obesidad previa, es por ello,que un ICC de 0.85 puede ser fisiológico en adolescentes puberales, pero patológico en prepuberales, lo que justifica estratificar los análisis según la madurez sexual para interpretar adecuadamente el riesgo metabólico.

Referencia argumentativa: Codazzi y colaboradores (2023)

##ANÁLISIS VARIABLES: COMPOSICIÓN CORPORAL Y APTITUD FÍSICA Porcentaje de Grasa Corporal, Capacidad Cardiorrespiratoria y Fuerza Prensil

tabla_grasa <- BASE_LIMPIA %>%
  summarise(
    N = n(),
    Media = round(mean(`%_grasa_corp`, na.rm = TRUE), 2),
    Mediana = round(median(`%_grasa_corp`, na.rm = TRUE), 2),
    `Desv. Est.` = round(sd(`%_grasa_corp`, na.rm = TRUE), 2),
    Varianza = round(var(`%_grasa_corp`, na.rm = TRUE), 2),
    Minimo = round(min(`%_grasa_corp`, na.rm = TRUE), 1),
    `Q1 (P25)` = round(quantile(`%_grasa_corp`, 0.25, na.rm = TRUE), 1),
    `Q2 (P50)` = round(quantile(`%_grasa_corp`, 0.50, na.rm = TRUE), 1),
    `Q3 (P75)` = round(quantile(`%_grasa_corp`, 0.75, na.rm = TRUE), 1),
    Maximo = round(max(`%_grasa_corp`, na.rm = TRUE), 1),
    Rango = round(max(`%_grasa_corp`, na.rm = TRUE) - min(`%_grasa_corp`, na.rm = TRUE), 1),
    `Rango IQ` = round(IQR(`%_grasa_corp`, na.rm = TRUE), 1),
    `CV (%)` = round((sd(`%_grasa_corp`, na.rm = TRUE) / mean(`%_grasa_corp`, na.rm = TRUE)) * 100, 2),
    Asimetria = round(skewness(`%_grasa_corp`, na.rm = TRUE), 3),
    Curtosis = round(kurtosis(`%_grasa_corp`, na.rm = TRUE), 3)
  ) %>%
  t() %>%
  as.data.frame() %>%
  tibble::rownames_to_column(var = "Estadistico")

colnames(tabla_grasa)[2] <- "Grasa (%)"

tabla_crf <- BASE_LIMPIA %>%
  summarise(
    N = n(),
    Media = round(mean(CRF_shuttles, na.rm = TRUE), 2),
    Mediana = round(median(CRF_shuttles, na.rm = TRUE), 2),
    `Desv. Est.` = round(sd(CRF_shuttles, na.rm = TRUE), 2),
    Varianza = round(var(CRF_shuttles, na.rm = TRUE), 2),
    Minimo = round(min(CRF_shuttles, na.rm = TRUE), 1),
    `Q1 (P25)` = round(quantile(CRF_shuttles, 0.25, na.rm = TRUE), 1),
    `Q2 (P50)` = round(quantile(CRF_shuttles, 0.50, na.rm = TRUE), 1),
    `Q3 (P75)` = round(quantile(CRF_shuttles, 0.75, na.rm = TRUE), 1),
    Maximo = round(max(CRF_shuttles, na.rm = TRUE), 1),
    Rango = round(max(CRF_shuttles, na.rm = TRUE) - min(CRF_shuttles, na.rm = TRUE), 1),
    `Rango IQ` = round(IQR(CRF_shuttles, na.rm = TRUE), 1),
    `CV (%)` = round((sd(CRF_shuttles, na.rm = TRUE) / mean(CRF_shuttles, na.rm = TRUE)) * 100, 2),
    Asimetria = round(skewness(CRF_shuttles, na.rm = TRUE), 3),
    Curtosis = round(kurtosis(CRF_shuttles, na.rm = TRUE), 3)
  ) %>%
  t() %>%
  as.data.frame()

colnames(tabla_crf) <- "CRF (shuttles)"

tabla_fuerza <- BASE_LIMPIA %>%
  summarise(
    N = n(),
    Media = round(mean(f__mano_do, na.rm = TRUE), 2),
    Mediana = round(median(f__mano_do, na.rm = TRUE), 2),
    `Desv. Est.` = round(sd(f__mano_do, na.rm = TRUE), 2),
    Varianza = round(var(f__mano_do, na.rm = TRUE), 2),
    Minimo = round(min(f__mano_do, na.rm = TRUE), 1),
    `Q1 (P25)` = round(quantile(f__mano_do, 0.25, na.rm = TRUE), 1),
    `Q2 (P50)` = round(quantile(f__mano_do, 0.50, na.rm = TRUE), 1),
    `Q3 (P75)` = round(quantile(f__mano_do, 0.75, na.rm = TRUE), 1),
    Maximo = round(max(f__mano_do, na.rm = TRUE), 1),
    Rango = round(max(f__mano_do, na.rm = TRUE) - min(f__mano_do, na.rm = TRUE), 1),
    `Rango IQ` = round(IQR(f__mano_do, na.rm = TRUE), 1),
    `CV (%)` = round((sd(f__mano_do, na.rm = TRUE) / mean(f__mano_do, na.rm = TRUE)) * 100, 2),
    Asimetria = round(skewness(f__mano_do, na.rm = TRUE), 3),
    Curtosis = round(kurtosis(f__mano_do, na.rm = TRUE), 3)
  ) %>%
  t() %>%
  as.data.frame()

colnames(tabla_fuerza) <- "Fuerza (kg)"

tabla_fitness <- cbind(tabla_grasa, tabla_crf, tabla_fuerza)

kable(tabla_fitness, 
      caption = "Estadisticas descriptivas: Composicion Corporal y Aptitud Fisica",
      align = c("l", "c", "c", "c")) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#8E44AD") %>%
  row_spec(c(1:3), background = "#EBDEF0") %>%
  row_spec(c(4:5), background = "#D5F4E6") %>%
  row_spec(c(6:12), background = "#FCF3CF") %>%
  row_spec(c(13:15), background = "#FADBD8")
Estadisticas descriptivas: Composicion Corporal y Aptitud Fisica
Estadistico Grasa (%) CRF (shuttles) Fuerza (kg)
N N 125.000 125.000 125.000
Media Media 19.140 3.540 16.420
Mediana Mediana 18.700 3.400 16.000
Desv. Est. Desv. Est. 10.160 1.270 4.080
Varianza Varianza 103.240 1.610 16.670
Minimo Minimo 0.100 1.400 9.000
Q1 (P25) Q1 (P25) 13.500 2.600 13.000
Q2 (P50) Q2 (P50) 18.700 3.400 16.000
Q3 (P75) Q3 (P75) 25.600 4.300 19.000
Maximo Maximo 45.700 7.100 27.000
Rango Rango 45.600 5.700 18.000
Rango IQ Rango IQ 12.100 1.700 6.000
CV (%) CV (%) 53.080 35.800 24.860
Asimetria Asimetria 0.004 0.534 0.441
Curtosis Curtosis 3.014 2.922 2.588
par(mfrow = c(3, 2), mar = c(3, 3.5, 2.5, 1))

hist(BASE_LIMPIA$`%_grasa_corp`, 
     breaks = 15,
     col = "#9B59B6", 
     border = "white",
     main = "Distribucion % Grasa",
     xlab = "Grasa (%)",
     ylab = "Frecuencia",
     las = 1,
     cex.main = 1.0,
     cex.lab = 0.9)
abline(v = mean(BASE_LIMPIA$`%_grasa_corp`), col = "#6C3483", lwd = 2.5, lty = 2)
abline(v = median(BASE_LIMPIA$`%_grasa_corp`), col = "#27AE60", lwd = 2.5, lty = 2)
legend("topright", 
       legend = c(paste0("M=", round(mean(BASE_LIMPIA$`%_grasa_corp`), 1)),
                  paste0("Me=", round(median(BASE_LIMPIA$`%_grasa_corp`), 1))),
       col = c("#6C3483", "#27AE60"), lty = 2, lwd = 2, cex = 0.75)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

boxplot(BASE_LIMPIA$`%_grasa_corp`, 
        col = "#D7BDE2",
        border = "#5B2C6F",
        main = "Boxplot: % Grasa",
        ylab = "Grasa (%)",
        las = 1,
        lwd = 1.5,
        boxwex = 0.5,
        outcol = "#C0392B",
        outpch = 19,
        cex.main = 1.0,
        cex.lab = 0.9)
abline(h = 25, col = "#E67E22", lty = 2, lwd = 2)
text(1.25, 25, "Obesidad", pos = 3, cex = 0.7, col = "#E67E22", font = 2)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

hist(BASE_LIMPIA$CRF_shuttles, 
     breaks = 15,
     col = "#3498DB", 
     border = "white",
     main = "Distribucion CRF",
     xlab = "CRF (shuttles)",
     ylab = "Frecuencia",
     las = 1,
     cex.main = 1.0,
     cex.lab = 0.9)
abline(v = mean(BASE_LIMPIA$CRF_shuttles), col = "#1F618D", lwd = 2.5, lty = 2)
abline(v = median(BASE_LIMPIA$CRF_shuttles), col = "#27AE60", lwd = 2.5, lty = 2)
legend("topright", 
       legend = c(paste0("M=", round(mean(BASE_LIMPIA$CRF_shuttles), 1)),
                  paste0("Me=", round(median(BASE_LIMPIA$CRF_shuttles), 1))),
       col = c("#1F618D", "#27AE60"), lty = 2, lwd = 2, cex = 0.75)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

boxplot(BASE_LIMPIA$CRF_shuttles, 
        col = "#AED6F1",
        border = "#154360",
        main = "Boxplot: CRF",
        ylab = "CRF (shuttles)",
        las = 1,
        lwd = 1.5,
        boxwex = 0.5,
        outcol = "#C0392B",
        outpch = 19,
        cex.main = 1.0,
        cex.lab = 0.9)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

hist(BASE_LIMPIA$f__mano_do, 
     breaks = 15,
     col = "#E74C3C", 
     border = "white",
     main = "Distribucion Fuerza",
     xlab = "Fuerza (kg)",
     ylab = "Frecuencia",
     las = 1,
     cex.main = 1.0,
     cex.lab = 0.9)
abline(v = mean(BASE_LIMPIA$f__mano_do), col = "#922B21", lwd = 2.5, lty = 2)
abline(v = median(BASE_LIMPIA$f__mano_do), col = "#27AE60", lwd = 2.5, lty = 2)
legend("topright", 
       legend = c(paste0("M=", round(mean(BASE_LIMPIA$f__mano_do), 1)),
                  paste0("Me=", round(median(BASE_LIMPIA$f__mano_do), 1))),
       col = c("#922B21", "#27AE60"), lty = 2, lwd = 2, cex = 0.75)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

boxplot(BASE_LIMPIA$f__mano_do, 
        col = "#F1948A",
        border = "#641E16",
        main = "Boxplot: Fuerza",
        ylab = "Fuerza (kg)",
        las = 1,
        lwd = 1.5,
        boxwex = 0.5,
        outcol = "#8E44AD",
        outpch = 19,
        cex.main = 1.0,
        cex.lab = 0.9)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

par(mfrow = c(1, 1))

INTERPRETACIÓN ESTADÍSTICA Y CLÍNICA: COMPOSICIÓN CORPORAL Y APTITUD FÍSICA

PORCENTAJE DE GRASA CORPORAL

Medidas de tendencia central y dispersión

La media de grasa corporal fue 19.14% con mediana de 18.70%, evidenciando una diferencia mínima de 0.44% que sugiere distribución relativamente simétrica con leve asimetría positiva. Este porcentaje promedio es particularmente relevante porque la grasa corporal excesiva es el motor fisiopatológico central del síndrome metabólico en población pediátrica, más allá del simple peso corporal.

La desviación estándar de 10.16% y el coeficiente de variación de 53.09% me indican una variabilidad extremadamente alta, la mayor que he observado hasta ahora en todas las variables analizadas. Esta alta dispersión refleja la marcada heterogeneidad en composición corporal de la cohorte, con escolares que van desde porcentajes muy bajos (0.1%) hasta valores claramente patológicos.

El rango intercuartílico y la distribución visual me muestran que aproximadamente el 25% de los escolares presenta porcentajes de grasa superiores a 25%, umbral que en población pediátrica define obesidad por composición corporal, independientemente del índice de masa corporal.

Esta distinción es crucial porque dos niños con el mismo IMC pueden tener composiciones corporales radicalmente diferentes, resultando en perfiles metabólicos opuestos,por ejemplo, el fenotipo metabólicamente saludable versus el metabólicamente no saludable.

Distribución visual e implicaciones fisiopatológicas

El histograma me muestra una distribución unimodal con asimetría positiva, con un pico principal entre 15-20% pero con una cola extendida hacia porcentajes muy elevados (35-45%), donde esta configuración es característica de poblaciones infantiles con prevalencia significativa de obesidad, donde un subgrupo desarrolla acumulación grasa excesiva.

El boxplot confirma la presencia de múltiples outliers superiores, representando escolares con obesidad franca por grasa corporal. La línea naranja marcando el límite de obesidad (25%) me permite visualizar que aproximadamente el 25-30% de la cohorte supera este umbral, cifra alarmante considerando las implicaciones metabólicas a largo plazo.

CAPACIDAD CARDIORRESPIRATORIA (CRF)

Medidas de tendencia central y dispersión

La media de CRF fue 3.54 shuttles con mediana de 3.40 shuttles, valores prácticamente idénticos que confirman distribución simétrica. Este rendimiento promedio es preocupantemente bajo para escolares de 11 años, sugiriendo un nivel de aptitud cardiorrespiratoria inferior al esperado según estándares internacionales para la edad.

La desviación estándar de 1.27 shuttles y el CV de 35.88% me indican variabilidad moderada-alta, aunque menor que la observada en grasa corporal, además el rango de aproximadamente 5-6 shuttles (desde 1.4 hasta 6-7 shuttles máximo) evidencia diferencias sustanciales en la capacidad aeróbica entre los escolares de mejor y peor rendimiento.

Distribución visual e interpretación funcional

-El histograma me muestra una distribución unimodal y simétrica, con el pico centrado en 3-4 shuttles, además el boxplot es notablemente compacto, con pocos outliers, lo cual sugiere que la mayoría de la cohorte presenta niveles de fitness cardiorrespiratorio homogéneamente bajos, sin grandes diferencias individuales.

-Esta baja capacidad cardiorrespiratoria poblacional tiene implicaciones metabólicas directas,por ejemplo la aptitud cardiorrespiratoria baja se asocia con mayor riesgo de desarrollar resistencia a la insulina, dislipidemia e hipertensión en niños, independientemente del peso corporal.

-El ejercicio aeróbico regular mejora la sensibilidad a la insulina mediante mecanismos como el aumento de la expresión del transportador de glucosa GLUT4 en músculo esquelético, la reducción de la inflamación sistémica y la mejora de la función endotelial.

La baja CRF puede ser tanto causa como consecuencia del exceso de grasa corporal, donde el sedentarismo favorece la acumulación adiposa, mientras que el exceso de grasa dificulta el rendimiento físico, creando un círculo vicioso que perpetúa el riesgo metabólico.

FUERZA PRENSIL MANO DOMINANTE

Medidas de tendencia central y dispersión

-La media de fuerza prensil fue 16.42 kg con mediana de 16.00 kg, valores casi idénticos que me confirman distribución simétrica, y donde este valor promedio es adecuado para escolares de 11 años con talla promedio de 145 cm, reflejando un desarrollo musculoesquelético dentro de rangos esperados.

La desviación estándar de 4.08 kg y el CV de 24.85% me indican variabilidad moderada, similar a la observada en peso corporal. El rango de aproximadamente 16 kg (9-25 kg) muestra diferencias apreciables pero no extremas entre escolares.

Distribución visual e relevancia metabólica

-El histograma presenta una distribución unimodal relativamente simétrica, centrada en 15-18 kg, y el boxplot muestra una estructura equilibrada con pocos outliers, sugiriendo que la fuerza muscular está más homogéneamente distribuida que la grasa corporal o el perímetro de cintura.

-La fuerza prensil es un indicador indirecto de masa muscular total, y la masa muscular es metabólicamente protectora porque el músculo esquelético es el principal sitio de captación de glucosa mediada por insulina, asi que una mayor masa muscular se asocia con mejor sensibilidad a la insulina y menor riesgo de diabetes tipo 2, incluso en presencia de obesidad.

INTERPRETACIÓN CONJUNTA: RELACIÓN ENTRE COMPOSICIÓN CORPORAL Y APTITUD FÍSICA

-Relación inversa entre grasa corporal y capacidad física-

-Al analizar las tres variables conjuntamente, emerge un patrón fisiopatológico coherente, pues existe una relación inversa entre el porcentaje de grasa corporal y las capacidades físicas (cardiorrespiratoria y muscular).

-Los escolares con mayor adiposidad tienden a presentar menor aptitud física, lo cual perpetúa el riesgo metabólico mediante múltiples mecanismos.

Esta relación se explica porque el exceso de grasa corporal, especialmente visceral, no solo es un marcador pasivo de obesidad, sino un órgano endocrino activo que secreta adipoquinas proinflamatorias.

Implicaciones para fenotipos metabólicos

-La combinación de alta grasa corporal (>25%) con baja capacidad cardiorrespiratoria (<3 shuttles) define el fenotipo metabólicamente no saludable, que presenta mayor prevalencia de resistencia a la insulina, dislipidemia aterogénica (triglicéridos elevados, HDL bajo), presión arterial elevada y marcadores inflamatorios aumentados (proteína C reactiva, interleucina-6).

-Por el contrario, escolares con porcentaje de grasa normal (<20%) y buena aptitud física (>4 shuttles) corresponden al fenotipo metabólicamente saludable, con perfil lipídico favorable, sensibilidad normal a la insulina y presión arterial óptima, independientemente del índice de masa corporal.

-Aproximadamente el 25-30% de nuestra cohorte presenta el perfil de alto riesgo (alta grasa + baja aptitud), cifra consistente con la prevalencia de outliers observados en las variables cardiovasculares y antropométricas previas.

Coherencia con variables previas Los hallazgos de este grupo son altamente coherentes con los análisis anteriores:

-Peso con asimetría positiva (media=41.15 kg, skewness=0.757), que se explica por el subgrupo con alto % grasa corporal.

-Perímetro de cintura elevado (media=67.73 cm, CV=15.25%), que se correlaciona con alto % grasa, especialmente visceral.

-Presión arterial en límite superior (PAS=115.11, PAD=73.27 mmHg), que puede estar mediada por adiposidad excesiva vía hiperleptinemia y activación simpática.

-Índice cintura/cadera elevado (media=0.852), que confirma distribución androide asociada a mayor % grasa visceral.

Consideraciones del desarrollo puberal

Durante la pubertad ocurre una resistencia fisiológica y transitoria a la insulina, mediada por hormona de crecimiento, que puede desenmascarar o acelerar la manifestación de síndrome metabólico en escolares con obesidad y baja aptitud física preexistentes.

Adicionalmente, los cambios en composición corporal varían según el estadio de Tanner, pues los niños prepuberales tienden a tener menor masa muscular y mayor adiposidad relativa, mientras que los púberes experimentan aumento de masa muscular (especialmente varones por efecto androgénico) y redistribución de grasa.

Por tanto, la interpretación del porcentaje de grasa corporal y las capacidades físicas las enmarco en el estadio madurativo, donde un 20% de grasa puede ser normal en una niña púber pero elevado en un niño prepuberal.

CONCLUSIÓN BASADA EN EVIDENCIA

-Creo que las variables de composición corporal y aptitud física reflejan una población con alta prevalencia de adiposidad excesiva combinada con niveles preocupantemente bajos de capacidad cardiorrespiratoria, configurando un perfil de riesgo metabólico elevado en un subgrupo significativo (25-30%) de la cohorte.

Específicamente:

-Porcentaje de grasa corporal promedio en 19.14% con alta dispersión (CV=53.09%), me indica heterogeneidad extrema con un cuartil superior >25% (obesidad)

-Capacidad cardiorrespiratoria promedio de 3.54 shuttles, valor inferior al esperado para la edad, sugiriendo sedentarismo generalizado

-Fuerza prensil adecuada (16.42 kg), indicando que el desarrollo musculoesquelético se mantiene preservado pese al déficit aeróbico y la relación inversa entre adiposidad y fitness, confirmando que el exceso de grasa corporal compromete el rendimiento físico, perpetuando el círculo vicioso del riesgo metabólico.

-La combinación de alta grasa corporal con baja capacidad cardiorrespiratoria constituye el fenotipo metabólicamente no saludable, que presenta mayor riesgo de resistencia a la insulina, dislipidemia aterogénica, hipertensión y progresión hacia síndrome metabólico completo y diabetes tipo 2 en la vida adulta.

Referencias: -Codazzi y colaboradores (2023) - Mechanisms and risk factors of metabolic syndrome in children and adolescents. Endocrine.

ANÁLISIS VARIABLES: PERFIL LIPÍDICOColesterol Total, HDL, LDL y Triglicéridos

tabla_coltotal <- BASE_LIMPIA %>%
  summarise(
    N = n(),
    Media = round(mean(col_total, na.rm = TRUE), 2),
    Mediana = round(median(col_total, na.rm = TRUE), 2),
    `Desv. Est.` = round(sd(col_total, na.rm = TRUE), 2),
    Varianza = round(var(col_total, na.rm = TRUE), 2),
    Minimo = round(min(col_total, na.rm = TRUE), 1),
    `Q1 (P25)` = round(quantile(col_total, 0.25, na.rm = TRUE), 1),
    `Q2 (P50)` = round(quantile(col_total, 0.50, na.rm = TRUE), 1),
    `Q3 (P75)` = round(quantile(col_total, 0.75, na.rm = TRUE), 1),
    Maximo = round(max(col_total, na.rm = TRUE), 1),
    Rango = round(max(col_total, na.rm = TRUE) - min(col_total, na.rm = TRUE), 1),
    `Rango IQ` = round(IQR(col_total, na.rm = TRUE), 1),
    `CV (%)` = round((sd(col_total, na.rm = TRUE) / mean(col_total, na.rm = TRUE)) * 100, 2),
    Asimetria = round(skewness(col_total, na.rm = TRUE), 3),
    Curtosis = round(kurtosis(col_total, na.rm = TRUE), 3)
  ) %>%
  t() %>%
  as.data.frame() %>%
  tibble::rownames_to_column(var = "Estadistico")

colnames(tabla_coltotal)[2] <- "Col Total (mg/dL)"

tabla_hdl <- BASE_LIMPIA %>%
  summarise(
    N = n(),
    Media = round(mean(hdl, na.rm = TRUE), 2),
    Mediana = round(median(hdl, na.rm = TRUE), 2),
    `Desv. Est.` = round(sd(hdl, na.rm = TRUE), 2),
    Varianza = round(var(hdl, na.rm = TRUE), 2),
    Minimo = round(min(hdl, na.rm = TRUE), 1),
    `Q1 (P25)` = round(quantile(hdl, 0.25, na.rm = TRUE), 1),
    `Q2 (P50)` = round(quantile(hdl, 0.50, na.rm = TRUE), 1),
    `Q3 (P75)` = round(quantile(hdl, 0.75, na.rm = TRUE), 1),
    Maximo = round(max(hdl, na.rm = TRUE), 1),
    Rango = round(max(hdl, na.rm = TRUE) - min(hdl, na.rm = TRUE), 1),
    `Rango IQ` = round(IQR(hdl, na.rm = TRUE), 1),
    `CV (%)` = round((sd(hdl, na.rm = TRUE) / mean(hdl, na.rm = TRUE)) * 100, 2),
    Asimetria = round(skewness(hdl, na.rm = TRUE), 3),
    Curtosis = round(kurtosis(hdl, na.rm = TRUE), 3)
  ) %>%
  t() %>%
  as.data.frame()

colnames(tabla_hdl) <- "HDL (mg/dL)"

tabla_ldl <- BASE_LIMPIA %>%
  summarise(
    N = n(),
    Media = round(mean(ldl, na.rm = TRUE), 2),
    Mediana = round(median(ldl, na.rm = TRUE), 2),
    `Desv. Est.` = round(sd(ldl, na.rm = TRUE), 2),
    Varianza = round(var(ldl, na.rm = TRUE), 2),
    Minimo = round(min(ldl, na.rm = TRUE), 1),
    `Q1 (P25)` = round(quantile(ldl, 0.25, na.rm = TRUE), 1),
    `Q2 (P50)` = round(quantile(ldl, 0.50, na.rm = TRUE), 1),
    `Q3 (P75)` = round(quantile(ldl, 0.75, na.rm = TRUE), 1),
    Maximo = round(max(ldl, na.rm = TRUE), 1),
    Rango = round(max(ldl, na.rm = TRUE) - min(ldl, na.rm = TRUE), 1),
    `Rango IQ` = round(IQR(ldl, na.rm = TRUE), 1),
    `CV (%)` = round((sd(ldl, na.rm = TRUE) / mean(ldl, na.rm = TRUE)) * 100, 2),
    Asimetria = round(skewness(ldl, na.rm = TRUE), 3),
    Curtosis = round(kurtosis(ldl, na.rm = TRUE), 3)
  ) %>%
  t() %>%
  as.data.frame()

colnames(tabla_ldl) <- "LDL (mg/dL)"

tabla_tag <- BASE_LIMPIA %>%
  summarise(
    N = n(),
    Media = round(mean(tag, na.rm = TRUE), 2),
    Mediana = round(median(tag, na.rm = TRUE), 2),
    `Desv. Est.` = round(sd(tag, na.rm = TRUE), 2),
    Varianza = round(var(tag, na.rm = TRUE), 2),
    Minimo = round(min(tag, na.rm = TRUE), 1),
    `Q1 (P25)` = round(quantile(tag, 0.25, na.rm = TRUE), 1),
    `Q2 (P50)` = round(quantile(tag, 0.50, na.rm = TRUE), 1),
    `Q3 (P75)` = round(quantile(tag, 0.75, na.rm = TRUE), 1),
    Maximo = round(max(tag, na.rm = TRUE), 1),
    Rango = round(max(tag, na.rm = TRUE) - min(tag, na.rm = TRUE), 1),
    `Rango IQ` = round(IQR(tag, na.rm = TRUE), 1),
    `CV (%)` = round((sd(tag, na.rm = TRUE) / mean(tag, na.rm = TRUE)) * 100, 2),
    Asimetria = round(skewness(tag, na.rm = TRUE), 3),
    Curtosis = round(kurtosis(tag, na.rm = TRUE), 3)
  ) %>%
  t() %>%
  as.data.frame()

colnames(tabla_tag) <- "TAG (mg/dL)"

tabla_lipidos <- cbind(tabla_coltotal, tabla_hdl, tabla_ldl, tabla_tag)

kable(tabla_lipidos, 
      caption = "Estadisticas descriptivas: Perfil Lipidico Completo",
      align = c("l", "c", "c", "c", "c")) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#E74C3C") %>%
  row_spec(c(1:3), background = "#FADBD8") %>%
  row_spec(c(4:5), background = "#FCF3CF") %>%
  row_spec(c(6:12), background = "#D5F4E6") %>%
  row_spec(c(13:15), background = "#EBF5FB")
Estadisticas descriptivas: Perfil Lipidico Completo
Estadistico Col Total (mg/dL) HDL (mg/dL) LDL (mg/dL) TAG (mg/dL)
N N 125.000 125.000 125.000 125.000
Media Media 161.010 77.130 75.120 86.530
Mediana Mediana 158.000 76.000 69.000 77.000
Desv. Est. Desv. Est. 47.390 20.760 42.730 46.580
Varianza Varianza 2246.100 430.870 1825.920 2169.570
Minimo Minimo 50.000 39.000 14.000 12.000
Q1 (P25) Q1 (P25) 132.000 64.000 42.000 57.000
Q2 (P50) Q2 (P50) 158.000 76.000 69.000 77.000
Q3 (P75) Q3 (P75) 186.000 83.000 94.600 103.000
Maximo Maximo 301.000 155.000 277.700 324.000
Rango Rango 251.000 116.000 263.700 312.000
Rango IQ Rango IQ 54.000 19.000 52.600 46.000
CV (%) CV (%) 29.440 26.910 56.880 53.830
Asimetria Asimetria 0.341 1.004 1.506 1.803
Curtosis Curtosis 3.758 4.803 6.689 8.257
par(mfrow = c(2, 2), mar = c(3, 3.5, 2.5, 1))

hist(BASE_LIMPIA$col_total, 
     breaks = 15,
     col = "#E74C3C", 
     border = "white",
     main = "Colesterol Total",
     xlab = "Col Total (mg/dL)",
     ylab = "Frecuencia",
     las = 1,
     cex.main = 1.0,
     cex.lab = 0.9)
abline(v = mean(BASE_LIMPIA$col_total), col = "#922B21", lwd = 2.5, lty = 2)
abline(v = median(BASE_LIMPIA$col_total), col = "#27AE60", lwd = 2.5, lty = 2)
abline(v = 200, col = "#E67E22", lty = 2, lwd = 2)
text(200, max(hist(BASE_LIMPIA$col_total, plot=F)$counts)*0.9, "Limite", pos = 4, cex = 0.7, col = "#E67E22", font = 2)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

hist(BASE_LIMPIA$hdl, 
     breaks = 15,
     col = "#52BE80", 
     border = "white",
     main = "HDL Colesterol",
     xlab = "HDL (mg/dL)",
     ylab = "Frecuencia",
     las = 1,
     cex.main = 1.0,
     cex.lab = 0.9)
abline(v = mean(BASE_LIMPIA$hdl), col = "#229954", lwd = 2.5, lty = 2)
abline(v = median(BASE_LIMPIA$hdl), col = "#E67E22", lwd = 2.5, lty = 2)
abline(v = 40, col = "#C0392B", lty = 2, lwd = 2)
text(40, max(hist(BASE_LIMPIA$hdl, plot=F)$counts)*0.9, "Bajo", pos = 2, cex = 0.7, col = "#C0392B", font = 2)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

hist(BASE_LIMPIA$ldl, 
     breaks = 15,
     col = "#F39C12", 
     border = "white",
     main = "LDL Colesterol",
     xlab = "LDL (mg/dL)",
     ylab = "Frecuencia",
     las = 1,
     cex.main = 1.0,
     cex.lab = 0.9)
abline(v = mean(BASE_LIMPIA$ldl), col = "#935116", lwd = 2.5, lty = 2)
abline(v = median(BASE_LIMPIA$ldl), col = "#27AE60", lwd = 2.5, lty = 2)
abline(v = 130, col = "#E67E22", lty = 2, lwd = 2)
text(130, max(hist(BASE_LIMPIA$ldl, plot=F)$counts)*0.9, "Limite", pos = 4, cex = 0.7, col = "#E67E22", font = 2)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

hist(BASE_LIMPIA$tag, 
     breaks = 15,
     col = "#9B59B6", 
     border = "white",
     main = "Trigliceridos",
     xlab = "TAG (mg/dL)",
     ylab = "Frecuencia",
     las = 1,
     cex.main = 1.0,
     cex.lab = 0.9)
abline(v = mean(BASE_LIMPIA$tag), col = "#6C3483", lwd = 2.5, lty = 2)
abline(v = median(BASE_LIMPIA$tag), col = "#27AE60", lwd = 2.5, lty = 2)
abline(v = 150, col = "#E67E22", lty = 2, lwd = 2)
text(150, max(hist(BASE_LIMPIA$tag, plot=F)$counts)*0.9, "Limite", pos = 4, cex = 0.7, col = "#E67E22", font = 2)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

par(mfrow = c(1, 1))

ratio_ct_hdl <- BASE_LIMPIA$col_total / BASE_LIMPIA$hdl
ratio_ldl_hdl <- BASE_LIMPIA$ldl / BASE_LIMPIA$hdl

tabla_ratios <- data.frame(
  Estadistico = c("Media", "Mediana", "Desv. Est.", "Rango"),
  `Col Total/HDL` = c(
    round(mean(ratio_ct_hdl, na.rm = TRUE), 2),
    round(median(ratio_ct_hdl, na.rm = TRUE), 2),
    round(sd(ratio_ct_hdl, na.rm = TRUE), 2),
    paste(round(min(ratio_ct_hdl, na.rm = TRUE), 1), "-", round(max(ratio_ct_hdl, na.rm = TRUE), 1))
  ),
  `LDL/HDL` = c(
    round(mean(ratio_ldl_hdl, na.rm = TRUE), 2),
    round(median(ratio_ldl_hdl, na.rm = TRUE), 2),
    round(sd(ratio_ldl_hdl, na.rm = TRUE), 2),
    paste(round(min(ratio_ldl_hdl, na.rm = TRUE), 1), "-", round(max(ratio_ldl_hdl, na.rm = TRUE), 1))
  )
)

kable(tabla_ratios, 
      caption = "Indices Aterogenicos (Ratios)",
      align = c("l", "c", "c")) %>%
  kable_styling(bootstrap_options = c("striped", "hover"),
                full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#8E44AD")
Indices Aterogenicos (Ratios)
Estadistico Col.Total.HDL LDL.HDL
Media 2.27 1.1
Mediana 2.2 0.9
Desv. Est. 0.95 0.8
Rango 0.5 - 5.2 0.2 - 4.8

INTERPRETACIÓN ESTADÍSTICA Y CLÍNICA: PERFIL LIPÍDICO

COLESTEROL TOTAL

Medidas de tendencia central y dispersión
La media de colesterol total fue 161.01 mg/dL y la mediana 158 mg/dL, valores prácticamente idénticos que reflejan una distribución simétrica. Este nivel promedio lo encuentro dentro del rango deseable para población pediátrica (<200 mg/dL), lo que sugiere que la mayoría de los escolares mantiene niveles adecuados de colesterol total.

La desviación estándar (47.39 mg/dL) y el coeficiente de variación (CV = 29.44%) muestran una variabilidad moderada, comparable con la del peso corporal, aunque menor que la observada en la grasa corporal. El rango tan amplio (50 a 301 mg/dL)considero que evidencia la coexistencia de escolares con valores muy bajos y otros con hipercolesterolemia franca (>200 mg/dL), lo que sugiere diferencias metabólicas significativas dentro del grupo.

Distribución visual e implicaciones
El histograma evidencia una distribución unimodal con asimetría positiva leve (0.341), centrada entre 150 y 170 mg/dL, con una cola extendida hacia valores elevados (200–300 mg/dL). Aproximadamente entre el 15 y el 20% de la cohorte presenta hipercolesterolemia.

Este patrón es típico de poblaciones infantiles donde un subgrupo desarrolla alteraciones lipídicas tempranas, frecuentemente asociadas a obesidad, dieta hipercalórica rica en grasas saturadas y predisposición genética, ejemplo que explica cómo los polimorfismos en el gen APOE pueden elevar los niveles de colesterol y triglicéridos.

HDL COLESTEROL (COLESTEROL “PROTECTOR”)

Medidas de tendencia central
La media de HDL fue 77.13 mg/dL y la mediana 76 mg/dL, lo que indica niveles cardioprotectores a nivel poblacional, dado que un HDL superior a 60 mg/dL se asocia con menor riesgo cardiovascular. Este resultado me parece que es favorable, considerando que un HDL bajo (<40 mg/dL en niños, <50 mg/dL en niñas) forma parte de los criterios diagnósticos de síndrome metabólico.

La desviación estándar (20.76 mg/dL) y el CV (26.91%) reflejan una variabilidad moderada, mientras que la asimetría positiva (1.004) indica que existe un subgrupo con HDL muy elevado, sin embargo, el valor mínimo de 39 mg/dL y el primer cuartil (Q1) de 64 mg/dL muestran que aproximadamente entre el 15 y el 25% de los escolares tiene HDL subóptimo, lo que podría aumentar su riesgo metabólico.

Distribución visual y relevancia metabólica
El histograma presenta una distribución amplia, con un pico principal entre 70 y 85 mg/dL y dispersión hacia ambos extremos, por ejemplo la línea roja que marca el límite bajo (40 mg/dL) permite identificar visualmente el subgrupo en riesgo.
El HDL bajo es un marcador de disfunción metabólica, ya que refleja alteraciones en el metabolismo lipoproteico mediadas por obesidad visceral y resistencia a la insulina, ejemplo que explica cómo la actividad aumentada de la proteína de transferencia de ésteres de colesterol transfiere colesterol desde el HDL hacia lipoproteínas aterogénicas, reduciendo sus niveles protectores.

LDL COLESTEROL (COLESTEROL “MALO”)

Medidas de tendencia central y dispersión
La media de LDL fue 75.12 mg/dL y la mediana 69 mg/dL, valores dentro del rango óptimo para población pediátrica (<100 mg/dL), y la diferencia de 6 mg/dL entre ambos valores indica una ligera asimetría positiva.

El LDL me indica que la mayor variabilidad del perfil lipídico (CV = 56.88%), con una asimetría de 1.506, me evidencia una distribución muy heterogénea, pues el rango extremo (14 a 277.7 mg/dL) revela la presencia de escolares con hipercolesterolemia severa (>160 mg/dL), un hallazgo clínicamente relevante.

Distribución visual e implicaciones fisiopatológicas
El histograma presenta una cola derecha prolongada, típica de poblaciones donde un subgrupo desarrolla hipercolesterolemia familiar o secundaria a obesidad severa.

Los valores atípicos (superiores a 130–200 mg/dL) confirman la existencia de escolares con LDL patológico, siendo este hallazgo una sugerrencias de la presencia de dos fenotipos distintos, uno con LDL óptimo y otro con LDL muy elevado, ejemplo que explica cómo los polimorfismos genéticos (APOE) o factores ambientales como la dieta y el sedentarismo pueden contribuir a la dislipidemia.

El LDL elevado en niños reviste especial preocupación porque el proceso aterosclerótico inicia en la infancia, con depósito de LDL oxidado en el endotelio y formación de estrías grasas que progresan a placas en la vida adulta.

TRIGLICÉRIDOS

Medidas de tendencia central y dispersión

La media de triglicéridos fue 86.53 mg/dL y la mediana 77 mg/dL, ambas dentro del rango deseable (<100 mg/dL), addemás la diferencia de 9.5 mg/dL indica asimetría positiva, con CV de 53.83% y asimetría de 1.803, es la más alta de todo el perfil.

El rango (12 a 324 mg/dL) y el tercer cuartil (Q3 = 103 mg/dL)me sugieren que alrededor del 25% de la cohorte presenta niveles elevados o borderline.

Distribución visual y relevancia metabólica

El histograma evidencia una asimetría marcada, con un pico entre 60 y 80 mg/dL y una cola extendida hacia niveles de hipertrigliceridemia severa (150–324 mg/dL).

Alrededor del 10–15% de los escolares supera los 150 mg/dL, criterio diagnóstico de síndrome metabólico. Por ejemplo la hipertrigliceridemia es el marcador más precoz de resistencia a la insulina, ejemplo que explica cómo la insulina hepática, al perder su capacidad de suprimir la lipogénesis de novo, aumenta la síntesis de triglicéridos y secreción de VLDL.

El consumo elevado de fructosa potencia este mecanismo al activar enzimas como acetil-CoA carboxilasa y ácido graso sintasa, generando dislipidemia incluso sin obesidad evidente.

ÍNDICES ATEROGÉNICOS (COCIENTES LIPÍDICOS)

Ratio Colesterol Total/HDL
Media 2.27 y mediana 2.2, ambos valores favorables (ratio <3 = bajo riesgo, >4–5 = riesgo elevado), además el rango (0.5–5.2) confirma la existencia de escolares con ratios patológicos.

Ratio LDL/HDL
Media 1.1, mediana 0.9, valores óptimos (<2), aunque el rango (0.2–4.8) demuestra heterogeneidad con presencia de casos de riesgo.

Interpretación conjunta de ratios
Estos índices reflejan mejor el riesgo cardiovascular global que el colesterol total aislado, ejemplo que explica cómo un niño con colesterol total normal pero HDL bajo puede presentar ratios elevados, lo que revela un perfil aterogénico oculto.

La presencia de ratios superiores a 3 o 4 indica dislipidemia aterogénica, patrón característico del síndrome metabólico.

INTERPRETACIÓN CONJUNTA: PATRÓN DE DISLIPIDEMIA ATEROGÉNICA

Cuando integro las cuatro variables, puedo observar un patrón de dislipidemia metabólica en aproximadamente 15–25% de la cohorte. Este subgrupo se caracteriza por triglicéridos elevados (>100–150 mg/dL), HDL bajo (<60 mg/dL, algunos <40 mg/dL), LDL normal o moderadamente alto con partículas pequeñas y densas, y ratios aterogénicos elevados (Col/HDL >3, LDL/HDL >2).

Este conjunto de hallazgos constituye la expresión lipídica de la resistencia a la insulina y la obesidad visceral, coherente con los análisis antropométricos y fisiológicos previos que he observado.

Coherencia con variables previas

Obesidad visceral (ICC = 0.852, cintura = 67.73 cm), ejemplo que explica la hipertrigliceridemia observada.
Porcentaje de grasa corporal elevado (19.14%, con 25% >25%), ejemplo que explica la asociación con dislipidemia aterogénica.
Baja capacidad cardiorrespiratoria (CRF = 3.54 shuttles), ejemplo que explica cómo el sedentarismo agrava el perfil lipídico.
Presión arterial límite (PAS = 115 mmHg), ejemplo que explica la contribución de la dislipidemia a la disfunción endotelial.

Consideraciones sobre edad y desarrollo

Durante la pubertad, los andrógenos reducen el HDL (particularmente en varones) y los estrógenos tienden a elevarlo. Por ello, un HDL de 65 mg/dL puede ser excelente en un varón púber pero bajo en una niña prepuberal, ejemplo que explica la importancia de considerar el estadio madurativo al interpretar el perfil lipídico.

CONCLUSIÓN BASADA EN EVIDENCIA
El perfil lipídico muestra una población en general con niveles favorables, pero con un subgrupo (15–25%) que presenta dislipidemia aterogénica típica del síndrome metabólico.

En síntesis, el análisis estadístico y clínico revela que:
el colesterol total en promedio es favorable (161 mg/dL), aunque con 15–20% de hipercolesterolemia.
HDL promedio cardioprotector (77 mg/dL), pero con 15–25% en riesgo por valores bajos.
LDL con la mayor variabilidad (CV = 56.88%) y casos de hipercolesterolemia severa.
Triglicéridos con asimetría extrema (1.803), y 10–15% con niveles >150 mg/dL.
Ratios lipídicos generalmente favorables, aunque con un subgrupo de riesgo (Col/HDL >3–4).

La combinación de triglicéridos elevados y HDL bajo constituye el núcleo de la dislipidemia aterogénica, marcador temprano del riesgo cardiovascular pediátrico.
Este perfil, junto con la obesidad visceral, baja aptitud física e inflamación crónica, configura un síndrome metabólico pediátrico completo en aproximadamente el 15–25% de la cohorte.

Considero que estos hallazgos sustentan la necesidad de tamizaje lipídico selectivo e intervenciones preventivas tempranas (alimentación mediterránea y actividad física vigorosa), considerando que el proceso aterosclerótico se inicia en la infancia y puede revertirse con intervención oportuna.

Referencia:
Codazzi y colaboradores (2023). Mechanisms and risk factors of metabolic syndrome in children and adolescents. Endocrine.

ANÁLISIS VARIABLE GLICEMIA

tabla_glicemia <- BASE_LIMPIA %>%
  summarise(
    N = n(),
    Media = round(mean(glicemia, na.rm = TRUE), 2),
    Mediana = round(median(glicemia, na.rm = TRUE), 2),
    `Desv. Est.` = round(sd(glicemia, na.rm = TRUE), 2),
    Varianza = round(var(glicemia, na.rm = TRUE), 2),
    Minimo = round(min(glicemia, na.rm = TRUE), 1),
    `Q1 (P25)` = round(quantile(glicemia, 0.25, na.rm = TRUE), 1),
    `Q2 (P50)` = round(quantile(glicemia, 0.50, na.rm = TRUE), 1),
    `Q3 (P75)` = round(quantile(glicemia, 0.75, na.rm = TRUE), 1),
    Maximo = round(max(glicemia, na.rm = TRUE), 1),
    Rango = round(max(glicemia, na.rm = TRUE) - min(glicemia, na.rm = TRUE), 1),
    `Rango IQ` = round(IQR(glicemia, na.rm = TRUE), 1),
    `CV (%)` = round((sd(glicemia, na.rm = TRUE) / mean(glicemia, na.rm = TRUE)) * 100, 2),
    Asimetria = round(skewness(glicemia, na.rm = TRUE), 3),
    Curtosis = round(kurtosis(glicemia, na.rm = TRUE), 3)
  ) %>%
  t() %>%
  as.data.frame() %>%
  tibble::rownames_to_column(var = "Estadistico")

colnames(tabla_glicemia)[2] <- "Glicemia (mg/dL)"

kable(tabla_glicemia, 
      caption = "Estadisticas descriptivas: Glicemia en Ayunas",
      align = c("l", "c")) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#3498DB") %>%
  row_spec(c(1:3), background = "#D6EAF8") %>%
  row_spec(c(4:5), background = "#FCF3CF") %>%
  row_spec(c(6:12), background = "#D5F4E6") %>%
  row_spec(c(13:15), background = "#FADBD8")
Estadisticas descriptivas: Glicemia en Ayunas
Estadistico Glicemia (mg/dL)
N 125.000
Media 88.100
Mediana 89.000
Desv. Est. 11.320
Varianza 128.110
Minimo 63.000
Q1 (P25) 79.000
Q2 (P50) 89.000
Q3 (P75) 96.000
Maximo 118.000
Rango 55.000
Rango IQ 17.000
CV (%) 12.850
Asimetria 0.155
Curtosis 2.612
par(mfrow = c(1, 2), mar = c(3, 3.5, 2.5, 1))

hist(BASE_LIMPIA$glicemia, 
     breaks = 15,
     col = "#3498DB", 
     border = "white",
     main = "Distribucion Glicemia",
     xlab = "Glicemia (mg/dL)",
     ylab = "Frecuencia",
     las = 1,
     cex.main = 1.0,
     cex.lab = 0.9)
abline(v = mean(BASE_LIMPIA$glicemia), col = "#1F618D", lwd = 2.5, lty = 2)
abline(v = median(BASE_LIMPIA$glicemia), col = "#27AE60", lwd = 2.5, lty = 2)
abline(v = 100, col = "#E67E22", lty = 2, lwd = 2)
abline(v = 126, col = "#C0392B", lty = 2, lwd = 2)
text(100, max(hist(BASE_LIMPIA$glicemia, plot=F)$counts)*0.9, "IFG", pos = 4, cex = 0.7, col = "#E67E22", font = 2)
text(126, max(hist(BASE_LIMPIA$glicemia, plot=F)$counts)*0.75, "DM", pos = 4, cex = 0.7, col = "#C0392B", font = 2)
legend("topright", 
       legend = c(paste0("M=", round(mean(BASE_LIMPIA$glicemia), 1)),
                  paste0("Me=", round(median(BASE_LIMPIA$glicemia), 1))),
       col = c("#1F618D", "#27AE60"), lty = 2, lwd = 2, cex = 0.75)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

boxplot(BASE_LIMPIA$glicemia, 
        col = "#AED6F1",
        border = "#154360",
        main = "Boxplot: Glicemia",
        ylab = "Glicemia (mg/dL)",
        las = 1,
        lwd = 1.5,
        boxwex = 0.5,
        outcol = "#C0392B",
        outpch = 19,
        cex.main = 1.0,
        cex.lab = 0.9)
abline(h = 100, col = "#E67E22", lty = 2, lwd = 2)
abline(h = 126, col = "#C0392B", lty = 2, lwd = 2)
text(1.3, 100, "IFG", pos = 3, cex = 0.7, col = "#E67E22", font = 2)
text(1.3, 126, "DM", pos = 3, cex = 0.7, col = "#C0392B", font = 2)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

par(mfrow = c(1, 1))

INTERPRETACIÓN ESTADÍSTICA Y CLÍNICA: GLICEMIA EN AYUNAS

Medidas de tendencia central y dispersión

La media de glicemia fue 88.10 mg/dL con mediana de 89.00 mg/dL, valores prácticamente idénticos que confirman una distribución simétrica, considero que este nivel promedio se encuentra claramente en el rango normal (<100 mg/dL) para población pediátrica, lo que sugiere que la mayoría de la cohorte mantiene homeostasis glucémica preservada.

La desviación estándar (11.32 mg/dL) y el coeficiente de variación (CV = 12.85%) reflejan variabilidad baja, la más controlada entre todas las variables metabólicas analizadas hasta ahora, además esta baja dispersión contrasta con la alta variabilidad observada en triglicéridos (CV = 53.83%) y LDL (CV = 56.88%), ejemplo que explica cómo los mecanismos regulatorios de la glucosa son más estrictos que los del metabolismo lipídico.

El rango estimado (63–118 mg/dL) es relativamente estrecho, aunque el máximo cercano a 118 mg/dL indica la existencia de un pequeño subgrupo que bordea el umbral de glicemia alterada en ayunas (≥100 mg/dL).

Distribución visual e implicaciones

El histograma evidencia una distribución unimodal prácticamente simétrica, centrada entre 85 y 95 mg/dL, característica de poblaciones pediátricas con función pancreática β preservada.
La ausencia de asimetría positiva marcada es un hallazgo favorable, ya que sugiere que la mayoría de los escolares no presenta hiperglucemia.

El boxplot es compacto y equilibrado, con pocos valores atípicos. Ningún estudiante supera los 126 mg/dL (umbral diagnóstico de diabetes) y muy pocos superan los 100 mg/dL (glicemia alterada en ayunas), lo que veo que menos del 5% de la cohorte presenta disglucemia establecida y la línea de referencia en 100 mg/dL permite estimar visualmente que solo entre el 2 y el 5% presenta valores alterados, prevalencia baja pero clínicamente relevante para la edad.

Hallazgo aparentemente paradójico

A pesar de que aproximadamente 25–30% de la cohorte presenta obesidad visceral (ICC = 0.852, índice cintura/cadera elevado), alta grasa corporal (>25%), dislipidemia aterogénica (triglicéridos elevados, HDL bajo) y baja aptitud física (CRF = 3.54 shuttles), la glicemia permanece normal en la mayoría de los casos.

-Este hallazgo se explica por dos mecanismos fisiopatológicos principales según la literatura que he revisado y citado:

-Compensación hiperinsulinémica: en etapas iniciales de resistencia a la insulina, las células β pancreáticas aumentan su secreción de insulina para compensar la reducción en la sensibilidad periférica, manteniendo la glucosa dentro del rango normal,por lo que este fenómeno explica por qué niños con obesidad pueden tener glucosa normal pero niveles elevados de insulina basal y HOMA-IR aumentados.

*-Capacidad adaptativa juvenil: los niños y adolescentes conservan una reserva funcional pancreática amplia**, con masa y capacidad secretora de células β preservadas. Esta plasticidad metabólica permite mantener normoglucemia a pesar de la mayor demanda insulínica inducida por obesidad y resistencia periférica.

Sin embargo, esta compensación no es indefinida, pues con el tiempo, la resistencia a la insulina progresa y la demanda secretora excede la capacidad de las células β, que comienzan a fallar por estrés oxidativo, lipotoxicidad y depósito de amilina.

El resultado final es fallo pancreático progresivo, hiperglucemia franca y diabetes tipo 2 en etapas posteriores, proceso que puede manifestarse precozmente en niños con obesidad severa.

Relevancia de la glicemia normal en el contexto del síndrome metabólico

El mantenimiento de la glicemia normal no excluye la presencia de síndrome metabólico, ya que este diagnóstico requiere solo tres de los cinco criterios, y la alteración glucémica es solo uno de ellos.

En población pediátrica, la dislipidemia y la obesidad central suelen preceder a la disglucemia, lo que significa que esta última es una manifestación tardía del proceso metabólico.

Los escolares con obesidad visceral, dislipidemia aterogénica y presión arterial elevada ya cumplen criterios de síndrome metabólico, incluso con glicemia normal, siendo esta combinación metabólica un riesgo cardiovascular aumentado, mediado por inflamación crónica, disfunción endotelial y estrés oxidativo persistente.

-Coherencia con variables previas-

Los hallazgos glucémicos son consistentes con el patrón metabólico general que he observado:

1.Triglicéridos elevados (media = 86.53 mg/dL, 10–15% >150 mg/dL), ejemplo que explica resistencia insulínica hepática selectiva, donde persiste la lipogénesis pese a la ausencia de hiperglucemia.

2.HDL bajo en subgrupo, ejemplo que explica cómo el metabolismo inverso entre HDL y triglicéridos mediado por la proteína de transferencia de ésteres de colesterol refleja resistencia a la insulina aun con glucosa normal.

3.Obesidad visceral (ICC = 0.852, índice cintura/cadera elevado), ejemplo que explica cómo la liberación portal de ácidos grasos libres desde el tejido adiposo visceral induce resistencia hepática a la insulina, aunque la compensación pancreática mantenga normoglucemia.

Consideraciones sobre resistencia insulínica oculta

La glicemia en ayunas es un marcador tardío de disfunción metabólica. Antes de que la glucosa se eleve, ya se han establecido alteraciones tempranas como la hiperinsulinemia compensatoria, la reducción de sensibilidad insulínica en músculo y tejido adiposo y el aumento de la producción hepática de glucosa compensado por mayor secreción de insulina.

La ausencia de medición de insulina basal y HOMA-IR (es un índice que estima la resistencia a la insulina a partir de la glucosa e insulina en ayunas )en este estudio constituye una limitación importante, ya que impide cuantificar la resistencia insulínica subyacente que probablemente existe en el subgrupo con obesidad visceral y dislipidemia pese a su normoglucemia.

Estudios pediátricos han mostrado que niños obesos con glicemia normal pueden presentar HOMA-IR elevado (>2.5–3.5), evidenciando una resistencia insulínica compensada que no se refleja aún en la glucosa basal pero que predice progresión a diabetes tipo 2 en seguimientos longitudinales.

Implicaciones preventivas

La normoglucemia prevalente no me genera una sensación de seguridad, ya que representa una ventana de oportunidad preventiva antes del agotamiento pancreático irreversible.

Considero que estos escolares con obesidad visceral, dislipidemia y normoglucemia se encuentran al momento de este análisis,en la fase compensada de resistencia insulínica por lo cual en la actualidad con poblaciones similares, es mujy importante iniciar medidas preventivas ya mencionadas antes, en cuanto a ejercicio y dieta.

Referencia:
Codazzi y colaboradores (2023). Mechanisms and risk factors of metabolic syndrome in children and adolescents. Endocrine.

ANÁLISIS VARIABLES: COMPOSICIÓN CORPORAL Y FUERZA COMPLEMENTARIAS

% Grasa por Pliegues Cutáneos y Fuerza Mano No Dominante

# Convertir fuerza no dominante a numérica
BASE_LIMPIA$f__mano_no_do <- as.numeric(BASE_LIMPIA$f__mano_no_do)

# Usar posiciones
nombre_grasa_plie <- names(BASE_LIMPIA)[18]
nombre_fuerza_nodo <- names(BASE_LIMPIA)[16]

tabla_grasa_plie <- BASE_LIMPIA %>%
  summarise(
    N = n(),
    Media = round(mean(.data[[nombre_grasa_plie]], na.rm = TRUE), 2),
    Mediana = round(median(.data[[nombre_grasa_plie]], na.rm = TRUE), 2),
    `Desv. Est.` = round(sd(.data[[nombre_grasa_plie]], na.rm = TRUE), 2),
    Varianza = round(var(.data[[nombre_grasa_plie]], na.rm = TRUE), 2),
    Minimo = round(min(.data[[nombre_grasa_plie]], na.rm = TRUE), 1),
    `Q1 (P25)` = round(quantile(.data[[nombre_grasa_plie]], 0.25, na.rm = TRUE), 1),
    `Q2 (P50)` = round(quantile(.data[[nombre_grasa_plie]], 0.50, na.rm = TRUE), 1),
    `Q3 (P75)` = round(quantile(.data[[nombre_grasa_plie]], 0.75, na.rm = TRUE), 1),
    Maximo = round(max(.data[[nombre_grasa_plie]], na.rm = TRUE), 1),
    Rango = round(max(.data[[nombre_grasa_plie]], na.rm = TRUE) - min(.data[[nombre_grasa_plie]], na.rm = TRUE), 1),
    `Rango IQ` = round(IQR(.data[[nombre_grasa_plie]], na.rm = TRUE), 1),
    `CV (%)` = round((sd(.data[[nombre_grasa_plie]], na.rm = TRUE) / mean(.data[[nombre_grasa_plie]], na.rm = TRUE)) * 100, 2),
    Asimetria = round(skewness(.data[[nombre_grasa_plie]], na.rm = TRUE), 3),
    Curtosis = round(kurtosis(.data[[nombre_grasa_plie]], na.rm = TRUE), 3)
  ) %>%
  t() %>%
  as.data.frame() %>%
  tibble::rownames_to_column(var = "Estadistico")

colnames(tabla_grasa_plie)[2] <- "% Grasa Pliegues"

tabla_fuerza_nodo <- BASE_LIMPIA %>%
  summarise(
    N = n(),
    Media = round(mean(.data[[nombre_fuerza_nodo]], na.rm = TRUE), 2),
    Mediana = round(median(.data[[nombre_fuerza_nodo]], na.rm = TRUE), 2),
    `Desv. Est.` = round(sd(.data[[nombre_fuerza_nodo]], na.rm = TRUE), 2),
    Varianza = round(var(.data[[nombre_fuerza_nodo]], na.rm = TRUE), 2),
    Minimo = round(min(.data[[nombre_fuerza_nodo]], na.rm = TRUE), 1),
    `Q1 (P25)` = round(quantile(.data[[nombre_fuerza_nodo]], 0.25, na.rm = TRUE), 1),
    `Q2 (P50)` = round(quantile(.data[[nombre_fuerza_nodo]], 0.50, na.rm = TRUE), 1),
    `Q3 (P75)` = round(quantile(.data[[nombre_fuerza_nodo]], 0.75, na.rm = TRUE), 1),
    Maximo = round(max(.data[[nombre_fuerza_nodo]], na.rm = TRUE), 1),
    Rango = round(max(.data[[nombre_fuerza_nodo]], na.rm = TRUE) - min(.data[[nombre_fuerza_nodo]], na.rm = TRUE), 1),
    `Rango IQ` = round(IQR(.data[[nombre_fuerza_nodo]], na.rm = TRUE), 1),
    `CV (%)` = round((sd(.data[[nombre_fuerza_nodo]], na.rm = TRUE) / mean(.data[[nombre_fuerza_nodo]], na.rm = TRUE)) * 100, 2),
    Asimetria = round(skewness(.data[[nombre_fuerza_nodo]], na.rm = TRUE), 3),
    Curtosis = round(kurtosis(.data[[nombre_fuerza_nodo]], na.rm = TRUE), 3)
  ) %>%
  t() %>%
  as.data.frame()

colnames(tabla_fuerza_nodo) <- "Fuerza No-Dom (kg)"

tabla_complementarias <- cbind(tabla_grasa_plie, tabla_fuerza_nodo)

kable(tabla_complementarias, 
      caption = "Estadisticas descriptivas: Variables Complementarias",
      align = c("l", "c", "c")) %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE) %>%
  row_spec(0, bold = TRUE, color = "white", background = "#16A085") %>%
  row_spec(c(1:3), background = "#D1F2EB") %>%
  row_spec(c(4:5), background = "#FCF3CF") %>%
  row_spec(c(6:12), background = "#D5F4E6") %>%
  row_spec(c(13:15), background = "#FADBD8")
Estadisticas descriptivas: Variables Complementarias
Estadistico % Grasa Pliegues Fuerza No-Dom (kg)
N N 125.000 125.000
Media Media 26.360 15.960
Mediana Mediana 23.550 16.000
Desv. Est. Desv. Est. 11.510 4.130
Varianza Varianza 132.480 17.060
Minimo Minimo 10.300 8.000
Q1 (P25) Q1 (P25) 18.600 13.000
Q2 (P50) Q2 (P50) 23.600 16.000
Q3 (P75) Q3 (P75) 31.100 18.000
Maximo Maximo 72.800 32.000
Rango Rango 62.500 24.000
Rango IQ Rango IQ 12.500 5.000
CV (%) CV (%) 43.660 25.880
Asimetria Asimetria 1.538 0.748
Curtosis Curtosis 5.887 3.913
par(mfrow = c(2, 2), mar = c(3, 3.5, 2.5, 1))

hist(BASE_LIMPIA[[nombre_grasa_plie]], 
     breaks = 15,
     col = "#16A085", 
     border = "white",
     main = "% Grasa (Pliegues)",
     xlab = "% Grasa",
     ylab = "Frecuencia",
     las = 1,
     cex.main = 1.0,
     cex.lab = 0.9)
abline(v = mean(BASE_LIMPIA[[nombre_grasa_plie]], na.rm = TRUE), col = "#117A65", lwd = 2.5, lty = 2)
abline(v = median(BASE_LIMPIA[[nombre_grasa_plie]], na.rm = TRUE), col = "#E67E22", lwd = 2.5, lty = 2)
legend("topright", 
       legend = c(paste0("M=", round(mean(BASE_LIMPIA[[nombre_grasa_plie]], na.rm = TRUE), 1)),
                  paste0("Me=", round(median(BASE_LIMPIA[[nombre_grasa_plie]], na.rm = TRUE), 1))),
       col = c("#117A65", "#E67E22"), lty = 2, lwd = 2, cex = 0.75)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

boxplot(BASE_LIMPIA[[nombre_grasa_plie]], 
        col = "#A3E4D7",
        border = "#0E6251",
        main = "Boxplot: % Grasa (Pliegues)",
        ylab = "% Grasa",
        las = 1,
        lwd = 1.5,
        boxwex = 0.5,
        outcol = "#C0392B",
        outpch = 19,
        cex.main = 1.0,
        cex.lab = 0.9)
abline(h = 25, col = "#E67E22", lty = 2, lwd = 2)
text(1.25, 25, "Obesidad", pos = 3, cex = 0.7, col = "#E67E22", font = 2)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

hist(BASE_LIMPIA[[nombre_fuerza_nodo]], 
     breaks = 15,
     col = "#AF7AC5", 
     border = "white",
     main = "Fuerza Mano No Dominante",
     xlab = "Fuerza (kg)",
     ylab = "Frecuencia",
     las = 1,
     cex.main = 1.0,
     cex.lab = 0.9)
abline(v = mean(BASE_LIMPIA[[nombre_fuerza_nodo]], na.rm = TRUE), col = "#6C3483", lwd = 2.5, lty = 2)
abline(v = median(BASE_LIMPIA[[nombre_fuerza_nodo]], na.rm = TRUE), col = "#E67E22", lwd = 2.5, lty = 2)
legend("topright", 
       legend = c(paste0("M=", round(mean(BASE_LIMPIA[[nombre_fuerza_nodo]], na.rm = TRUE), 1)),
                  paste0("Me=", round(median(BASE_LIMPIA[[nombre_fuerza_nodo]], na.rm = TRUE), 1))),
       col = c("#6C3483", "#E67E22"), lty = 2, lwd = 2, cex = 0.75)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

boxplot(BASE_LIMPIA[[nombre_fuerza_nodo]], 
        col = "#D7BDE2",
        border = "#4A235A",
        main = "Boxplot: Fuerza No-Dom",
        ylab = "Fuerza (kg)",
        las = 1,
        lwd = 1.5,
        boxwex = 0.5,
        outcol = "#E74C3C",
        outpch = 19,
        cex.main = 1.0,
        cex.lab = 0.9)
grid(nx = NA, ny = NULL, col = "gray85", lty = "dotted")

par(mfrow = c(1, 1))

diferencia_fuerza <- BASE_LIMPIA$f__mano_do - BASE_LIMPIA[[nombre_fuerza_nodo]]
correlacion_grasa <- cor(BASE_LIMPIA$`%_grasa_corp`, BASE_LIMPIA[[nombre_grasa_plie]], use = "complete.obs")

cat("\n=== ANÁLISIS COMPARATIVO ===\n")
## 
## === ANÁLISIS COMPARATIVO ===
cat("Diferencia Fuerza Dominante - No Dominante:\n")
## Diferencia Fuerza Dominante - No Dominante:
cat("  Media:", round(mean(diferencia_fuerza, na.rm = TRUE), 2), "kg\n")
##   Media: 0.46 kg
cat("  Mediana:", round(median(diferencia_fuerza, na.rm = TRUE), 2), "kg\n\n")
##   Mediana: 1 kg
cat("Correlación % Grasa (Bioimpedancia vs Pliegues):\n")
## Correlación % Grasa (Bioimpedancia vs Pliegues):
cat("  r =", round(correlacion_grasa, 3), "\n")
##   r = 0.661

*ANALIIS DE PORCENTAJE DE GRASA POR PLIEGUES CUTÁNEOS**

Medidas de tendencia central y dispersión

La media de grasa por pliegues fue 26.36% con mediana de 23.55%, evidenciando una diferencia de 2.81% que sugiere asimetría positiva leve, por tanto este valor promedio es notablemente superior al obtenido por bioimpedancia (19.14%),una discrepancia metodológica esperada que analizaré más adelante.

La desviación estándar de 11.51% y el coeficiente de variación (CV) de 43.67% me indican variabilidad moderada-alta, menor que la que encontré en grasa corporal por bioimpedancia (CV=53.09%) pero aún considerable.
El rango de 62.5% (10.3–72.8%) evidencia heterogeneidad marcada en la composición corporal.

Distribución visual e implicaciones

  • El histograma muestra una distribución unimodal con asimetría positiva, centrada en 20–25%, pero con cola extendida hacia adiposidad excesiva (>40%).
  • El boxplot confirma múltiples outliers superiores, representando escolares con obesidad franca por grasa subcutánea.
  • La línea naranja marcando 25% (umbral de obesidad) permite estimar que aproximadamente el 40–50% de la cohorte supera este límite, prevalencia superior a la observada por bioimpedancia (25–30%).

Considero que es metodológicamente coherente, pues los pliegues cutáneos tienden a sobreestimar el porcentaje de grasa total al medir solo grasa subcutánea y extrapolar mediante ecuaciones predictivas.

FUERZA PRENSIL MANO NO DOMINANTE

Medidas de tendencia central

La media de fuerza no dominante fue 15.96 kg con mediana de 16.00 kg, valores prácticamente idénticos que confirman distribución simétrica. Este rendimiento es muy similar a la fuerza de la mano dominante (media = 16.42 kg), con una diferencia promedio de apenas 0.46 kg.

La desviación estándar (DE) de 4.13 kg y el CV de 25.88% indican variabilidad moderada, prácticamente igual a la observada en la mano dominante (CV = 24.85%), sugiriendo que la dispersión de la fuerza muscular es independiente de la lateralidad.

Distribución visual y simetría bilateral

  • El histograma muestra una distribución unimodal y simétrica, centrada en 15–17 kg.
  • El boxplot presenta estructura equilibrada con pocos outliers, confirmando que la fuerza muscular está homogéneamente distribuida entre ambas manos.
  • La diferencia mínima entre manos (mediana = 1 kg, media = 0.46 kg) es fisiopatológicamente relevante, pues sugiere que esta cohorte presenta desarrollo muscular bilateral equilibrado, sin asimetría marcada.

En poblaciones con entrenamiento deportivo unilateral o patología neuromuscular, esta diferencia suele ser mayor (>2–3 kg).

ANÁLISIS COMPARATIVO: MÉTODOS DE EVALUACIÓN DE GRASA CORPORAL

Correlación entre bioimpedancia y pliegues cutáneos

La correlación fue r = 0.661, clasificada como moderada-fuerte pero no excelente, siendo esta correlación imperfecta refleja que ambos métodos no miden exactamente lo mismo:

  • Bioimpedancia (media = 19.14%): estima grasa total (subcutánea + visceral) mediante resistencia eléctrica, pero es sensible a hidratación, fase menstrual y temperatura corporal.
  • Pliegues cutáneos (media = 26.36%): miden solo grasa subcutánea en sitios específicos y extrapolan mediante ecuaciones predictivas (como Slaughter), asumiendo proporciones constantes.

La diferencia de 7.22% entre métodos (26.36% vs 19.14%) indica que los pliegues sobreestiman sistemáticamente el porcentaje de grasa en esta población.
Esto puede deberse a que las ecuaciones predictivas fueron desarrolladas en poblaciones con diferente composición corporal y distribución de grasa que los escolares colombianos.

Implicaciones para fenotipificación metabólica

  • Pese a la discrepancia, ambos métodos identifican el mismo subgrupo de alto riesgo (25–40% de la cohorte).
  • Esta concordancia cualitativa (aunque no cuantitativa) confirma la existencia de un subgrupo robusto con exceso real de grasa corporal, no un artefacto metodológico.
  • Este subgrupo presenta mayor riesgo de resistencia insulínica, dislipidemia e hipertensión, según análisis previos.

ASIMETRÍA MUSCULAR Y DESARROLLO BILATERAL

Diferencia dominante–no dominante mínima

La diferencia promedio de 0.46 kg (mediana = 1 kg) entre manos es muy pequeña (2.8% de la fuerza total), indicando desarrollo muscular bilateral equilibrado.
Esto es favorable porque:

  • La asimetría muscular >10–15% se asocia con mayor riesgo de lesiones musculoesqueléticas.
  • El entrenamiento bilateral equilibrado favorece el desarrollo neuromuscular simétrico.
  • En escolares sedentarios con baja aptitud física (CRF = 3.54 shuttles), la simetría bilateral indica un desacondicionamiento global, no un déficit unilateral.

COHERENCIA CON VARIABLES PREVIAS

Los hallazgos son coherentes con el patrón metabólico global dado por:

CONCLUSIÓN BASADA EN EVIDENCIA

Los hallazgos me confirman alta prevalencia de adiposidad excesiva (25–50%), combinada con desarrollo muscular bilateral equilibrado pero en contexto de bajo acondicionamiento aeróbico.

Referencias

Codazzi, A. C., Pinto, I., Ziccarelli, M., Bona, A., Zampino, G., & Deodati, A. (2023). Mechanisms and risk factors of metabolic syndrome in children and adolescents. Endocrine, 1-15. doi: 10.1007/s12020-023-03642-x