Análise Comparativa da Classificação de Robson

Adolescentes vs. Adultas — Coorte HC-FMUSP (1995–2017)

Autor

Letícia Santos

Data de Publicação

8 de abril de 2026

Introdução

Este documento apresenta o pipeline completo de análise da dissertação de mestrado que investiga as diferenças nas vias de parto entre adolescentes e adultas, utilizando a Classificação de Robson como ferramenta de estratificação.

Objetivo Geral: Realizar uma análise comparativa das vias de parto (vaginal espontâneo, fórcipe e cesárea), indicações primárias de partos operatórios e complicações maternas entre gestantes adolescentes (precoces e tardias) e adultas, estratificada pela Classificação de Robson, utilizando uma coorte histórica de 25 anos (1995–2017) do HC-FMUSP.

NotaObjetivos Específicos
  1. Perfil Sociodemográfico: Descrever e comparar as características sociodemográficas (idade, escolaridade, estado civil, raça/cor) das adolescentes precoces (10-14 anos), tardias (15-19 anos) e adultas (20-34 anos).
  2. Comparação das Vias de Parto: Avaliar as taxas das diferentes vias de parto nos grupos etários e distribuí-las nos 10 Grupos da Classificação de Robson.
  3. Mapeamento das Indicações Operatórias: Identificar e comparar as principais indicações clínicas para partos operatórios entre adolescentes e adultas.
  4. Complicações Maternas: Analisar a frequência de complicações maternas por grupo etário.

1 Carregamento e Preparação dos Dados

1.1 Importação da Base de Dados

A base de dados contém registros obstétricos do Hospital das Clínicas da FMUSP referentes ao período de 1995 a 2017.

Mostrar código
dados <- read_excel(
  here("data", "raw", "BD_completo_corrigido_06-04-2026.xlsx"),
  sheet = "Sheet1"
)

cat("Dimensões da base bruta:", nrow(dados), "registros ×", ncol(dados), "variáveis\n")
Dimensões da base bruta: 8676 registros × 102 variáveis

1.2 Critérios de Elegibilidade e Filtros

Os seguintes critérios de inclusão foram aplicados:

  • Idade: entre 11 e 34 anos
  • Tipo de parto: registrado (não nulo)
  • Classificação de Robson: registrada e válida (Grupos 1–10, excluindo Grupo 8)
Mostrar código
dados_analise <- dados %>%
  filter(!is.na(tipo_parto), !is.na(idade)) %>%
  filter(idade >= 11 & idade <= 34) %>%
  mutate(
    # Padronizar a coluna Robson (valores como '1.0', '2A', '2B', etc.)
    Robson_cat = case_when(
      grepl("^10", Robson) ~ "10",
      grepl("^1", Robson)  ~ "1",
      grepl("^2", Robson)  ~ "2",
      grepl("^3", Robson)  ~ "3",
      grepl("^4", Robson)  ~ "4",
      grepl("^5", Robson)  ~ "5",
      grepl("^6", Robson)  ~ "6",
      grepl("^7", Robson)  ~ "7",
      grepl("^9", Robson)  ~ "9",
      TRUE ~ NA_character_
    )
  ) %>%
  filter(!is.na(Robson_cat)) %>%
  mutate(
    # Classificação por faixa etária
    faixa_etaria = case_when(
      idade >= 11 & idade <= 15 ~ "Adolescentes precoces (11-15)",
      idade >= 16 & idade <= 19 ~ "Adolescentes tardias (16-19)",
      idade >= 20 & idade <= 34 ~ "Adultas (20-34)"
    ),
    faixa_etaria_f = factor(faixa_etaria, levels = c(
      "Adolescentes precoces (11-15)",
      "Adolescentes tardias (16-19)",
      "Adultas (20-34)"
    )),
    # Grupo comparativo binário
    grupo_comparativo = ifelse(idade <= 19, "Adolescentes", "Adultas"),
    # Descrição da via de parto
    tipo_parto_desc = case_when(
      tipo_parto == 1 ~ "Normal (Vaginal Espontâneo)",
      tipo_parto == 2 ~ "Cesárea",
      tipo_parto == 3 ~ "Fórcipe (Instrumental)"
    ),
    # Robson como fator ordenado
    Robson_cat_f = factor(as.numeric(Robson_cat),
                          levels = c(1,2,3,4,5,6,7,9,10),
                          labels = paste("Grupo", c(1,2,3,4,5,6,7,9,10)))
  )
Mostrar código
# Resumo da amostra final
resumo <- dados_analise %>%
  count(faixa_etaria_f, name = "n") %>%
  mutate(pct = round(n / sum(n) * 100, 1))

cat("Total de registros para análise:", nrow(dados_analise), "\n\n")
Total de registros para análise: 6663 
Mostrar código
resumo %>%
  rename(`Faixa Etária` = faixa_etaria_f, `N` = n, `%` = pct) %>%
  kable(caption = "Distribuição da amostra por faixa etária") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Distribuição da amostra por faixa etária
