Ensaio de indicadores e estrutura de temas com recortes regionais

Autor

Rodrigo F

Data de Publicação

Invalid Date

1 Coleta de dados

1.1 Fonte:RAIS para o ano de 2021

A coleta de dados do RAIS foi feita diretamente no bigquery usando esse comando:
SELECT sigla_uf, id_municipio AS cod_mun, cnae_2 AS setor, COUNT(*) AS total_empregos, AVG(valor_remuneracao_media) AS remuneracao_media FROM basedosdados.br_me_rais.microdados_vinculos WHERE ano = 2021 AND vinculo_ativo_3112 = ‘1’ GROUP BY sigla_uf, id_municipio, cnae_2

df_csv <- read_csv("bquxjob_237b2b9c_19cfc527fa6.csv")
glimpse(df_csv)
query <- "SELECT * FROM `basedosdados.br_bd_diretorios_brasil.cnae_2`"
df_cnae <- read_sql(query)

1.2 Fonte: basedosdados IBGE usando como referencia o ano 2021

query_pib <- "
SELECT 
  id_municipio as cod_mun,
  ano,
  pib
FROM `basedosdados.br_ibge_pib.municipio`
WHERE ano = 2021
"

df_ibge_pib <- read_sql(query_pib)


query_pop <- "
SELECT 
  id_municipio as cod_mun,
  populacao
FROM `basedosdados.br_ibge_populacao.municipio`
WHERE ano = 2021
"
df_ibge_pop <- read_sql(query_pop)

2 LIMPEZA DE DADOS E TRANSFORMAÇÃO

df_csv_subset <- df_csv %>%
  mutate(cod_mun = as.character(cod_mun)) %>%
  select(cod_mun, sigla_uf) %>%
  distinct()

df_ibge_completo <- df_ibge_pib %>%
  mutate(cod_mun = as.character(cod_mun)) %>%
  left_join(
    df_ibge_pop %>% mutate(cod_mun = as.character(cod_mun)), 
    by = "cod_mun"
  ) %>%
  left_join(df_csv_subset, by = "cod_mun")
df_csv_clean <- df_csv %>%
  mutate(setor = substr(as.character(setor), 1, 3)) %>%
  mutate(massa_salarial = total_empregos * remuneracao_media) %>%
 
  group_by(sigla_uf, setor) %>%
  summarise(
    total_empregos = sum(total_empregos, na.rm = TRUE),
    massa_salarial_total = sum(massa_salarial, na.rm = TRUE),
    remuneracao_media = massa_salarial_total / total_empregos,
    
    .groups = "drop"
  )
df_csv_clean_2 <- df_csv_clean %>%
  mutate(setor = as.character(setor)) %>%
  left_join(
    df_cnae %>% 
      mutate(grupo = as.character(grupo)) %>% 
      select(grupo, descricao_grupo),
    by = c("setor" = "grupo")
  )
df_csv_clean_2 <- df_csv_clean_2 %>%
  distinct()

3 ATIVIDADE ECONÔMICA E ESTRUTURA PRODUTIVA, COM INDICADORES DE DINAMISMO

3.1 CALCULANDO PIB PER CAPITA DE CADA ESTADO COM OS DADOS OBTIDOS

mapa_estados <- read_state(code_state = "all", year = 2020)

df_mapa <- mapa_estados %>%
  left_join(df_estado_final, by = c("abbrev_state" = "sigla_uf"))

ggplot(data = df_mapa) +
  geom_sf(aes(fill = pib_per_capita_estado), color = "black", size = 0.2) +
scale_fill_distiller(
    palette = "green",   
    direction = 1,        
    name = "PIB per Capita",
    labels = label_dollar(prefix = "R$ ", big.mark = ".", decimal.mark = ","),
    na.value = "grey90"  
  ) +
  labs(
    title = "PIB per Capita por Estado - 2021",
    subtitle = "Visualização da distribuição da riqueza por unidade federativa",
    caption = "Fonte: IBGE / Elaboração Própria"
  ) +
  theme_minimal() + 
  theme(
    panel.grid = element_blank(), 
    axis.text = element_blank(), 
    axis.ticks = element_blank(),
    plot.title = element_text(face = "bold", size = 14),
    legend.position = "right"
  )

