Instalar y cargar las bibliotecas necesarias

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.2     ✔ readr     2.1.4
## ✔ forcats   1.0.0     ✔ stringr   1.5.0
## ✔ ggplot2   3.4.2     ✔ tibble    3.2.1
## ✔ lubridate 1.9.2     ✔ tidyr     1.3.0
## ✔ purrr     1.0.1     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(ggplot2)
library(readxl)

Leer la base de datos

base_datos <- read_excel("E:/OneDrive - CINVESTAV/PROYECTO MDatos/TRABAJOS/DraIrisHernándezMDatos/BASE DE DATOS IRIS.xlsx")

# 1. Análisis Descriptivo

summary(base_datos)
##        #            FICHA           NOMBRE DE PACIENTE
##  Min.   :  1.0   Length:386         Length:386        
##  1st Qu.: 97.0   Class :character   Class :character  
##  Median :194.0   Mode  :character   Mode  :character  
##  Mean   :193.6                                        
##  3rd Qu.:290.0                                        
##  Max.   :386.0                                        
##  NA's   :1                                            
##  FECHA DE NACIMIENTO                    EDAD      >30 SDG SI/NO     
##  Min.   :1968-10-05 00:00:00.000   Min.   :12.0   Length:386        
##  1st Qu.:1984-01-24 06:00:00.000   1st Qu.:30.0   Class :character  
##  Median :1987-12-20 00:00:00.000   Median :34.0   Mode  :character  
##  Mean   :1988-02-17 02:32:57.202   Mean   :33.5                     
##  3rd Qu.:1991-08-06 00:00:00.000   3rd Qu.:38.0                     
##  Max.   :2020-11-27 00:00:00.000   Max.   :53.0                     
##                                                                     
##      TALLA       PESO AL INICIO DEL EMBARAZO IMC PREVIO AL EMBARAZO
##  Min.   :1.490   Min.   : 44.50              Min.   :17.63         
##  1st Qu.:1.560   1st Qu.: 60.38              1st Qu.:23.82         
##  Median :1.590   Median : 68.00              Median :26.81         
##  Mean   :1.594   Mean   : 68.53              Mean   :26.94         
##  3rd Qu.:1.623   3rd Qu.: 75.00              3rd Qu.:29.50         
##  Max.   :1.760   Max.   :125.00              Max.   :47.05         
##  NA's   :214     NA's   :214                 NA's   :214           
##  PESO AL FINAL DEL EMBARAZO INCREMENTO PONDERAL DURANTE EMBARAZO
##  Min.   : 53.70             Min.   :-4.700                      
##  1st Qu.: 70.35             1st Qu.: 6.000                      
##  Median : 77.45             Median :10.000                      
##  Mean   : 77.72             Mean   : 9.188                      
##  3rd Qu.: 84.50             3rd Qu.:13.000                      
##  Max.   :133.00             Max.   :22.500                      
##  NA's   :214                NA's   :214                         
##  CONTROL PRENATAL INSTITUCIONAL DIABETES GESTACIONAL (SI/NO)
##  Length:386                     Length:386                  
##  Class :character               Class :character            
##  Mode  :character               Mode  :character            
##                                                             
##                                                             
##                                                             
##                                                             
##  PREECLAMPSIA (SI/NO) RESOLUCION DE LA GESTACION (PARTO/CESAREA)
##  Length:386           Length:386                                
##  Class :character     Class :character                          
##  Mode  :character     Mode  :character                          
##                                                                 
##                                                                 
##                                                                 
##                                                                 
##  EDAD GESTACIONAL AL MOMENTO DE LA RESOLUCION PESO DEL RN (GR)
##  Min.   :29.20                                Min.   :1130    
##  1st Qu.:37.50                                1st Qu.:2780    
##  Median :38.40                                Median :3080    
##  Mean   :38.21                                Mean   :2986    
##  3rd Qu.:39.30                                3rd Qu.:3290    
##  Max.   :41.10                                Max.   :4200    
##  NA's   :215                                  NA's   :215     
##  RECIEN NACIDO (VIVO/MUERTO) SEXO DE RECIEN NACIDO (FEMENINO/MASCULINO)
##  Length:386                  Length:386                                
##  Class :character            Class :character                          
##  Mode  :character            Mode  :character                          
##                                                                        
##                                                                        
##                                                                        
## 
glimpse(base_datos)
## Rows: 386
## Columns: 19
## $ `#`                                            <dbl> 1, 2, 3, 4, 5, 6, 7, 8,…
## $ FICHA                                          <chr> "001197-08-1", "004085-…
## $ `NOMBRE DE PACIENTE`                           <chr> "LIDIA ANAHI GARCIA GAR…
## $ `FECHA DE NACIMIENTO`                          <dttm> 1988-08-06, 1981-04-23…
## $ EDAD                                           <dbl> 32, 39, 44, 26, 42, 40,…
## $ `>30 SDG SI/NO`                                <chr> "RESOLUCION EXTRAPEMEX"…
## $ TALLA                                          <dbl> NA, 1.57, NA, NA, NA, 1…
## $ `PESO AL INICIO DEL EMBARAZO`                  <dbl> NA, 72, NA, NA, NA, 63,…
## $ `IMC PREVIO AL EMBARAZO`                       <dbl> NA, 29.21011, NA, NA, N…
## $ `PESO AL FINAL DEL EMBARAZO`                   <dbl> NA, 92.0, NA, NA, NA, 7…
## $ `INCREMENTO PONDERAL DURANTE EMBARAZO`         <dbl> NA, 20.0, NA, NA, NA, 7…
## $ `CONTROL PRENATAL INSTITUCIONAL`               <chr> NA, "SI", NA, NA, NA, "…
## $ `DIABETES GESTACIONAL (SI/NO)`                 <chr> NA, "NO", NA, NA, NA, "…
## $ `PREECLAMPSIA (SI/NO)`                         <chr> NA, "NO", NA, NA, NA, "…
## $ `RESOLUCION DE LA GESTACION (PARTO/CESAREA)`   <chr> NA, "CESAREA", NA, NA, …
## $ `EDAD GESTACIONAL AL MOMENTO DE LA RESOLUCION` <dbl> NA, 37.4, NA, NA, NA, 3…
## $ `PESO DEL RN (GR)`                             <dbl> NA, 3420, NA, NA, NA, 3…
## $ `RECIEN NACIDO (VIVO/MUERTO)`                  <chr> NA, "VIVO", NA, NA, NA,…
## $ `SEXO DE RECIEN NACIDO (FEMENINO/MASCULINO)`   <chr> NA, "FEMENINO", NA, NA,…
dbiris<-base_datos %>% drop_na()
#Elimine los datos que estaban en blanco se redujo a 171 la n
glimpse(dbiris)
## Rows: 171
## Columns: 19
## $ `#`                                            <dbl> 2, 6, 7, 8, 10, 11, 12,…
## $ FICHA                                          <chr> "004085-08-3", "361925-…
## $ `NOMBRE DE PACIENTE`                           <chr> "AZUCENA MORADO SOLIS",…
## $ `FECHA DE NACIMIENTO`                          <dttm> 1981-04-23, 1980-11-07…
## $ EDAD                                           <dbl> 39, 40, 42, 28, 42, 39,…
## $ `>30 SDG SI/NO`                                <chr> "SI", "SI", "SI", "SI",…
## $ TALLA                                          <dbl> 1.57, 1.49, 1.50, 1.67,…
## $ `PESO AL INICIO DEL EMBARAZO`                  <dbl> 72.0, 63.0, 78.0, 60.0,…
## $ `IMC PREVIO AL EMBARAZO`                       <dbl> 29.21011, 28.37710, 34.…
## $ `PESO AL FINAL DEL EMBARAZO`                   <dbl> 92.0, 70.2, 77.0, 79.5,…
## $ `INCREMENTO PONDERAL DURANTE EMBARAZO`         <dbl> 20.0, 7.2, -1.0, 19.5, …
## $ `CONTROL PRENATAL INSTITUCIONAL`               <chr> "SI", "SI", "SI", "SI",…
## $ `DIABETES GESTACIONAL (SI/NO)`                 <chr> "NO", "SI", "SI", "NO",…
## $ `PREECLAMPSIA (SI/NO)`                         <chr> "NO", "NO", "NO", "NO",…
## $ `RESOLUCION DE LA GESTACION (PARTO/CESAREA)`   <chr> "CESAREA", "CESAREA", "…
## $ `EDAD GESTACIONAL AL MOMENTO DE LA RESOLUCION` <dbl> 37.4, 38.5, 37.6, 38.4,…
## $ `PESO DEL RN (GR)`                             <dbl> 3420, 3080, 3080, 3540,…
## $ `RECIEN NACIDO (VIVO/MUERTO)`                  <chr> "VIVO", "VIVO", "VIVO",…
## $ `SEXO DE RECIEN NACIDO (FEMENINO/MASCULINO)`   <chr> "FEMENINO", "FEMENINO",…
colnames(dbiris)
##  [1] "#"                                           
##  [2] "FICHA"                                       
##  [3] "NOMBRE DE PACIENTE"                          
##  [4] "FECHA DE NACIMIENTO"                         
##  [5] "EDAD"                                        
##  [6] ">30 SDG SI/NO"                               
##  [7] "TALLA"                                       
##  [8] "PESO AL INICIO DEL EMBARAZO"                 
##  [9] "IMC PREVIO AL EMBARAZO"                      
## [10] "PESO AL FINAL DEL EMBARAZO"                  
## [11] "INCREMENTO PONDERAL DURANTE EMBARAZO"        
## [12] "CONTROL PRENATAL INSTITUCIONAL"              
## [13] "DIABETES GESTACIONAL (SI/NO)"                
## [14] "PREECLAMPSIA (SI/NO)"                        
## [15] "RESOLUCION DE LA GESTACION (PARTO/CESAREA)"  
## [16] "EDAD GESTACIONAL AL MOMENTO DE LA RESOLUCION"
## [17] "PESO DEL RN (GR)"                            
## [18] "RECIEN NACIDO (VIVO/MUERTO)"                 
## [19] "SEXO DE RECIEN NACIDO (FEMENINO/MASCULINO)"