Faixa Etária N %
Adolescentes precoces (11-15) 538 8.1
Adolescentes tardias (16-19) 830 12.5
Adultas (20-34) 5295 79.5
DicaNota sobre a Classificação de Robson

A Classificação de Robson divide as gestantes em 10 grupos mutuamente exclusivos com base em características obstétricas (paridade, apresentação fetal, idade gestacional, cicatriz uterina prévia e início do trabalho de parto). Os Grupos 4 e 5 (multíparas) naturalmente não contêm adolescentes precoces, e os Grupos 6, 7 e 9 apresentam números muito reduzidos de adolescentes.


2 Objetivo 1: Perfil Sociodemográfico

2.1 Distribuição Etária

Mostrar código
sumario_idade <- dados_analise %>%
  group_by(faixa_etaria_f) %>%
  summarise(
    N = n(),
    `Média` = round(mean(idade, na.rm = TRUE), 1),
    `DP` = round(sd(idade, na.rm = TRUE), 1),
    `Mín` = min(idade, na.rm = TRUE),
    `Mediana` = median(idade, na.rm = TRUE),
    `Máx` = max(idade, na.rm = TRUE),
    .groups = "drop"
  )

sumario_idade %>%
  rename(`Faixa Etária` = faixa_etaria_f) %>%
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Tabela 1: Estatísticas descritivas da idade por faixa etária
Faixa Etária N Média DP Mín Mediana Máx
Adolescentes precoces (11-15) 538 14.4 0.8 11 15 15
Adolescentes tardias (16-19) 830 16.6 0.6 16 16 19
Adultas (20-34) 5295 27.0 4.1 20 27 34

2.2 Escolaridade

Mostrar código
tab_escol <- dados_analise %>%
  filter(!is.na(escolaridade_cat)) %>%
  count(faixa_etaria_f, escolaridade_cat) %>%
  group_by(faixa_etaria_f) %>%
  mutate(pct = round(n / sum(n) * 100, 1),
         n_pct = paste0(n, " (", pct, "%)")) %>%
  select(faixa_etaria_f, escolaridade_cat, n_pct) %>%
  pivot_wider(names_from = faixa_etaria_f, values_from = n_pct, values_fill = "0 (0%)")

tab_escol %>%
  rename(`Escolaridade` = escolaridade_cat) %>%
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Tabela 2: Distribuição da escolaridade por faixa etária — n (%)
Escolaridade Adolescentes precoces (11-15) Adolescentes tardias (16-19) Adultas (20-34)
1 1 (0.2%) 1 (0.1%) 45 (1%)
2 379 (74%) 287 (37.2%) 1744 (37.8%)
3 132 (25.8%) 483 (62.6%) 2552 (55.4%)
4 0 (0%) 0 (0%) 267 (5.8%)

2.3 Estado Civil

Mostrar código
dados_analise <- dados_analise %>%
  mutate(novo_estado_civil = ifelse(estado_civil_cat == 3, 1, estado_civil_cat))

tab_ecivil <- dados_analise %>%
  filter(!is.na(novo_estado_civil)) %>%
  count(faixa_etaria_f, novo_estado_civil) %>%
  group_by(faixa_etaria_f) %>%
  mutate(pct = round(n / sum(n) * 100, 1),
         n_pct = paste0(n, " (", pct, "%)")) %>%
  select(faixa_etaria_f, novo_estado_civil, n_pct) %>%
  pivot_wider(names_from = faixa_etaria_f, values_from = n_pct, values_fill = "0 (0%)")

tab_ecivil %>%
  rename(`Estado Civil (código)` = novo_estado_civil) %>%
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Tabela 3: Distribuição do estado civil por faixa etária — n (%)
Estado Civil (código) Adolescentes precoces (11-15) Adolescentes tardias (16-19) Adultas (20-34)
1 373 (73.4%) 448 (58.3%) 1466 (29.3%)
2 8 (1.6%) 58 (7.6%) 1829 (36.5%)
4 127 (25%) 261 (34%) 1651 (33%)
5 0 (0%) 1 (0.1%) 57 (1.1%)
6 0 (0%) 0 (0%) 6 (0.1%)

3 Objetivo 2: Comparação das Vias de Parto e Classificação de Robson

Este é o objetivo principal da análise. Comparamos as taxas de parto vaginal espontâneo, cesárea e fórcipe entre as três faixas etárias, tanto de forma geral como estratificada pela Classificação de Robson.

3.1 Distribuição Geral das Vias de Parto

3.1.1 Tabela de frequências

Mostrar código
tab_geral <- dados_analise %>%
  count(faixa_etaria_f, tipo_parto_desc) %>%
  group_by(faixa_etaria_f) %>%
  mutate(
    total = sum(n),
    pct = round(n / total * 100, 1),
    n_pct = paste0(n, " (", pct, "%)")
  ) %>%
  select(faixa_etaria_f, tipo_parto_desc, n_pct) %>%
  pivot_wider(names_from = faixa_etaria_f, values_from = n_pct)