O mapa revela uma clara desigualdade regional na distribuição da riqueza no Brasil em 2021. Os estados do Centro-Oeste, especialmente o Mato Grosso do Sul e o Distrito Federal, se destacam com os maiores PIB per capita do país, possível reflexo da agropecuária de alta produtividade e da concentração de servidores públicos federais. Os estados do Sul e Sudeste apresentam valores intermediários a altos, sustentados por uma estrutura industrial e de serviços mais diversificada e avancada. Em contraste, os estados do Nordeste e parte do Norte concentram os menores PIB per capita do país, evidenciando uma desigualdade regional estrutural que persiste historicamente no Brasil.

3.2 Setores que mais empregam no Brasil

*Os setores foram divididos pelos primeiros 3 digitos do cnae_2

df_top_empregos <- df_csv_clean_2 %>%
  group_by(sigla_uf) %>%
  slice_max(order_by = total_empregos, n = 5) %>%
  select(sigla_uf, setor, total_empregos, descricao_grupo) %>%
  ungroup()
df_empregos_nacional <- df_csv_clean_2 %>%
  group_by(setor, descricao_grupo) %>%
  summarise(total_empregos = sum(total_empregos, na.rm = TRUE), .groups = "drop") %>%
  slice_max(order_by = total_empregos, n = 15)
df_empregos_nacional <- df_empregos_nacional %>%
  mutate(
    total_geral = sum(total_empregos),
    participacao = (total_empregos / total_geral) * 100
  )

df_empregos_plot <- df_empregos_nacional %>%
  arrange(total_empregos)

plot_ly(df_empregos_plot,
        x = ~total_empregos,
        y = ~reorder(setor, total_empregos),
        type = "bar",
        orientation = "h",
        text = ~paste0("Setor: ", setor,
                       "<br>Descrição: ", descricao_grupo,
                       "<br>Total de Empregos: ", format(total_empregos, big.mark = "."),
                       "<br>Participação: ", round(participacao, 1), "%"),
        hoverinfo = "text",
        textposition = "none",
        marker = list(color = "#2C7BB6")) %>%
  layout(
    title = list(
      text = "Top 15 Setores por Emprego Formal - Brasil 2021",
      y = 0.95
    ),
    margin = list(t = 60),
    xaxis = list(
      title = "Total de Empregos",
      tickformat = ",.0f"
    ),
    yaxis = list(
      title = "Código CNAE",
      type = "category",
      categoryorder = "array",
      categoryarray = as.character(df_empregos_plot$setor)
    ),
    annotations = list(
      list(text = "Número total de vínculos ativos por grupo CNAE",
           x = 0.5, y = 1.05,
           xref = "paper", yref = "paper",
           showarrow = FALSE,
           font = list(size = 11, color = "gray40"))
    )
  )

O setor 841 (Administração do estado e da política econômica e social) é responsável por 36,2% de todo emprego formal no Brasil em 2021, ficando quase 28 pontos percentuais à frente do segundo colocado, o comércio varejista não especializado (471) com 8,7%. Esse resultado evidencia o peso do setor público como principal empregador formal do país, o que reflete tanto a ampla estrutura administrativa brasileira quanto a dificuldade do setor privado em gerar empregos formais em escala equivalente. Entre os demais setores, destacam-se atividades de saúde (861), comércio varejista em suas diversas categorias (471, 478, 474, 477, 475) e serviços de apoio (811, 812), mostrando uma estrutura produtiva do pais majoritariamente focada em servicos.

3.3 Scatter PIB per capita × Remuneração média