Tabla 1: Resumen de estadísticas descriptivas.

library(gtsummary)

dbiris <- subset(dbiris, `RECIEN NACIDO (VIVO/MUERTO)` %in% c("VIVO"))

dbiris %>% select(EDAD:`SEXO DE RECIEN NACIDO (FEMENINO/MASCULINO)`) %>% tbl_summary(by=`DIABETES GESTACIONAL (SI/NO)`,) %>% add_p() %>% modify_caption("**Diabetes Gestacional** (N = {N})") %>%  modify_header(label = "**Variables**", p.value = "**valor p**")
## There was an error in 'add_p()/add_difference()' for variable '>30 SDG SI/NO', p-value omitted:
## Error in stats::chisq.test(x = c("SI", "SI", "SI", "SI", "SI", "SI", "SI", : 'x' and 'y' must have at least 2 levels
## There was an error in 'add_p()/add_difference()' for variable 'RECIEN NACIDO (VIVO/MUERTO)', p-value omitted:
## Error in stats::chisq.test(x = c("VIVO", "VIVO", "VIVO", "VIVO", "VIVO", : 'x' and 'y' must have at least 2 levels
Diabetes Gestacional (N = 170)
Variables NO, N = 1281 SI, N = 421 valor p2
EDAD 31.0 (28.0, 36.0) 34.0 (31.0, 37.0) 0.008
>30 SDG SI/NO
    SI 128 (100%) 42 (100%)