tab_geral %>%
  rename(`Via de Parto` = tipo_parto_desc) %>%
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE) %>%
  add_header_above(c(" " = 1, "Faixa Etária" = 3))
Tabela 4: Vias de parto por faixa etária — n (%)
Faixa Etária
Via de Parto Adolescentes precoces (11-15) Adolescentes tardias (16-19) Adultas (20-34)
Cesárea 166 (30.9%) 267 (32.2%) 3314 (62.6%)
Fórcipe (Instrumental) 134 (24.9%) 229 (27.6%) 545 (10.3%)
Normal (Vaginal Espontâneo) 238 (44.2%) 334 (40.2%) 1436 (27.1%)

3.1.2 Teste Qui-Quadrado (Associação Geral)

Testamos a hipótese nula de que a distribuição das vias de parto é independente da faixa etária:

\[H_0: \text{Via de parto} \perp \text{Faixa etária}\] \[H_1: \text{Existe associação entre via de parto e faixa etária}\]

Mostrar código
tabela_parto <- table(dados_analise$tipo_parto_desc, dados_analise$faixa_etaria_f)
chi2_geral <- chisq.test(tabela_parto)

cat("Teste Qui-Quadrado de Pearson\n")
Teste Qui-Quadrado de Pearson
Mostrar código
cat("  X² =", round(chi2_geral$statistic, 2), "\n")
  X² = 476.89 
Mostrar código
cat("  gl =", chi2_geral$parameter, "\n")
  gl = 4 
Mostrar código
cat("  p  =", format.pval(chi2_geral$p.value, digits = 4), "\n\n")
  p  = < 2.2e-16 
Mostrar código
if (chi2_geral$p.value < 0.001) {
  cat("→ Resultado: Associação estatisticamente significativa (p < 0,001)\n")
}
→ Resultado: Associação estatisticamente significativa (p < 0,001)
ImportanteResultado

O teste qui-quadrado revela uma associação altamente significativa entre a faixa etária e a via de parto (p < 0,001), indicando que a distribuição das vias de parto difere substancialmente entre adolescentes precoces, tardias e adultas.

3.1.3 Resíduos Padronizados Ajustados

Os resíduos padronizados ajustados indicam quais células da tabela de contingência mais contribuem para a associação (|resíduo| > 2 é considerado significativo):

Mostrar código
residuos <- round(chi2_geral$stdres, 2)

as.data.frame.matrix(residuos) %>%
  rownames_to_column("Via de Parto") %>%
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
Tabela 5: Resíduos padronizados ajustados — valores > |2| indicam desvio significativo do esperado
Via de Parto Adolescentes precoces (11-15) Adolescentes tardias (16-19) Adultas (20-34)
Cesárea -12.38 -14.94 20.56
Fórcipe (Instrumental) 7.95 12.53 -15.61
Normal (Vaginal Espontâneo) 7.43 6.78 -10.56

3.1.4 Figura: Distribuição Geral

Mostrar código
fig1_data <- dados_analise %>%
  count(faixa_etaria_f, tipo_parto_desc) %>%
  group_by(faixa_etaria_f) %>%
  mutate(pct = n / sum(n) * 100) %>%
  ungroup()

ggplot(fig1_data, aes(x = faixa_etaria_f, y = pct, fill = tipo_parto_desc)) +
  geom_col(position = "stack", width = 0.7, color = "white", linewidth = 0.3) +
  geom_text(aes(label = paste0(round(pct, 1), "%")),
            position = position_stack(vjust = 0.5),
            size = 3.5, color = "white", fontface = "bold") +
  scale_fill_manual(values = cores_parto, name = "Via de Parto") +
  scale_y_continuous(expand = expansion(mult = c(0, 0.02))) +
  labs(
    title = "Distribuição das Vias de Parto por Faixa Etária",
    subtitle = "Coorte HC-FMUSP (1995–2017)",
    x = NULL, y = "Proporção (%)"
  ) +
  tema_pub +
  theme(axis.text.x = element_text(angle = 0, hjust = 0.5))
Figura 1: Distribuição proporcional das vias de parto por faixa etária

3.2 Estratificação por Classificação de Robson

3.2.1 Tabela Cruzada: Robson × Faixa Etária × Via de Parto

Mostrar código
tab_robson <- dados_analise %>%
  count(Robson_cat_f, faixa_etaria_f, tipo_parto_desc) %>%
  group_by(Robson_cat_f, faixa_etaria_f) %>%
  mutate(
    total = sum(n),
    pct = round(n / total * 100, 1),
    n_pct = paste0(n, " (", pct, "%)")
  ) %>%
  select(Robson_cat_f, faixa_etaria_f, tipo_parto_desc, n_pct) %>%
  pivot_wider(names_from = tipo_parto_desc, values_from = n_pct, values_fill = "0 (0%)") %>%
  ungroup()

tab_robson %>%
  rename(`Grupo Robson` = Robson_cat_f, `Faixa Etária` = faixa_etaria_f) %>%
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = TRUE, font_size = 12) %>%
  collapse_rows(columns = 1, valign = "top")