df_scatter <- df_csv_clean_2 %>%
  group_by(sigla_uf) %>%
  summarise(
    remuneracao_media_uf = sum(massa_salarial_total) / sum(total_empregos),
    .groups = "drop"
  ) %>%
  left_join(df_estado_final, by = "sigla_uf")

ggplot(df_scatter, aes(x = pib_per_capita_estado, y = remuneracao_media_uf)) +
  geom_point(size = 3, color = "#2C7BB6") +
  geom_text(
    aes(label = sigla_uf),
    vjust = -0.8,
    size = 3,
    color = "black"
  ) +
  geom_smooth(method = "lm", se = TRUE, color = "#D7191C", linetype = "dashed") +
  scale_x_continuous(labels = label_dollar(prefix = "R$ ", big.mark = ".", decimal.mark = ",")) +
  scale_y_continuous(labels = label_dollar(prefix = "R$ ", big.mark = ".", decimal.mark = ",")) +
  labs(
    title = "PIB per Capita × Remuneração Média por Estado - 2021",
    subtitle = "Cada ponto representa uma Unidade Federativa",
    x = "PIB per Capita",
    y = "Remuneração Média",
    caption = "Fonte: IBGE e RAIS 2021 / Elaboração Própria"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 13)
  )
`geom_smooth()` using formula = 'y ~ x'

O grafico revela existir uma possivel correlacao positiva entre o PIB e a remuneracao media dos estados brasileiros em 2021, onde estados mais ricos tendem a pagar salarios mais altos no emprego formal.
Alguns outliers sao notaveis:

  • DF destoa completamente dos outros estados tendo um PIB per capital alto e uma remuneracao muito acima da tendencia

  • AP, AC e RR aparecem com uuma remuneracao acima do esperado dado o seu PIB per capita.

Outro ponto a ser percebido pelo grafico é a concentracao dos estados do Nordeste no canto inferior esquerdo, com baixo PIB per capita e baixa remuneracao simultaneamente, evidenciando a desigualdade regional do Brasil

4 MEDIDAS DE ESPECIALIZAÇÃO VERSUS DIVERSIFICAÇÃO

4.1 Quociente Locacional (QL)

df_nacional_setor <- df_csv_clean_2 %>%
  group_by(setor) %>%
  summarise(emprego_nacional = sum(total_empregos, na.rm = TRUE), .groups = "drop") %>%
  mutate(total_nacional = sum(emprego_nacional))
df_ql <- df_csv_clean_2 %>%
  group_by(sigla_uf, setor, descricao_grupo) %>%
  summarise(emprego_uf_setor = sum(total_empregos, na.rm = TRUE), .groups = "drop") %>%
  left_join(
    df_csv_clean_2 %>%
      group_by(sigla_uf) %>%
      summarise(emprego_uf_total = sum(total_empregos, na.rm = TRUE), .groups = "drop"),
    by = "sigla_uf"
  ) %>%
  left_join(df_nacional_setor, by = "setor") %>%
  mutate(
    ql = (emprego_uf_setor / emprego_uf_total) / (emprego_nacional / total_nacional)
  )
df_ql_top <- df_ql %>%
  group_by(sigla_uf) %>%
  slice_max(order_by = ql, n = 3) %>%
  filter(ql > 1)
ggplot(df_ql_top, aes(x = reorder(setor, ql), y = ql, fill = sigla_uf)) +
  geom_col(show.legend = FALSE) +
  geom_hline(yintercept = 1, linetype = "dashed", color = "red") +
  facet_wrap(~ sigla_uf, scales = "free_y") +
  coord_flip() +
  labs(
    title = "Quociente Locacional por Estado - Top 3 Setores Especializados",
    x = "Código CNAE",
    y = "Quociente Locacional",
    caption = "Fonte: RAIS 2021 / Elaboração Própria"
  ) +
  theme_minimal() +
  theme(
    plot.title = element_text(face = "bold", size = 13),
    strip.text = element_text(face = "bold"),
    axis.text.y = element_text(size = 7)
  )

df_legenda <- df_ql_top %>%
  distinct(setor, descricao_grupo) %>%
  arrange(as.numeric(setor))