TALLA 1.59 (1.56, 1.62) 1.59 (1.56, 1.63) 0.4
PESO AL INICIO DEL EMBARAZO 67 (59, 75) 73 (64, 78) 0.035
IMC PREVIO AL EMBARAZO 26.7 (23.6, 29.3) 28.2 (25.5, 30.4) 0.042
PESO AL FINAL DEL EMBARAZO 78 (69, 85) 77 (73, 84) 0.6
INCREMENTO PONDERAL DURANTE EMBARAZO 10.5 (6.5, 13.5) 6.8 (3.6, 10.2) <0.001
CONTROL PRENATAL INSTITUCIONAL >0.9
    NO 1 (0.8%) 0 (0%)
    SI 127 (99%) 42 (100%)
PREECLAMPSIA (SI/NO) 0.090
    NO 121 (95%) 36 (86%)
    SI 7 (5.5%) 6 (14%)
RESOLUCION DE LA GESTACION (PARTO/CESAREA) 0.4
    CESAREA 60 (47%) 23 (55%)
    PARTO 68 (53%) 19 (45%)
EDAD GESTACIONAL AL MOMENTO DE LA RESOLUCION 38.40 (37.50, 39.40) 38.50 (37.50, 39.10) 0.7
PESO DEL RN (GR) 3,030 (2,760, 3,265) 3,160 (2,865, 3,401) 0.057
RECIEN NACIDO (VIVO/MUERTO)
    VIVO 128 (100%) 42 (100%)