Tabela 6: Vias de parto por Grupo de Robson e faixa etária — n (%)
Grupo Robson Faixa Etária Cesárea Fórcipe (Instrumental) Normal (Vaginal Espontâneo)
Grupo 1 Adolescentes precoces (11-15) 109 (27.7%) 96 (24.4%) 188 (47.8%)
Adolescentes tardias (16-19) 138 (27.1%) 169 (33.2%) 202 (39.7%)
Adultas (20-34) 147 (37.6%) 132 (33.8%) 112 (28.6%)
Grupo 2 Adolescentes precoces (11-15) 25 (47.2%) 22 (41.5%) 6 (11.3%)
Adolescentes tardias (16-19) 47 (58%) 22 (27.2%) 12 (14.8%)
Adultas (20-34) 674 (71.8%) 157 (16.7%) 108 (11.5%)
Grupo 3 Adolescentes precoces (11-15) 11 (42.3%) 5 (19.2%) 10 (38.5%)
Adolescentes tardias (16-19) 26 (25.2%) 20 (19.4%) 57 (55.3%)
Adultas (20-34) 153 (19.3%) 95 (12%) 544 (68.7%)
Grupo 4 Adultas (20-34) 206 (48.6%) 39 (9.2%) 179 (42.2%)
Grupo 5 Adultas (20-34) 1048 (89.2%) 54 (4.6%) 73 (6.2%)
Grupo 6 Adolescentes precoces (11-15) 1 (100%) 0 (0%) 0 (0%)
Adolescentes tardias (16-19) 1 (100%) 0 (0%) 0 (0%)
Adultas (20-34) 37 (94.9%) 0 (0%) 2 (5.1%)
Grupo 7 Adolescentes precoces (11-15) 4 (100%) 0 (0%) 0 (0%)
Adolescentes tardias (16-19) 17 (94.4%) 0 (0%) 1 (5.6%)
Adultas (20-34) 273 (90.4%) 0 (0%) 29 (9.6%)
Grupo 9 Adolescentes precoces (11-15) 5 (100%) 0 (0%) 0 (0%)
Adolescentes tardias (16-19) 2 (100%) 0 (0%) 0 (0%)
Adultas (20-34) 36 (90%) 0 (0%) 4 (10%)
Grupo 10 Adolescentes precoces (11-15) 11 (19.6%) 11 (19.6%) 34 (60.7%)
Adolescentes tardias (16-19) 36 (31%) 18 (15.5%) 62 (53.4%)
Adultas (20-34) 740 (62%) 68 (5.7%) 385 (32.3%)

3.2.2 Figura: Vias de Parto Facetadas por Grupo de Robson

Mostrar código
# Filtrar grupos com dados suficientes
grupos_suficientes <- dados_analise %>%
  count(Robson_cat_f, faixa_etaria_f) %>%
  group_by(Robson_cat_f) %>%
  summarise(n_faixas = n_distinct(faixa_etaria_f), n_total = sum(n), .groups = "drop") %>%
  filter(n_faixas >= 2, n_total >= 20) %>%
  pull(Robson_cat_f)

fig2_data <- dados_analise %>%
  filter(Robson_cat_f %in% grupos_suficientes) %>%
  count(Robson_cat_f, faixa_etaria_f, tipo_parto_desc) %>%
  group_by(Robson_cat_f, faixa_etaria_f) %>%
  mutate(pct = n / sum(n) * 100) %>%
  ungroup()

ggplot(fig2_data, aes(x = faixa_etaria_f, y = pct, fill = tipo_parto_desc)) +
  geom_col(position = "stack", width = 0.75, color = "white", linewidth = 0.3) +
  facet_wrap(~ Robson_cat_f, scales = "free_x", ncol = 3) +
  scale_fill_manual(values = cores_parto, name = "Via de Parto") +
  scale_y_continuous(expand = expansion(mult = c(0, 0.02))) +
  labs(
    title = "Vias de Parto por Faixa Etária e Classificação de Robson",
    x = NULL, y = "Proporção (%)"
  ) +
  tema_pub +
  theme(axis.text.x = element_text(angle = 45, hjust = 1, size = 7))
Figura 2: Proporção das vias de parto por faixa etária em cada Grupo de Robson (apenas grupos com ≥ 2 faixas etárias e n ≥ 20)

3.3 Testes Estatísticos por Grupo de Robson

Para cada grupo de Robson, testamos a associação entre faixa etária e via de parto. Utilizamos o teste qui-quadrado quando todas as frequências esperadas são ≥ 5, e o teste exato de Fisher (com simulação de Monte Carlo, B = 10.000) quando alguma célula apresenta frequência esperada < 5.

Mostrar código
robson_groups <- sort(unique(as.numeric(dados_analise$Robson_cat)))
resultados_testes <- list()

