Clusterização - DataSUS
Introdução
A seguir temos uma AnĆ”lise de dados sobre Ćbitos maternos durante a gravidez, parto e o puerpĆ©rio de mulheres com idades entre 10 a 49 anos , ocorridos nos municĆpios do estado do Rio de Janeiro, entre 2012 e 2022.
Em seguida, utilizei um mĆ©todo de segmentação chamado cluster hierĆ”rquico,que permitirĆ” agrupar os municĆpios em categorias e estabelecer relaƧƵes de similaridade e hierarquia entre eles.
Os dados foram coletados de diversas fontes: DataSUS, IBGE e o site Atlas.
OBS: Este projeto foi, originalmente, desenvolvido como uma tarefa avaliativa, da disciplina de Introdução à Banco de Dados (FEA-RP | USP).
Diretório
## [1] "C:/0.Projetos/4.DataSUS/0.Github"
Importar pacotes
library(tidyverse)
library(readxl) # carregar arquivos .xlsx (Excel)
library(openxlsx) # Salvar tabela no formato .xlsx (Excel)
library(DT) # Função datatable()
library(kableExtra) #Visualização (parecido com o pacote "DT")
library(sf) # dados espaciais
library(geobr) # dados espaciais
library(forcats) # Ordenar os valores no grƔfico ggplot()
library(plotly)# Usar ggplotly()
library(scales) # Usar scale_x_continuous()
library(viridis) # Paleta de cores
library(gridExtra) # usar no grid.arrange()
library(grid)
library(Hmisc) # calcular correlação --> rcorr()
library(ggcorrplot) # grafico de correlação --> ggcorrplot()Carregar dados principais
dados_socioeconomicos <- read_excel("../Dados/Dados_Economicos/dados_socioeconomicos.xlsx")
dados_socioeconomicos <- dados_socioeconomicos %>%
mutate(
Codmun7 = as.character(Codmun7),
Codmun6 = as.character(Codmun6),
)tabela_municipio <- read_excel("../Dados/Dados_Transformados/Transformacao_parte_1/tabela_municipio.xlsx") %>%
mutate(
Codmun7 = as.character(Codmun7),
Codmun6 = as.character(Codmun6),
)taxa_media_obito_1 <- read_excel("../Dados/Dados_Economicos/Dados_Populacao/2.Populacao_feminina_por_faixa_etaria/taxa_media_obito_1.xlsx")
taxa_media_obito_2 <- read_excel("../Dados/Dados_Economicos/Dados_Populacao/2.Populacao_feminina_por_faixa_etaria/taxa_media_obito_2.xlsx")
obitos_em_relacao_a_populacao_1 <- read_excel("../Dados/Dados_Economicos/Dados_Populacao/2.Populacao_feminina_por_faixa_etaria/obitos_em_relacao_a_populacao_1.xlsx")Carregar dados auxiliares
dados_IBGE <- read_excel("../Dados/Dados_Economicos/Dados_IBGE_2022_v3_com_dict.xlsx", sheet=2)%>%
mutate(
Codmun7 = as.character(Codmun7),
Codmun6 = as.character(Codmun6),
)
populacao_2022 <- read_excel("../Dados/Dados_Economicos/Dados_Raca_Cor_municipio/Pop_Raca_Cor_Faixa_Etaria_por_municipio_2010_e_2022.xlsx", sheet=4) %>%
.[, !grepl("2010$", colnames(.))] %>% # Remover colunas que terminam com 2010
mutate(
Codmun7 = as.character(Codmun7)
)Visualizar tabelas
Tabela municĆpios
1. Qual a quantidade de óbitos maternos em cada categoria?
Neste tópico, vamos analisar a quantidade total de óbitos, por categoria, ocorridos entre 2012 à 2022.
O puerpério até 42 dias após o parto é o momento em que ocorrem mais mortes. Ao investigarmos as causas dos óbitos desta categoria, vemos que problemas relacionados a doenças virais, são as maiores causas de óbito.
Isso provavelmente oconteceu por causa da COVID-19, possivelmente, a paciente foi para o hospital ter o bebĆŖ e acabou contraindo Covid.
Prova disso Ć© que as causas do óbito, antes da pandemia, eram diferentes. Sendo a maior delas relacionadas ao aparelho circulatório, por exemplo, hipertensĆ£o pós-parto ou insuficiĆŖncia cardĆaca.
Outras causas estão relacionadas a hemorragias, infecções pós-parto, doenças respiratórias, convulsões que ocorrem com mulheres com pré-eclâmpsia.
quantidade_total <- tabela_municipio %>%
# Agrupar pela coluna "Momento_do_Obito"
group_by(Momento_do_Obito) %>%
reframe(
Total_entre_2012_2019 = sum(Ano_do_Obito >= 2012 & Ano_do_Obito <=2019),
Total_entre_2012_2022 = sum(Ano_do_Obito >= 2012 & Ano_do_Obito <=2022)) %>%
mutate(
Momento_do_Obito = ifelse(is.na(Momento_do_Obito), "NA", Momento_do_Obito))%>%
arrange(desc(Total_entre_2012_2022)) # Ordenar pelo valor da coluna "Total"datatable(quantidade_total,
options=list(dom="t"), # Exibir só a tabela
caption = "Quantidade Total de óbitos maternos, por categoria"
) quantidade_total %>%
ggplot() +
geom_col(aes(
x=Total_entre_2012_2022,
y=fct_reorder(Momento_do_Obito, Total_entre_2012_2022)), #fct_reorder() -> Ordenar o eixo y
fill = "#381850") +
labs(
x = "Total (Contagem)",
y = "Momento do Ćbito Materno",
title = "Total de óbitos materno, entre 2012 à 2022, no estado do RJ",
subtitle = "Ocorrem mais óbitos no puérperio de até 42 dias após o parto"
)+
geom_text(aes(x=Total_entre_2012_2022, y=Momento_do_Obito, label = Total_entre_2012_2022, hjust=-0.3), size=3.0)+
scale_x_continuous(expand = c(0.1, 0)) + # Expande o eixo X para dar mais espaƧo
theme_minimal() +
theme(
plot.title.position = "plot" # Posiciona o tĆtulo no canto do plot
)# theme(
# plot.title = element_text(hjust = 0), # Alinha o texto Ć esquerda
# plot.subtitle = element_text(hjust = 0),
# plot.title.position = "plot" # Posiciona o tĆtulo no canto do plot
# )Investigar as causas do óbito no Puerpério, ocorridos até 42 dias após o parto
Entre 2012 Ć 2022
2. Qual a quantidade de óbitos maternos em cada categoria, por ano?
Agora, vamos analisar a quantidade total de óbitos anuais, por
categoria.
Ć possĆvel notar que todas as categorias se mantiveram
estƔveis atƩ 2019. A partir de 2020, houve um drƔstico aumento,
principalmente, em óbitos durante a gravidez e o puérperio de até 42
dias após o parto. E, conforme dito no tópico anterior, isso
provavelmente aconteceu por causa da Pandemia.
quantidade_total_anual <- tabela_municipio %>%
group_by(Ano_do_Obito, Momento_do_Obito) %>%
reframe(Total_de_Obitos_anuais = n()) %>%
mutate(Momento_do_Obito = ifelse(is.na(Momento_do_Obito), "NA", Momento_do_Obito)) %>%
arrange(desc(Total_de_Obitos_anuais)) datatable(quantidade_total_anual,
options = list(PageLength = 10),
caption = "Total de óbitos maternos anuais, por categoria, ocorridos entre 2012 e 2022, no estado do RJ")quant_anual <-quantidade_total_anual %>%
ggplot(aes(x = Ano_do_Obito, y = Total_de_Obitos_anuais, color = Momento_do_Obito)) + #, group = Momento_do_Obito
geom_line() +
labs(
title = "Total anual de óbitos materno, entre 2012 à 2022, no estado do RJ",
x = "Ano do Ćbito",
y = "Total de Ćbitos Anuais"
) +
scale_x_continuous(
breaks = seq(min(quantidade_total_anual$Ano_do_Obito), max(quantidade_total_anual$Ano_do_Obito), by=1),
labels = label_number(accuracy = 1)) + # Remover casas decimais e usar ponto
theme_minimal()+
theme(
plot.title = element_text(size = 12), # Ajusta o tamanho da letra do tĆtulo
)
ggplotly(quant_anual,width = 750)%>%
layout(legend = list(x = 0.5,
y = -0.5,
xanchor = "center",
yanchor = "bottom",
orientation = "h"))%>%
config(displayModeBar = FALSE) %>% # Desativa a barra de ferramentas superior e o zoom com o scroll
layout(
xaxis = list(fixedrange = TRUE), # Desativa o zoom no eixo X
yaxis = list(fixedrange = TRUE) # Desativa o zoom no eixo Y
)#%>%
# config(displayModeBar = FALSE, scrollZoom = FALSE) %>% # Desativa a barra de ferramentas superior e o zoom com o scroll
# layout(
# dragmode = "pan", # Desativa o zoom e pan com dragmode
# xaxis = list(fixedrange = TRUE), # Desativa o zoom no eixo X
# yaxis = list(fixedrange = TRUE) # Desativa o zoom no eixo Y
# )3. Qual a Taxa mĆ©dia de óbitos maternos em cada categoria por municĆpio ?
Para verificar a quantidade de óbitos, fiz alguns mapas e histogramas. A taxa média de óbitos foi calculada da seguinte forma:
Em relação aos resultados abaixo, Ć© possĆvel observar um certo padrĆ£o nos municĆpios com as maiores taxas mĆ©dias de óbitos de cada categoria.
- Muitos municĆpios, com altas taxas mĆ©dias de óbitos, ficam próximos de outros com altas taxas . Como por exemplo, Rio Bonito e Saquarema, ou Cantagalo e Duas Barras. Isso Ć© um indĆcio de que a localização geogrĆ”fica pode influenciar na taxa mĆ©dia de óbito materno.
- MunicĆpios do interior (como Resende e Volta Redonda) e da Baixa Fluminense (como Nova IguaƧu e Duque de Caxias ) tem altas taxas mĆ©dia de óbito materno. Algo que eles tem em comum Ć© a pobreza, desigualdade social e falta de infraestrutura.
Preparar os dados
# Exibir a tabela
datatable(taxa_media_obito_1,
options = list(pageLength = 5),
caption = "Taxa média de óbitos maternos, por categoria, ocorridos entre 2012 e 2022, no estado do RJ")## [1] 92 8
Unir dados
Agora, vou unir a tabela criada acima com a tabela
dados_espaciais_municipios, que contĆŖm as geometrias de cada municĆpio
do RJ.
Em seguida, vou substituir as NA“s por zero, utilizando
across()e coalesce().
taxa_e_geom<- dados_espaciais_municipios %>%
left_join(taxa_media_obito_1, by = "Codmun7") %>% # Remover coluna redundante
mutate(
across(starts_with("T"), ~ coalesce(., 0)) # Substituir NA por 0 em colunas que comeƧam com "T"
)
# OBS: coalesce() --> Substituir NA“s#st_write(quantidade_muni_2b, "C:/Users/UsuÔrio/Documents/Disciplinas 2024.2/Introducao_a_Banco_de_Dados/Desafio_02/Dados/Dados_Transformados/Transformacao_parte_1/quantidade_muni_2b.gpkg")
#quantidade_muni_2b <- st_read("C:/Users/UsuƔrio/Documents/Disciplinas 2024.2/Introducao_a_Banco_de_Dados/Desafio_02/Dados/Dados_Transformados/Transformacao_parte_1/quantidade_muni_2b.gpkg")FunƧƵes
Função para criar histograma
# Função para criar o grÔfico
grafico_ranking <- function(data, var_x, var_y, titulo, lab_x, subtitulo=NULL) {
data %>%
arrange(desc(.data[[var_x]])) %>%
head(10) %>%
ggplot() +
geom_col(
aes(
x = .data[[var_x]],
y = fct_reorder(.data[[var_y]], .data[[var_x]])#fct_reorder() -> Ordenar o eixo y
),
fill = "#381850"
) +
labs(
x = lab_x,
y = "MunicĆpio",
title = titulo,
subtitle = subtitulo # Adiciona o subtĆtulo apenas se fornecido
) +
geom_text(
aes(
x = .data[[var_x]],
y = .data[[var_y]],
label = round(.data[[var_x]], 2), # Arredonda as labels das barras
hjust = -0.25
),
size = 3.0
) +
# OBS: estou usando scale_x_continuous( ), pois a maior barra do grƔfico estava sendo "cortada"
scale_x_continuous(
expand = c(0, 0), # Remove expansão automÔtica
limits = c(0, max(data[[var_x]]) * 1.3) # Define limite mƔximo 10% maior que o valor mƔximo
)+
theme_minimal() +
theme(
# Tamanho da fonte e negrito do tĆtulo do grĆ”fico
plot.title = element_text(size = 11, face = 'bold'),
# Posiciona o tĆtulo no canto do grĆ”fico (plot)
plot.title.position = "plot",
# Tamanho da fonte e negrito do subtĆtulo do grĆ”fico
plot.subtitle = element_text(size = 9),
# Tamanho dos rótulos dos eixos (axis) x e y
axis.text.x = element_text(size = 8, color = "black"),
axis.text.y = element_text(size = 8, color = "black"),
# Tamanho dos TĆtulo dos eixos (axis) x e y
axis.title.x = element_text(size = 7, color = "gray37"),
axis.title.y = element_text(size = 7, color = "gray37"),
# Margens --> margin(top, right, bottom, left)
plot.margin = margin(10,10,10,20)
)
}Função para criar mapas
# Função para criar o mapa
criar_mapa <- function(data, var, title, subtitulo = NULL) {
# Filtrar os dados com valores diferentes de zero
data_destacado <- data %>%
filter(.data[[var]] != 0) %>%
arrange(desc(.data[[var]]))
# Selecionar os 10 maiores valores
data_top10 <- data_destacado %>%
slice_head(n = 10)
# Criação do mapa
mapa <- ggplot() +
# Camada 1: Todos os MunicĆpios (fundo cinza)
geom_sf(
data = data,
aes(text = paste("MunicĆpio: ", MunicĆpio,
"<br>", var, ": ", .data[[var]])),
fill = "ghostwhite",
color = "black",
lwd = 0.1
) +
# Camada 2: Todos os municĆpios com valores positivos (tom pastel)
geom_sf(
data = data_destacado,
aes(fill = .data[[var]], label = MunicĆpio),
color = "black",
lwd = 0.1,
alpha = 0.5 # TransparĆŖncia para tom pastel
) +
# Camada 3: MunicĆpios com os 10 maiores valores
geom_sf(
data = data_top10,
aes(fill = .data[[var]], label = MunicĆpio),
color = "black",
lwd = 0.9
) +
# Paleta de cores
scale_fill_viridis_c(
option = "viridis",
name = "Tx. mĆ©dia por MunicĆpio",
direction = -1
) +
labs(title = title) +
theme_minimal() +
theme(
legend.title = element_text(size = 9),
plot.title = element_text(size = 11, face = "bold", hjust = -1)
)
# Transformar o grƔfico em interativo com ggplotly
ggplotly(mapa, width = 650) %>%
config(displayModeBar = FALSE) %>%
layout(
title = list(
text = paste0("<b>", title, "</b><br><sub>", subtitulo, "</sub>"),
x = 0,
xanchor = "left"
),
xaxis = list(fixedrange = TRUE),
yaxis = list(fixedrange = TRUE)
)
}Aplicar as FunƧƵes
Ćbitos no parto, gravidez e puerpĆ©rio, entre 2012 Ć 2022
# MunicĆpios do RJ com mais óbitos no parto, gravidez e puerpĆ©rio, entre 2012 Ć 2022
rank_1 <- grafico_ranking(
data = taxa_e_geom,
var_x = "Tx_media_obito_Grav_Part_Puerp",
var_y = "MunicĆpio",
titulo = "MunicĆpios do RJ com mais óbitos no parto, gravidez e puerpĆ©rio, entre 2012 Ć 2022",
subtitulo = "Taxa média de óbitos por 100.000 habitantes femininos (10 a 49 anos)",
lab_x = "Tx. média de óbitos no parto, gravidez e puerpério"
)# Total de óbitos na gravidez, por MunicĆpio do RJ, entre 2012 a 2022
mapa_1 <- criar_mapa(
data = taxa_e_geom,
var = "Tx_media_obito_Grav_Part_Puerp",
title = "Ćbitos no parto, gravidez e puerpĆ©rio, por MunicĆpio do RJ, entre 2012 a 2022",
subtitulo = "Taxa média de óbitos por 100.000 habitantes femininos (10 a 49 anos)"
)Ćbitos na gravidez, entre 2012 a 2022
# MunicĆpios do RJ com mais óbitos na gravidez, entre 2012 a 2022
rank_2 <- grafico_ranking(
data = taxa_e_geom,
var_x = "Tx_media_obito_Gravidez",
var_y = "MunicĆpio",
titulo = "Ćbitos na gravidez",
lab_x = "Tx. média de óbitos na gravidez"
)# Total de óbitos na gravidez, por MunicĆpio do RJ, entre 2012 a 2022
mapa_2 <- criar_mapa(
data = taxa_e_geom,
var = "Tx_media_obito_Gravidez",
title = "Ćbitos na gravidez, por MunicĆpio do RJ, entre 2012 a 2022",
subtitulo = "Taxa média de óbitos por 100.000 habitantes femininos (10 a 49 anos)"
)Ćbitos no parto, entre 2012 a 2022
Ćbitos no puĆ©rperio de atĆ© 42 dias após o parto, entre 2012 a 2022
# MunicĆpios do RJ com mais óbitos no puĆ©rperio de atĆ© 42 dias após o parto, entre 2012 a 2022
rank_4 <- grafico_ranking(
data = taxa_e_geom,
var_x = "Tx_media_obito_Puerp_42",
var_y = "MunicĆpio",
titulo = "Ćbitos no puĆ©rperio de atĆ© 42 dias",
lab_x = "Tx. média de óbitos no puerpério de até 42 dias"
)# Total de óbitos no puerpĆ©rio de atĆ© 42 dias, por MunicĆpio do RJ, entre 2012 a 2022
mapa_4 <- criar_mapa(
data = taxa_e_geom,
var = "Tx_media_obito_Puerp_42",
title = "Ćbitos no puerpĆ©rio de atĆ© 42 dias",
subtitulo = "Taxa média de óbitos por 100.000 habitantes femininos (10 a 49 anos)"
)Ćbitos no puĆ©rperio de 43 dias a 1 ano após o parto, entre 2012 a 2022
# MunicĆpios do RJ com mais óbitos no puĆ©rperio de 43 dias a 1 ano após o parto, entre 2012 a 2022
rank_5 <- grafico_ranking(
data = taxa_e_geom,
var_x = "Tx_media_obito_Puerp_43_1ano",
var_y = "MunicĆpio",
titulo = "Ćbitos no puĆ©rperio de 43 dias a 1 ano",
lab_x = "Tx. média de óbitos no puerpério de 43 dias à 1 ano"
)# Total de óbitos no puerpĆ©rio de 43 dias a 1 ano após o parto, por MunicĆpio do RJ, entre 2012 a 2022
mapa_5 <- criar_mapa(
data = taxa_e_geom,
var = "Tx_media_obito_Puerp_43_1ano",
title = "Ćbitos no puerpĆ©rio de 43 dias a 1 ano, por MunicĆpio do RJ, entre 2012 a 2022",
subtitulo = "Taxa média de óbitos por 100.000 habitantes femininos (10 a 49 anos)"
)Ranking: MunicĆpios do RJ com mais óbitos no parto, gravidez e puerpĆ©rio, entre 2012 Ć 2022
Ranking: MunicĆpios do RJ com mais óbitos por categoria, entre 2012 a 2022
# Configurar o tĆtulo
titulo_painel <- textGrob(
"MunicĆpios do RJ com mais óbitos maternos, por categoria (2012 a 2022)",
gp = gpar(fontsize = 14, fontface = "bold", col = "black"),
hjust = 0, # Alinha o texto Ć esquerda
x=0) # definir margem Ć esquerda
# Configurar o subtĆtulo
subtitulo_painel <- textGrob(
"Taxa mĆ©dia de óbitos por 100.000 habitantes femininos (10 a 49 anos), de cada municĆpio, entre 2012 a 2022",
gp = gpar(fontsize = 9, fontface = "italic", col = "gray40"), hjust = 0, x=0)
# Combinar tĆtulo e subtĆtulo em um Ćŗnico grob
titulo_completo <- arrangeGrob(
titulo_painel,
subtitulo_painel,
ncol = 1
)
# Criar o painel
grid.arrange(
rank_2, rank_3, rank_4, rank_5,
ncol = 2,
nrow = 2,
top =titulo_completo, # TĆtulo do painel
padding = unit(1, "cm") # EspaƧamento entre os grƔficos
)4. AnÔlise de Correlação entre óbitos maternos e os indicadores socioeconÓmicos
As variĆ”veis socioconĆ“micas que tem maior correlação o total de obito materno em cada categoria sĆ£o: população, PIB por municĆpio e āVAB_Administracao_Defesa_Educacao_Saude_publica_Seguridade_Socialā, essa Ćŗltima estĆ” relacionada aos gastos pĆŗblicos com saĆŗde, educação, aposentadoria e etc. JĆ” o PIB por municĆpio define o consumo, que impacta na arrecadação de impostos. Portanto, faz sentido essas duas variĆ”veis serem altamente correlacionadas com o total de óbitos.
Também faz sentido a variÔvel População ser correlacionada, pois quanto maior o tamanho da população de um lugar, maiores as chances de óbito.
Preparar a base
indicadores <- dados_socioeconomicos %>%
select(- c("Codigo_UF",
"Municipio",
"Codigo_Mesorregiao",
"Sigla_UF",
"Nome_Mesorregiao",
"Nome da Microrregião",
"Codigo_Microrregiao",
"Codigo_Regiao_Geografica_Imediata",
"Nome_Regiao_Geografica_Imediata")) %>%
mutate(Codmun7 = as.character(Codmun7),
Codmun6 = as.character(Codmun6)
)
datatable(head(indicadores),
options = list(dom='t'))## [1] "Codmun6" "Codmun7"
## [3] "Municipio" "Ano"
## [5] "Total_Obito_Outras_categorias" "Total_Obito_Puerp_42_parto"
## [7] "Total_Obito_Puerp_43_1ano" "Total_Obito_Gravidez"
## [9] "Total_Obito_Parto" "Total_Obito_NA"
## [11] "TOTAL_Grav_Part_Puerp" "TOTAL_todas_categorias"
## [13] "Populacao_feminina_total_por_ano" "obitos_relac_pop_Grav_Part_Puerp"
## [15] "obitos_relac_pop_Gravidez" "obitos_relac_pop_Parto"
## [17] "obitos_relac_pop_Puerp_42_parto" "obitos_relac_pop_Puerp_43_1ano"
Calcular correlação
# Calcular a correlação
correlacao <- tx_e_indicadores %>%
select(-c(Codmun7, Codmun6, Ano, Municipio)) %>% # Remover as colunas irrelevantes
select(where(is.numeric)) %>% # Selecionar apenas colunas numƩricas
as.matrix() %>% # Converter em matriz
rcorr() # Calcular a correlação
# Mostrar resultados
# correlacao$r # Matriz de correlação
# correlacao$n # Número de pares usados para calcular cada correlação
# correlacao$P # Valores p para cada correlaçãoFunção para criar grÔfico de correlação
# Função correlação
grafico_correlacao <- function(correlacao_reduzida_3, matriz_p) {
ggcorrplot(
correlacao_reduzida_3,
hc.order = TRUE, # Agrupar as variƔveis
type = "lower", # Esconder o espelhamento
lab = TRUE, # Mostrar os valores das correlaƧƵes
lab_size = 3, # Tamanho da fonte com o valor da correlação
p.mat = matriz_p, # Matriz de p-valores
sig.level = 0.05, # NĆvel de significĆ¢ncia de 5%
insig = "blank", # Deixar em branco os p-valores estatisticamente insignificantes
colors = c("#E69F00", "white", "#954ECA") # Cores: negativa, neutra, positiva
) +
labs(
title = "Matriz de Correlação",
subtitle = "Correlação considerando o p-valor"
) +
theme(
axis.text.x = element_text(size = 7, angle = 25),
axis.text.y = element_text(size = 8)
)
}5. Quais municĆpios tĆŖm as maiores taxas mĆ©dias de óbito maternos, para cada categoria de raƧa/cor?
Preparar os dados
Farei a mesma preparação do tópico 3.
Tabela 1 - Taxa média de óbito + geom
taxa_e_geom_2<- dados_espaciais_municipios %>%
left_join(taxa_media_obito_2, by = "Codmun7") %>% # Remover coluna redundante
mutate(
across(starts_with("T"), ~ coalesce(., 0)) # Substituir NA por 0 em colunas que comeƧam com "T"
)
# OBS: coalesce() --> Substituir NA“s## [1] "sf" "data.frame"
Tabela 2 - População por raça/cor + geom
pop_2022 <- populacao_2022 %>%
pivot_longer(
cols = starts_with("Mulher") & ends_with("2022"), # Selecione as colunas
names_to = "Raca_Cor", # Nome da nova coluna que agrupa os valores
values_to = "Populacao_por_Raca_Cor" # Nome da coluna para os valores correspondentes
) %>%
# Remover "Mulher" e "2022" da coluna "Raca_Cor"
mutate(
Raca_Cor = str_remove(Raca_Cor, "Mulher_"), # Remove "Mulher_"
Raca_Cor = str_remove(Raca_Cor, "_2022") # Remove "_2022"
) %>%
select(- c(Pop_Total_Mulheres_por_faixa_etaria_2022,Faixa_Etaria)) %>%
group_by(Codmun7, Municipio,Raca_Cor) %>%
reframe(Populacao_por_Raca_Cor = sum(Populacao_por_Raca_Cor, rm.na=TRUE)) %>%
distinct()Aplicar as funções do Tópico 3
Categoria de Cor/RaƧa: Branca
rank_1b <- grafico_ranking(
data = taxa_e_geom_2,
var_x = "Tx_media_obito_Branca",
var_y = "Municipio",
titulo = "Categoria Cor/RaƧa: Branca",
subtitulo = "",
lab_x = "Tx. média de óbitos maternos de mulheres brancas"
)Categoria de Cor/RaƧa: Preta
rank_2b <- grafico_ranking(
data = taxa_e_geom_2,
var_x = "Tx_media_obito_Preta",
var_y = "Municipio",
titulo = "Categoria Cor/RaƧa: Preta",
subtitulo = "",
lab_x = "Tx. média de óbitos maternos de mulheres pretas"
)Categoria de Cor/RaƧa: Parda
rank_3b <- grafico_ranking(
data = taxa_e_geom_2,
var_x = "Tx_media_obito_Parda",
var_y = "Municipio",
titulo = "Categoria Cor/RaƧa: Parda",
subtitulo = "",
lab_x = "Tx. média de óbitos maternos de mulheres pardas"
)Categoria de Cor/RaƧa: Amarela
rank_4b <- grafico_ranking(
data = taxa_e_geom_2,
var_x = "Tx_media_obito_Amarela",
var_y = "Municipio",
titulo = "Categoria Cor/RaƧa: Amarela",
subtitulo = "",
lab_x = "Tx. média de óbitos maternos de mulheres amarelas"
)Ranking MunicĆpios
library(grid)
# Configurar o tĆtulo
titulo_painel <- textGrob(
"MunicĆpios com maiores as taxas mĆ©dias de óbito maternos, para cada categoria de raƧa/cor",
gp = gpar(fontsize = 14, fontface = "bold", col = "black"),
hjust = 0, # Alinha o texto Ć esquerda
x=0) # definir margem Ć esquerda
# Configurar o subtĆtulo
subtitulo_painel <- textGrob(
"Taxa mĆ©dia de óbitos por 100.000 habitantes femininos (10 a 49 anos), de cada municĆpio, entre 2012 a 2022",
gp = gpar(fontsize = 9, fontface = "italic", col = "gray40"), hjust = 0, x=0)
# Configurar o subtĆtulo
subtitulo_painel_1 <- textGrob(
"Categorias de Cor/RaƧa, de acordo com o IBGE",
gp = gpar(fontsize = 6, fontface = "italic", col = "gray40"), hjust = 0, x=0)
# Combinar tĆtulo e subtĆtulo em um Ćŗnico grob
titulo_completo <- arrangeGrob(
titulo_painel,
subtitulo_painel,
subtitulo_painel_1 ,
ncol = 1
)
# Criar o painel
grid.arrange(
rank_1b, rank_2b, rank_3b, rank_4b,
ncol = 2,
nrow = 2,
top =titulo_completo, # TĆtulo do painel
padding = unit(1, "cm") # EspaƧamento entre os grƔficos
)6. Existe alguma associação entre o momento do óbito e as categorias de raça/cor?
Para responder esta pergunta, eu criei uma tabela de contigência e um teste de hipótese, cujas hipótese são:
\(H_0:\) NĆ£o
existe associação significativa entre as variÔveis
Raca_Cor e Momento_do_Obito.
\(H_1:\) Existe
associação significativa entre as variÔveis Raca_Cor e
Momento_do_Obito. Ou seja, o momento do óbito estÔ
relacionado à cor/raça das mulheres.
O teste rejeitou a hipótese nula, mostrando que, possivelmente, existe associação entre as variÔveis, indicando que o momento do óbito varia conforme a raça/cor da mulher.
Isso também é destacado na tabela de contigência, onde, por exemplo mulheres pretas e pardas morrem mais no puerpério entre 43 dias a 1 ano, após o parto (se comparado com outras categorias).
table_contingencia <- as.data.frame.matrix(
table(tabela_municipio$Raca_Cor, tabela_municipio$Momento_do_Obito))
datatable(table_contingencia,
options=list(dom='t'))# Teste qui-quadrado
#teste_chi2 <- chisq.test(table_contingencia)
# Teste exato de Fisher
#teste_fisher <- fisher.test(table_contingencia)
# Teste exato de Fisher com simulação
teste_fisher <- fisher.test(table_contingencia, simulate.p.value = TRUE, B = 500000)
# B --> Quantidade de simulaƧƵes##
## Fisher's Exact Test for Count Data with simulated p-value (based on
## 5e+05 replicates)
##
## data: table_contingencia
## p-value = 0.4043
## alternative hypothesis: two.sided
7. Perfil - óbitos maternos na faixa etÔria entre 10 a 14 anos
Podemos notar que a maioria dos municĆpios em que jĆ” ocorreram óbitos maternos nesta faixa etĆ”ria se encontra na baixada fluminense (SĆ£o joĆ£o de Meriti, Duque de Caxias e Nova IguaƧu), alĆ©m do Rio de Janeiro, Resende (regiĆ£o Sul Fluminense) e Campo dos Goytacazes e Petropólis.
A maioria dessas meninas era da cor āPardaā, 66% delas tinham emprego e 33% delas tinha só atĆ© 3 anos de estudo.
Além disso, os óbitos ocorreram, ou na gravidez ou no puerpério.
GestaƧƵes nesta faixa etĆ”ria sĆ£o muito crĆticas por diversos motivos, como o fato de terem sido frutos de pedofilia.
MuncĆpios do RJ que ocorreram óbitos maternos, na faixa etĆ”ria entre 10 a 14 anos
obitos_10_14_anos_1 <- dados_espaciais_municipios %>%
left_join(tabela_municipio, by= "Codmun7") %>%
filter(Idade_Categoria == "10 a 14 anos")%>%
rename(MunicĆpio = MunicĆpio.x)
class(obitos_10_14_anos_1) ## [1] "sf" "data.frame"
mapa_10_14 <- ggplot() +
geom_sf(
data = dados_espaciais_municipios,
aes(text = paste("MunicĆpio: ", MunicĆpio)),
fill = "ghostwhite",
color = "black",
lwd = 0.1
) +
geom_sf(
data = obitos_10_14_anos_1,
aes(fill = Momento_do_Obito,
text = paste("MunicĆpio: ", MunicĆpio)),
color = "black",
lwd = 0.1,
alpha = 0.5
) +
labs(title = "title" ) +
theme_minimal() +
theme(
legend.title = element_text(size = 9),
plot.title = element_text(size = 11, face = "bold", hjust = -1)
)
ggplotly(mapa_10_14, width = 650) %>%
config(displayModeBar = FALSE) %>%
layout(
title = list(
text = paste0("<b>", "MuncĆpios do RJ que ocorreram óbitos maternos",
"</b><br><sub>", "Na faixa etƔria entre 10 a 14 anos ", "</sub>"),
x = 0,
xanchor = "left"
),
xaxis = list(fixedrange = TRUE),
yaxis = list(fixedrange = TRUE),
legend = list(x = 0.5,
y = -0.2,
xanchor = "center",
yanchor = "bottom",
orientation = "h")) Contagem de óbitos maternos, separados por raça/cor, na Faixa EtÔria de 10 a 14 anos
# Criar tabela de contagem
tabela_contagem <- obitos_10_14_anos_1 %>%
count(Raca_Cor, name = "Contagem")grafico_raca_cor <- ggplot(tabela_contagem, aes(x = Raca_Cor, y = Contagem, fill = Raca_Cor)) +
geom_col() +
geom_text(aes(label = Contagem), vjust = -0.3, color = "black", size = 4) + # Ajuste no posicionamento do rótulo
labs(
title = "Contagem de óbitos maternos, separados por raça/cor",
subtitle = "Faixa EtƔria de 10 a 14 anos",
x = "",
y = "Contagem",
fill = "RaƧa/Cor"
) +
scale_fill_manual(values = c(
"Branca" = "#954ECA",
"Preta" = "#56B4E9",
"Parda" = "#009E73",
"Amarela" = "#E69F00"
)) +
theme_minimal() +
theme(
plot.title = element_text(size = 14, face = "bold"),
axis.text.x = element_text(angle = 0, hjust = 0.5),
plot.margin = margin(10, 15, 20, 15) # margem
) +
expand_limits(y = max(tabela_contagem$Contagem) * 1.1) # Aumentar o limite do eixo Y
print(grafico_raca_cor)AnÔlise multivariada de classificação (Clusters hierarquicos por componentes princiais)
Para a classificação desses municĆpios, utilizarei o mĆ©todo de clusters hierĆ”rquicos. O objetivo Ć© entender o perfil dos municĆpios, em relação as variĆ”veis socioecĆ“nomicas. Eu vou utilizar o ano de 2021 por ser recente e ter mais informaƧƵes socioeconomicas na tabela (se comparado ao ano de 2022, por exemplo).
Primeiro, eu vou preparar a base e olhar as informaƧƵes socieconomicas de 2021.
Preparar a base
# Retirando linhas com NA“s
finalt <- final[-c(1, 917, 918, 919, 920), ]
# Filtrando o Ano de 2021
final_2021<-finalt%>%filter(
Ano==2021)Criando a variƔvel morte
mortes_municipio<-tabela_municipio %>% group_by(MunicĆpio)%>%summarise(
mortes = sum(Contagem_Obitos)
)mortes_municipio1 <- merge(
mortes_municipio, # DataFrame principal
tabela_municipio[, c("MunicĆpio", "Codmun7")], # Seleciona as colunas relevantes
by = "MunicĆpio", # Faz a junção com base na coluna "MunicĆpio"
all.x = TRUE # Preserva todas as linhas de mortes_municipio
)
mortes_municipio1 <- mortes_municipio1[!duplicated(mortes_municipio1$Codmun7), ]final_2021e <- merge(
final_2021, # DataFrame principal
mortes_municipio1[, c("Codmun7", "mortes")], # Seleciona as colunas relevantes
by = "Codmun7", # Faz a junção com base na coluna "Codmun7"
all.x = TRUE # Preserva todas as linhas de final_2021
)df<-final_2021%>%select(Impostos_liquidos_de_subsidios,
VAB_Agropecuaria,
VAB_Servico,
VAB_Administracao_Defesa_Educacao_Saude_publica_Seguridade_social,
PIB_Municipio,
Populacao,
Rendimento_medio_no_setor_formal,
Valor_medio_Internacoes_hospitalares,
Porcentagem_de_meninas_de_10_a_14_anos_de_idade_que_tiveram_filhos,
Porcentagem_de_adolescentes_de_15_a_17_anos_de_idade_que_tiveram_filhos,
mortes
)Dados SocioeconƓmicos
Os valores das categorias foram obtidos atrƔves da mƩdia de cada variƔvel.
Produto interno Bruto (Mapa)
Neste mapa, os municĆpios do estado do Rio de Janeiro estĆ£o divididos em trĆŖs categorias com base no PIB municipal:
- Entre R$ 900 milhões e R$ 2 bilhões (classificação média);
- Abaixo de R$ 900 milhƵes;
- Acima de R$ 2 bilhƵes.
A produção interna do municĆpio constitui o principal fator para a arrecadação tributĆ”ria local, influenciando diretamente as possibilidades de investimento em polĆticas pĆŗblicas, especialmente na Ć”rea da saĆŗde.
final_2021_pibm<-final_2021 %>% filter(
PIB_Municipio>=900000000&
PIB_Municipio<=2000000000
)
final_2021_pibam<-final_2021 %>% filter(
PIB_Municipio<900000000
)
final_2021_pibacm<-final_2021 %>% filter(
PIB_Municipio>2000000000
)
mapa_filtrado_pibm<- dados_espaciais_municipios %>%
filter(MunicĆpio %in% final_2021_pibm$Municipio)
mapa_filtrado_pibam<- dados_espaciais_municipios %>%
filter(MunicĆpio %in% final_2021_pibam$Municipio)
mapa_filtrado_pibacm<- dados_espaciais_municipios %>%
filter(MunicĆpio %in% final_2021_pibacm$Municipio)
mapa_filtrado_pibm$cat_pib <- "Próximos da média"
mapa_filtrado_pibam$cat_pib <- "Abaixo da mƩdia"
mapa_filtrado_pibacm$cat_pib <- "Acima da mƩdia"
# Criar o grƔfico
ggplot() +
# Mapa de base
geom_sf(data = dados_espaciais_municipios, fill = "gray90", color = "black") +
# Mapeando a cor de acordo com a categoria 'cat_pib'
geom_sf(data = mapa_filtrado_pibm, aes(fill = cat_pib), color = "black") +
geom_sf(data = mapa_filtrado_pibam, aes(fill = cat_pib), color = "black") +
geom_sf(data = mapa_filtrado_pibacm, aes(fill = cat_pib), color = "black") +
# Definindo as cores para as categorias
scale_fill_manual(values = c("Próximos da média" = "#381850",
"Abaixo da mƩdia" = "#2C848C",
"Acima da mƩdia" = "#F5E62B")) +
theme_minimal() +
labs(title = "Produto Interno Bruto 2021",
subtitle = "Municipal",
fill = "Legenda")Gasto pĆŗblico
Outra variĆ”vel que considero decisiva para o nĆŗmero especĆfico de mortes analisado Ć© o gasto pĆŗblico municipal, que inclui os investimentos em saĆŗde. Em grande parte dos municĆpios, aproximadamente 65 localidades no estado do Rio de Janeiro, o gasto pĆŗblico foi inferior a R$ 900 milhƵes, como Ć© possĆvel observar no mapa. AlĆ©m disso, 15 municĆpios apresentaram gastos próximos Ć mĆ©dia, enquanto 11 superaram esse patamar.
final_2021_gpm<-final_2021 %>% filter(
VAB_Administracao_Defesa_Educacao_Saude_publica_Seguridade_social>=900000000&
VAB_Administracao_Defesa_Educacao_Saude_publica_Seguridade_social<=2000000000
)
final_2021_gpam<-final_2021 %>% filter(
VAB_Administracao_Defesa_Educacao_Saude_publica_Seguridade_social<900000000
)
final_2021_gpacm<-final_2021 %>% filter(
VAB_Administracao_Defesa_Educacao_Saude_publica_Seguridade_social>2000000000
)
mapa_filtrado_gpm<- dados_espaciais_municipios%>%
filter(MunicĆpio %in% final_2021_gpm$Municipio)
mapa_filtrado_gpam<- dados_espaciais_municipios %>%
filter(MunicĆpio %in% final_2021_gpam$Municipio)
mapa_filtrado_gpacm<- dados_espaciais_municipios %>%
filter(MunicĆpio%in% final_2021_gpacm$Municipio)
mapa_filtrado_gpm$cat_pib <- "Próximos da média"
mapa_filtrado_gpam$cat_pib <- "Abaixo da mƩdia"
mapa_filtrado_gpacm$cat_pib <- "Acima da mƩdia"
# Criar o grƔfico
ggplot() +
# Mapa de base
geom_sf(data = dados_espaciais_municipios, fill = "gray90", color = "black") +
# Mapeando a cor de acordo com a categoria 'cat_pib'
geom_sf(data = mapa_filtrado_gpm, aes(fill = cat_pib), color = "black") +
geom_sf(data = mapa_filtrado_gpam, aes(fill = cat_pib), color = "black") +
geom_sf(data = mapa_filtrado_gpacm, aes(fill = cat_pib), color = "black") +
# Definindo as cores para as categorias
scale_fill_manual(values = c("Próximos da média" = "#381850",
"Abaixo da mƩdia" = "#2C848C",
"Acima da mƩdia" = "#F5E62B")) +
theme_minimal() +
labs(title = "Gasto pĆŗblico",
subtitle = "Municipal",
fill = "Legenda")População
Outra variĆ”vel relevante para compreender essas mortes Ć© a população. Observa-se que o mapa da distribuição populacional apresenta grande semelhanƧa com o mapa do gasto pĆŗblico, evidenciando uma possĆvel correlação entre esses dois fatores.
final_2021_popm<-final_2021 %>% filter(
Populacao>=100000&
Populacao<=250000)
final_2021_popam<-final_2021 %>% filter(
Populacao<100000)
final_2021_popacm<-final_2021 %>% filter(
Populacao>250000)
mapa_filtrado_popm<- dados_espaciais_municipios %>%
filter(MunicĆpio %in% final_2021_popm$Municipio)
mapa_filtrado_popam<- dados_espaciais_municipios %>%
filter(MunicĆpio %in% final_2021_popam$Municipio)
mapa_filtrado_popacm<- dados_espaciais_municipios %>%
filter(MunicĆpio %in% final_2021_popacm$Municipio)
mapa_filtrado_popm$cat_pib <- "Próximos da média"
mapa_filtrado_popam$cat_pib <- "Abaixo da mƩdia"
mapa_filtrado_popacm$cat_pib <- "Acima da mƩdia"
# Criar o grƔfico
ggplot() +
# Mapa de base
geom_sf(data = dados_espaciais_municipios, fill = "gray90", color = "black") +
# Mapeando a cor de acordo com a categoria 'cat_pib'
geom_sf(data = mapa_filtrado_popm, aes(fill = cat_pib), color = "black") +
geom_sf(data = mapa_filtrado_popam, aes(fill = cat_pib), color = "black") +
geom_sf(data = mapa_filtrado_popacm, aes(fill = cat_pib), color = "black") +
# Definindo as cores para as categorias
scale_fill_manual(values = c("Próximos da média" = "#381850",
"Abaixo da mƩdia" = "#2C848C",
"Acima da mƩdia" = "#F5E62B")) +
theme_minimal() +
labs(title = "População 2021",
subtitle = "Municipal",
fill = "Legenda")Cluster
Inicialmente, construirei uma matriz contendo apenas as variĆ”veis numĆ©ricas, que serĆ£o padronizadas para evitar discrepĆ¢ncias devido Ć s diferenƧas de escala. A partir da matriz padronizada, estimarei a matriz de distĆ¢ncia euclidiana. Com base nessa matriz, treinarei o algoritmo de clusters hierĆ”rquicos para definir os agrupamentos e, em seguida, estimar o dendrograma, que auxiliarĆ” na anĆ”lise e visualização das hierarquias entre os municĆpios.
df<-final_2021%>%select(Impostos_liquidos_de_subsidios,
VAB_Agropecuaria,
VAB_Servico,
VAB_Administracao_Defesa_Educacao_Saude_publica_Seguridade_social,
PIB_Municipio,
Populacao,
Rendimento_medio_no_setor_formal,
Valor_medio_Internacoes_hospitalares,
Porcentagem_de_meninas_de_10_a_14_anos_de_idade_que_tiveram_filhos,
Porcentagem_de_adolescentes_de_15_a_17_anos_de_idade_que_tiveram_filhos
)
#Padronização
df_pad <- scale(df)
# Criar a matriz de distâncias usando a distância euclidiana
matriz_dist <- dist(df_pad, method = "euclidean")
# Clusterização hierÔrquica usando o método de ligação completa
hclust_model <- hclust(matriz_dist, method = "complete")
plot(hclust_model, main = "Dendrograma", xlab = "ObservaƧƵes", sub = "", cex = 0.8)Escolha dos clusters
Com base no dendrograma, em uma anĆ”lise inicial e informal, identifico a presenƧa de cinco grupos distintos na amostra. O objetivo da anĆ”lise de clusters Ć© agrupar municĆpios que apresentem maior proximidade entre si em relação Ć s variĆ”veis analisadas. Nesse contexto, acredito que hĆ” cinco grupos de municĆpios no estado do Rio de Janeiro que compartilham caracterĆsticas similares.
Clusters no mapa
O mapa de cluster estÔ bem proximo dos mapas anteriores, pricipalmente em relação ao mapa da população e do gasto público
#mapa_rj <- read_municipality(code_muni = "RJ", year = 2021)
# Filtrar municĆpios de cada cluster
cluster_1<-final_2021 %>%filter(cluster==1)
mapa_filtrado_1<- dados_espaciais_municipios %>%
filter(MunicĆpio %in% cluster_1$Municipio)
cluster_2<-final_2021 %>%filter(cluster==2)
mapa_filtrado_2<- dados_espaciais_municipios %>%
filter(MunicĆpio %in% cluster_2$Municipio)
cluster_3<-final_2021 %>%filter(cluster==3)
mapa_filtrado_3<- dados_espaciais_municipios %>%
filter(MunicĆpio %in% cluster_3$Municipio)
# mapa do cluster 4 ####
cluster_4<-final_2021 %>%filter(cluster==4)
mapa_filtrado_4<- dados_espaciais_municipios %>%
filter(MunicĆpio %in% cluster_4$Municipio)
# cluster 5
cluster_5<-final_2021 %>%filter(cluster==5)
mapa_filtrado_5<- dados_espaciais_municipios %>%
filter(MunicĆpio =="Rio de Janeiro")
# Especificar o nĆŗmero do cluster
mapa_filtrado_1$Cluster <- "Cluster 1"
mapa_filtrado_2$Cluster <- "Cluster 2"
mapa_filtrado_4$Cluster <- "Cluster 4"
mapa_filtrado_3$Cluster <- "Cluster 3"
mapa_filtrado_5$Cluster <- "Cluster 5"# Criar o grƔfico clusters ####
ggplot() +
geom_sf(data = dados_espaciais_municipios, fill = "lightgray", color = "black")+
geom_sf(data = mapa_filtrado_1, aes(fill = Cluster), color = "black") +
geom_sf(data = mapa_filtrado_5, aes(fill = Cluster), color = "black") +
geom_sf(data = mapa_filtrado_2, aes(fill = Cluster), color = "black") +
geom_sf(data = mapa_filtrado_4, aes(fill = Cluster), color = "black") +
geom_sf(data = mapa_filtrado_3, aes(fill = Cluster), color = "black") +
scale_fill_manual(values = c("Cluster 1" = "#381850",
"Cluster 2" = "blue",#3366FF",
"Cluster 3" = "#F5E62B",
"Cluster 4" = "#2C848C",
"Cluster 5" = "#FF9900")) +
theme_minimal() +
labs(title = "Clusters no mapa",
subtitle = "Rio de Janeiro 2021",
fill = "Clusters")GrÔficos dos clusters e Conclusão
Como pode ser observado na tabela e no grĆ”fico, o Cluster 1, composto pelos municĆpios mais vulnerĆ”veis e em maior nĆŗmero, apresentou tambĆ©m o maior nĆŗmero de mortes. A cidade do Rio de Janeiro ocupa o segundo lugar, seguida pelo Cluster 4 em terceiro, Cluster 2 em quarto, e o Cluster 3 em quinto. No grĆ”fico a unidade de medida de população estĆ” em mil.
Em relação ao PIB, o Cluster 5 (RJ) possui o maior PIB, seguido pelo Cluster 4 em segundo lugar, o Cluster 3 em terceiro, o Cluster 1 em quarto e o Cluster 2 em quinto. A distribuição da população segue a mesma tendência observada no PIB, assim como os gastos públicos e impostos.
Os grĆ”ficos e tabelas evidenciam que o nĆŗmero de mortes tem uma forte correlação com as questƵes socioeconĆ“micas dos municĆpios, de maneira coordenada. Em todos os clusters, observa-se que, em mĆ©dia, a cada 10.000 habitantes (nĆŗmero de óbitos dividido pela população), ocorre uma morte no parto de mulheres entre 10 e 49 anos nos municĆpios do estado do Rio de Janeiro.
ConclusĆ£o: Em conclusĆ£o, a anĆ”lise dos clusters revela uma forte correlação entre as mortes no parto e os fatores socioeconĆ“micos dos municĆpios do estado do Rio de Janeiro. O Cluster 1, com municĆpios mais vulnerĆ”veis, apresentou o maior nĆŗmero de mortes, evidenciando a relação entre a vulnerabilidade social e os desfechos adversos na saĆŗde. A anĆ”lise do PIB, população, gasto pĆŗblico e impostos reforƧa a ideia de que as condiƧƵes econĆ“micas e a capacidade de investimento em saĆŗde pĆŗblica influenciam diretamente a mortalidade materna. Em todos os clusters, observou-se que, em mĆ©dia, a cada 1.000 mortes, hĆ” uma morte no parto de mulheres entre 10 e 49 anos, o que destaca a necessidade urgente de polĆticas pĆŗblicas mais eficazes e equitativas, direcionadas Ć s Ć”reas mais vulnerĆ”veis.
A combinação de variĆ”veis socioeconĆ“micas com os dados de mortalidade materna aponta para a importĆ¢ncia de uma abordagem integrada nas polĆticas pĆŗblicas, como destaca Paim (2011) ao afirmar que āas desigualdades sociais e econĆ“micas tĆŖm um impacto direto na saĆŗde da população, refletindo nas taxas de mortalidade e morbidadeā. Portanto, Ć© fundamental que os gestores pĆŗblicos se concentrem na melhoria das condiƧƵes socioeconĆ“micas e de saĆŗde nos municĆpios mais vulnerĆ”veis para reduzir as desigualdades e melhorar os Ćndices de saĆŗde materna.
# Agrupar os dados por cluster e calcular as mƩtricas
cluster_summary <- final_2021 %>%
filter(mortes > 0) %>% # Considerar apenas municĆpios com mortes > 0
group_by(cluster) %>%
summarise(
Mortes = sum(mortes, na.rm = TRUE),
Quantidade = n(),
PIB = mean(PIB_Municipio, na.rm = TRUE),
`População` = mean(Populacao, na.rm = TRUE),
`Gasto pĆŗblico` = mean(VAB_Administracao_Defesa_Educacao_Saude_publica_Seguridade_social, na.rm = TRUE),
Impostos = mean(Impostos_liquidos_de_subsidios, na.rm = TRUE)
)
cluster_summary## # A tibble: 5 Ć 7
## cluster Mortes Quantidade PIB População `Gasto público` Impostos
## <int> <dbl> <int> <dbl> <dbl> <dbl> <dbl>
## 1 1 862 51 8162145674. 163447. 1314927751. 665620642.
## 2 2 15 5 1467342794. 61349. 502247902. 182934761.
## 3 3 104 3 14614125008. 240832. 1944572643. 737713369
## 4 4 73 3 22958098291. 172534. 1904577467. 1243553043.
## 5 5 853 1 359635000000 6775561 56971983974 79324423329
cluster_summary_long <- cluster_summary %>%
pivot_longer(cols = -cluster, names_to = "variavel", values_to = "valor")
cluster_summary_long <- cluster_summary %>%
mutate(
PIB = PIB / 1e6,
Impostos = Impostos / 1e6,
`Gasto pĆŗblico` = `Gasto pĆŗblico` / 1e6,
`População`= `População`/1e3
) %>%
pivot_longer(cols = -cluster, names_to = "variavel", values_to = "valor") %>%
group_by(variavel) %>%
mutate(
proporcao = valor / sum(valor) * 100 # Calcular porcentagens (opcional)
) %>%
ungroup()
# Iterar por cada variƔvel e criar grƔficos de barras
unique_vars <- unique(cluster_summary_long$variavel)
for (var in unique_vars) {
# Filtrar os dados para a variƔvel atual
data_var <- cluster_summary_long %>%
filter(variavel == var)
# Criar o grƔfico de barras
p <- ggplot(data_var, aes(x = factor(cluster), y = valor, fill = factor(cluster))) +
geom_bar(stat = "identity", position = "dodge") +
geom_text(
aes(label = round(valor, 2)), # Adicionar os valores em cima das barras
position = position_dodge(width = 0.9),
vjust = -0.5,
size = 3
) +
labs(
title = paste("Distribuição de", var, "por Cluster"),
x = "Cluster",
y = ifelse(var %in% c("PIB", "impostos", "Gasto público"), "Valor (em milhões)", ""),
fill = "Cluster"
) +
scale_fill_manual(values = c("#381850", "blue","#F5E62B", "#2C848C", "#FF9900")) + # Definir cores especĆficas
theme_minimal() +
theme(
plot.title = element_text(hjust = 0.5, size = 14),
axis.text.x = element_text(size = 10),
axis.text.y = element_text(size = 10)
)
print(p)
}