SARS-CoV-2 y embarazo. Análisis de variables obstétricas y tipo parto durante la pandemia en España. Análisis estadístico.
Eva Morán, Francesc Rosselló
20-06-2023
Presentación
El análisis tanto descriptivo como inferencial de los datos se ha llevado a cabo usando R versión 4.2.2. Para los gráficos se ha usado el paquete ggplot2
de R.
Este documento se ha escrito en R Markdown, usando RStudio como editor de textos y el paquete bookdown
para compilar los ficheros markdown y producir el documento html final. Todos los valores que aparecen dentro del texto se han producido mediante bloques de código. Los ficheros markdown y scripts originales se encuentran en el repositorio https://github.com/biocom-uib/TesisEvaMoranRmd.
Variables numéricas: Dado el gran tamaño de las muestras, se han usado tests de Shapiro-Wilks para contrastar si las distribuciones de las variables numéricas se ajustan a normalidad, y tests t (suponiendo varianzas iguales o diferentes, según correspondiera), para comparar pares de medias. Como nunca se ha podido aceptar la normalidad de las muestras, se han usado tests de Fligner-Killeen para contrastar la igualdad de dos o más varianzas y tests de Kruskall-Wallis para contrastar la igualdad de más de dos medias en análisis factoriales. Para los tests posteriores de parejas de medias en análisis factoriales se han usado tests t o tests de Mann-Whitney, según se considerara adecuado.
Variables categóricas: Se ha usado sistemáticamente el test exacto de Fisher para la comparación bilateral de pares de proporciones o de odds ratios, según correspondiera a la naturaleza del contraste. Como el tamaño de las muestras siempre lo ha permitido, los intervalos de confianza para RA se han calculado con la función prop.test
con ajuste de continuidad, y los intervalos para RR se han calculado con la función RelRisk
del paquete DescTools
. La comparación de pares de diferencias de proporciones se ha realizado por el método de marcas de Martin-Herranz-Álvarez; mientras que en la comparación de pares de cocientes de proporciones (pares de RR) o de pares de OR se han usado los tests usuales basados en aproximaciones lognormales. Los tres métodos se han implementado en funciones de R.
La igualdad de distribuciones de variables categóricas politómicas se ha contrastado sistemáticamente mediante tests ji cuadrado de bondad de ajuste, usando el método de Montecarlo (basado en 10000 simulaciones) cuando no se cumplían las condiciones teóricas para poder usar su versión paramétrica. A continuación fijamos la semilla de aleatoriedad (a 2022) para que los resultados de las simulaciones sean reproducibles.
El análisis multivariante de variables categóricas y el cálculo de odds ratios ajustadas se ha llevado a cabo mediante regresiones logísticas, binomiales o multinomiales según correspondiera al número de niveles (2 o más de 2) de la variable respuesta.
Variables ordinales: La igualdad de tendencia en distribuciones de variables ordinales se ha contrastado sistemáticamente mediante tests \(\chi^2\).
0.0.1 Paquetes usados
library(knitr)
library(readxl)
library(kableExtra)
library(PropCIs)
library(epiR)
library(ExactCIdiff)
library(ggplot2)
library(dplyr)
library(hrbrthemes)
library(viridis)
library(ggmosaic)
library(rcompanion)
library(basecamb)
library(pscl)
library(caret)
library(car)
library(nnet)
library(ggeffects)
library(gtsummary)
library(rootSolve)
library(DescTools)
library(samplesizeCMH)
library(dplyr)
library(pwr)
0.0.2 Importación de datos
#Casos
#
Casos=read_excel("CasosTot.xlsx")
Casos=data.frame(Casos)
Casos=Casos[Casos$EntranTesis==1,]
Casos$SINTOMAS_DIAGNOSTICO=factor(Casos$SINTOMAS_DIAGNOSTICO,levels=c("Asintomatica", "Sintomas leves", "Neumonia"),ordered=TRUE)
Casos$SINTOMAS_DIAGNOSTICO=plyr::revalue(Casos$SINTOMAS_DIAGNOSTICO, c("Asintomatica"="Asintomática", "Sintomas leves"="Leve","Neumonia"="Grave"))
Sint=Casos$SINTOMAS_DIAGNOSTICO
Casos$Bolsa.rota.anteparto=Casos$PROM
#
#Controles
#
Controls=read_excel("ControlsTot.xlsx")
Controls=data.frame(Controls)
Controls=Controls[Controls$EntranTesis==1,]
Si.i.No=which(Controls$Feto.vivo...194=="Sí y No")
Controls[Si.i.No,]$Gestación.Múltiple=1
Controls[Si.i.No,]$Feto.vivo...194="Sí"
Controls$Bolsa.rota.anteparto=Controls$PROM
#
#Casos y controles de la 1a ola
#
Casos1w=Casos[Casos$PRIMERA_OLA...3==1,]
Controls1w=Controls[Controls$PRIMERA_OLA...4==1,]
#
#Casos y controles de la 2a ola
#
Casos2w=Casos[Casos$SEGUNDA_OLA...4==1,]
Controls2w=Controls[Controls$SEGUNDA_OLA...5==1,]
#
Dimensiones
n_I=dim(Casos)[1]
n_NI=dim(Controls)[1]
n_I1=dim(Casos1w)[1]
n_NI1=dim(Controls1w)[1]
n_I2=dim(Casos2w)[1]
n_NI2=dim(Controls2w)[1]
n_AS=length(Casos$SINTOMAS_DIAGNOSTICO[Casos$SINTOMAS_DIAGNOSTICO=="Asintomática"])
n_SL=length(Casos$SINTOMAS_DIAGNOSTICO[Casos$SINTOMAS_DIAGNOSTICO=="Leve"])
n_NE=length(Casos$SINTOMAS_DIAGNOSTICO[Casos$SINTOMAS_DIAGNOSTICO=="Grave"])
Vectores de nombres usados en las tablas y gráficos.
Columnes=c("Infectadas (N)", "Infectadas (%)","No infectadas (N)", "No infectadas (%)")
Columnes.Sint=c("Asintomáticas (N)", "Asintomáticas (%)","Leves (N)", "Leves (%)", "Graves (N)", "Graves (%)")
ColumnesExt=c("Infectadas 1a ola (N)", "Infectadas 1a ola (%)","No infectadas 1a ola (N)", "No infectadas 1 ola (%)","Infectadas 2 ola (N)", "Infectadas 2 ola (%)","No infectadas 2 ola (N)", "No infectadas 2 ola (%)")
ColumnesOnes=c("Total 1a ola (N)", "Total 1a ola (%)","Total 2 ola (N)", "Total 2 ola (%)")
Columnes.OR=c("ORa","IC 95%: extremo inf.", "IC 95%: extremo sup.", "p-valor")
0.0.3 Definición de grupos Robson
Definimos para Casos y Controles la variable Cesárea (0 no cesárea, 1 sí cesárea, NA tipo de parto no especificado).
Casos$Cesárea=Casos$Tipo.de.parto
Casos$Cesárea[Casos$Cesárea=="Eutocico" | Casos$Cesárea=="Instrumental"]=0
Casos$Cesárea[Casos$Cesárea=="Cesárea"]=1
#
Controls$Cesárea=Controls$Tipo.de.parto
Controls$Cesárea[Controls$Cesárea=="Eutocico" | Controls$Cesárea=="Instrumental"]=0
Controls$Cesárea[Controls$Cesárea=="Cesárea"]=1
Definimos para Casos y Controles la variable CesAnt (césarea anterior: 0 no, 1 sí) buscando las cesáreas previas en las variables “Indicación de cesárea” y “Especificar otra indicación”. El código indica específicamente cómo.
Casos$CesAnt=rep(0,n_I)
Casos$CesAnt[Casos$Indicación.de.cesárea=="Cesárea anterior" | Casos$Indicación.de.cesárea=="Cesárea anterior,Otra" | Casos$Indicación.de.cesárea=="Nalgas,Cesárea anterior" | Casos$Indicación.de.cesárea=="Nalgas,Cesárea anterior,Miomectomía previa,Otra" |
Casos$Indicación.de.cesárea=="Nalgas,Patología materna no relacionada con COVID,Cesárea anterior" |
Casos$Indicación.de.cesárea=="No progresión de parto,Cesárea anterior" | Casos$Indicación.de.cesárea=="Patología materna no relacionada con COVID,Cesárea anterior,Miomectomía previa" |
Casos$Indicación.de.cesárea=="Patología materna no relacionada con COVID,Cesárea anterior,Otra" |
Casos$Indicación.de.cesárea=="Patología materna relacionada con COVID,Cesárea anterior"]=1
#
Casos$CesAnt[Casos$Especificar.otra.indicación=="2 cesáreas anteriores" |
Casos$Especificar.otra.indicación=="3 cesáreas anteriores" |
Casos$Especificar.otra.indicación=="3 cesareas previas" |
Casos$Especificar.otra.indicación=="C ITERATIVA" |
Casos$Especificar.otra.indicación=="Cesárea anterior + cérvix desfavorable + no deseo materno inducción" |
Casos$Especificar.otra.indicación=="cesárea anterior + gestación extrauterina previa en cicatriz de cesárea" |
Casos$Especificar.otra.indicación=="Cesarea anterior y no deseo materno de parto" |
Casos$Especificar.otra.indicación=="Cesarea anterior y RPM >12 con cervix desfavorable" |
Casos$Especificar.otra.indicación=="Cesarea anterior, oligoamnios, cervix desfavorable y COVID-Positivo." |
Casos$Especificar.otra.indicación=="Cesárea anterior, RPM y NO deseo materno de parto vaginal." |
Casos$Especificar.otra.indicación=="cesarea iterativa" |
Casos$Especificar.otra.indicación=="Cesarea iterativa" |
Casos$Especificar.otra.indicación=="CESAREA ITERATIVA" |
Casos$Especificar.otra.indicación=="cesárea iterativa" |
Casos$Especificar.otra.indicación=="Cesárea iterativa" |
Casos$Especificar.otra.indicación=="cesarea previa y no deseo parto vaginal" |
Casos$Especificar.otra.indicación=="Dos cesáreas previas" |
Casos$Especificar.otra.indicación=="iterativa" |
Casos$Especificar.otra.indicación=="ITERATIVA" |
Casos$Especificar.otra.indicación=="iterativa por 2 previas" |
Casos$Especificar.otra.indicación=="iterativa: 2 cesáreas anteriores" |
Casos$Especificar.otra.indicación=="Macrosoma + cesárea anterior." |
Casos$Especificar.otra.indicación=="periodo intergenesico<5meses y cesarea anterior" |
Casos$Especificar.otra.indicación=="PREECLAMPSIA LEVE+2CESÁREAS ANTERIORES+CÉRVIX DESFAVORABLE" |
Casos$Especificar.otra.indicación=="PREECLAMPSIA SIN CRITERIOS DE GRAVEDAD+2 CESÁREAS ANT" |
Casos$Especificar.otra.indicación=="RPM+CESÁREA ANTERIOR +NO DESEO DE PARTO VAGINAL"]=1
n_NI=dim(Controls)[1]
Controls$CesAnt=rep(0,n_NI)
Controls$CesAnt[Controls$Indicación.de.cesárea=="Cesárea anterior" | Controls$Indicación.de.cesárea=="Cesárea anterior,Otra" | Controls$Indicación.de.cesárea=="Nalgas,Cesárea anterior" |
Controls$Indicación.de.cesárea=="No progresión de parto,Cesárea anterior" | Controls$Indicación.de.cesárea=="Patología materna no relacionada con COVID,Cesárea anterior" |
Controls$Indicación.de.cesárea=="Riesgo de pérdida de bienestar fetal,Cesárea anterior" |
Controls$Indicación.de.cesárea=="Riesgo de pérdida de bienestar fetal,Cesárea anterior,Otra"]=1
#
Controls$CesAnt[Controls$Especificar.otra.indicación=="2 CESÁREAS ANTERIORES" |
Controls$Especificar.otra.indicación=="2 CESÁREAS PREVIAS. INICIO CESÁREA ELECTIVA" |
Controls$Especificar.otra.indicación=="3 CESAREAS PREVIAS" |
Controls$Especificar.otra.indicación=="cesarea ant+pc99 y no deseo parto" |
Controls$Especificar.otra.indicación=="CESÁREA ITERATIVA POR DOS CESÁREAS PREVIAS" |
Controls$Especificar.otra.indicación=="Revoca prueba de parto. Cesárea anterior"]=1
Defino para Casos y Controles la variable Nalgas (0 de cara, 1 de pies, 2 transversal/oblícua, NA malposiciones no especificadas) buscando las malposiciones en las variables “Indicación de cesárea”, “Especificar otra indicación” y “Especificar otra indicación parto instrumental”.
Casos$Nalgas=rep(0,n_I)
Casos$Nalgas[Casos$Indicación.de.cesárea=="Nalgas" |
Casos$Indicación.de.cesárea=="Nalgas,Cesárea anterior" |
Casos$Indicación.de.cesárea=="Nalgas,Cesárea anterior,Miomectomía previa,Otra" |
Casos$Indicación.de.cesárea=="Nalgas,Otra" |
Casos$Indicación.de.cesárea=="Nalgas,Patología materna no relacionada con COVID" |
Casos$Indicación.de.cesárea=="Nalgas,Patología materna no relacionada con COVID,Cesárea anterior"]=1
#
Casos$Nalgas[Casos$Especificar.otra.indicación=="CIR I de primer gemelo+presentación podálica." |
Casos$Especificar.otra.indicación=="Gemelar condiscreancia de peso , segundo gemelo nalgas , preeclampsia leve" |
Casos$Especificar.otra.indicación=="Gemelar Podálica-podálica" |
Casos$Especificar.otra.indicación=="GEMELAR, 1er gemelo CIR 1 y PODÁLICA" |
Casos$Especificar.otra.indicación=="NALGAS NO CUMPLE CRITERIOS PARA PARTO VAGINAL" |
Casos$Especificar.otra.indicación=="PE tardia a termino en gestante con feto en podalica" |
Casos$Especificar.otra.indicación=="Podálica+sospecha de nudo verdadero de cordón" |
Casos$Especificar.otra.indicación=="RPM en primiparidad de nalgas"]=1
#
Casos$Nalgas[Casos$Especificar.otra.indicación=="Gemelar BCBA podalica-transversa" |
Casos$Especificar.otra.indicación=="Situación transversa" |
Casos$Especificar.otra.indicación=="Versión espontánea fetal a situación transversa durante inducción"]=2
Controls$Nalgas=rep(0,n_NI)
Controls$Nalgas[Controls$Indicación.de.cesárea=="Nalgas" |
Controls$Indicación.de.cesárea=="Nalgas,Cesárea anterior" |
Controls$Indicación.de.cesárea=="Nalgas,Otra"]=1
#
Controls$Nalgas[Controls$Especificar.otra.indicación=="2 gemelo en pelviana" |
Controls$Especificar.otra.indicación=="2 gemelo en pelviana" |
Controls$Especificar.otra.indicación=="CESAREA URGENTE POR TRABAJO DE PARTO GEMELAR PRIMERO NALGAS" |
Controls$Especificar.otra.indicación=="Electiva. Gemelar 2 feto en pelviana" |
Controls$Especificar.otra.indicación=="Gemelar.1º gemelo nalgas" |
Controls$Especificar.otra.indicación=="gestacion gemelar primero no cefalica. preeclampsia leve" |
Controls$Especificar.otra.indicación=="Podálica" |
Controls$Especificar.otra.indicación=="RPM en gestación gemelar con el primer gemelo en podálica y pretérmino de 28+3 sem. Trabajo de parto y procidencia de mano" |
Controls$Especificar.otra.indicación=="Segundo gemelo en pelviana" |
Controls$Especificar.otra.indicación.parto.instrumental=="Parto de nalgas, con fórceps de cabeza última"]=1
#
Controls$Nalgas[Controls$Especificar.otra.indicación=="Situación transversa. Mioma tumor de parto."]=2
#
Controls$Nalgas[Controls$Especificar.otra.indicación=="Rechazo de versión cefálica externa"|
Controls$Especificar.otra.indicación=="MALPOSICION FETAL"]=NA
Definimos la variable Robson para Casos y Controles siguiendo el algoritmo OMS:
Casos$Robson=rep(0,n_I)
#
Casos$Robson[Casos$Gestación.Múltiple=="Sí"]=8
#
Casos$Robson[Casos$Gestación.Múltiple=="No"& Casos$Nalgas==2]=9
#
Casos$Robson[Casos$Gestación.Múltiple=="No" & Casos$Nalgas==1 & Casos$NULIPARA==0 ]=7
#
Casos$Robson[Casos$Gestación.Múltiple=="No" & Casos$Nalgas==1 & Casos$NULIPARA==1 ]=6
#
Casos$Robson[Casos$Gestación.Múltiple=="No" & Casos$Nalgas==0 & Casos$PREMATURO==1 ]=10
#
Casos$Robson[Casos$Gestación.Múltiple=="No" & Casos$Nalgas==0 & Casos$PREMATURO==0 & Casos$NULIPARA==0 & Casos$CesAnt==1 ]=5
#
Casos$Robson[Casos$Gestación.Múltiple=="No" & Casos$Nalgas==0 & Casos$PREMATURO==0 & Casos$NULIPARA==0 & Casos$CesAnt==0 & !is.na(Casos$Inicio.de.parto) & Casos$Inicio.de.parto!="Espontáneo" ]=4
#
Casos$Robson[Casos$Gestación.Múltiple=="No" & Casos$Nalgas==0 & Casos$PREMATURO==0 & Casos$NULIPARA==0 & Casos$CesAnt==0 & Casos$Inicio.de.parto=="Espontáneo" ]=3
#
Casos$Robson[Casos$Gestación.Múltiple=="No" & Casos$Nalgas==0 & Casos$PREMATURO==0 & Casos$NULIPARA==1 & !is.na(Casos$Inicio.de.parto) & Casos$Inicio.de.parto!="Espontáneo"]=2
#
Casos$Robson[Casos$Gestación.Múltiple=="No" & Casos$Nalgas==0 & Casos$PREMATURO==0 & Casos$NULIPARA==1 & Casos$Inicio.de.parto=="Espontáneo" ]=1
#
Casos$Robson=factor(Casos$Robson,levels=0:10) # 0 son los casos perdidos
Controls$Robson=rep(0,n_NI)
#
Controls$Robson[Controls$Gestación.Múltiple==1]=8
#
Controls$Robson[Controls$Gestación.Múltiple==0& Controls$Nalgas==2]=9
#
Controls$Robson[Controls$Gestación.Múltiple==0 & Controls$Nalgas==1 & Controls$Nuliparous==0 ]=7
#
Controls$Robson[Controls$Gestación.Múltiple==0 & Controls$Nalgas==1 & Controls$Nuliparous==1 ]=6
#
Controls$Robson[Controls$Gestación.Múltiple==0 & Controls$Nalgas==0 & Controls$Preterm.deliveries==1 ]=10
#
Controls$Robson[Controls$Gestación.Múltiple==0 & Controls$Nalgas==0 & Controls$Preterm.deliveries==0 & Controls$Nuliparous==0 & Controls$CesAnt==1 ]=5
#
Controls$Robson[Controls$Gestación.Múltiple==0 & Controls$Nalgas==0 & Controls$Preterm.deliveries==0 & Controls$Nuliparous==0 & Controls$CesAnt==0 & !is.na(Controls$Inicio.de.parto) & Controls$Inicio.de.parto!="Espontáneo" ]=4
#
Controls$Robson[Controls$Gestación.Múltiple==0 & Controls$Nalgas==0 & Controls$Preterm.deliveries==0 & Controls$Nuliparous==0 & Controls$CesAnt==0 & Controls$Inicio.de.parto=="Espontáneo" ]=3
#
Controls$Robson[Controls$Gestación.Múltiple==0 & Controls$Nalgas==0 & Controls$Preterm.deliveries==0 & Controls$Nuliparous==1 & !is.na(Controls$Inicio.de.parto) & Controls$Inicio.de.parto!="Espontáneo"]=2
#
Controls$Robson[Controls$Gestación.Múltiple==0 & Controls$Nalgas==0 & Controls$Preterm.deliveries==0 & Controls$Nuliparous==1 & Controls$Inicio.de.parto=="Espontáneo" ]=1
#
Controls$Robson=factor(Controls$Robson,levels=0:10) # 0 son los casos perdidos
Restringimos las variables Cesárea y Robson a Casos y Controles de las dos olas
Casos1w$Cesárea=Casos[Casos$PRIMERA_OLA...3==1,]$Cesárea
Controls1w$Cesárea=Controls[Controls$PRIMERA_OLA...4==1,]$Cesárea
Casos2w$Cesárea=Casos[Casos$SEGUNDA_OLA...4==1,]$Cesárea
Controls2w$Cesárea=Controls[Controls$SEGUNDA_OLA...5==1,]$Cesárea
Casos1w$Robson=Casos[Casos$PRIMERA_OLA...3==1,]$Robson
Controls1w$Robson=Controls[Controls$PRIMERA_OLA...4==1,]$Robson
Casos2w$Robson=Casos[Casos$SEGUNDA_OLA...4==1,]$Robson
Controls2w$Robson=Controls[Controls$SEGUNDA_OLA...5==1,]$Robson
#Casos y controles con GM
#
CasosGM=Casos[Casos$Gestación.Múltiple=="Sí",]
ControlsGM=Controls[Controls$Gestación.Múltiple==1,]
#
#Casos y controles de la 1a ola con GM
#
Casos1wGM=Casos1w[Casos1w$Gestación.Múltiple=="Sí",]
Controls1wGM=Controls1w[Controls1w$Gestación.Múltiple==1,]
#
#Casos y controles de la 2a ola con GM
#
Casos2wGM=Casos2w[Casos2w$Gestación.Múltiple=="Sí",]
Controls2wGM=Controls2w[Controls2w$Gestación.Múltiple==1,]
Guardamos copias