for (grp in robson_groups) {
  sub <- dados_analise %>% filter(as.numeric(Robson_cat) == grp)
  n_sub <- nrow(sub)
  faixas_presentes <- length(unique(sub$faixa_etaria_f))
  partos_presentes <- length(unique(sub$tipo_parto_desc))

  if (faixas_presentes < 2 || partos_presentes < 2 || n_sub < 10) {
    resultados_testes[[as.character(grp)]] <- data.frame(
      Robson = grp, n = n_sub, Teste = "Não aplicável",
      Estatística = NA, gl = NA, `p-valor` = NA,
      Significância = "—", check.names = FALSE
    )
    next
  }

  tab <- table(sub$tipo_parto_desc, sub$faixa_etaria_f)
  tab <- tab[rowSums(tab) > 0, colSums(tab) > 0, drop = FALSE]

  if (min(dim(tab)) < 2) {
    resultados_testes[[as.character(grp)]] <- data.frame(
      Robson = grp, n = n_sub, Teste = "Não aplicável",
      Estatística = NA, gl = NA, `p-valor` = NA,
      Significância = "—", check.names = FALSE
    )
    next
  }

  expected <- chisq.test(tab)$expected
  if (any(expected < 5)) {
    test_result <- fisher.test(tab, simulate.p.value = TRUE, B = 10000)
    test_name <- "Fisher (MC)"
    stat_val <- NA
    df_val <- NA
  } else {
    test_result <- chisq.test(tab)
    test_name <- "Qui-quadrado"
    stat_val <- round(test_result$statistic, 3)
    df_val <- test_result$parameter
  }

  p_val <- test_result$p.value
  sig <- ifelse(p_val < 0.001, "***",
         ifelse(p_val < 0.01, "**",
         ifelse(p_val < 0.05, "*", "ns")))

  resultados_testes[[as.character(grp)]] <- data.frame(
    Robson = grp, n = n_sub, Teste = test_name,
    Estatística = stat_val, gl = df_val,
    `p-valor` = round(p_val, 4),
    Significância = sig, check.names = FALSE
  )
}

tab_testes <- bind_rows(resultados_testes)

tab_testes %>%
  mutate(Robson = paste("Grupo", Robson)) %>%
  kable(align = "lrlrrrl") %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE) %>%
  footnote(general = "*** p < 0,001; ** p < 0,01; * p < 0,05; ns = não significativo; MC = Monte Carlo (B=10.000)")
Tabela 7: Testes de associação entre via de parto e faixa etária — por Grupo de Robson
Robson n Teste Estatística gl p-valor Significância
X-squared...1 Grupo 1 1293 Qui-quadrado 35.386 4 0.0000 ***
X-squared...2 Grupo 2 1073 Qui-quadrado 26.522 4 0.0000 ***
...3 Grupo 3 921 Fisher (MC) NA NA 0.0017 **
...4 Grupo 4 424 Não aplicável NA NA NA
...5 Grupo 5 1175 Não aplicável NA NA NA
...6 Grupo 6 41 Fisher (MC) NA NA 1.0000 ns
...7 Grupo 7 324 Fisher (MC) NA NA 1.0000 ns
...8 Grupo 9 47 Fisher (MC) NA NA 1.0000 ns
...9 Grupo 10 1365 Fisher (MC) NA NA 0.0001 ***
Note:
*** p < 0,001; ** p < 0,01; * p < 0,05; ns = não significativo; MC = Monte Carlo (B=10.000)
ImportanteResultados dos Testes por Grupo
  • Grupos 1, 2 e 3: Associação altamente significativa (p < 0,001) entre faixa etária e via de parto.
  • Grupo 10: Associação altamente significativa (p < 0,001).
  • Grupos 6, 7 e 9: Sem associação significativa, porém com amostras muito pequenas de adolescentes (n < 20), limitando o poder estatístico.
  • Grupos 4 e 5: Teste não aplicável — contêm exclusivamente adultas (multíparas).

3.4 Taxa de Cesárea por Grupo de Robson e Faixa Etária

Mostrar código
tab_cesarea <- dados_analise %>%
  mutate(cesarea = ifelse(tipo_parto == 2, 1, 0)) %>%
  group_by(Robson_cat_f, faixa_etaria_f) %>%
  summarise(
    N = n(),
    `Cesáreas` = sum(cesarea),
    `Taxa (%)` = round(sum(cesarea) / n() * 100, 1),
    .groups = "drop"
  )

tab_cesarea %>%
  rename(`Grupo Robson` = Robson_cat_f, `Faixa Etária` = faixa_etaria_f) %>%
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE) %>%
  collapse_rows(columns = 1, valign = "top")