Com o quociente Locacional conseguimos medir a contracao ou especializacao de um setor em cada estado comparando-a com o Brasil, o QL > 1 indica especializacao acima da media nacional.

df_ql_top <- df_ql_top %>%
  mutate(setor = as.character(setor))

estados <- unique(df_ql_top$sigla_uf) %>% sort()

botoes <- lapply(estados, function(uf) {
  df_filtrado <- df_ql_top %>% filter(sigla_uf == uf) %>% arrange(ql)
  
  list(
    method = "update",
    label = uf,
    args = list(
      list(
        x = list(df_filtrado$ql),
        y = list(df_filtrado$setor),
        text = list(paste0("Setor: ", df_filtrado$setor,
                           "<br>Descrição: ", df_filtrado$descricao_grupo,
                           "<br>QL: ", round(df_filtrado$ql, 2)))
      ),
      list(
        "yaxis.categoryarray" = df_filtrado$setor,
        "yaxis.categoryorder" = "array",
        "yaxis.type" = "category"
      )
    )
  )
})

df_inicial <- df_ql_top %>% filter(sigla_uf == estados[1]) %>% arrange(ql)

plot_ly(df_inicial,
        x = ~ql,
        y = ~setor,
        type = "bar",
        orientation = "h",
        text = ~paste0("Setor: ", setor,
                       "<br>Descrição: ", descricao_grupo,
                       "<br>QL: ", round(ql, 2)),
        hoverinfo = "text",
        textposition = "none",
        marker = list(color = "#2C7BB6")) %>%
  layout(
    title = list(
      text = "Quociente Locacional por Estado - Top 3 Setores Especializados",
      y = 0.95
    ),
    margin = list(t = 100),
    xaxis = list(title = "Quociente Locacional"),
    yaxis = list(
      title = "Código CNAE",
      type = "category",
      categoryorder = "array",
      categoryarray = df_inicial$setor
    ),
    shapes = list(
      list(type = "line", x0 = 1, x1 = 1,
           y0 = -0.5, y1 = 4.5,
           line = list(color = "red", dash = "dash"))
    ),
    updatemenus = list(
      list(
        type = "dropdown",
        active = 0,
        buttons = botoes,
        x = 0.3,
        y = 1.15
      )
    ),
    annotations = list(
      list(text = "Selecione o Estado:", x = 0.0, y = 1.15,
           xref = "paper", yref = "paper", showarrow = FALSE)
    )
  )

Essa é uma versao mais detalhada do grafico de QL mostrando a especializacao de cada estado separadamente para uma analise mais facil, como exemplo o estado da Paraiba(PB) que tem um QL de 7.44 no setor 131( Preparacao e fiacao de fibras texteis) por ser um estado conhecido pela tecelagem de fios de algodao essa auto Quoeficiente é esperado.

5 INDICADORES DE CONCENTRAÇÃO ESPACIAL DAS ATIVIDADES

5.1 GINI LOCACIONAL

df_gini_loc <- df_csv_clean_2 %>%
  group_by(setor, descricao_grupo) %>%
  summarise(gini = Gini(total_empregos, na.rm = TRUE), .groups = "drop") %>%
  arrange(desc(gini))

df_gini_plot <- df_gini_loc %>%
  slice_max(gini, n = 15) %>%
  arrange(gini)

plot_ly(df_gini_plot,
        x = ~gini,
        y = ~reorder(setor, gini),
        type = "bar",
        orientation = "h",
        text = ~paste0("Setor: ", setor,
                       "<br>Descrição: ", descricao_grupo,
                       "<br>Gini: ", round(gini, 3)),
        hoverinfo = "text",
        textposition = "none",
        marker = list(color = "#2C7BB6")) %>%
  layout(
    title = list(
      text = "Gini Locacional por Setor - Brasil 2021",
      y = 0.95
    ),
    margin = list(t = 60),
    xaxis = list(title = "Gini Locacional"),
    yaxis = list(
      title = "Código CNAE",
      type = "category",
      categoryorder = "array",
      categoryarray = as.character(df_gini_plot$setor)
    ),
    annotations = list(
      list(text = "Top 15 setores com maior concentração espacial do emprego formal",
           x = 0.5, y = 1.05,
           xref = "paper", yref = "paper",
           showarrow = FALSE,
           font = list(size = 11, color = "gray40"))
    )
  )