SEXO DE RECIEN NACIDO (FEMENINO/MASCULINO) >0.9
    FEMENINO 69 (54%) 23 (55%)
    MASCULINO 59 (46%) 19 (45%)
1 Median (IQR); n (%)
2 Wilcoxon rank sum test; Fisher’s exact test; Pearson’s Chi-squared test
dbiris %>% select(EDAD:`SEXO DE RECIEN NACIDO (FEMENINO/MASCULINO)`) %>% tbl_summary(by=`PREECLAMPSIA (SI/NO)`) %>% add_p() %>% modify_caption("**Preclapsia** (N = {N})") %>%  modify_header(label = "**Variables**", p.value = "**valor p**")
## There was an error in 'add_p()/add_difference()' for variable '>30 SDG SI/NO', p-value omitted:
## Error in stats::chisq.test(x = c("SI", "SI", "SI", "SI", "SI", "SI", "SI", : 'x' and 'y' must have at least 2 levels
## There was an error in 'add_p()/add_difference()' for variable 'RECIEN NACIDO (VIVO/MUERTO)', p-value omitted:
## Error in stats::chisq.test(x = c("VIVO", "VIVO", "VIVO", "VIVO", "VIVO", : 'x' and 'y' must have at least 2 levels
Preclapsia (N = 170)
Variables NO, N = 1571 SI, N = 131 valor p2
EDAD 32.0 (29.0, 36.0) 34.0 (30.0, 37.0) 0.5
>30 SDG SI/NO
    SI 157 (100%) 13 (100%)
TALLA 1.59 (1.56, 1.62) 1.61 (1.60, 1.65) 0.025
PESO AL INICIO DEL EMBARAZO 68 (60, 75) 71 (68, 80) 0.079
IMC PREVIO AL EMBARAZO 26.8 (23.8, 29.4) 27.2 (25.0, 29.9) 0.3
PESO AL FINAL DEL EMBARAZO 77 (70, 83) 85 (82, 90) 0.018
INCREMENTO PONDERAL DURANTE EMBARAZO 9.4 (6.0, 12.9) 12.5 (4.5, 14.0) 0.3
CONTROL PRENATAL INSTITUCIONAL >0.9
    NO 1 (0.6%) 0 (0%)
    SI 156 (99%) 13 (100%)
DIABETES GESTACIONAL (SI/NO) 0.090
    NO 121 (77%) 7 (54%)
    SI 36 (23%) 6 (46%)