Tabela 8: Taxa de cesárea por Grupo de Robson e faixa etária
Grupo Robson Faixa Etária N Cesáreas Taxa (%)
Grupo 1 Adolescentes precoces (11-15) 393 109 27.7
Adolescentes tardias (16-19) 509 138 27.1
Adultas (20-34) 391 147 37.6
Grupo 2 Adolescentes precoces (11-15) 53 25 47.2
Adolescentes tardias (16-19) 81 47 58.0
Adultas (20-34) 939 674 71.8
Grupo 3 Adolescentes precoces (11-15) 26 11 42.3
Adolescentes tardias (16-19) 103 26 25.2
Adultas (20-34) 792 153 19.3
Grupo 4 Adultas (20-34) 424 206 48.6
Grupo 5 Adultas (20-34) 1175 1048 89.2
Grupo 6 Adolescentes precoces (11-15) 1 1 100.0
Adolescentes tardias (16-19) 1 1 100.0
Adultas (20-34) 39 37 94.9
Grupo 7 Adolescentes precoces (11-15) 4 4 100.0
Adolescentes tardias (16-19) 18 17 94.4
Adultas (20-34) 302 273 90.4
Grupo 9 Adolescentes precoces (11-15) 5 5 100.0
Adolescentes tardias (16-19) 2 2 100.0
Adultas (20-34) 40 36 90.0
Grupo 10 Adolescentes precoces (11-15) 56 11 19.6
Adolescentes tardias (16-19) 116 36 31.0
Adultas (20-34) 1193 740 62.0

3.4.1 Figura: Mapa de Calor da Taxa de Cesárea

Mostrar código
fig3_data <- tab_cesarea %>%
  filter(Robson_cat_f %in% grupos_suficientes)

ggplot(fig3_data, aes(x = faixa_etaria_f, y = Robson_cat_f, fill = `Taxa (%)`)) +
  geom_tile(color = "white", linewidth = 1) +
  geom_text(aes(label = paste0(`Taxa (%)`, "%\n(n=", N, ")")),
            size = 3.2, fontface = "bold") +
  scale_fill_gradient2(
    low = "#2a9d8f", mid = "#f4a261", high = "#e76f51",
    midpoint = 50, name = "Taxa de\nCesárea (%)",
    limits = c(0, 100)
  ) +
  labs(
    title = "Taxa de Cesárea por Grupo de Robson e Faixa Etária",
    subtitle = "Coorte HC-FMUSP (1995–2017)",
    x = NULL, y = NULL
  ) +
  tema_pub +
  theme(
    axis.text.x = element_text(angle = 30, hjust = 1, size = 10),
    panel.grid = element_blank()
  )
Figura 3: Mapa de calor da taxa de cesárea (%) por Grupo de Robson e faixa etária. Células verdes indicam taxas mais baixas; alaranjadas/vermelhas indicam taxas mais altas.

3.4.2 Figura: Adolescentes vs. Adultas (Comparação Direta)

Mostrar código
fig4_data <- dados_analise %>%
  mutate(cesarea = ifelse(tipo_parto == 2, 1, 0)) %>%
  group_by(Robson_cat_f, grupo_comparativo) %>%
  summarise(
    n = n(),
    taxa = mean(cesarea) * 100,
    se = sqrt(taxa / 100 * (1 - taxa / 100) / n) * 100,
    .groups = "drop"
  ) %>%
  filter(Robson_cat_f %in% grupos_suficientes)

ggplot(fig4_data, aes(x = Robson_cat_f, y = taxa, fill = grupo_comparativo)) +
  geom_col(position = position_dodge(width = 0.8), width = 0.7,
           color = "white", linewidth = 0.3) +
  geom_errorbar(aes(ymin = pmax(taxa - 1.96 * se, 0),
                    ymax = pmin(taxa + 1.96 * se, 100)),
                position = position_dodge(width = 0.8),
                width = 0.25, linewidth = 0.4) +
  geom_text(aes(label = paste0(round(taxa, 1), "%")),
            position = position_dodge(width = 0.8), vjust = -0.8, size = 2.8) +
  scale_fill_manual(
    values = c("Adolescentes" = "#e63946", "Adultas" = "#2a9d8f"),
    name = "Grupo"
  ) +
  scale_y_continuous(expand = expansion(mult = c(0, 0.12)), limits = c(0, NA)) +
  labs(
    title = "Taxa de Cesárea: Adolescentes vs. Adultas por Grupo de Robson",
    subtitle = "Barras de erro = IC 95%",
    x = NULL, y = "Taxa de Cesárea (%)"
  ) +
  tema_pub
Figura 4: Comparação da taxa de cesárea entre adolescentes e adultas por Grupo de Robson (com intervalos de confiança de 95%)

3.5 Interpretação dos Resultados — Objetivo 2

NotaSíntese dos Achados — Objetivo 2

Achados gerais:

  • A taxa global de cesárea é menor entre adolescentes (31.7%) do que entre adultas (62.6%).
  • Em contrapartida, as adolescentes apresentam taxas mais elevadas de parto por fórcipe.
  • A associação entre faixa etária e via de parto é estatisticamente significativa (χ² de Pearson, p < 0,001).

