Introducción
Las pruebas no paramétricas son herramientas estadísticas robustas que no asumen distribución normal de los datos, lo cual las hace ideales para la base BaseEndocrino porque:
sirve cuando presenta distribuciones asimétricas en biomarcadores metabólicos
cuando contiene valores atípicos
cuando incluye tamaños muestrales pequeños en algunos subgrupos
y cuando combina variables continuas y categóricas
En este análisis aplicaré 4 pruebas no paramétricas complementarias:
Mis librerias
library(readxl)
library(dplyr)
library(ggplot2)
library(ggpubr)
library(rstatix)
BaseEndocrino <- read_excel("BaseEndocrino.xlsx")
# Convierto todas las variables character a factor
BaseEndocrino <- BaseEndocrino %>%
mutate(across(where(is.character), as.factor))
# Verificación de cargue de base
BaseEndocrino
## # A tibble: 100 × 51
## ID EDAD SEXO PESO TALLA SEDENTARIO Escolaridad TAS TAD HTA_conocida
## <dbl> <dbl> <fct> <dbl> <dbl> <dbl> <fct> <dbl> <dbl> <dbl>
## 1 700 35 Masc… 112. 162 1 Primaria 125 85 0
## 2 570 69 Feme… 76 168 0 Primaria 130 70 0
## 3 29 38 Feme… 89.6 171. 0 Primaria 120 90 0
## 4 1003 30 Masc… 57.5 159 1 Universidad 100 60 0
## 5 994 62 Feme… 82 164 0 Secundaria 130 70 0
## 6 1310 30 Masc… 68 160 1 Universidad 90 60 0
## 7 1346 40 Masc… 79 156 1 Secundaria 120 70 0
## 8 791 57 Masc… 66 147 1 Primaria 110 70 0
## 9 136 42 Masc… 65.2 168 0 Primaria 125 75 0
## 10 307 35 Feme… 125 179 1 Secundaria 140 80 0
## # ℹ 90 more rows
## # ℹ 41 more variables: HTA_OMS <dbl>, A_DIAB <dbl>, ECV_B <dbl>, TABACO <dbl>,
## # ALCOHOL <dbl>, STATIN <dbl>, CINTURA <dbl>, CINTURADESP <dbl>,
## # CADERA <dbl>, OBCENT_ATP <dbl>, COLESTEROL <dbl>, HDL <dbl>, LDL <dbl>,
## # LDL_C <fct>, TG <dbl>, CnoHDL <dbl>, ApoA <dbl>, ApoB <dbl>, LPA <dbl>,
## # A1C <dbl>, hba1 <dbl>, CREATININA <dbl>, GLUCB <dbl>, SOG <dbl>,
## # Tol_Glucosa <fct>, DM <dbl>, conocida <fct>, SM <dbl>, PCR <dbl>, …
Mi exploración de la base antes de aplicar pruebas
library(dplyr)
library(ggplot2)
library(tidyr)
library(forcats)
# Vista general
head(BaseEndocrino)
## # A tibble: 6 × 51
## ID EDAD SEXO PESO TALLA SEDENTARIO Escolaridad TAS TAD HTA_conocida
## <dbl> <dbl> <fct> <dbl> <dbl> <dbl> <fct> <dbl> <dbl> <dbl>
## 1 700 35 Mascu… 112. 162 1 Primaria 125 85 0
## 2 570 69 Femen… 76 168 0 Primaria 130 70 0
## 3 29 38 Femen… 89.6 171. 0 Primaria 120 90 0
## 4 1003 30 Mascu… 57.5 159 1 Universidad 100 60 0
## 5 994 62 Femen… 82 164 0 Secundaria 130 70 0
## 6 1310 30 Mascu… 68 160 1 Universidad 90 60 0
## # ℹ 41 more variables: HTA_OMS <dbl>, A_DIAB <dbl>, ECV_B <dbl>, TABACO <dbl>,
## # ALCOHOL <dbl>, STATIN <dbl>, CINTURA <dbl>, CINTURADESP <dbl>,
## # CADERA <dbl>, OBCENT_ATP <dbl>, COLESTEROL <dbl>, HDL <dbl>, LDL <dbl>,
## # LDL_C <fct>, TG <dbl>, CnoHDL <dbl>, ApoA <dbl>, ApoB <dbl>, LPA <dbl>,
## # A1C <dbl>, hba1 <dbl>, CREATININA <dbl>, GLUCB <dbl>, SOG <dbl>,
## # Tol_Glucosa <fct>, DM <dbl>, conocida <fct>, SM <dbl>, PCR <dbl>,
## # INSULINEMIA <dbl>, PAI_1 <dbl>, fvw <dbl>, fibri <dbl>, HMC <dbl>, …
tail(BaseEndocrino)
## # A tibble: 6 × 51
## ID EDAD SEXO PESO TALLA SEDENTARIO Escolaridad TAS TAD HTA_conocida
## <dbl> <dbl> <fct> <dbl> <dbl> <dbl> <fct> <dbl> <dbl> <dbl>
## 1 222 48 Mascu… 90 160 1 Primaria 100 70 0
## 2 392 42 Femen… 70.8 168 0 Secundaria 110 80 0
## 3 1172 39 Femen… 79 172 1 Secundaria 130 70 0
## 4 1092 67 Mascu… 92.8 153 1 Primaria 150 70 1
## 5 276 67 Femen… 85 166 0 Primaria 160 90 1
## 6 769 31 Femen… 85 170 0 Secundaria 110 60 0
## # ℹ 41 more variables: HTA_OMS <dbl>, A_DIAB <dbl>, ECV_B <dbl>, TABACO <dbl>,
## # ALCOHOL <dbl>, STATIN <dbl>, CINTURA <dbl>, CINTURADESP <dbl>,
## # CADERA <dbl>, OBCENT_ATP <dbl>, COLESTEROL <dbl>, HDL <dbl>, LDL <dbl>,
## # LDL_C <fct>, TG <dbl>, CnoHDL <dbl>, ApoA <dbl>, ApoB <dbl>, LPA <dbl>,
## # A1C <dbl>, hba1 <dbl>, CREATININA <dbl>, GLUCB <dbl>, SOG <dbl>,
## # Tol_Glucosa <fct>, DM <dbl>, conocida <fct>, SM <dbl>, PCR <dbl>,
## # INSULINEMIA <dbl>, PAI_1 <dbl>, fvw <dbl>, fibri <dbl>, HMC <dbl>, …
# Estructura
str(BaseEndocrino)
## tibble [100 × 51] (S3: tbl_df/tbl/data.frame)
## $ ID : num [1:100] 700 570 29 1003 994 ...
## $ EDAD : num [1:100] 35 69 38 30 62 30 40 57 42 35 ...
## $ SEXO : Factor w/ 2 levels "Femenino","Masculino": 2 1 1 2 1 2 2 2 2 1 ...
## $ PESO : num [1:100] 112.5 76 89.6 57.5 82 ...
## $ TALLA : num [1:100] 162 168 171 159 164 ...
## $ SEDENTARIO : num [1:100] 1 0 0 1 0 1 1 1 0 1 ...
## $ Escolaridad : Factor w/ 4 levels "Primaria","Secundaria",..: 1 1 1 4 2 4 2 1 1 2 ...
## $ TAS : num [1:100] 125 130 120 100 130 90 120 110 125 140 ...
## $ TAD : num [1:100] 85 70 90 60 70 60 70 70 75 80 ...
## $ HTA_conocida: num [1:100] 0 0 0 0 0 0 0 0 0 0 ...
## $ HTA_OMS : num [1:100] 0 0 1 0 0 0 0 0 0 1 ...
## $ A_DIAB : num [1:100] 1 0 1 0 1 0 0 0 0 1 ...
## $ ECV_B : num [1:100] 0 0 0 0 0 0 0 0 0 0 ...
## $ TABACO : num [1:100] 0 0 0 0 0 0 0 0 1 0 ...
## $ ALCOHOL : num [1:100] 0 0 0 1 0 1 0 0 1 0 ...
## $ STATIN : num [1:100] 0 0 0 0 0 0 0 0 0 0 ...
## $ CINTURA : num [1:100] 124 99 105 77 112 96 102 93 87 126 ...
## $ CINTURADESP : num [1:100] 119 94 100 72 107 91 97 88 82 121 ...
## $ CADERA : num [1:100] 136 104 99 99 100 105 107 110 98 121 ...
## $ OBCENT_ATP : num [1:100] 1 0 1 0 1 1 1 1 0 1 ...
## $ COLESTEROL : num [1:100] 219 176 245 183 233 175 239 244 209 204 ...
## $ HDL : num [1:100] 56 57 65 59 48 80 50 58 50 38 ...
## $ LDL : num [1:100] 144 95 171 116 161 83 167 166 141 116 ...
## $ LDL_C : Factor w/ 10 levels "0","100 - 120",..: 4 10 5 2 5 10 5 5 4 2 ...
## $ TG : num [1:100] 95 120 47 38 122 60 112 104 90 250 ...
## $ CnoHDL : num [1:100] 163 119 180 124 185 95 189 186 159 166 ...
## $ ApoA : num [1:100] 132 145 0 122 129 ...
## $ ApoB : num [1:100] 102 72 0 76 103 50 109 87 75 93 ...
## $ LPA : num [1:100] 5.26 11.2 2.39 8.35 3.81 32.7 6.88 24.9 7.6 8.92 ...
## $ A1C : num [1:100] 6.86 6.67 6.07 4.79 5.68 ...
## $ hba1 : num [1:100] 8.4 8.5 7.4 5.9 7.3 6.1 6.4 6.5 6 6.4 ...
## $ CREATININA : num [1:100] 0.8 1.1 0.8 0.7 0.7 0.5 0.8 0.6 0.7 0.9 ...
## $ GLUCB : num [1:100] 172 156 89 75 91 59 87 113 83 91 ...
## $ SOG : num [1:100] 337 301 91 74 173 87 100 117 89 74 ...
## $ Tol_Glucosa : Factor w/ 4 levels "DM","IFG","IGT",..: 1 1 4 4 3 4 4 2 4 4 ...
## $ DM : num [1:100] 1 1 0 0 0 0 0 0 0 0 ...
## $ conocida : Factor w/ 5 levels "Diabetes conocida",..: 2 2 5 5 4 5 5 3 5 5 ...
## $ SM : num [1:100] 1 1 0 0 0 0 0 0 0 1 ...
## $ PCR : num [1:100] 1.1 0.34 0.32 0.34 0.34 0.3 0.3 0.34 0.32 0.4 ...
## $ INSULINEMIA : num [1:100] 32.8 4.9 4.2 8 4.6 7.9 16.1 2.6 3.9 12.1 ...
## $ PAI_1 : num [1:100] 53.6 39.8 24.2 17.2 24.2 11.1 33.8 8.77 13.8 49 ...
## $ fvw : num [1:100] 129 118 46.5 23.5 111 80.7 158 142 146 105 ...
## $ fibri : num [1:100] 3.37 3.13 2.69 3.8 3.24 2.84 2.8 3.29 2.94 3.02 ...
## $ HMC : num [1:100] 9.84 9.72 12.48 10.27 13.3 ...
## $ HOMA : num [1:100] 13.918 1.886 0.922 1.48 1.033 ...
## $ IR : num [1:100] 1 0 0 0 0 0 1 0 0 1 ...
## $ ecnos : Factor w/ 4 levels "0","aa","ab",..: 4 3 2 3 4 4 4 3 4 4 ...
## $ ppr : Factor w/ 3 levels "0","pa","pp": 3 1 1 3 3 3 3 2 3 1 ...
## $ fibratos : Factor w/ 1 level "No": 1 1 1 1 1 1 1 1 1 1 ...
## $ CETP : Factor w/ 4 levels "0","B1B1","B1B2",..: 2 3 1 1 1 3 2 2 1 1 ...
## $ PON_192 : Factor w/ 4 levels "0","QQ","QR",..: 3 3 1 3 2 3 3 4 2 2 ...
# Resumen estadístico
summary(BaseEndocrino)
## ID EDAD SEXO PESO
## Min. : 29.0 Min. :30.00 Femenino :43 Min. : 46.50
## 1st Qu.: 296.8 1st Qu.:37.75 Masculino:57 1st Qu.: 65.15
## Median : 739.5 Median :44.50 Median : 74.35
## Mean : 726.7 Mean :46.25 Mean : 75.67
## 3rd Qu.:1080.8 3rd Qu.:53.00 3rd Qu.: 85.00
## Max. :1383.0 Max. :79.00 Max. :127.00
##
## TALLA SEDENTARIO Escolaridad TAS
## Min. :146.0 Min. :0.00 Primaria :33 Min. : 90.0
## 1st Qu.:157.8 1st Qu.:0.00 Secundaria :54 1st Qu.:110.0
## Median :163.6 Median :1.00 Sin estudios: 2 Median :120.0
## Mean :164.2 Mean :0.54 Universidad :11 Mean :118.3
## 3rd Qu.:170.8 3rd Qu.:1.00 3rd Qu.:130.0
## Max. :182.0 Max. :1.00 Max. :160.0
##
## TAD HTA_conocida HTA_OMS A_DIAB ECV_B
## Min. : 60.0 Min. :0.00 Min. :0.00 Min. :0.00 Min. :0.00
## 1st Qu.: 70.0 1st Qu.:0.00 1st Qu.:0.00 1st Qu.:0.00 1st Qu.:0.00
## Median : 70.0 Median :0.00 Median :0.00 Median :0.00 Median :0.00
## Mean : 72.7 Mean :0.17 Mean :0.24 Mean :0.43 Mean :0.05
## 3rd Qu.: 80.0 3rd Qu.:0.00 3rd Qu.:0.00 3rd Qu.:1.00 3rd Qu.:0.00
## Max. :100.0 Max. :1.00 Max. :1.00 Max. :1.00 Max. :1.00
##
## TABACO ALCOHOL STATIN CINTURA CINTURADESP
## Min. :0.00 Min. :0.00 Min. :0.00 Min. : 68.00 Min. : 63.00
## 1st Qu.:0.00 1st Qu.:0.00 1st Qu.:0.00 1st Qu.: 88.75 1st Qu.: 80.75
## Median :0.00 Median :0.00 Median :0.00 Median : 97.00 Median : 91.00
## Mean :0.15 Mean :0.31 Mean :0.13 Mean : 96.24 Mean : 89.68
## 3rd Qu.:0.00 3rd Qu.:1.00 3rd Qu.:0.00 3rd Qu.:103.00 3rd Qu.: 96.25
## Max. :1.00 Max. :1.00 Max. :1.00 Max. :135.00 Max. :128.00
##
## CADERA OBCENT_ATP COLESTEROL HDL
## Min. : 82.0 Min. :0.00 Min. :117.0 Min. : 31.00
## 1st Qu.: 98.0 1st Qu.:0.00 1st Qu.:185.8 1st Qu.: 46.75
## Median :102.0 Median :1.00 Median :209.0 Median : 54.50
## Mean :104.1 Mean :0.54 Mean :211.8 Mean : 55.18
## 3rd Qu.:110.2 3rd Qu.:1.00 3rd Qu.:234.8 3rd Qu.: 61.25
## Max. :136.0 Max. :1.00 Max. :340.0 Max. :102.00
##
## LDL LDL_C TG CnoHDL ApoA
## Min. : 0.0 120 - 140:26 Min. : 38.0 Min. : 58.0 Min. : 0.0
## 1st Qu.:113.8 100 - 120:24 1st Qu.: 63.5 1st Qu.:130.5 1st Qu.:116.6
## Median :131.0 140 - 160:19 Median : 91.5 Median :155.5 Median :129.5
## Mean :133.0 160 - 180:13 Mean :116.8 Mean :156.7 Mean :124.7
## 3rd Qu.:153.2 80 - 100 : 7 3rd Qu.:131.5 3rd Qu.:178.5 3rd Qu.:144.9
## Max. :230.0 180 - 200: 5 Max. :843.0 Max. :283.0 Max. :239.9
## (Other) : 6
## ApoB LPA A1C hba1
## Min. : 0.00 Min. : 2.39 Min. : 4.498 Min. : 5.500
## 1st Qu.: 72.00 1st Qu.: 5.52 1st Qu.: 4.991 1st Qu.: 6.200
## Median : 82.50 Median :10.45 Median : 5.287 Median : 6.600
## Mean : 80.43 Mean :19.69 Mean : 5.457 Mean : 7.226
## 3rd Qu.: 95.00 3rd Qu.:26.65 3rd Qu.: 5.607 3rd Qu.: 7.000
## Max. :161.00 Max. :74.60 Max. :10.605 Max. :53.000
##
## CREATININA GLUCB SOG Tol_Glucosa DM
## Min. :0.400 Min. : 59.0 Min. : 0.00 DM :12 Min. :0.00
## 1st Qu.:0.675 1st Qu.: 85.0 1st Qu.: 83.75 IFG:17 1st Qu.:0.00
## Median :0.800 Median : 91.0 Median :100.00 IGT:13 Median :0.00
## Mean :0.784 Mean :100.9 Mean :107.06 NGT:58 Mean :0.12
## 3rd Qu.:0.900 3rd Qu.:105.2 3rd Qu.:124.75 3rd Qu.:0.00
## Max. :1.400 Max. :223.0 Max. :337.00 Max. :1.00
##
## conocida SM PCR INSULINEMIA
## Diabetes conocida : 4 Min. :0.00 Min. :0.3000 Min. : 0.600
## Diabetes no conocida: 8 1st Qu.:0.00 1st Qu.:0.3200 1st Qu.: 4.700
## IFG : 7 Median :0.00 Median :0.3400 Median : 6.600
## IGT :13 Mean :0.36 Mean :0.4123 Mean : 8.599
## Normal :68 3rd Qu.:1.00 3rd Qu.:0.3400 3rd Qu.:10.850
## Max. :1.00 Max. :2.2400 Max. :32.800
##
## PAI_1 fvw fibri HMC
## Min. : 1.29 Min. : 23.50 Min. :1.670 Min. : 2.740
## 1st Qu.:15.10 1st Qu.: 78.38 1st Qu.:2.835 1st Qu.: 8.947
## Median :24.00 Median :104.50 Median :3.125 Median :10.775
## Mean :28.07 Mean :106.12 Mean :3.243 Mean :11.101
## 3rd Qu.:37.92 3rd Qu.:137.00 3rd Qu.:3.683 3rd Qu.:12.787
## Max. :90.30 Max. :199.00 Max. :5.740 Max. :31.850
##
## HOMA IR ecnos ppr fibratos CETP PON_192
## Min. : 0.1391 Min. :0.00 0 : 9 0 :15 No:100 0 :56 0 :16
## 1st Qu.: 1.0256 1st Qu.:0.00 aa: 7 pa:11 B1B1:18 QQ:33
## Median : 1.5011 Median :0.00 ab:23 pp:74 B1B2:22 QR:41
## Mean : 2.3531 Mean :0.31 bb:61 B2B2: 4 RR:10
## 3rd Qu.: 2.7168 3rd Qu.:1.00
## Max. :17.2293 Max. :1.00
##
# Para realizar conteo de NA por variable
NA_count <- sapply(BaseEndocrino, function(x) sum(is.na(x)))
NA_count
## ID EDAD SEXO PESO TALLA SEDENTARIO
## 0 0 0 0 0 0
## Escolaridad TAS TAD HTA_conocida HTA_OMS A_DIAB
## 0 0 0 0 0 0
## ECV_B TABACO ALCOHOL STATIN CINTURA CINTURADESP
## 0 0 0 0 0 0
## CADERA OBCENT_ATP COLESTEROL HDL LDL LDL_C
## 0 0 0 0 0 0
## TG CnoHDL ApoA ApoB LPA A1C
## 0 0 0 0 0 0
## hba1 CREATININA GLUCB SOG Tol_Glucosa DM
## 0 0 0 0 0 0
## conocida SM PCR INSULINEMIA PAI_1 fvw
## 0 0 0 0 0 0
## fibri HMC HOMA IR ecnos ppr
## 0 0 0 0 0 0
## fibratos CETP PON_192
## 0 0 0
Esta es la base que he venido trabajando en los talleres anteriores, así que ya la reconozco y me resulta familiar,por lo que comienzo con el analisis previo importante para luego entrar en materia de la práctica de pruebas no paramétricas.
Lo primero que observo es que la base está compuesta por cien personas y cincuenta y una variables, lo cual me confirma que estoy frente a un conjunto de datos amplio y clínicamente muy completo, asi que cuando veo la dimensión 100 × 51 entiendo que no solo tengo una población relativamente grande, sino que además cada individuo fue evaluado sus datos con un nivel de detalle bastante profundo, incluyendo características clínicas, metabólicas, inflamatorias e incluso genéticas, por ejemplo noto la estructura general que está limpia, sin valores perdidos y sin filas incompletas, y tanto el head como el tail muestran registros consistentes, ordenados y sin evidencia de errores de digitación.
Cuando reviso la estructura en detalle noto que la base combina variables numéricas continuas, variables binarias y variables categóricas reales; por ejemplo, las numéricas incluyen edad, peso, talla, tensiones arterial sistólica y diastólica, glucosa, insulina, colesterol total, HDL, LDL, triglicéridos, colesterol no-HDL, creatinina, PCR, HOMA, ApoA, ApoB, Lp(a), fibrinógeno, factor von Willebrand, entre muchas otras.
Este conjunto tan grande de biomarcadores me confirma que la base está diseñada para caracterizar riesgo cardiometabólico, inflamación y función metabólica de manera integral además veo, que hay variables binarias como sedentarismo, hipertensión conocida, tabaquismo, consumo de alcohol, diabetes previa, enfermedad cardiovascular y síndrome metabólico, por lo que todas estas están codificadas como 0 o 1, lo que facilita comparaciones con chi-cuadrado o pruebas no paramétricas entre grupos.
También noto varias variables categóricas reales como sexo, escolaridad, clasificación del LDL, tolerancia a la glucosa y los diferentes genotipos, que incluyen CETP, PON_192, ppr y ecNOS, por lo cual, muchas tienen más de dos niveles y algunas categorías aparecen con menor frecuencia, lo que inmediatamente me sugiere que en estos casos las pruebas no paramétricas serán más apropiadas.
En cuanto a la descripción estadística, la edad va desde los 30 hasta los 79 años, con una media alrededor de 46 años y una mediana de 44, lo que me confirma que es una población esencialmente adulta.
El peso por ejemplo varía desde 46 hasta 127 kilogramos, con una mediana cercana a 74 y una media cercana a 76, por lo que esta amplitud tan marcada me indica que en la base coexisten desde personas con peso normal hasta casos de obesidad importante.
La talla también se distribuye de forma natural entre 146 y 182 centímetros. Al revisar las tensiones arteriales, observo que la presión sistólica oscila entre 100 y 160 milímetros de mercurio y la diastólica entre 60 y 100, lo que me indica una mezcla clara entre individuos normotensos y personas con hipertensión.
La circunferencia abdominal muestra desde valores completamente normales hasta cifras superiores a 130 centímetros, lo cual es clínicamente significativo porque indica presencia de obesidad abdominal severa en algunos participantes, además esta variable por sí sola ya me anticipa un alto nivel de riesgo cardiometabólico.
En los lípidos encuentro un comportamiento similar, por ejemplo,el colesterol total va de 117 a 340 miligramos por decilitro, el HDL desde 31 hasta 75, y los triglicéridos muestran uno de los rangos más amplios de la base, con valores que van desde 38 hasta 843 miligramos por decilitro, por lo que ese valor extremo de 843 es una pista para mi muy evidente de que la distribución no es normal y de que debo trabajar con métodos robustos.
Con lainsulina y el índice HOMA también observo una dispersión amplia, con niveles que van desde valores casi indetectables hasta cifras que indican resistencia a la insulina muy marcada, al igual esto ocurre con la glucosa,pues me muestra desde normoglucemia hasta niveles claramente diabéticos.
La proteína C reactiva, aunque más estable, también tiene un rango que incluye valores compatibles con inflamación moderada y por ejemplo,otro punto que me llamó la atención es que no existen valores perdidos en ninguna variable, por lo que esto hace que la base sea extremadamente práctica para el análisis porque no tengo que imputar ni eliminar observaciones.
Finalmente, al observar de forma global todas estas distribuciones noto un patrón repetido, como es la gran mayoría de variables que me presentan rangos amplios, asimetría hacia valores altos y presencia de valores extremos clínicamente reales, no errores por lo que es eso precisamente lo que me confirma que la base no cumple los supuestos de normalidad necesarios para pruebas paramétricas y justifica completamente el uso de pruebas no paramétricas como Wilcoxon, Mann-Whitney, Kruskal-Wallis o chi-cuadrado, dependiendo del tipo de variable.
TEST DE MANN-WHITNEY U / WILCOXON RANK-SUM PARA MUESTRAS INDEPENDIENTES
Antes de proceder con el análisis, debo explicar exhaustivamente por qué estoy eligiendo esta prueba específica y cuándo es apropiado utilizarla, pues parto de mi pregunta sobre qué es el test de Mann-Whitney U, y según el material de lectura, el test de Mann-Whitney U, es también conocido como Wilcoxon Rank-Sum para dos muestras independientes,siendo una prueba estadística no paramétrica que me permite comparar las distribuciones de dos grupos independientes.
Las pruebas paramétricas (como la t de Student) requieren que se cumplan ciertos supuestos estrictos, como es la normalidad de la distribución de los datos en cada grupo, la homogeneidad de varianzas entre grupos, y Variables continuas medidas en escala de intervalo o razón, además de ausencia de valores atípicos extremos, sin embargo, cuando reviso mi base llamada BaseEndocrino, observo que, hay muchas variables que presentan asimetría positiva marcada (triglicéridos, HOMA, insulinemia, etc., y hay presencia de valores atípicos clínicamente reales (por ejemplo, triglicéridos que van desde 38 hasta 843 mg/dL.
En cuanto a los tamaños muestrales en algunos subgrupos son pequeños (n < 30), lo cual me hace cuestionable el poder asumir normalidad por el Teorema del Límite Central,por lo que en las distribuciones considero que son claramente NO normales para la mayoría de biomarcadores metabólicos
Por tanto, las pruebas paramétricas no son apropiadas para estos datos, asi que necesito pruebas robustas que no dependan de supuestos restrictivos.
Las pruebas no paramétricas como Mann-Whitney tienen varias ventajas en mi contexto, pues no asumen distribución normal de los datos, son robustas ante valores atípicos (usan rangos en lugar de valores originales),funcionan con muestras pequeñas, además, pueden aplicarse a variables ordinales (aunque en mi caso son continuas), también tienen buena potencia estadística incluso cuando los supuestos paramétricos se violan.
Considero que debo usar Mann-Whitney cuando,comparo DOS grupos independientes (por ejemplo: con diabetes vs sin diabetes; hombres vs mujeres), por lo que la variable dependiente es continua u ordinal, donde NO se cumplen los supuestos de normalidad y/o homogeneidad de varianzas, además de que quiero comparar las medianas o las distribuciones de ambos grupos.
Mi Pregunta de Investigación
¿Existen diferencias significativas en los niveles de hemoglobina glicosilada (A1C) entre personas con diagnóstico de Diabetes Mellitus versus personas sin diabetes?
¿Por qué elegí A1C? porque la hemoglobina glicosilada (HbA1c o A1C) es un marcador bioquímico gold standard para el control glucémico a largo plazo, además me refleja los niveles promedio de glucosa en sangre durante los últimos 2-3 meses.
Desde el punto de vista fisiopatológico, espero que, las personas con diabetes tengan valores significativamente más altos de A1C debido al control glucémico deficiente,y por otro lado, las personas sin diabetes tengan valores dentro del rango normal (< 5.7%)
Esta comparación tiene relevancia clínica directa porque la A1C es un criterio diagnóstico de diabetes (≥ 6.5%) y un objetivo terapéutico fundamental en el manejo de la enfermedad.
Hipótesis Estadísticas
H₀ (Hipótesis Nula): No existen diferencias significativas en la distribución de A1C entre personas con y sin diabetes, entonces las medianas de ambos grupos son iguales.
H₁ (Hipótesis Alternativa): Existen diferencias significativas en la distribución de A1C entre ambos grupos, entonces las medianas difieren.
#TEST DE MANN-WHITNEY / WILCOXON RANK-SUM
# Comparación de A1C entre personas con y sin Diabetes
library(dplyr)
library(ggplot2)
library(rstatix)
# Creo la variable dicotómica de Diabetes (Sí/No)
BaseEndocrino <- BaseEndocrino %>%
mutate(Diabetes_Estado = factor(
ifelse(DM == 1, "Con Diabetes", "Sin Diabetes"),
levels = c("Sin Diabetes", "Con Diabetes")
))
# Realizo test de Wilcoxon (equivalente a Mann-Whitney U)
test_a1c_dm <- wilcox.test(A1C ~ Diabetes_Estado,
data = BaseEndocrino,
exact = FALSE,
conf.int = TRUE)
# Mostrar resultados completos
print(test_a1c_dm)
##
## Wilcoxon rank sum test with continuity correction
##
## data: A1C by Diabetes_Estado
## W = 164, p-value = 0.0001098
## alternative hypothesis: true location shift is not equal to 0
## 95 percent confidence interval:
## -1.7729588 -0.8864861
## sample estimates:
## difference in location
## -1.368333
# Calcularé estadísticos descriptivos por grupo
estadisticos_a1c <- BaseEndocrino %>%
group_by(Diabetes_Estado) %>%
summarise(
n = n(),
Mediana = median(A1C, na.rm = TRUE),
Media = mean(A1C, na.rm = TRUE),
DE = sd(A1C, na.rm = TRUE),
Q1 = quantile(A1C, 0.25, na.rm = TRUE),
Q3 = quantile(A1C, 0.75, na.rm = TRUE),
Min = min(A1C, na.rm = TRUE),
Max = max(A1C, na.rm = TRUE),
IQR = IQR(A1C, na.rm = TRUE)
)
print(estadisticos_a1c)
## # A tibble: 2 × 10
## Diabetes_Estado n Mediana Media DE Q1 Q3 Min Max IQR
## <fct> <int> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 Sin Diabetes 88 5.19 5.28 0.432 4.99 5.48 4.50 6.76 0.493
## 2 Con Diabetes 12 6.57 6.79 1.55 6.05 7.13 4.79 10.6 1.08
# Calculo el tamaño del efecto (r de Rosenthal)
# r = Z / sqrt(N)
W_statistic <- test_a1c_dm$statistic
n_total <- nrow(BaseEndocrino)
# Aproximación de Z desde W
z_approx <- qnorm(test_a1c_dm$p.value/2)
r_effect <- abs(z_approx) / sqrt(n_total)
cat("\n=== TAMAÑO DEL EFECTO ===\n")
##
## === TAMAÑO DEL EFECTO ===
cat("r de Rosenthal:", round(r_effect, 3), "\n")
## r de Rosenthal: 0.387
cat("Interpretación: ",
ifelse(r_effect < 0.1, "Efecto trivial",
ifelse(r_effect < 0.3, "Efecto pequeño",
ifelse(r_effect < 0.5, "Efecto mediano", "Efecto grande"))), "\n")
## Interpretación: Efecto mediano
Representación Gráfica de las Diferencias en A1C
Específicamente, voy a combinar tres elementos, como es el violin plot, pues me puede mostrar la densidad de la distribución completa de los datos, permitiéndome visualizar si los valores se concentran en ciertos rangos o si la distribución es bimodal, por lo que es particularmente útil cuando quiero ver la forma completa de la distribución más allá de los simples cuartiles.
voy a realizar un boxplot superpuesto, ya que me proporciona información sobre las medidas de tendencia central y dispersión, mostrándome claramente la mediana (línea central), el rango intercuartílico (caja), y los valores atípicos (puntos fuera de los bigotes), por lo que esta capa me da una lectura rápida y estandarizada de las diferencias entre grupos.
Sobre los puntos individuales con jitter, lo cual me puedden permitir ver cada observación individual, evitando que se oculte información importante, además de que me puedden ayudar a identificar el tamaño muestral de cada grupo y la distribución real de los casos.
library(ggplot2)
library(ggpubr)
grafica_a1c <- ggplot(BaseEndocrino, aes(x = Diabetes_Estado, y = A1C, fill = Diabetes_Estado)) +
geom_violin(alpha = 0.4, trim = FALSE, color = "gray30") +
geom_boxplot(width = 0.18, alpha = 0.75,
outlier.colour = "#d62828", outlier.size = 3,
color = "gray30") +
geom_jitter(width = 0.25, alpha = 0.5, size = 2.2, color = "gray30") +
geom_hline(yintercept = 5.7, linetype = "dashed",
color = "#2a9d8f", size = 0.9, alpha = 0.7) +
geom_hline(yintercept = 6.5, linetype = "dashed",
color = "#e76f51", size = 0.9, alpha = 0.7) +
annotate("text", x = 2.45, y = 5.55,
label = "Normal\n(<5.7%)",
color = "#2a9d8f", fontface = "bold", size = 3.5, hjust = 1) +
annotate("text", x = 2.45, y = 6.75,
label = "Umbral DM\n(>=6.5%)",
color = "#e76f51", fontface = "bold", size = 3.5, hjust = 1) +
stat_compare_means(method = "wilcox.test",
label = "p.format",
size = 6,
label.x = 1.5,
label.y = 11.2) +
scale_fill_manual(values = c("Sin Diabetes" = "#b8d4e8",
"Con Diabetes" = "#ffb5c2")) +
scale_y_continuous(limits = c(4.2, 11.5),
breaks = seq(4, 12, by = 1)) +
labs(
title = "Comparacion de Hemoglobina Glicosilada (A1C)",
subtitle = "Test de Mann-Whitney U para Muestras Independientes",
x = "Estado de Diabetes Mellitus",
y = "Hemoglobina Glicosilada A1C (%)",
caption = "n = 100 | Cada punto representa un individuo | Puntos rojos = valores atipicos"
) +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 16, hjust = 0.5, color = "gray15"),
plot.subtitle = element_text(size = 12, hjust = 0.5, color = "gray40", margin = margin(b = 15)),
plot.caption = element_text(size = 9.5, hjust = 0.5, color = "gray50", margin = margin(t = 12)),
axis.title = element_text(face = "bold", size = 13, color = "gray20"),
axis.text = element_text(size = 11.5, color = "gray30"),
axis.title.y = element_text(margin = margin(r = 12)),
axis.title.x = element_text(margin = margin(t = 12)),
legend.position = "none",
panel.grid.major.y = element_line(color = "gray90", size = 0.4),
panel.grid.minor = element_blank(),
plot.margin = margin(15, 15, 15, 15)
)
print(grafica_a1c)
ggsave("Grafica_A1C_Final.png", plot = grafica_a1c, width = 12, height = 8, dpi = 300)
Interpretación Visual de los Resultados
Puedo identificar varios componentes que me cuentan la historia completa de las diferencias en hemoglobina glicosilada entre personas con y sin diabetes, pues cada elemento visual tiene un propósito específico para comunicar los hallazgos del test de Mann-Whitney que realicé.
Lo primero que noto al mirar la gráfica es la forma externa de los violin plots, esas siluetas que parecen violines y que me muestran cómo se distribuyen los valores de A1C en cada grupo, por ejemplo, en el grupo sin Diabetes, que está a la izquierda en color azul claro, observo que el violín es más ancho en su parte inferior, específicamente alrededor de los valores 5.0-5.5%, lo cual me indica que la mayoría de las personas sin diabetes tienen valores concentrados precisamente en este rango, además, la forma es relativamente simétrica y compacta, mostrándome que los valores son homogéneos y que hay poca dispersión en este grupo.
El violín veo que se adelgaza hacia arriba, lo que me confirma que hay muy pocos casos con valores elevados de A1C en personas sin diabetes.
En contraste, cuando miro el grupo con Diabetes a la derecha en color rosa, observo que el violín presenta una forma completamente diferente, pues es más ancho en la zona media-alta, alrededor de los valores 6.0-7.0%, lo cual me dice que aquí se concentran la mayoría de personas con diabetes, además, la forma del violín es mucho más alargada y dispersa, extendiéndose desde aproximadamente 4.8% hasta más de 11%, lo que refleja una variabilidad mucho mayor en el control glucémico de estos pacientes.
Esta dispersión considero que tiene mucho sentido desde la perspectiva clínica, pues algunos pacientes con diabetes pueden estar bien controlados con tratamiento farmacológico y modificaciones en el estilo de vida (valores cercanos a 6%), mientras que otros presentan descompensación severa con valores que llegan hasta 10-11%.
Dentro de cada violín observo las cajas rectangulares (boxplots) que me proporcionan información precisa sobre las medidas de tendencia central y dispersión, donde la línea gruesa horizontal en el centro de cada caja representa la mediana de cada grupo, y aquí es donde puedo ver claramente la diferencia que detecté con el test estadístico, pues en el grupo sin Diabetes la mediana está aproximadamente en 5.19%, manteniéndose dentro del rango normal, mientras que en el grupo con Diabetes la mediana está en 6.57%, superando el umbral diagnóstico de diabetes que es ≥6.5%, por lo que esta diferencia de aproximadamente 1.4 puntos porcentuales entre medianas no es pasajera, pues representa el paso de un estado normoglucémico a un estado de hiperglucemia crónica.
La caja en sí misma me muestra el rango intercuartílico (IQR), es decir, dónde se encuentra el 50% central de mis datos, y observo que en el grupo sin Diabetes esta caja es pequeña y compacta, lo cual me confirma que hay poca variabilidad en los valores de A1C de estas personas, por lo que sus mecanismos de regulación glucémica funcionan de manera relativamente uniforme, pero en cambio, en elgrupo con Diabetes la caja es notablemente más grande, reflejando que hay mayor dispersión incluso en el 50% central de los datos, lo que me habla de la heterogeneidad en el control metabólico de estos pacientes.
Los “bigotes” que salen de cada caja me muestran el rango de valores esperados excluyendo outliers, y aquí noto algo interesante,pues en el grupo con Diabetes veo claramente dos puntos rojos que se encuentran fuera de los bigotes superiores. El punto rojo más extremo, que está aproximadamente en 10.6%, representa un valor atípico que corresponde a una persona con control glucémico muy deficiente, probablemente con falta de adherencia al tratamiento o con diabetes de difícil control, por lo que este tipo de valores atípicos son clínicamente relevantes porque representan pacientes en alto riesgo de desarrollar complicaciones crónicas.
Cuando observo los puntos individuales grises distribuidos por toda la gráfica, puedo ver cada persona de la muestra representada individualmente, lo cual me parece muy valioso porque no pierdo la información de casos particulares; cabe anotr que, en el grupo sin Diabetes veo una gran concentración de puntos entre 4.5-5.5%, formando un “racimo” denso que se corresponde con lo que esperaría en una población metabólicamente sana, además, noto que hay algunos puntos dispersos que llegan hasta aproximadamente 6.7%, lo que podría indicar personas en estado de prediabetes o con algún grado de resistencia a la insulina que aún no ha sido diagnosticado formalmente como diabetes.
En el grupo con Diabetes, los puntos están mucho más dispersos verticalmente, lo que me confirma visualmente la mayor variabilidad que ya había identificado numéricamente con la desviación estándar de 1.55 en este grupo versus 0.43 en el grupo sin diabetes.
Las líneas punteadas horizontales que observo en la gráfica me proporcionan un contexto clínico fundamental para interpretar los resultados, pues la línea verde-azulada que está en 5.7% representa el límite superior de normalidad según los criterios de la American Diabetes Association, y cuando miro esta línea en relación con mis datos, observo que la gran mayoría del grupo sin Diabetes se encuentra por debajo de ella, lo cual es exactamente lo esperado, sin embargo, también noto que hay algunos casos del grupo sin Diabetes que están ligeramente por encima de esta línea pero por debajo de 6.5%, lo que clínicamente los clasificaría como prediabetes o alteración de la glucosa en ayunas.
La línea naranja-coral que está en 6.5% representa el umbral diagnóstico de diabetes mellitus, y observo que la mediana del grupo con Diabetes está prácticamente ubicada justo en esta línea, lo que me indica que aproximadamente la mitad de los pacientes diagnosticados con diabetes en mi muestra tienen valores en o por encima del criterio diagnóstico, mientras que la otra mitad, aunque diagnosticados con diabetes, mantienen valores ligeramente por debajo gracias al tratamiento.
El p-valor de 0.00011 que observo en la parte superior de la gráfica me confirma con un nivel de confianza extremadamente alto que las diferencias que estoy viendo visualmente entre ambos grupos no son producto del azar, pues la probabilidad de observar diferencias tan marcadas si la hipótesis nula fuera verdadera es menor al 0.01%, por lo que tengo evidencia estadística contundente para afirmar que existe una diferencia real y significativa en los niveles de hemoglobina glicosilada entre personas con y sin diabetes en mi muestra.
TEST DE KRUSKAL-WALLIS PARA MÚLTIPLES GRUPOS INDEPENDIENTES
Antes de avanzar con el análisis, considero necesario reflexionar por qué esta prueba es la adecuada para la pregunta que estoy explorando, pues el test de Kruskal-Wallis, también llamado prueba H de Kruskal-Wallis, es una herramienta no paramétrica que me permite comparar la distribución de una variable continua entre tres o más grupos independientes.
En esencia, esta prueba funciona como el equivalente no paramétrico del análisis unifactorial de la varianza, y al aplicarla estoy evaluando si las medianas de los grupos son similares o si, por el contrario, existen diferencias estadísticamente significativas entre ellas, pues tal como lo plantea el material del taller, la hipótesis nula de esta prueba se basa en asumir igualdad de medianas entre las distintas categorías.
Mientras reflexiono sobre si debo usar ANOVA o Kruskal-Wallis, recuerdo que el ANOVA tradicional exige supuestos estrictos, como son:
-normalidad en cada grupo, homogeneidad de varianzas, independencia y escalas cuantitativas adecuadas.
Sin embargo, en esta base que he llamdo BaseEndocrino ya he confirmado que la mayoría de las variables metabólicas presentan distribuciones asimétricas, valores atípicos reales y grupos con tamaños diferentes, por lo que esto significa que el ANOVA no sería mi elección correcta, porque sus resultados estarían influenciados por la violación de estos supuestos, en contraste Kruskal-Wallis me permite trabajar con robustez, respetando la naturaleza real de los datos y evitando distorsiones estadísticas.
Por esta razón, utilizaré Kruskal-Wallis, puesto que necesito comparar tres o más grupos independientes, además de que la variable dependiente presenta un comportamiento continuo u ordinal, pero también cuando no se cumplen los supuestos de normalidad o cuando las varianzas son diferentes entre los grupos, por lo que entonces esta prueba también es útil cuando me interesa comparar medianas y distribuciones, especialmente en contextos clínicos donde los biomarcadores rara vez siguen una distribución simétrica.
Mi análisis
En este punto me planteo si existen diferencias significativas en los niveles de triglicéridos según el estado de tolerancia a la glucosa, y esta elección resulta que no es casual, pues los triglicéridos son un componente fundamental del perfil lipídico y guardan una relación fisiopatológica estrecha con el metabolismo de la glucosa.
Comprendo que en personas con resistencia a la insulina, como ocurre en la prediabetes y la diabetes, suele aparecer una dislipidemia típica caracterizada por triglicéridos elevados, HDL bajo y partículas de LDL pequeñas y densas, por lo que esta relación tiene sentido si recuerdo que la insulina normalmente inhibe la lipólisis en el tejido adiposo; cuando existe resistencia a la insulina, esta supresión es ineficiente, hay liberación aumentada de ácidos grasos y el hígado termina produciendo más lipoproteínas de muy baja densidad, lo que se traduce en hipertrigliceridemia.
Desde esta perspectiva fisiológica, espero encontrar que las personas normoglucémicas tengan niveles más bajos de triglicéridos, mientras que aquellas con prediabetes muestren niveles moderadamente elevados y las personas con diabetes exhiban los valores más altos.
Para definir estas categorías utilizo los valores de hemoglobina glucosilada, así:menos de 5.7% para normoglucemia, entre 5.7% y 6.4% para prediabetes y 6.5% o más para diabetes.
Hipótesis estadísticas
La hipótesis nula plantea que no existen diferencias significativas en la distribución de los niveles de triglicéridos entre los tres grupos de tolerancia a la glucosa; es decir, que las medianas son iguales.
La hipótesis alternativa indica que al menos uno de los grupos difiere de los otros, lo cual implicaría que las medianas no son iguales y que existe una tendencia metabólica distinta entre ellos.
library(dplyr)
library(rstatix)
# Creo categorias
BaseEndocrino <- BaseEndocrino %>%
mutate(Tolerancia_Glucosa = case_when(
A1C < 5.7 ~ "Normoglucemico",
A1C >= 5.7 & A1C < 6.5 ~ "Prediabetes",
A1C >= 6.5 ~ "Diabetes"
)) %>%
mutate(Tolerancia_Glucosa = factor(Tolerancia_Glucosa,
levels = c("Normoglucemico", "Prediabetes", "Diabetes")))
# Test de Kruskal-Wallis
cat("=== TEST DE KRUSKAL-WALLIS ===\n")
## === TEST DE KRUSKAL-WALLIS ===
test_tg <- kruskal.test(TG ~ Tolerancia_Glucosa, data = BaseEndocrino)
print(test_tg)
##
## Kruskal-Wallis rank sum test
##
## data: TG by Tolerancia_Glucosa
## Kruskal-Wallis chi-squared = 2.8067, df = 2, p-value = 0.2458
# Estadisticos descriptivos
cat("\n=== ESTADISTICOS DESCRIPTIVOS ===\n")
##
## === ESTADISTICOS DESCRIPTIVOS ===
BaseEndocrino %>%
group_by(Tolerancia_Glucosa) %>%
summarise(n = n(), Mediana = median(TG, na.rm = TRUE), Media = mean(TG, na.rm = TRUE))
## # A tibble: 3 × 4
## Tolerancia_Glucosa n Mediana Media
## <fct> <int> <dbl> <dbl>
## 1 Normoglucemico 77 85 115.
## 2 Prediabetes 16 115 120
## 3 Diabetes 7 116 124
# Post-hoc
cat("\n=== COMPARACIONES POST-HOC ===\n")
##
## === COMPARACIONES POST-HOC ===
posthoc <- dunn_test(TG ~ Tolerancia_Glucosa, data = BaseEndocrino, p.adjust.method = "bonferroni")
print(posthoc)
## # A tibble: 3 × 9
## .y. group1 group2 n1 n2 statistic p p.adj p.adj.signif
## * <chr> <chr> <chr> <int> <int> <dbl> <dbl> <dbl> <chr>
## 1 TG Normoglucemico Prediabet… 77 16 0.891 0.373 1 ns
## 2 TG Normoglucemico Diabetes 77 7 1.52 0.130 0.389 ns
## 3 TG Prediabetes Diabetes 16 7 0.780 0.436 1 ns
Cuando observo los resultados del test de Kruskal-Wallis, noto que el estadístico chi-cuadrado = 2.8067 con 2 grados de libertad arroja un p-valor = 0.2458, el cual es considerablemente mayor al nivel de significancia α = 0.05, por lo que no tengo evidencia estadística suficiente para rechazar la hipótesis nula, lo cual significa que las diferencias observadas en los niveles de triglicéridos entre los tres grupos de tolerancia a la glucosa no son estadísticamente significativas.
Al revisar los estadísticos descriptivos, observo un patrón numérico interesante, donde las medianas de triglicéridos aumentan progresivamente desde 85 mg/dL en el grupo normoglucémico, hasta 115 mg/dL en prediabetes y 116 mg/dL en diabetes, sin embargo, a pesar de este incremento aparente, las diferencias no alcanzan significancia estadística.
El tamaño del efecto (ε² = 0.028) confirma que se trata de un efecto pequeño, lo cual me indica que incluso si las diferencias hubieran sido significativas, su magnitud sería modesta.
Identifico tres factores metodológicos críticos que explican estos resultados:
primero, los tamaños muestrales muy desiguales (77 normoglucémicos vs 16 prediabetes vs 7 diabetes)y que reducen drásticamente el poder estadístico; segundo, la alta variabilidad de los triglicéridos en mi muestra(rango 38-843 mg/dL) dificulta detectar diferencias entre grupos; tercero, con solo 7 personas en el grupo diabetes, cualquier valor extremo tiene impacto desproporcionado.
Desde la perspectiva fisiopatológica, estos resultados son parcialmente inesperados, pues la teoría predice que debería haber hipertrigliceridemia progresiva asociada a la resistencia a la insulina, sin embargo, es probable que factores como el tratamiento farmacológico (estatinas, fibratos) en pacientes diagnosticados, la variabilidad individual (dieta, ejercicio, genética) y el tamaño muestral insuficiente estén enmascarando esta relación.
Las comparaciones post-hoc mediante el test de Dunn me confirman la ausencia de diferencias significativas entre cualquier par de grupos (todos los p-valores ajustados > 0.05), lo cual es consistente con el resultado global del Kruskal-Wallis.
library(ggplot2)
library(ggpubr)
library(scales)
grafica_tg <- ggplot(BaseEndocrino, aes(x = Tolerancia_Glucosa, y = TG, fill = Tolerancia_Glucosa)) +
geom_violin(alpha = 0.4, trim = FALSE) +
geom_boxplot(width = 0.2, alpha = 0.75, outlier.colour = "#d62828", outlier.size = 3.5) +
geom_jitter(width = 0.25, alpha = 0.5, size = 2.5, color = "gray20") +
stat_compare_means(method = "kruskal.test", label = "p.format", size = 6.5) +
scale_fill_manual(values = c("Normoglucemico" = "#66BB6A",
"Prediabetes" = "#FFA726",
"Diabetes" = "#EF5350")) +
scale_y_continuous(
trans = "sqrt",
breaks = c(0, 50, 100, 150, 200, 300, 500, 800),
labels = c("0", "50", "100", "150", "200", "300", "500", "800")
) +
labs(title = "Comparacion de Trigliceridos segun Tolerancia a la Glucosa",
subtitle = "Test de Kruskal-Wallis | Escala con transformacion raiz cuadrada",
x = "Estado de Tolerancia a la Glucosa",
y = "Trigliceridos (mg/dL)",
caption = "n = 100 | p = 0.25 (no significativo) | Escala que transforme para mejor visualizacion") +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 15, hjust = 0.5, color = "gray15"),
plot.subtitle = element_text(size = 11, hjust = 0.5, color = "gray40"),
axis.title = element_text(face = "bold", size = 13),
axis.text = element_text(size = 11),
plot.caption = element_text(size = 9.5, hjust = 0.5, color = "gray50"),
legend.position = "none"
)
print(grafica_tg)
ggsave("Grafica_TG_Kruskal.png", plot = grafica_tg, width = 12, height = 8, dpi = 300)
Interpretación Visual de la Gráfica
Cuando observo esta visualización con escala transformada, finalmente puedo apreciar claramente los patrones,pues la transformación de raíz cuadrada me permite ver simultáneamente el valor extremo de 843 mg/dL (punto rojo en la parte superior del grupo normoglucémico) y la distribución detallada de la mayoría de los datos que se concentran entre 50-200 mg/dL.
El solapamiento extenso entre las tres distribuciones es evidente, pues las cajas (IQR) de los tres grupos se intersectan considerablemente, lo cual explica el p-valor no significativo de 0.25, además, observo que aunque las medianas muestran un incremento numérico (85 → 115 → 116 mg/dL), este patrón no es lo suficientemente robusto como para superar la alta variabilidad intragrupo.
El grupo Normoglucémico presenta la mayor dispersión con múltiples valores atípicos rojos (incluyendo varios entre 300-400 mg/dL y el extremo de 843 mg/dL), lo cual me indica que dentro de las personas clasificadas como normoglucémicas existe una heterogeneidad metabólica importante, posiblemente relacionada con factores como obesidad, síndrome metabólico incipiente, dieta o predisposición genética que no se reflejan en la A1C.
Los grupos Prediabetes y Diabetes muestran distribuciones notablemente similares tanto en forma como en posición, con violines más estrechos debido a los tamaños muestrales reducidos (n=16 y n=7), por lo que la falta de diferencia entre estos dos grupos me sugiere que una vez que se desarrolla resistencia a la insulina (prediabetes), los niveles de triglicéridos ya están elevados, y el paso a diabetes no necesariamente implica un empeoramiento adicional del perfil lipídico, especialmente si hay intervención farmacológica.
Esta visualización me confirma tres conclusiones fundamentales, la primera, es que la variabilidad dentro de cada grupo supera ampliamente la variabilidad entre grupos, lo cual es la razón matemática por la que el test de Kruskal-Wallis no detecta diferencias significativas; segundo, el poder estadístico es insuficiente debido a los tamaños muestrales desbalanceados (77 vs 16 vs 7); tercero, los triglicéridos son un biomarcador con alta variabilidad interindividual influenciado por múltiples factores más allá del control glucémico, lo cual creo que limita su utilidad como indicador único de tolerancia a la glucosa.
TEST DE WILCOXON PARA MUESTRAS PAREADAS
Antes de realizar el análisis, explico por qué esta prueba es apropiada en el contexto de mi base Endocrino, pues el test de Wilcoxon para muestras pareadas se utiliza cuando las mediciones provienen de los mismos individuos evaluados en dos condiciones que son comparables entre sí.
En este caso, dispongo de dos mediciones de circunferencia abdominal para cada participante, como es CINTURA y CINTURADESP, ya que ambas representan el mismo fenómeno biológico, pero provienen de dos métodos o momentos de medición, lo cual considero que es razonable asumir que cada persona aporta una pareja de datos vinculados, y debido a que estas diferencias no necesariamente siguen una distribución normal y porque la medición antropométrica suele presentar variabilidad individual, el test de Wilcoxon es adecuado para comparar si existe un cambio sistemático entre ambas mediciones.
Con esto en mente, la pregunta que busco responder es si existen diferencias significativas entre las mediciones de circunferencia abdominal tomadas por el procedimiento estándar (CINTURA) y las tomadas mediante la medición alternativa registrada como CINTURADESP.
La hipótesis nula establece que no existen diferencias en la distribución de ambas mediciones, lo que implica que la mediana de las diferencias entre CINTURA y CINTURADESP es igual a cero.
La hipótesis alternativa indica que sí existe una diferencia sistemática entre las dos mediciones, es decir, que la mediana de las diferencias no es igual a cero.
Wilcoxon Pareado
library(ggplot2)
library(dplyr)
library(tidyr)
# Test de Wilcoxon para muestras pareadas
wilcox_test <- wilcox.test(BaseEndocrino$CINTURA,
BaseEndocrino$CINTURADESP,
paired = TRUE)
print(wilcox_test)
##
## Wilcoxon signed rank test with continuity correction
##
## data: BaseEndocrino$CINTURA and BaseEndocrino$CINTURADESP
## V = 5050, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0
# Calculo el tamaño del efecto (r de Rosenthal)
# r = Z / sqrt(N)
W_statistic <- wilcox_test$statistic
n_total <- nrow(BaseEndocrino)
# Aproximacion de Z desde W
z_approx <- qnorm(wilcox_test$p.value/2)
r_effect <- abs(z_approx) / sqrt(n_total)
cat("\n=== TAMAÑO DEL EFECTO ===\n")
##
## === TAMAÑO DEL EFECTO ===
cat("r de Rosenthal:", round(r_effect, 3), "\n")
## r de Rosenthal: 0.876
cat("Interpretacion: ",
ifelse(r_effect < 0.1, "Efecto trivial",
ifelse(r_effect < 0.3, "Efecto pequeño",
ifelse(r_effect < 0.5, "Efecto mediano", "Efecto grande"))), "\n")
## Interpretacion: Efecto grande
# Calculo estadisticos descriptivos de las diferencias
diferencias <- BaseEndocrino$CINTURADESP - BaseEndocrino$CINTURA
cat("\n=== ESTADISTICOS DE LAS DIFERENCIAS ===\n")
##
## === ESTADISTICOS DE LAS DIFERENCIAS ===
cat("Media de diferencias:", round(mean(diferencias), 2), "cm\n")
## Media de diferencias: -6.56 cm
cat("Mediana de diferencias:", round(median(diferencias), 2), "cm\n")
## Mediana de diferencias: -7 cm
cat("DE de diferencias:", round(sd(diferencias), 2), "cm\n")
## DE de diferencias: 2.36 cm
cat("Rango:", round(min(diferencias), 2), "a", round(max(diferencias), 2), "cm\n")
## Rango: -10 a -1 cm
# Direccionalidad
cat("\n=== DIRECCIONALIDAD ===\n")
##
## === DIRECCIONALIDAD ===
cat("Disminuye (CINTURADESP < CINTURA):", sum(diferencias < 0), "personas\n")
## Disminuye (CINTURADESP < CINTURA): 100 personas
cat("Aumenta (CINTURADESP > CINTURA):", sum(diferencias > 0), "personas\n")
## Aumenta (CINTURADESP > CINTURA): 0 personas
cat("Igual:", sum(diferencias == 0), "personas\n")
## Igual: 0 personas
# Creo datos en formato largo para visualizacion
datos_pareados <- BaseEndocrino %>%
select(CINTURA, CINTURADESP) %>%
mutate(ID = 1:n()) %>%
pivot_longer(cols = c(CINTURA, CINTURADESP),
names_to = "Medicion",
values_to = "Valor")
# Visualizacion
grafica_pareada <- ggplot(datos_pareados,
aes(x = Medicion, y = Valor, group = ID)) +
geom_line(alpha = 0.25, color = "#c3d4e0") +
geom_point(size = 3, aes(color = Medicion)) +
scale_color_manual(values = c("CINTURA" = "#a8c6df", "CINTURADESP" = "#f4c6d7")) +
labs(title = "Comparacion pareada: CINTURA vs CINTURADESP",
x = "",
y = "Circunferencia (cm)") +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 15, hjust = 0.5),
legend.position = "right",
axis.text = element_text(size = 11)
)
print(grafica_pareada)
ggsave("Grafica_Wilcoxon_Pareado.png", plot = grafica_pareada, width = 10, height = 7, dpi = 300)
Interpretación Estadística y Clínica de la Comparación Pareada (CINTURA vs CINTURADESP)
Cuando observo la gráfica pareada, lo primero que noto es que cada punto representa un mismo individuo medido en dos momentos (CINTURA y CINTURADESP), y las líneas finitas que conectan ambos puntos muestran la dirección del cambio, donde la totalidad de las líneas se inclinan hacia abajo, indicando que la circunferencia abdominal es sistemáticamente menor en la medición CINTURADESP.
Este patrón visual es coherente con el resultado del test de Wilcoxon, pues el estadístico V = 5050 con un p-valor < 2.2e-16 indica que la probabilidad de observar una diferencia tan marcada entre ambas mediciones solo por azar es prácticamente nula, por lo cual rechazo la hipótesis nula y concluyo que sí existe una diferencia sistemática entre CINTURA y CINTURADESP.
Al analizar los estadísticos descriptivos de las diferencias, encuentro que la diferencia promedio es de -6.56 cm con una mediana de -7.00 cm, lo cual me indica que CINTURADESP mide consistentemente aproximadamente 7 centímetros menos que CINTURA en la totalidad de los 100 participantes evaluados, además, la desviación estándar de 2.36 cm me muestra que esta diferencia es relativamente homogénea entre individuos, con un rango de diferencias que va desde -10 cm hasta -1 cm.
La direccionalidad de los datos es unívoca, pues el 100% de los participantes (100/100 personas) presentan valores menores en CINTURADESP comparado con CINTURA, sin ningún caso de incremento o igualdad, lo cual me confirma que se trata de un sesgo sistemático de medición y no de variabilidad aleatoria.
El tamaño del efecto (r de Rosenthal = 0.876) me confirma que estamos frente a un efecto grande (r ≥ 0.5), lo cual me indica que la diferencia entre ambas mediciones no solo es estadísticamente significativa sino que también tiene una magnitud práctica extremadamente relevante, pues un valor de r cercano a 1 representa una de las asociaciones más fuertes posibles en investigación clínica, por lo que puedo afirmar con certeza que CINTURA y CINTURADESP NO son mediciones intercambiables.
Clínicamente, este resultado tiene implicaciones fundamentales para la práctica de medición antropométrica en investigación y contextos clínicos, pues la variable CINTURADESP representa una medición alternativa de la circunferencia abdominal, y el hecho de que sea sistemáticamente menor (~7 cm) con un efecto de magnitud grande sugiere que se trata de puntos anatómicos diferentes de medición, probablemente CINTURADESP se midió a nivel de las crestas ilíacas o punto más estrecho mientras que CINTURA se midió quizas a nivel del ombligo o punto de mayor circunferencia.
Esta diferencia no es cualquier cosa, pues desde el punto de vista diagnóstico, la clasificación de obesidad abdominal según criterios como el ATP III establece puntos de corte de ≥102 cm en hombres y ≥88 cm en mujeres para definir obesidad central como componente del síndrome metabólico, por lo que usar CINTURA o CINTURADESP resultaría en clasificaciones diagnósticas completamente diferentes para el mismo paciente, lo cual tiene consecuencias directas para la estratificación de riesgo cardiovascular y las decisiones terapéuticas.
Considero que existe evidencia estadística contundente (p < 2.2e-16) con un tamaño del efecto grande (r = 0.876) de que CINTURA y CINTURADESP NO son mediciones equivalentes, pues CINTURADESP mide sistemáticamente 6-7 cm menos que CINTURA en todos los participantes, lo cual me subraya la importancia crítica de la importancia de estandarizar y especificar claramente el punto anatómico de medición en protocolos de investigación y práctica clínica, pues la falta de estandarización puede resultar en errores de clasificación diagnóstica y dificultar la comparabilidad entre estudios.
TEST DE CHI-CUADRADO PARA VARIABLES CATEGÓRICAS
El test de chi-cuadrado (χ²), también conocido como prueba de independencia de Pearson, es una prueba estadística no paramétrica que me permite evaluar si existe una asociación significativa entre dos variables categóricas.
El chi-cuadrado me va a evalua, según las tablas de contingencia y las pruebas de hipótesis vinculadas a las mismas, el poder analizar la relación existente entre variables cualitativas (factores), por lo que el chi-cuadrado me compara las frecuencias observadas en cada celda de una tabla de contingencia con las frecuencias esperadas bajo la hipótesis de independencia, y si las diferencias son lo suficientemente grandes, concluyo que existe asociación entre las variables.
Debo usar chi-cuadrado cuando:
1.Tengo DOS variables categóricas/nominales
2.Quiero saber si existe asociación entre ellas
3.Cada observación pertenece a UNA SOLA categoría en cada variable
4.Las frecuencias esperadas son ≥ 5 en al menos el 80% de las celdas
Parto de mi pregunta de Investigación:
¿Existe una asociación significativa entre el sexo biológico y el estado de tolerancia a la glucosa en la población estudiada?
En esta pregunta, estas variables tienen una relevancia clínica y epidemiológica importante porque, se realciona con:
1.Diferencias hormonales: puesto que los estrógenos tienen efectos protectores sobre la sensibilidad a la insulina en mujeres premenopáusicas.
2.Distribución de grasa: Se sabe que los hombres tienden a acumular grasa visceral (más diabetogénica) mientras que las mujeres premenopáusicas acumulan más grasa subcutánea.
3.Prevalencia diferencial: La literatura sugiere que la prevalencia de diabetes tipo 2 puede diferir por sexo.
4.Implicaciones preventivas: pues si hay diferencias por sexo, las estrategias de prevención podrían necesitar adaptarse.
Hipótesis Estadísticas
H₀ (Hipótesis Nula): No existe asociación entre el sexo y el estado de tolerancia a la glucosa, y las variables son independientes.
H₁ (Hipótesis Alternativa): Existe asociación entre el sexo y el estado de tolerancia a la glucosa,y las variables NO son independientes.
library(dplyr)
library(ggplot2)
library(vcd)
# Creo tabla de contingencia
tabla_sexo_glucosa <- table(BaseEndocrino$SEXO, BaseEndocrino$Tol_Glucosa)
cat("=== TABLA DE CONTINGENCIA ===\n")
## === TABLA DE CONTINGENCIA ===
print(tabla_sexo_glucosa)
##
## DM IFG IGT NGT
## Femenino 6 9 7 21
## Masculino 6 8 6 37
# Realizo test de chi-cuadrado
test_chi <- chisq.test(tabla_sexo_glucosa, correct = FALSE)
cat("\n=== TEST DE CHI-CUADRADO ===\n")
##
## === TEST DE CHI-CUADRADO ===
print(test_chi)
##
## Pearson's Chi-squared test
##
## data: tabla_sexo_glucosa
## X-squared = 2.6413, df = 3, p-value = 0.4503
# Muestro frecuencias esperadas
cat("\n=== FRECUENCIAS ESPERADAS ===\n")
##
## === FRECUENCIAS ESPERADAS ===
print(round(test_chi$expected, 2))
##
## DM IFG IGT NGT
## Femenino 5.16 7.31 5.59 24.94
## Masculino 6.84 9.69 7.41 33.06
# Calculo tamaño del efecto (V de Cramer)
n <- sum(tabla_sexo_glucosa)
chi_sq <- test_chi$statistic
min_dim <- min(nrow(tabla_sexo_glucosa) - 1, ncol(tabla_sexo_glucosa) - 1)
v_cramer <- sqrt(chi_sq / (n * min_dim))
cat("\n=== TAMAÑO DEL EFECTO ===\n")
##
## === TAMAÑO DEL EFECTO ===
cat("V de Cramer:", round(v_cramer, 3), "\n")
## V de Cramer: 0.163
cat("Interpretacion: ",
ifelse(v_cramer < 0.1, "Asociacion trivial",
ifelse(v_cramer < 0.3, "Asociacion debil",
ifelse(v_cramer < 0.5, "Asociacion moderada", "Asociacion fuerte"))), "\n")
## Interpretacion: Asociacion debil
# Calculo porcentajes por fila (por sexo)
cat("\n=== PORCENTAJES POR SEXO ===\n")
##
## === PORCENTAJES POR SEXO ===
prop_tabla <- prop.table(tabla_sexo_glucosa, margin = 1) * 100
print(round(prop_tabla, 1))
##
## DM IFG IGT NGT
## Femenino 14.0 20.9 16.3 48.8
## Masculino 10.5 14.0 10.5 64.9
Interpretación del Test de Chi-cuadrado
Cuando observo la tabla de contingencia, noto que mi muestra incluye 43 mujeres y 57 hombres distribuidos en cuatro categorías de tolerancia a la glucosa (DM, IFG, IGT, NGT), y lo primero que verifico es que todas las frecuencias esperadas son mayores a 5, lo cual me confirma que el test de chi-cuadrado es apropiado para estos datos.
El estadístico chi-cuadrado = 2.6413 con 3 grados de libertad arroja un p-valor = 0.4503, el cual es considerablemente mayor al nivel de significancia α = 0.05, por lo que no tengo evidencia estadística suficiente para rechazar la hipótesis nula, lo cual significa que no existe asociación significativa entre el sexo biológico y el estado de tolerancia a la glucosa en esta muestra.
El tamaño del efecto (V de Cramer = 0.163) me confirma que estoy frente a una asociación débil, lo cual me indica que incluso si las diferencias hubieran sido estadísticamente significativas, la magnitud práctica de la asociación sería modesta.
Al analizar los porcentajes por sexo, observo patrones numéricos interesantes, por ejemplo, el 64.9% de los hombres son normoglucémicos versus solo el 48.8% de las mujeres, además, las categorías de prediabetes (IFG + IGT combinadas) representan el 37.2% en mujeres versus 24.5% en hombres, mientras que la diabetes mellitus muestra prevalencias similares en ambos sexos (14.0% mujeres vs 10.5% hombres), sin embargo, a pesar de estas diferencias numéricas, el test de chi-cuadrado me confirma que estas variaciones podrían deberse simplemente al azar.
Desde la perspectiva clínica, este resultado sugiere que en esta población específica el sexo biológico no es un predictor significativo del estado de tolerancia a la glucosa, lo cual difiere de algunos hallazgos en la literatura que reportan diferencias por sexo en la prevalencia de diabetes tipo 2, sin embargo, mi muestra tiene tamaños muestrales desbalanceados (43 vs 57) y grupos pequeños en algunas categorías (solo 6 personas con DM en cada sexo), lo cual limita el poder estadístico para detectar asociaciones.
En conclusión,considero que no puedo afirmar que exista una relación significativa entre sexo y tolerancia a la glucosa en esta muestra (p = 0.45), lo cual me indica que otros factores como edad, IMC, historia familiar o estilo de vida probablemente tienen mayor peso en determinar el riesgo metabólico que el sexo biológico por sí solo.
library(ggplot2)
library(dplyr)
datos_chi <- BaseEndocrino %>%
count(SEXO, Tol_Glucosa) %>%
group_by(SEXO) %>%
mutate(porcentaje = n / sum(n) * 100)
grafica_chi <- ggplot(datos_chi, aes(x = Tol_Glucosa, y = porcentaje, fill = SEXO)) +
geom_bar(stat = "identity", position = "dodge", width = 0.7, alpha = 0.85) +
geom_text(aes(label = paste0(round(porcentaje, 1), "%")),
position = position_dodge(width = 0.7),
vjust = -0.5, size = 4, fontface = "bold") +
scale_fill_manual(values = c("Femenino" = "#E91E63", "Masculino" = "#2196F3")) +
scale_y_continuous(limits = c(0, 75), breaks = seq(0, 70, 10)) +
labs(title = "Distribucion de Tolerancia a la Glucosa segun Sexo Biologico",
subtitle = "Test de Chi-cuadrado | p = 0.45 (no significativo)",
x = "Estado de Tolerancia a la Glucosa",
y = "Porcentaje (%)",
fill = "Sexo") +
theme_minimal() +
theme(
plot.title = element_text(face = "bold", size = 16, hjust = 0.5, color = "gray15"),
plot.subtitle = element_text(size = 12, hjust = 0.5, color = "gray40"),
axis.title = element_text(face = "bold", size = 13),
axis.text = element_text(size = 11.5),
legend.position = "top",
legend.title = element_text(face = "bold", size = 12),
legend.text = element_text(size = 11),
panel.grid.minor = element_blank()
)
print(grafica_chi)
ggsave("Grafica_ChiCuadrado.png", plot = grafica_chi, width = 12, height = 8, dpi = 300)
Cuando observo esta gráfica de barras agrupadas, lo primero que noto es que el grupo NGT (normoglucémico) domina visualmente, con las barras más altas tanto en hombres (64.9%) como en mujeres (48.8%), sin embargo, aquí identifico la mayor diferencia entre sexos con aproximadamente 16 puntos porcentuales de diferencia, lo cual visualmente parece considerable pero el test me confirma que no es estadísticamente significativo.
Las categorías de prediabetes (IFG e IGT) muestran un patrón interesante, pues las barras rosas (mujeres) son consistentemente más altas que las azules (hombres) en ambas categorías, donde el IFG 20.9% vs 14.0%, e IGT 16.3% vs 10.5%, me está diciendo que en esta muestra las mujeres tienen mayor proporción de estados prediabéticos, aunque nuevamente esta diferencia no alcanza significancia estadística.
En la categoría DM (diabetes mellitus), observo que las barras son prácticamente idénticas en altura (14% vs 10.5%), lo cual visual y numéricamente confirma que la prevalencia de diabetes es similar entre ambos sexos en esta muestra.
El p-valor de 0.45 que aparece en el subtítulo me confirma visualmente lo que sospechaba, que aunque hay diferencias numéricas aparentes, especialmente en el grupo NGT, estas variaciones son compatibles con el azar y no representan una asociación real entre sexo y tolerancia a la glucosa.
Copmnsidero que la gráfica me revela que el hallazgo más notable es la distribución inversa entre sexos, donde los hombres concentran su mayoría en normoglucemia (casi 2/3), mientras que las mujeres muestran una distribución más dispersa con mayor representación en categorías prediabéticas, lo cual podría tener relevancia clínica aunque carezca de significancia estadística, posiblemente debido al tamaño muestral limitado y los grupos pequeños en algunas categorías (solo 6 personas con DM en cada sexo).
Tabla de resumen de mis pruebas aplicadas
library(knitr)
library(kableExtra)
library(dplyr)
# Creo dataframe con resultados
tabla_resumen <- data.frame(
Prueba = c("Mann-Whitney U",
"Kruskal-Wallis",
"Wilcoxon Pareado",
"Chi-cuadrado"),
Pregunta = c("¿Difiere A1C entre personas con/sin diabetes?",
"¿Difieren triglicéridos según tolerancia a la glucosa?",
"¿Difieren las mediciones CINTURA vs CINTURADESP?",
"¿Existe asociación entre sexo y tolerancia a la glucosa?"),
Variables = c("A1C vs Estado DM",
"TG vs Tolerancia (3 grupos)",
"CINTURA vs CINTURADESP (pareadas)",
"Sexo vs Tolerancia a la Glucosa"),
p_valor = c("< 0.001",
"0.245",
"< 0.001",
"0.450"),
Tamaño_Efecto = c("r = 0.387 (mediano)",
"ε² = 0.028 (pequeño)",
"r = 0.876 (grande)",
"V = 0.163 (débil)"),
Significancia = c("Significativo",
"No significativo",
"Significativo",
"No significativo"),
Conclusion = c("Personas con DM tienen A1C 1.4 puntos mayor (6.57% vs 5.19%)",
"Sin diferencias detectables; posible falta de poder estadístico",
"CINTURADESP mide 6.5 cm menos de forma sistemática",
"El sexo no predice el estado de tolerancia a la glucosa")
)
# Creo tabla con formato profesional
tabla_resumen %>%
kable(format = "html",
col.names = c("Prueba Estadística", "Pregunta de Investigación",
"Variables Analizadas", "p-valor", "Tamaño del Efecto",
"Significancia", "Conclusión Principal"),
align = c("l", "l", "l", "c", "c", "c", "l"),
escape = FALSE) %>%
kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
full_width = TRUE,
font_size = 13) %>%
column_spec(1, bold = TRUE, width = "12em", color = "white", background = "#37474F") %>%
column_spec(2, width = "20em") %>%
column_spec(3, width = "15em") %>%
column_spec(4, bold = TRUE, width = "8em") %>%
column_spec(5, width = "12em") %>%
column_spec(6, bold = TRUE, width = "10em") %>%
column_spec(7, width = "25em") %>%
row_spec(c(1, 3), background = "#C8E6C9", color = "#1B5E20") %>% # Verde claro para significativos
row_spec(c(2, 4), background = "#F5F5F5", color = "#424242") %>% # Gris claro para no significativos
add_header_above(c(" " = 1, "Diseño del Estudio" = 2, "Resultados Estadísticos" = 3, "Interpretación" = 1),
bold = TRUE, background = "#455A64", color = "white")
| Prueba Estadística | Pregunta de Investigación | Variables Analizadas | p-valor | Tamaño del Efecto | Significancia | Conclusión Principal |
|---|---|---|---|---|---|---|
| Mann-Whitney U | ¿Difiere A1C entre personas con/sin diabetes? | A1C vs Estado DM | < 0.001 | r = 0.387 (mediano) | Significativo | Personas con DM tienen A1C 1.4 puntos mayor (6.57% vs 5.19%) |
| Kruskal-Wallis | ¿Difieren triglicéridos según tolerancia a la glucosa? | TG vs Tolerancia (3 grupos) | 0.245 | ε² = 0.028 (pequeño) | No significativo | Sin diferencias detectables; posible falta de poder estadístico |
| Wilcoxon Pareado | ¿Difieren las mediciones CINTURA vs CINTURADESP? | CINTURA vs CINTURADESP (pareadas) | < 0.001 | r = 0.876 (grande) | Significativo | CINTURADESP mide 6.5 cm menos de forma sistemática |
| Chi-cuadrado | ¿Existe asociación entre sexo y tolerancia a la glucosa? | Sexo vs Tolerancia a la Glucosa | 0.450 | V = 0.163 (débil) | No significativo | El sexo no predice el estado de tolerancia a la glucosa |
Conclusiones Generales e Implicaciones
Con estas pruebas no paramétricas, pude evaluar diferencias entre grupos y asociaciones entre variables sin depender de supuestos restrictivos que mis datos no cumplen.
En el test de Mann-Whitney se confirmó que la hemoglobina glicosilada (A1C) discrimina efectivamente entre personas con y sin diabetes (p < 0.001, r = 0.387), con una diferencia de 1.4 puntos porcentuales entre las medianas (6.57% vs 5.19%), lo cual tiene implicaciones diagnósticas directas porque la A1C es el estándar de oro para evaluar control glucémico a largo plazo.
En el test de Wilcoxon pareado me reveló que las mediciones antropométricas CINTURA y CINTURADESP NO son intercambiables (p < 0.001, r = 0.876), pues CINTURADESP mide sistemáticamente 6.5 cm menos en todos los participantes, lo cual subraya la importancia crítica de estandarizar y especificar claramente el punto anatómico de medición en protocolos de investigación, porque usar uno u otro podría resultar en clasificaciones diagnósticas completamente diferentes para síndrome metabólico.
Hallazgos no significativos con implicaciones metodológicas:
El test de Kruskal-Wallis no detectó diferencias significativas en triglicéridos según el estado de tolerancia a la glucosa (p = 0.245, ε² = 0.028), lo cual probablemente se debe a limitaciones en el poder estadístico por los tamaños muestrales muy desbalanceados (77 normoglucémicos vs 16 prediabetes vs 7 diabetes) y la alta variabilidad individual en los triglicéridos, además de que el tratamiento farmacológico en pacientes diagnosticados puede estar enmascarando la relación esperada.
El test de chi-cuadrado no encontró asociación significativa entre sexo biológico y estado de tolerancia a la glucosa (p = 0.450, V = 0.163), lo cual me sugiere que en esta población específica otros factores como edad, IMC o historia familiar tienen mayor peso que el sexo por sí solo, aunque los tamaños muestrales pequeños en algunas celdas limitan el poder para detectar asociaciones débiles.