Un grupo investigador estudió a un grupo de recién nacidos de un determinado hospital registrando la siguiente información:
A partir de esta base de datos:
Haga un análisis exploratorio de los datos
Categorice las variables continuas en variables categoricas según su criterio y mencione porque se categoriza así.
Haga un análisis de correspondencias simples entre tipo de parto y edad gestacional (mencione que supuestos se necesitan para realizarlo).
Haga un análisis de correspondencias simples entre estadia y edad gestacional.
Haga un análisis de correspondencias simples entre peso al nacer y ventilación mecánica.
Evalué si tiene sentido hacer un análisis de correspondencias múltiples entre todas las variables de la base de datos y en caso afirmativo, realicelo. De lo contrario, comente como se debería realizar (mencione que supuestos se necesitan para realizarlo).
Interprete todos los resultados obtenidos y de ser posible, de un nombre a los grupos creados.
library(readr)
datos <- read_csv("correspondencias.csv")
str(datos)
summary(datos)
table(datos$sexo)
datos$sexo <- factor(datos$sexo, levels = 1:2, labels = c('Mujeres', 'Hombres'))
table(unclass(datos$sexo), datos$sexo)
datos$sexo = relevel(datos$sexo, ref=1)
table(datos$tiparto)
datos$tiparto <- factor(datos$tiparto, levels = 1:4,
labels = c('Eutócico', 'Vaginal Instrumentado', 'Cesárea programada', 'Cesárea No Programada'))
table(unclass(datos$tiparto), datos$tiparto)
datos$tiparto = relevel(datos$tiparto, ref=1)
table(datos$antibioticos)
datos$antibioticos <- factor(datos$antibioticos, levels = 0:1, labels = c('No', 'Sí'))
table(unclass(datos$antibioticos), datos$antibioticos)
datos$antibioticos = relevel(datos$antibioticos, ref=1)
table(datos$fiebre)
datos$fiebre <- factor(datos$fiebre, levels = 0:1, labels = c('No', 'Sí'))
table(unclass(datos$fiebre), datos$fiebre)
datos$fiebre = relevel(datos$fiebre, ref=1)
table(datos$infeccion)
datos$infeccion <- factor(datos$infeccion, levels = 0:1, labels = c('No', 'Sí'))
table(unclass(datos$infeccion), datos$infeccion)
datos$infeccion = relevel(datos$infeccion, ref=1)
table(datos$cateter)
datos$cateter <- factor(datos$cateter, levels = 0:1, labels = c('No', 'Sí'))
table(unclass(datos$cateter), datos$cateter)
datos$cateter = relevel(datos$cateter, ref=1)
table(datos$ventilacion)
datos$ventilacion <- factor(datos$ventilacion, levels = 0:1, labels = c('No', 'Sí'))
table(unclass(datos$ventilacion), datos$ventilacion)
datos$ventilacion = relevel(datos$ventilacion, ref=1)
summary(datos)
id pesonac sexo egest
Min. : 1.0 Min. : 457 Mujeres:472 Min. :23.00
1st Qu.: 588.5 1st Qu.:2180 Hombres:528 1st Qu.:36.00
Median :1207.5 Median :2700 Median :38.00
Mean :1213.9 Mean :2628 Mean :36.86
3rd Qu.:1837.5 3rd Qu.:3140 3rd Qu.:39.00
Max. :2462.0 Max. :5200 Max. :43.00
NA's :8 NA's :13
tiparto emadre antibioticos fiebre
Eutócico :415 Min. :13.00 No :842 No:933
Vaginal Instrumentado: 44 1st Qu.:22.00 Sí :117 Sí: 67
Cesárea programada :214 Median :28.00 NA's: 41
Cesárea No Programada:323 Mean :27.52
NA's : 4 3rd Qu.:32.00
Max. :46.00
NA's :15
infeccion estadia cateter ventilacion
No:898 Min. : 0.000 No:965 No:950
Sí:102 1st Qu.: 2.000 Sí: 35 Sí: 50
Median : 5.000
Mean : 8.929
3rd Qu.:10.000
Max. :94.000
library(GGally)
ggpairs(datos[-1])
El peso al nacer es más bajo cuando hubo presencia de infección nosocomial, necesidad de ventilación mecánica o presencia de cateter central. Además el peso al nacer está altamente correlacionado con la edad gesatcional (0.8). Aquellos partos con infección o que necesitaron cateter tuvieron mayor estadía.
Categorizamos peso al nacer según la relación (gráfica) que guarda con las variables infección, ventilación y catéter.
summary(datos$pesonac)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
457 2180 2700 2628 3140 5200 8
with(na.omit(datos),boxplot(pesonac ~ infeccion + cateter + ventilacion))
par(mfrow=c(1,3))
with(na.omit(datos),boxplot(pesonac ~ infeccion, main='Infección', ylab='Peso al nacer'))
with(na.omit(datos),boxplot(pesonac ~ cateter, main='Cateter'))
with(na.omit(datos),boxplot(pesonac ~ ventilacion, main='Ventilación'))
par(mfrow=c(1,1))
Las diferencias más claras se observan en la variable cateter. Entonces selecionamos los rangos [0,2000), [2000, 3500) y [3500,+). Además por interés clínico desagregamos la categoría de menores a 2000 en menores y mayores a 1500
datos$peso_cut <- cut(datos$pesonac, ordered_result = T,
breaks = c(0,1500,2000,3500,Inf),
labels = c("[0,1500)", "[1500, 2000)", "[2000, 3500)", "[3500,+)"),
right = F)
summary(datos$peso_cut)
[0,1500) [1500, 2000) [2000, 3500) [3500,+) NA's
81 105 683 123 8
La edad gestacional está correlacionada con el peso al nacer. Los rangos son seleccionados por las categorías del peso al nacer cortado.
by(INDICES = datos$peso_cut,datos$egest,summary)
datos$peso_cut: [0,1500)
Min. 1st Qu. Median Mean 3rd Qu. Max.
23.0 27.0 29.0 29.6 32.0 36.0
--------------------------------------------------------
datos$peso_cut: [1500, 2000)
Min. 1st Qu. Median Mean 3rd Qu. Max.
30.00 32.00 34.00 33.84 35.00 41.00
--------------------------------------------------------
datos$peso_cut: [2000, 3500)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
31.00 37.00 38.00 37.74 39.00 43.00 11
--------------------------------------------------------
datos$peso_cut: [3500,+)
Min. 1st Qu. Median Mean 3rd Qu. Max.
36.00 39.00 40.00 39.37 40.00 42.00
with(na.omit(datos),boxplot(egest ~ peso_cut, ylab='Edad gestacional', main='Peso al nacer'))
Al examinar la gráfica y los cuartiles seleccionamos los rangos [0,32), [32,37), [34,39) y [39,+)
datos$egest_cut <- cut(datos$egest, ordered_result = T,
breaks = c(0,32,37,39,Inf),
labels = c("[0,32)", "[32,37)", "[37,39)", "[39,+)"),
right = F)
summary(datos$egest_cut)
[0,32) [32,37) [37,39) [39,+) NA's
68 269 299 351 13
Al comparar la edad de la madre con el peso al nacer no se observa alguna relación. Sin embargo podemos comparar por tipo de parto.
by(INDICES = datos$tiparto,datos$emadre,summary)
datos$tiparto: Eutócico
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
13.00 21.00 25.00 25.98 30.00 44.00 5
--------------------------------------------------------
datos$tiparto: Vaginal Instrumentado
Min. 1st Qu. Median Mean 3rd Qu. Max.
15.00 22.00 31.50 28.32 33.00 42.00
--------------------------------------------------------
datos$tiparto: Cesárea programada
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
15.00 24.50 30.00 29.24 34.00 46.00 3
--------------------------------------------------------
datos$tiparto: Cesárea No Programada
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
15.00 23.00 28.00 28.25 33.00 46.00 4
with(na.omit(datos),boxplot(emadre ~ tiparto, ylab='Edad de la madre', main='Tipo de parto', las=1))
Esperabamos que en mujeres jovenes el parto fuese principalmente eutócico. No encontramos evidencia gráfica fuerte de esto por ende primeramente escogemos tres grupos. Nos basamos en la mediana de la edad para partos eutócicos (25) y la cota clásica de 35 años. Los rangos son [0,25), [25,35) [35,+). Además por interés clínico diferenciamos también las menores de edad.
datos$emadre_cut <- cut(datos$emadre, ordered_result = T,
breaks = c(0,18,25,35,Inf),
labels = c("[0,18)", "[18,25)", "[25,35)", "[35,+)"),
right = F)
summary(datos$emadre_cut)
[0,18) [18,25) [25,35) [35,+) NA's
67 293 460 165 15
La estadía está más diferenciada ante la presencia o no de infección nosocomial.
by(INDICES = datos$infeccion,datos$estadia,summary)
datos$infeccion: No
Min. 1st Qu. Median Mean 3rd Qu. Max.
0.000 2.000 4.000 6.444 8.000 94.000
--------------------------------------------------------
datos$infeccion: Sí
Min. 1st Qu. Median Mean 3rd Qu. Max.
5.00 17.00 26.00 30.80 38.75 84.00
with(na.omit(datos),boxplot(estadia ~ infeccion, main='Infección', ylab='Estadía'))
Escogemos como cortes los cuartiles 1 y 3 de la estadía en aquellos partos con infección. Los rangos son [0,17), [17,38) y [38,+). Además por interés clínico diferenciamos también los menores a 10 días.
datos$estadia_cut <- cut(datos$estadia, ordered_result = T,
breaks = c(0,10, 17,38,Inf),
labels = c("[0,10)", "[10,17)", "[17,38)", "[38,+)"),
right = F)
summary(datos$estadia_cut)
[0,10) [10,17) [17,38) [38,+)
730 117 120 33
En análisis de correpondencia no tiene ningún supuesto distribucional y solo es necesario que las variables estén categorizadas. Aunque algunos escritos proponen supuestos de más de 20 observaciones y más de 3 observaciones por casillas lo único necesario es poder descomponer la matriz de residuales en valores singulares. Como ya categorizamos la edad gesatacional ya podemos realizar el CA.
df <- datos[c("tiparto", "egest_cut")]
library(descr)
CrossTable(table(df),expected = F,prop.t = F, prop.chisq = T,chisq = T)
Cell Contents
|-------------------------|
| N |
| Chi-square contribution |
| N / Row Total |
| N / Col Total |
|-------------------------|
==========================================================
egest_cut
tiparto [0,34) [34,39) [39,+) Total
----------------------------------------------------------
Eutócico 34 198 176 408
5.696 0.884 6.501
0.083 0.485 0.431 0.415
0.276 0.388 0.503
----------------------------------------------------------
Vaginal Instrumentado 2 22 20 44
2.232 0.030 1.199
0.045 0.500 0.455 0.045
0.016 0.043 0.057
----------------------------------------------------------
Cesárea programada 24 131 56 211
0.218 4.234 4.870
0.114 0.621 0.265 0.215
0.195 0.257 0.160
----------------------------------------------------------
Cesárea No Programada 63 159 98 320
13.165 0.297 2.229
0.197 0.497 0.306 0.326
0.512 0.312 0.280
----------------------------------------------------------
Total 123 510 350 983
0.125 0.519 0.356
==========================================================
Statistics for All Table Factors
Pearson's Chi-squared test
------------------------------------------------------------
Chi^2 = 41.55436 d.f. = 6 p = 2.25e-07
library(ca)
res.ca <- ca(table(df))
res.ca
Principal inertias (eigenvalues):
1 2
Value 0.031626 0.010647
Percentage 74.81% 25.19%
Rows:
Eutócico Vaginal Instrumentado Cesárea programada
Mass 0.415056 0.044761 0.214649
ChiDist 0.179051 0.280461 0.210193
Inertia 0.013306 0.003521 0.009483
Dim. 1 -0.990613 -1.573222 0.507283
Dim. 2 0.310097 -0.189437 -1.839929
Cesárea No Programada
Mass 0.325534
ChiDist 0.221438
Inertia 0.015962
Dim. 1 1.144860
Dim. 2 0.843877
Columns:
[0,34) [34,39) [39,+)
Mass 0.125127 0.518820 0.356053
ChiDist 0.416245 0.103326 0.205624
Inertia 0.021680 0.005539 0.015054
Dim. 1 2.170316 0.195535 -1.047633
Dim. 2 1.510497 -0.942983 0.843229
summary(res.ca)
Principal inertias (eigenvalues):
dim value % cum% scree plot
1 0.031626 74.8 74.8 *******************
2 0.010647 25.2 100.0 ******
-------- -----
Total: 0.042273 100.0
Rows:
name mass qlt inr k=1 cor ctr k=2 cor ctr
1 | Etcc | 415 1000 315 | -176 968 407 | 32 32 40 |
2 | VgnI | 45 1000 83 | -280 995 111 | -20 5 2 |
3 | Csrp | 215 1000 224 | 90 184 55 | -190 816 727 |
4 | CsNP | 326 1000 378 | 204 845 427 | 87 155 232 |
Columns:
name mass qlt inr k=1 cor ctr k=2 cor ctr
1 | 034 | 125 1000 513 | 386 860 589 | 156 140 285 |
2 | 3439 | 519 1000 131 | 35 113 20 | -97 887 461 |
3 | 39 | 356 1000 356 | -186 821 391 | 87 179 253 |
# number of categories per variable
cats = apply(df, 2, function(x) nlevels(as.factor(x)))
cats
tiparto egest_cut
4 3
names(cats)
[1] "tiparto" "egest_cut"
library(ggplot2)
# data frame with variable coordinates
coordinates <- rbind(res.ca$rowcoord, res.ca$colcoord)
mca1_vars_df = data.frame(coordinates, Variable = rep(names(cats), cats))
# plot of variable categories
ggplot(data=mca1_vars_df,
aes(x = Dim1, y = Dim2, label = abbreviate(rownames(mca1_vars_df),7))) +
geom_hline(yintercept = 0, colour = "gray70") +
geom_vline(xintercept = 0, colour = "gray70") +
geom_text(aes(colour=Variable)) +
ggtitle("MCA biplot")
chisq <- chisq.test(table(df))
chisq
Pearson's Chi-squared test
data: table(df)
X-squared = 41.554, df = 6, p-value = 2.252e-07
library(corrplot)
corrplot(chisq$residuals, is.cor = FALSE, main='Residuales')
Los partos de 39 o más semanas de gestación son mayormente Eutócitos o Vaginal Instrumentado. La cesárea no programada se dá en partos de menos de 37 semanas de gestación. La cesárea programada se dá entre 37 y 39 semanas principalmente. La representación en dos dimensiones fue buena todas las categorías obtuvieron una calidad de 1000.
df <- datos[c("estadia_cut", "egest_cut")]
library(descr)
CrossTable(table(df),expected = F,prop.t = F, prop.chisq = T,chisq = T)
Cell Contents
|-------------------------|
| N |
| Chi-square contribution |
| N / Row Total |
| N / Col Total |
|-------------------------|
=================================================
egest_cut
estadia_cut [0,34) [34,39) [39,+) Total
-------------------------------------------------
[0,17) 55 448 334 837
23.308 0.386 4.437
0.066 0.535 0.399 0.848
0.447 0.873 0.952
-------------------------------------------------
[17,38) 43 59 15 117
55.393 0.054 17.016
0.368 0.504 0.128 0.119
0.350 0.115 0.043
-------------------------------------------------
[38,+) 25 6 2 33
106.090 7.251 8.076
0.758 0.182 0.061 0.033
0.203 0.012 0.006
-------------------------------------------------
Total 123 513 351 987
0.125 0.520 0.356
=================================================
Statistics for All Table Factors
Pearson's Chi-squared test
------------------------------------------------------------
Chi^2 = 222.0114 d.f. = 4 p <2e-16
library(ca)
res.ca <- ca(table(df))
res.ca
Principal inertias (eigenvalues):
1 2
Value 0.220119 0.004816
Percentage 97.86% 2.14%
Rows:
[0,17) [17,38) [38,+)
Mass 0.848024 0.118541 0.033435
ChiDist 0.183331 0.786982 1.918149
Inertia 0.028502 0.073417 0.123016
Dim. 1 -0.389997 1.646287 4.054904
Dim. 2 0.164663 -2.173853 3.530842
Columns:
[0,34) [34,39) [39,+)
Mass 0.124620 0.519757 0.355623
ChiDist 1.225710 0.122444 0.290051
Inertia 0.187225 0.007792 0.029918
Dim. 1 2.611662 -0.221279 -0.591790
Dim. 2 0.451234 -0.935421 1.209029
summary(res.ca)
Principal inertias (eigenvalues):
dim value % cum% scree plot
1 0.220119 97.9 97.9 ************************
2 0.004816 2.1 100.0 *
-------- -----
Total: 0.224936 100.0
Rows:
name mass qlt inr k=1 cor ctr k=2 cor ctr
1 | 017 | 848 1000 127 | -183 996 129 | 11 4 23 |
2 | 1738 | 119 1000 326 | 772 963 321 | -151 37 560 |
3 | 38 | 33 1000 547 | 1902 984 550 | 245 16 417 |
Columns:
name mass qlt inr k=1 cor ctr k=2 cor ctr
1 | 034 | 125 1000 832 | 1225 999 850 | 31 1 25 |
2 | 3439 | 520 1000 35 | -104 719 25 | -65 281 455 |
3 | 39 | 356 1000 133 | -278 916 125 | 84 84 520 |
# number of categories per variable
cats = apply(df, 2, function(x) nlevels(as.factor(x)))
cats
estadia_cut egest_cut
3 3
names(cats)
[1] "estadia_cut" "egest_cut"
library(ggplot2)
# data frame with variable coordinates
coordinates <- rbind(res.ca$rowcoord, res.ca$colcoord)
mca1_vars_df = data.frame(coordinates, Variable = rep(names(cats), cats))
# plot of variable categories
ggplot(data=mca1_vars_df,
aes(x = Dim1, y = Dim2, label = abbreviate(rownames(mca1_vars_df),7))) +
geom_hline(yintercept = 0, colour = "gray70") +
geom_vline(xintercept = 0, colour = "gray70") +
geom_text(aes(colour=Variable)) +
ggtitle("MCA biplot")
chisq <- chisq.test(table(df))
chisq
Pearson's Chi-squared test
data: table(df)
X-squared = 222.01, df = 4, p-value < 2.2e-16
library(corrplot)
corrplot(chisq$residuals, is.cor = FALSE, main='Residuales')
Los partos de con menos de 34 semanas necesitaron una mayor estadía de más de 17 días.
df <- datos[c("peso_cut", "ventilacion")]
library(descr)
CrossTable(table(df),expected = F,prop.t = F, prop.chisq = T,chisq = T)
Cell Contents
|-------------------------|
| N |
| Chi-square contribution |
| N / Row Total |
| N / Col Total |
|-------------------------|
======================================
ventilacion
peso_cut No Sí Total
--------------------------------------
[0,2000) 157 29 186
2.181 41.082
0.844 0.156 0.188
0.167 0.580
--------------------------------------
[2000, 3500) 663 20 683
0.321 6.045
0.971 0.029 0.689
0.704 0.400
--------------------------------------
[3500,+) 122 1 123
0.231 4.361
0.992 0.008 0.124
0.130 0.020
--------------------------------------
Total 942 50 992
0.95 0.05
======================================
Statistics for All Table Factors
Pearson's Chi-squared test
------------------------------------------------------------
Chi^2 = 54.22017 d.f. = 2 p = 1.68e-12
library(ca)
res.ca <- ca(table(df), nd=3)
res.ca
Principal inertias (eigenvalues):
1
Value 0.054657
Percentage 100%
Rows:
[0,2000) [2000, 3500) [3500,+)
Mass 0.187500 0.688508 0.123992
ChiDist 0.482279 0.096540 0.193226
Inertia 0.043611 0.006417 0.004629
Dim. 1 -2.062877 0.412937 0.826497
Columns:
No Sí
Mass 0.949597 0.050403
ChiDist 0.053862 1.014764
Inertia 0.002755 0.051903
Dim. 1 0.230388 -4.340507
# number of categories per variable
cats = apply(df, 2, function(x) nlevels(as.factor(x)))
cats
peso_cut ventilacion
3 2
names(cats)
[1] "peso_cut" "ventilacion"
library(ggplot2)
# data frame with variable coordinates
coordinates <- rbind(res.ca$rowcoord, res.ca$colcoord)
mca1_vars_df = data.frame(coordinates, Variable = rep(names(cats), cats))
# plot of variable categories
ggplot(data=mca1_vars_df,
aes(x = Dim1, y=c(0), label = abbreviate(rownames(mca1_vars_df),11))) +
ylab("")+
geom_hline(yintercept = 0, colour = "gray70") +
geom_vline(xintercept = 0, colour = "gray70") +
geom_text(aes(colour=Variable),angle = 45) +
ggtitle("MCA biplot")
chisq <- chisq.test(table(df))
chisq
Pearson's Chi-squared test
data: table(df)
X-squared = 54.22, df = 2, p-value = 1.684e-12
library(corrplot)
corrplot(chisq$residuals, is.cor = FALSE, main='Residuales')
La ventilación es necesitadas principalmente por niños con bajo peso (<2000)
Podemos aplicar un MCA, no sobre toda la base de datos sino, sobre aquellas variables categóricas. Nuevamente no existe ningún supuesto distribucional ni de cantidad de datos.
class_df <- as.data.frame(sapply(datos, class))
var_categoricas <- unlist(class_df[1,]) %in% c("ordered","factor")
library(ca)
res.mca <- mjca(datos[,var_categoricas], lambda="adjusted")
summary(res.mca, scree = TRUE)
Principal inertias (eigenvalues):
dim value % cum% scree plot
1 0.043516 67.0 67.0 **********************
2 0.004385 6.8 73.8 **
3 0.001078 1.7 75.4 *
4 0.000820 1.3 76.7
5 0.000342 0.5 77.2
6 0.000288 0.4 77.6
7 0.000118 0.2 77.8
8 1.2e-050 0.0 77.8
-------- -----
Total: 0.064947
Columns:
name mass qlt inr k=1 cor ctr k=2
1 | sexo:Mujeres | 43 5 20 | 4 3 0 | 3
2 | sexo:Hombres | 48 6 18 | -3 3 0 | -3
3 | tiparto:Eutócico | 38 571 23 | -88 510 7 | 30
4 | tiparto:Vaginal Instrumentado | 4 499 35 | -143 459 2 | 42
5 | tiparto:Cesárea programada | 20 63 29 | -28 47 0 | -16
6 | tiparto:Cesárea No Programada | 30 921 27 | 153 875 16 | -35
7 | antibioticos:No | 77 686 5 | -30 677 2 | 4
8 | antibioticos:Sí | 11 818 34 | 210 813 11 | -17
9 | fiebre:No | 85 353 3 | -9 352 0 | 0
10 | fiebre:Sí | 6 351 35 | 130 351 2 | 1
11 | infeccion:No | 82 810 7 | -98 805 18 | -7
12 | infeccion:Sí | 9 808 66 | 865 803 161 | 62
13 | cateter:No | 88 892 2 | -45 880 4 | -5
14 | cateter:Sí | 3 889 57 | 1244 877 114 | 145
15 | ventilacion:No | 87 697 2 | -23 603 1 | 9
16 | ventilacion:Sí | 5 702 39 | 427 606 19 | -170
17 | peso_cut:[0,1500) | 7 794 70 | 993 778 169 | 144
18 | peso_cut:[1500, 2000) | 10 706 42 | 278 284 17 | -340
19 | peso_cut:[2000, 3500) | 63 761 17 | -135 760 26 | 5
20 | peso_cut:[3500,+) | 11 392 37 | -142 165 5 | 167
21 | egest_cut:[0,32) | 6 800 69 | 1069 782 165 | 162
22 | egest_cut:[32,37) | 25 702 34 | 118 177 8 | -203
23 | egest_cut:[37,39) | 27 573 30 | -156 539 15 | 39
24 | egest_cut:[39,+) | 32 608 31 | -167 469 21 | 91
25 | emadre_cut:[0,18) | 6 225 34 | 36 43 0 | -74
26 | emadre_cut:[18,25) | 27 150 27 | -46 149 1 | -2
27 | emadre_cut:[25,35) | 42 120 19 | 11 55 0 | 12
28 | emadre_cut:[35,+) | 15 99 31 | 41 99 1 | 0
29 | estadia_cut:[0,10) | 67 804 17 | -149 760 34 | 36
30 | estadia_cut:[10,17) | 11 487 34 | 47 46 1 | -145
31 | estadia_cut:[17,38) | 11 792 48 | 513 721 66 | -161
32 | estadia_cut:[38,+) | 3 847 58 | 1264 801 112 | 304
cor ctr
1 2 0 |
2 2 0 |
3 61 8 |
4 41 2 |
5 16 1 |
6 45 8 |
7 9 0 |
8 5 1 |
9 0 0 |
10 0 0 |
11 4 1 |
12 4 8 |
13 12 1 |
14 12 15 |
15 94 2 |
16 96 31 |
17 16 36 |
18 422 257 |
19 1 0 |
20 228 73 |
21 18 38 |
22 525 235 |
23 34 10 |
24 139 61 |
25 182 8 |
26 0 0 |
27 66 1 |
28 0 0 |
29 44 20 |
30 441 52 |
31 71 65 |
32 46 65 |
# Inertia percentage
library(factoextra)
fviz_screeplot(res.mca)
# Biplots
plot(res.mca, map='symbiplot', contrib='relative', main='Correspondencias múltiple (inercias ajustadas)')
# number of categories per variable
cats = apply(datos[,var_categoricas], 2, function(x) nlevels(as.factor(x)))
library(ggplot2)
# data frame with variable coordinates
mca1_vars_df = data.frame(res.mca$colcoord, Variable = rep(names(cats), cats))
rownames(mca1_vars_df) = res.mca$levelnames
# plot of variable categories
ggplot(data=mca1_vars_df,
aes(x = X1, y=X2, label = abbreviate(rownames(mca1_vars_df),20))) +
geom_hline(yintercept = 0, colour = "gray70") +
geom_vline(xintercept = 0, colour = "gray70") +
geom_text(aes(colour=Variable)) +
ggtitle("MCA biplot")
Con el método de inercias ajustadas, las dos primeras dimensiones explican aproimadamente el 73.8% de la inercia total. Sin embargo, las 7 dimensiones encontradas solo eplican el 78% de la inercia. Algunas categorías tienen una pobre calidad de representación en las dos primeras dimensiones.
Se observa en la esquina inferior izquierda del biplot un primer cluster de partos que necesitaron una estadía de más de 38 días de estadía, que tuvieron necesidad de cateter y que tuvieron infección nosocomial. En la esquina superior izquierda encontramos un segundo cluster compuesto por nacimientos de bajo peso que necesitaron ventilación y una estadía entre 17 y 38 semanas. En la esquina inferior derecha se separan aquellos bebes con buen peso (>3500gr).
library(ca)
res.mca <- mjca(datos[,var_categoricas], lambda="JCA")
summary(res.mca, scree = TRUE)
Principal inertias (eigenvalues):
dim value
1 0.055691
2 0.008574
3 0.002592
4 0.000939
5 0.000455
6 0.000306
7 0.000194
8 5.2e-050
--------
Total: 0.071234
Diagonal inertia discounted from eigenvalues: 0.0145312
Percentage explained by JCA in 2 dimensions: 87.7%
(Eigenvalues are not nested)
[Iterations in JCA: 50 , epsilon = 0.000723]
Columns:
name mass inr k=1 k=2 cor ctr
1 | sexo:Mujeres | 43 20 | -5 -4 | 12 0 |
2 | sexo:Hombres | 48 18 | 4 4 | 11 0 |
3 | tiparto:Eutócico | 38 23 | 82 30 | 544 6 |
4 | tiparto:Vaginal Instrumentado | 4 35 | 138 50 | 520 2 |
5 | tiparto:Cesárea programada | 20 29 | 25 -20 | 70 0 |
6 | tiparto:Cesárea No Programada | 30 27 | -144 -33 | 883 13 |
7 | antibioticos:No | 77 5 | 29 3 | 660 1 |
8 | antibioticos:Sí | 11 34 | -192 -7 | 739 8 |
9 | fiebre:No | 85 3 | 8 -1 | 314 0 |
10 | fiebre:Sí | 6 35 | -115 16 | 309 2 |
11 | infeccion:No | 82 7 | 108 -17 | 903 16 |
12 | infeccion:Sí | 9 66 | -957 147 | 899 142 |
13 | cateter:No | 88 2 | 46 -9 | 934 3 |
14 | cateter:Sí | 3 57 | -1271 245 | 928 95 |
15 | ventilacion:No | 87 2 | 22 9 | 698 1 |
16 | ventilacion:Sí | 5 39 | -408 -176 | 704 18 |
17 | peso_cut:[0,1500) | 7 70 | -1166 177 | 927 160 |
18 | peso_cut:[1500, 2000) | 10 42 | -375 -536 | 963 46 |
19 | peso_cut:[2000, 3500) | 63 17 | 161 6 | 893 25 |
20 | peso_cut:[3500,+) | 11 37 | 194 297 | 625 16 |
21 | egest_cut:[0,32) | 6 69 | -1233 190 | 918 153 |
22 | egest_cut:[32,37) | 25 34 | -158 -288 | 979 35 |
23 | egest_cut:[37,39) | 27 30 | 185 47 | 667 15 |
24 | egest_cut:[39,+) | 32 31 | 205 143 | 809 28 |
25 | emadre_cut:[0,18) | 6 34 | -34 -52 | 143 0 |
26 | emadre_cut:[18,25) | 27 27 | 40 -8 | 130 1 |
27 | emadre_cut:[25,35) | 42 19 | -10 13 | 123 0 |
28 | emadre_cut:[35,+) | 15 31 | -38 2 | 92 0 |
29 | estadia_cut:[0,10) | 67 17 | 174 32 | 919 33 |
30 | estadia_cut:[10,17) | 11 34 | -55 -142 | 473 4 |
31 | estadia_cut:[17,38) | 11 48 | -602 -152 | 909 66 |
32 | estadia_cut:[38,+) | 3 58 | -1467 343 | 976 108 |
# Biplots
plot(res.mca, map='symbiplot', contrib='relative', main='Correspondencias múltiple Conjunto')
# number of categories per variable
cats = apply(datos[,var_categoricas], 2, function(x) nlevels(as.factor(x)))
library(ggplot2)
# data frame with variable coordinates
mca1_vars_df = data.frame(res.mca$colcoord, Variable = rep(names(cats), cats))
rownames(mca1_vars_df) = res.mca$levelnames
# plot of variable categories
ggplot(data=mca1_vars_df,
aes(x = X1, y=X2, label = abbreviate(rownames(mca1_vars_df),20))) +
geom_hline(yintercept = 0, colour = "gray70") +
geom_vline(xintercept = 0, colour = "gray70") +
geom_text(aes(colour=Variable)) +
ggtitle("MCA biplot")
Con la solución por análisis conjunto el porcentaje de inercia estimada por la dosprimeras dimensiones es del 87.7% (inercias no anidadas). La calidad de varias categorías mejora considerablemente, siendo en algunos casos superior a 900. La interpretación es similar al análisis por inercias ajustadas.
Niños con el más bajo peso (<1500gr) y prematuros (<32sem) a los cuales se les colocó cateter y resultaron infectados. Ellos necesitaron una estadía larga (>38días)
Niños con bajo peso (0-1500gr) con edad gestacional (32-37sem) que necesitaron ventilación. Tuvieron una estadía entre 10-38-sem
El restos de los embarazos normales.