Este documento presenta un análisis exploratorio de datos (EDA) centrado en la relación entre el grado de fibrosis y los niveles de Fosfatasa Alcalina (FA) y Bilirrubina Total.
En esta sección se cargan los datos originales y se realiza una limpieza inicial, eliminando registros incompletos para asegurar la calidad de los resultados.
datos <- read_sav("fibrosis_1.sav")
# Dimensiones del dataframe
dim(datos)
## [1] 328 21
# Estructura de las variables
str(datos)
## tibble [328 × 21] (S3: tbl_df/tbl/data.frame)
## $ glucemia: num [1:328] 158 112 79 103 126 110 121 110 110 113 ...
## ..- attr(*, "label")= chr "glucemia"
## ..- attr(*, "format.spss")= chr "F8.0"
## $ urea : num [1:328] 26 31 28 31 26 30 22 34 33 29 ...
## ..- attr(*, "label")= chr "urea"
## ..- attr(*, "format.spss")= chr "F8.0"
## $ creat : num [1:328] 1.6 1.5 1.5 1.3 1.3 1.5 1 1.9 2 1.6 ...
## ..- attr(*, "label")= chr "creatitina"
## ..- attr(*, "format.spss")= chr "F8.2"
## $ colester: num [1:328] 182 20 188 170 190 193 203 256 337 224 ...
## ..- attr(*, "label")= chr "colesterol"
## ..- attr(*, "format.spss")= chr "F8.2"
## $ trgl : num [1:328] 218 343 251 265 272 221 130 252 591 301 ...
## ..- attr(*, "label")= chr "triglicéridos"
## ..- attr(*, "format.spss")= chr "F8.2"
## $ got : num [1:328] 83 20 115 88 67 53 173 45 52 81 ...
## ..- attr(*, "label")= chr "GOT"
## ..- attr(*, "format.spss")= chr "F8.2"
## $ gpt : num [1:328] 174 36 90 185 185 135 202 64 122 112 ...
## ..- attr(*, "label")= chr "GPT"
## ..- attr(*, "format.spss")= chr "F8.2"
## $ ggt : num [1:328] 52 42 133 108 96 83 75 102 139 77 ...
## ..- attr(*, "label")= chr "GGT"
## ..- attr(*, "format.spss")= chr "F8.2"
## $ fa : num [1:328] 35 49 122 91 114 74 58 66 105 79 ...
## ..- attr(*, "label")= chr "fosfatasa alcalina"
## ..- attr(*, "format.spss")= chr "F8.2"
## $ biltotal: num [1:328] 1.7 1.1 1.2 1.1 0.8 1 1.1 0.9 0.9 1.2 ...
## ..- attr(*, "label")= chr "bilirrubina total"
## ..- attr(*, "format.spss")= chr "F8.2"
## $ prottot : num [1:328] 6.8 6.3 7.2 7.9 8.1 8 6.8 6.4 6.4 6.6 ...
## ..- attr(*, "label")= chr "proteínas totales"
## ..- attr(*, "format.spss")= chr "F8.2"
## $ alb : num [1:328] 4.7 4 4.9 5.3 4.8 4.6 4.2 4.5 4.1 4.7 ...
## ..- attr(*, "label")= chr "albúmina"
## ..- attr(*, "format.spss")= chr "F8.2"
## $ na : num [1:328] 143 143 141 137 141 140 141 143 145 140 ...
## ..- attr(*, "label")= chr "sodio"
## ..- attr(*, "format.spss")= chr "F8.2"
## $ k : num [1:328] 4.7 5 4.7 3.9 4.4 4.6 3.8 4.8 4.8 4.7 ...
## ..- attr(*, "label")= chr "potasio"
## ..- attr(*, "format.spss")= chr "F8.2"
## $ leucos : num [1:328] 4730 5380 3600 4460 4550 3920 5820 4150 5490 3800 ...
## ..- attr(*, "label")= chr "leucocitos"
## ..- attr(*, "format.spss")= chr "F8.2"
## $ hcto : num [1:328] 48 46 47 49 46 39.2 40 37 37.4 36 ...
## ..- attr(*, "label")= chr "hematocrito"
## ..- attr(*, "format.spss")= chr "F5.1"
## $ plaq : num [1:328] 88000 147000 99000 104000 73000 68000 156000 170000 230000 163000 ...
## ..- attr(*, "label")= chr "plaquetas"
## ..- attr(*, "format.spss")= chr "F8.0"
## $ iq : num [1:328] 100 100 100 100 100 100 100 100 100 100 ...
## ..- attr(*, "label")= chr "índice de Quick"
## ..- attr(*, "format.spss")= chr "F8.2"
## $ fibrin : num [1:328] 245 244 205 220 190 247 205 199 230 278 ...
## ..- attr(*, "label")= chr "fibrinógeno"
## ..- attr(*, "format.spss")= chr "F8.2"
## $ fibrosis: dbl+lbl [1:328] 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, ...
## ..@ label : chr "fibrosis"
## ..@ format.spss : chr "F8.0"
## ..@ display_width: int 12
## ..@ labels : Named num [1:4] 0 1 2 3
## .. ..- attr(*, "names")= chr [1:4] "ausencia" "leve" "moderada" "importante"
## $ sexo : dbl+lbl [1:328] 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, ...
## ..@ format.spss: chr "F8.2"
## ..@ labels : Named num [1:2] 1 2
## .. ..- attr(*, "names")= chr [1:2] "h" "m"
# Eliminamos valores nulos:
datos_na <- na.omit(datos)
estado <- as.factor(datos_na$fibrosis)
Se ha transformado la variable fibrosis en un factor para facilitar su análisis categórico en los niveles: Ausencia, Leve, Moderado e Importante.
Utilizamos histogramas para visualizar cómo se distribuyen los valores de FA en cada grupo. Esto permite ver no solo el promedio, sino qué tan dispersos están los datos.
# fa data and categorization by fibrosis:
fa0 <- subset(datos_na$fa, estado==0)
fa1 <- subset(datos_na$fa, estado==1)
fa2 <- subset(datos_na$fa, estado==2)
fa3 <- subset(datos_na$fa, estado==3)
par(mfrow=(c(2,2))) # Layout of 4 spaces.
hist(fa0, col = "lightblue", main = "Ausencia", xlab = "fa")
hist(fa1, col = "lightgreen", main = "Leve", xlab = "fa")
hist(fa2, col = "orange", main = "Moderado", xlab = "fa")
hist(fa3, col = "red", main = "Importante", xlab = "fa")
Para finalizar el análisis exploratorio, se utiliza un diagrama de caja (boxplot) que permite comparar la mediana y los rangos de la Bilirrubina entre grupos.
# biltotal data and categorization by fibrosis:
par(mfrow=(c(1,1)))
boxplot(datos_na$biltotal~estado,
col = c("lightblue", "lightgreen", "orange", "tomato"),
main = "Distribución de Bilirrubina Total por Estado",
xlab = "Grado de Fibrosis",
ylab = "Bilirrubina Total",
xaxt = "n",
las = 1)
El gráfico de cajas confirma visualmente la progresión numérica de las medias. Se observa que el grupo de Importante no solo tiene una mediana más alta, sino que también presenta una mayor variabilidad en los datos comparado con el grupo de Ausencia.
A continuación, se calculan los promedios de los biomarcadores químicos desglosados por cada nivel de fibrosis para identificar patrones numéricos.
# Calculamos la media de FA y Bilirrubina por cada nivel de fibrosis
media_fa <- aggregate(fa ~ fibrosis, data = datos_na, FUN = mean)
media_bil <- aggregate(biltotal ~ fibrosis, data = datos_na, FUN = mean)
# Asignacion de nombres a los niveles
niveles <- c("Ausencia", "Leve", "Moderada", "Importante")
media_fa$fibrosis <- niveles
media_bil$fibrosis <- niveles
# Mostrar los resultados
print("Medias de Fosfatasa Alcalina (FA) por Categoría:")
## [1] "Medias de Fosfatasa Alcalina (FA) por Categoría:"
print(media_fa)
## fibrosis fa
## 1 Ausencia 95.90071
## 2 Leve 111.43119
## 3 Moderada 111.42308
## 4 Importante 125.60000
print("Medias de Bilirrubina Total por Categoría:")
## [1] "Medias de Bilirrubina Total por Categoría:"
print(media_bil)
## fibrosis biltotal
## 1 Ausencia 1.023404
## 2 Leve 1.232844
## 3 Moderada 1.193269
## 4 Importante 1.436500
Como se observa en las tablas anteriores, existe una tendencia ascendente en la Bilirrubina Total. El valor promedio aumenta de 1.02 (Ausencia) a 1.43 (Importante), lo que sugiere una relación directa entre el progreso de la fibrosis y el incremento de este parámetro en los datos.
# Conteo de pacientes por grupo
conteo_fibrosis <- table(datos_na$fibrosis)
names(conteo_fibrosis) <- niveles
print("Número de pacientes por categoría:")
## [1] "Número de pacientes por categoría:"
print(conteo_fibrosis)
## Ausencia Leve Moderada Importante
## 141 109 52 20
# Desviación estándar de Bilirrubina por grupo
sd_bil <- aggregate(biltotal ~ fibrosis, data = datos_na, FUN = sd)
sd_bil$fibrosis <- niveles
knitr::kable(sd_bil, caption = "Desviación Estándar de Bilirrubina", digits = 2)
| fibrosis | biltotal |
|---|---|
| Ausencia | 0.47 |
| Leve | 0.94 |
| Moderada | 1.15 |
| Importante | 1.14 |
Al observar el conteo de pacientes por categoría, se identifica una distribución decreciente:La mayor concentración de datos se encuentra en los estados iniciales: Ausencia (141 pacientes) y Leve (109 pacientes). Los estados avanzados cuentan con una muestra menor: Moderada (52) e Importante (20).Nota estadística: Es importante considerar que los resultados para la categoría “Importante” son más sensibles a variaciones individuales debido a que el tamaño de su muestra (\(n=20\)) es significativamente menor que el de “Ausencia” (\(n=141\)).
La Desviación Estándar (SD) nos indica qué tan diferentes son los pacientes entre sí dentro de un mismo grupo: Consistencia en Ausencia: El grupo de “Ausencia” presenta la desviación más baja (0.47), lo que significa que los niveles de bilirrubina en pacientes sin fibrosis son muy similares y constantes. En las categorías “Moderada” (1.15) e “Importante” (1.14), la desviación estándar es más del doble que en el grupo inicial. Esto indica que, a medida que la fibrosis aumenta, los niveles de bilirrubina tienden a volverse más impredecibles y dispersos entre un paciente y otro.
Comparando la Media (que vimos anteriormente) con la Desviación Estándar, se observa que en el estado “Importante” no solo el valor promedio es el más alto (1.43), sino que los datos están muy extendidos. Esto sugiere que el progreso de la fibrosis no afecta a todos los individuos por igual, generando un rango de respuesta mucho más amplio en las etapas críticas.