Por Grupo de Robson:

  • Grupo 1 (Nulíparas, feto único cefálico, IG ≥ 37 sem, trabalho espontâneo): Adolescentes precoces e tardias têm taxas de cesárea similares (~27%), enquanto adultas têm taxa significativamente maior (37,6%).
  • Grupo 2 (Nulíparas, feto único cefálico, IG ≥ 37 sem, induzidas ou cesárea eletiva): Gradiente crescente com a idade — precoces 47,2%, tardias 58,0%, adultas 71,8%.
  • Grupo 3 (Multíparas sem cicatriz, feto cefálico, IG ≥ 37 sem, espontâneo): Padrão invertido — adolescentes precoces com a maior taxa (42,3%), seguidas de tardias (25,2%) e adultas (19,3%).
  • Grupo 10 (Gestação única cefálica ≤ 36 semanas): Adolescentes com taxas muito menores (19,6-31,0%) vs. adultas (62,0%) — diferença altamente significativa.

4 Objetivo 3: Mapeamento de Indicações Operatórias

Análise das 5 principais indicações clínicas para cesárea e fórcipe, comparando adolescentes e adultas.

Mostrar código
dados_operatorio <- dados_analise %>%
  filter(tipo_parto %in% c(2, 3)) %>%
  mutate(indicacao_desc = ifelse(
    is.na(indicacao_cat) | indicacao_cat == "",
    "Não informada", indicacao_cat
  ))

indicacoes_summary <- dados_operatorio %>%
  group_by(tipo_parto_desc, grupo_comparativo, indicacao_desc) %>%
  tally() %>%
  arrange(tipo_parto_desc, grupo_comparativo, desc(n)) %>%
  group_by(tipo_parto_desc, grupo_comparativo) %>%
  slice_max(order_by = n, n = 5) %>%
  mutate(
    `%` = round((n / sum(n)) * 100, 1),
    n_pct = paste0(n, " (", `%`, "%)")
  ) %>%
  ungroup()

indicacoes_summary %>%
  select(`Via de Parto` = tipo_parto_desc,
         Grupo = grupo_comparativo,
         Indicação = indicacao_desc,
         `n (%)` = n_pct) %>%
  kable() %>%
  kable_styling(bootstrap_options = c("striped", "hover", "condensed"),
                full_width = FALSE) %>%
  collapse_rows(columns = 1:2, valign = "top")
Tabela 9: Top 5 indicações clínicas para partos operatórios (cesárea e fórcipe) por grupo etário
Via de Parto Grupo Indicação n (%)
Cesárea Adolescentes Não informada 264 (68.4%)
Distocia funcional 37 (9.6%)
Mecônio 35 (9.1%)
Sofrimento fetal 28 (7.3%)
Desproporção céfalo-pélvica 22 (5.7%)
Adultas Sofrimento fetal 552 (27.6%)
Não informada 514 (25.7%)
Patologia materna 381 (19.1%)
Distocia funcional 288 (14.4%)
Iteratividade 263 (13.2%)
Fórcipe (Instrumental) Adolescentes Não informada 216 (60.2%)
Alívio materno-fetal 62 (17.3%)
Abreviação do período expulsivo 41 (11.4%)
Distocia de rotação 36 (10%)
Mecônio 4 (1.1%)
Adultas Alívio materno-fetal 208 (39.4%)
Abreviação do período expulsivo 178 (33.7%)
Distocia de rotação 95 (18%)
Não informada 37 (7%)
Sofrimento fetal 10 (1.9%)

4.0.1 Figura: Indicações para Cesárea

Mostrar código
ind_ces <- indicacoes_summary %>%
  filter(tipo_parto_desc == "Cesárea")

ggplot(ind_ces, aes(x = reorder(indicacao_desc, n), y = `%`, fill = grupo_comparativo)) +
  geom_col(position = position_dodge(width = 0.8), width = 0.7) +
  geom_text(aes(label = paste0(`%`, "%")),
            position = position_dodge(width = 0.8), hjust = -0.1, size = 3) +
  coord_flip() +
  scale_fill_manual(
    values = c("Adolescentes" = "#e63946", "Adultas" = "#2a9d8f"),
    name = "Grupo"
  ) +
  scale_y_continuous(expand = expansion(mult = c(0, 0.15))) +
  labs(
    title = "Principais Indicações para Cesárea",
    subtitle = "Proporção dentro de cada grupo etário",
    x = NULL, y = "Proporção (%)"
  ) +
  tema_pub +
  theme(axis.text.x = element_text(angle = 0, hjust = 0.5))
Figura 5: Top 5 indicações clínicas para cesárea — Adolescentes vs. Adultas

4.0.2 Figura: Indicações para Fórcipe

Mostrar código
ind_forc <- indicacoes_summary %>%
  filter(tipo_parto_desc == "Fórcipe (Instrumental)")

ggplot(ind_forc, aes(x = reorder(indicacao_desc, n), y = `%`, fill = grupo_comparativo)) +
  geom_col(position = position_dodge(width = 0.8), width = 0.7) +
  geom_text(aes(label = paste0(`%`, "%")),
            position = position_dodge(width = 0.8), hjust = -0.1, size = 3) +
  coord_flip() +
  scale_fill_manual(
    values = c("Adolescentes" = "#e63946", "Adultas" = "#2a9d8f"),
    name = "Grupo"
  ) +
  scale_y_continuous(expand = expansion(mult = c(0, 0.15))) +
  labs(
    title = "Principais Indicações para Fórcipe",
    subtitle = "Proporção dentro de cada grupo etário",
    x = NULL, y = "Proporção (%)"
  ) +
  tema_pub +
  theme(axis.text.x = element_text(angle = 0, hjust = 0.5))