RESOLUCION DE LA GESTACION (PARTO/CESAREA) 0.001
    CESAREA 71 (45%) 12 (92%)
    PARTO 86 (55%) 1 (7.7%)
EDAD GESTACIONAL AL MOMENTO DE LA RESOLUCION 38.50 (37.60, 39.40) 36.40 (35.20, 38.30) <0.001
PESO DEL RN (GR) 3,100 (2,840, 3,300) 2,660 (1,780, 3,020) 0.007
RECIEN NACIDO (VIVO/MUERTO)
    VIVO 157 (100%) 13 (100%)
SEXO DE RECIEN NACIDO (FEMENINO/MASCULINO) 0.5
    FEMENINO 86 (55%) 6 (46%)
    MASCULINO 71 (45%) 7 (54%)
1 Median (IQR); n (%)
2 Wilcoxon rank sum test; Fisher’s exact test; Pearson’s Chi-squared test

Gráfica 1: Histograma de la distribución del incremento ponderal durante el embarazo

ggplot(dbiris, aes(x = `INCREMENTO PONDERAL DURANTE EMBARAZO`)) +
  geom_histogram(fill= "skyblue", color = "black", binwidth = 1) +
  labs(title = "Distribución del Incremento Ponderal del IMC durante el Embarazo") +
  theme_minimal()

# Cargar las bibliotecas necesarias
library(ggplot2)
library(gt)

# Definir límites de ganancia de peso según IMC pregestacional
limites_ganancia <- data.frame(
  IMC_categoria = c("Bajo peso", "Peso normal", "Sobrepeso", "Obesidad"),
  min_ganancia = c(12.5, 11.5, 7, 5),
  max_ganancia = c(18, 16, 11.5, 9)
)

# Categorizar IMC
dbiris$IMC_categoria <- cut(dbiris$`IMC PREVIO AL EMBARAZO`,
                            breaks = c(-Inf, 18.5, 24.9, 29.9, Inf),
                            labels = c("Bajo peso", "Peso normal", "Sobrepeso", "Obesidad"),
                            right = FALSE)

# Unir con limites_ganancia
dbiris <- merge(dbiris, limites_ganancia, by = "IMC_categoria", all.x = TRUE)

# Calcular pacientes con ganancia de peso excesiva
dbiris$ganancia_excesiva <- with(dbiris, `INCREMENTO PONDERAL DURANTE EMBARAZO` > max_ganancia)

# Tabla de prevalencia
tabla_prevalencia <- table(dbiris$ganancia_excesiva)
porcentaje_excesivo <- (tabla_prevalencia["TRUE"] / sum(tabla_prevalencia)) * 100

# Crear y dibujar la tabla
tabla_final <- data.frame(
  `Ganancia de Peso` = c("Dentro de lo recomendado", "Excesiva"),
  `Número de Pacientes` = c(tabla_prevalencia["FALSE"], tabla_prevalencia["TRUE"]),
  `Porcentaje (%)` = c(100 - porcentaje_excesivo, porcentaje_excesivo)
)

tabla_final %>%
  gt() %>%
  tab_header(
    title = "Tabla 2: Número y porcentaje de pacientes con ganancia de peso excesiva."
  )
Tabla 2: Número y porcentaje de pacientes con ganancia de peso excesiva.
Ganancia.de.Peso Número.de.Pacientes Porcentaje....
Dentro de lo recomendado 124 72.94118
Excesiva 46 27.05882

Puedes presentar estos resultados en una tabla:

Tabla 2: Número y porcentaje de pacientes con ganancia de peso excesiva.

Ganancia de Peso Número de Pacientes Porcentaje (%)
Dentro de lo recomendado 124 72.94
Excesiva 46 27.06

Con estos resultados, tienes una idea clara de la prevalencia de ganancia de peso excesiva en tu muestra. Ahora, puedes continuar con el análisis de la relación entre la ganancia de peso y las categorías de IMC pregestacional, y luego la relación entre la ganancia de peso, diabetes gestacional y preeclampsia.