O indice de Gini mede o grau de concentracao espacial do emprego de um setor entre os estados.

  • Gini = 0 o setor está perfeitamente distribuído entre todos os estados, cada um com a mesma proporção de emprego

  • Gini = 1 o setor está totalmente concentrado em um único estado

Entao quanto maior for o valor do indice de Gini mais concentrado o setor é em algum estado do Brasil.

Os 15 setores com maior Gini Locacional apresentam valores acima de 0,85, indicando altíssima concentração espacial do emprego formal. O setor 920 (Atividades de exploração de jogos de azar e apostas) lidera com Gini próximo de 1. Os demais setores no topo do ranking pertencem majoritariamente a atividades industriais específicas e serviços financeiros, como fabricação de aeronaves (304), fabricação de instrumentos musicais (322) e atividades de investigação particular (803), setores que por sua natureza tendem a se concentrar em poucos polos produtivos. Esse padrão contrasta com setores como comércio varejista e administração pública, que por atenderem demandas cotidianas da população tendem a ter Gini baixo e distribuição espacial mais uniforme pelo território nacional.

setores_gini_alto <- df_gini_loc %>%
  slice_max(gini, n = 5) %>%
  pull(setor)

df_concentracao <- df_csv_clean_2 %>%
  group_by(setor, descricao_grupo, sigla_uf) %>%
  summarise(total_empregos = sum(total_empregos, na.rm = TRUE), .groups = "drop") %>%
  filter(setor %in% setores_gini_alto) %>%
  group_by(setor) %>%
  mutate(participacao = total_empregos / sum(total_empregos) * 100) %>%
  ungroup() %>%
  left_join(df_gini_loc %>% select(setor, gini), by = "setor") %>%
  arrange(setor, desc(participacao))

plot_ly(df_concentracao,
        x = ~participacao,
        y = ~sigla_uf,
        color = ~descricao_grupo,
        type = "bar",
        orientation = "h",
        text = ~paste0("Estado: ", sigla_uf,
                       "<br>Setor: ", setor,
                       "<br>Descrição: ", descricao_grupo,
                       "<br>Participação: ", round(participacao, 1), "%",
                       "<br>Gini: ", round(gini, 3)),
        hoverinfo = "text",
        textposition = "none") %>%
  layout(
    title = list(text = "Concentração Espacial dos Setores com Maior Gini - Brasil 2021",
                 y = 0.95),
    margin = list(t = 60),
    barmode = "group",
    xaxis = list(title = "Participação no Emprego do Setor (%)"),
    yaxis = list(title = "Estado"),
    legend = list(title = list(text = "Setor"))
  )

O gráfico confirma o que o Gini Locacional indicava: os cinco setores com maior concentração espacial têm seu emprego praticamente restrito a um ou dois estados. O setor 920 (Atividades de exploração de jogos de azar e apostas) tem 98% do seu emprego formal concentrado no Rio de Janeiro, O setor 304 (Fabricação de aeronaves) está quase integralmente em São Paulo, onde a Embraer e seu polo de fornecedores estão instalados em São José dos Campos. Os setores de pesquisa de mercado (661), fabricação de instrumentos musicais (322) e atividades de investigação particular (803) também se concentram majoritariamente em SP, evidenciando o papel de São Paulo como polo nacional de serviços especializados e indústria de alta tecnologia. Esse padrão reforça a leitura do mapa de PIB per capita: a riqueza e as atividades mais sofisticadas tendem a se concentrar espacialmente, aprofundando as desigualdades regionais.