Figura 6: Top 5 indicações clínicas para fórcipe — Adolescentes vs. Adultas

5 Objetivo 4: Complicações Maternas

Mostrar código
if ("compli_parto" %in% colnames(dados_analise)) {
  tab_compli <- dados_analise %>%
    filter(!is.na(compli_parto)) %>%
    count(grupo_comparativo, compli_parto) %>%
    group_by(grupo_comparativo) %>%
    mutate(
      pct = round(n / sum(n) * 100, 1),
      n_pct = paste0(n, " (", pct, "%)")
    ) %>%
    select(grupo_comparativo, compli_parto, n_pct) %>%
    pivot_wider(names_from = grupo_comparativo, values_from = n_pct, values_fill = "0 (0%)")

  tab_compli %>%
    rename(Complicação = compli_parto) %>%
    kable() %>%
    kable_styling(bootstrap_options = c("striped", "hover"), full_width = FALSE)
} else {
  cat("Variável 'compli_parto' não encontrada na base de dados.\n")
}
Tabela 10: Complicações no parto por grupo etário — n (%)
Complicação Adolescentes Adultas
Cefaleia Pos-Raqui 1 (0.2%) 0 (0%)
Deiscência 14 (2.4%) 0 (0%)
Febre a esclarecer 6 (1%) 1 (0%)
Fissura mamária 3 (0.5%) 0 (0%)
Hematoma 1 (0.2%) 0 (0%)
Hemorragia 1 (0.2%) 0 (0%)
Hipotonia 1 (0.2%) 0 (0%)
Infecção 11 (1.9%) 0 (0%)
Laceração 3 (0.5%) 0 (0%)
Mastite 4 (0.7%) 0 (0%)
Outros 5 (0.9%) 0 (0%)
Retenção Placentária 2 (0.3%) 0 (0%)
Sangramento 5 (0.9%) 0 (0%)
Sem complicações 515 (90%) 4752 (95.7%)
Acretismo placentário 0 (0%) 21 (0.4%)
Atonia uterina 0 (0%) 38 (0.8%)
Histerectomia 0 (0%) 9 (0.2%)
Lacerações do canal de Parto 0 (0%) 136 (2.7%)
Lacerações do ânus e reto 0 (0%) 4 (0.1%)
Lesão vesical 0 (0%) 1 (0%)
Ligaduras das artérias hipogástricas 0 (0%) 2 (0%)

6 Informações da Sessão

Documento renderizado em: 08/04/2026 às 08:05:51 
R version 4.5.3 (2026-03-11)
Platform: aarch64-apple-darwin20
Running under: macOS Tahoe 26.4

Matrix products: default
BLAS:   /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRblas.0.dylib 
LAPACK: /Library/Frameworks/R.framework/Versions/4.5-arm64/Resources/lib/libRlapack.dylib;  LAPACK version 3.12.1

locale:
[1] C.UTF-8/C.UTF-8/C.UTF-8/C/C.UTF-8/C.UTF-8

time zone: America/Edmonton
tzcode source: internal

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
 [1] kableExtra_1.4.0 knitr_1.51       here_1.0.2       readxl_1.4.5    
 [5] lubridate_1.9.5  forcats_1.0.1    stringr_1.6.0    dplyr_1.2.0     
 [9] purrr_1.2.1      readr_2.2.0      tidyr_1.3.2      tibble_3.3.1    
[13] ggplot2_4.0.2    tidyverse_2.0.0 

loaded via a namespace (and not attached):
 [1] generics_0.1.4     xml2_1.5.2         stringi_1.8.7      hms_1.1.4         
 [5] digest_0.6.39      magrittr_2.0.4     evaluate_1.0.5     grid_4.5.3        
 [9] timechange_0.4.0   RColorBrewer_1.1-3 fastmap_1.2.0      cellranger_1.1.0  
[13] rprojroot_2.1.1    jsonlite_2.0.0     viridisLite_0.4.3  scales_1.4.0      
[17] textshaping_1.0.5  cli_3.6.5          rlang_1.1.7        withr_3.0.2       
[21] yaml_2.3.12        otel_0.2.0         tools_4.5.3        tzdb_0.5.0        
[25] vctrs_0.7.1        R6_2.6.1           lifecycle_1.0.5    htmlwidgets_1.6.4 
[29] pkgconfig_2.0.3    pillar_1.11.1      gtable_0.3.6       glue_1.8.0        
[33] systemfonts_1.3.2  xfun_0.56          tidyselect_1.2.1   rstudioapi_0.18.0 
[37] farver_2.1.2       htmltools_0.5.9    labeling_0.4.3     rmarkdown_2.30    
[41] svglite_2.2.2      compiler_4.5.3     S7_0.2.1