Gráfica 2: Distribución de pacientes con y sin diabetes gestacional

dgbarplot<-ggplot(dbiris, aes(x = `DIABETES GESTACIONAL (SI/NO)`)) +
  geom_bar(fill = "skyblue", color= "black") +
  labs(title = "Distribución de Pacientes con y sin Diabetes Gestacional",x="Diabetes gestacional", y="conteo") +
  theme_minimal()
dgbarplot

Gráfica 3: Distribución de pacientes con y sin preeclampsia

preebarplot<-ggplot(dbiris, aes(x = `PREECLAMPSIA (SI/NO)`)) +
  geom_bar(fill = "salmon", color= "black") +
  labs(title = "Distribución de Pacientes con y sin Preeclampsia", x="Preeclampsia", y="conteo") +
  theme_minimal()
preebarplot

2. Determinación de la Prevalencia de Ganancia de Peso Excesiva

(Nota: Necesitarás definir un umbral para “ganancia de peso excesiva”)

3. Relación entre Ganancia de Peso y Categorías de IMC Pregestacional

ggplot(dbiris, aes( x= `DIABETES GESTACIONAL (SI/NO)`, y =`INCREMENTO PONDERAL DURANTE EMBARAZO`)) +
  geom_boxplot() +
  labs(title = "Ganancia de Peso por Categorías de IMC Pregestacional") +
  theme_minimal()

4. Relación entre Ganancia de Peso, Diabetes Gestacional y Preeclampsia

pC<-ggplot(dbiris, aes(x = `DIABETES GESTACIONAL (SI/NO)`, y = `INCREMENTO PONDERAL DURANTE EMBARAZO`)) +
  geom_boxplot(fill = "skyblue") +
  labs(title = "Ganancia de Peso en Pacientes con y sin Diabetes Gestacional",x="Diabetes Gestacional",y="Incremento preponderal durante el embarazo (Kg)") +
  theme_minimal()

pd<-ggplot(dbiris, aes(x = `PREECLAMPSIA (SI/NO)`, y = `INCREMENTO PONDERAL DURANTE EMBARAZO`)) +
  geom_boxplot(fill ="salmon") +
  labs(title = "Ganancia de Peso en Pacientes con y sin Preeclampsia", x="Preeclampsia",y="Incremento preponderal durante el embarazo (Kg)") +
  theme_minimal()
library(cowplot)
## 
## Attaching package: 'cowplot'
## The following object is masked from 'package:lubridate':
## 
##     stamp
diabetesgest<-plot_grid(dgbarplot, pC, nrow = 2, ncol= 1, labels = c('A', 'B'), label_size = 12)
diabetesgest

preclampsia<-plot_grid(preebarplot, pd, nrow = 2, ncol= 1, labels = c('A', 'B'), label_size = 12)
preclampsia

5. Análisis Multivariado

(Nota: Necesitarás la biblioteca ‘lm’ para modelos de regresión)

6. Prueba de Hipótesis

(Nota: Necesitarás la biblioteca ‘t.test’ para pruebas t)

7. Relación entre Ganancia de Peso y Resultados Perinatales

#ggplot(base_datos, aes(x = RESOLUCION_DE_LA_GESTACION, y = INCREMENTO_PONDERAL_DURANTE_EMBARAZO)) +
 # geom_boxplot(fill = "Accent") +
  #labs(title = "Ganancia de Peso según el Tipo de Resolución de la Gestación") +
  #theme_minimal()

#ggplot(base_datos, aes(x = INCREMENTO_PONDERAL_DURANTE_EMBARAZO, y = PESO_DEL_RN)) +
 # geom_point(aes(color = SEXO_DE_RECIEN_NACIDO), palette = "Accent") +
  #labs(title = "Relación entre Ganancia de Peso y Peso del Recién Nacido") +
  #theme_minimal()