Análise da base RAIS

Análise em R dos salários referentes a cientistas de dados na base RAIS (Para este caso: 390.583 linhas, 267.60 GB). De início é feito uma análise exploratória e em seguida é encontrado um modelo através de Regressão Linear. Projeto feito com auxílio da Semana Data Science na Prática da Curso-R.

João Vitor Alencar Amorim https://example.com/joaoalencaramorim
2022-07-23

Perguntas de pesquisa:

  1. Quanto ganhou em média um Ciêntista de Dados no Brasil em 2020?
  2. Quanto o salário médio varia no tempo?
  3. Quanto o salário médio varia regionalmente?
  4. Quanto o salário médio varia por características do profissional (gênero, raça/cor, idade)

Fonte:

  1. Relação Anual de Informações Sociais (RAIS)

Premissas:

  1. Cientistas de dados possivelmente foram cadastrados com os seguintes códigos do CBO (Código Brasileiro de Ocupações), antes da inserção do seu código 2031-05 em 2022:
    1. 252515: Analista de cobrança (instituições financeiras)
    2. 252525: Analista de crédito (instituições financeiras)
    3. 211110: Especialista em pesquisa operacional
    4. 211205: Estatístico
    5. 211210: Estatístico (estatística aplicada)
    6. 211215: Estatístico teórico
    7. 411035: Auxiliar de estatística
    8. 131120: Gerente de serviços sociais

Análise Exploratória:

Acessando os dados da RAIS

Utilizando o datalake da iniciativa Base dos Dados. Armazenada na Google Cloud

# Carregando os pacotes necessários
library(bigrquery)
library(dplyr)
# Setando o email da conta Google utilizada para conexão
bigrquery::bq_auth("jvitor968@gmail.com")

# Criando a conexão
conexao <- dbConnect(
  bigquery(),
  project = "basedosdados",
  dataset = "br_me_rais",
  billing = "meuprimeiroprojetor", # id do projeto criado na Google Cloud
)
codigos_cbo <- c("252515", "252525", "211110", "211205", "211210", "411035", "211215", "131120")

# Filtrando pelo cbo e os anos acima de 2013
tabela_microdados_vinculos_tbl <- tbl(conexao, "microdados_vinculos") |>
  select(everything()) |>
  filter(
    ano >= 2013,
    cbo_2002 %in% codigos_cbo
  )

tabela_microdados_vinculos <- collect(tabela_microdados_vinculos_tbl)

Escrevendo os dados filtrados em arquivo para evitar novas requisições ao Google Cloud sempre que o script for executado

readr::write_rds(tabela_microdados_vinculos, "tabela_microdados_vinculos.rds", compress = "xz")

Lendo os dados a partir do arquivo escrito na etapa anterior

tabela_microdados_vinculos <- readRDS("tabela_microdados_vinculos.rds")

1ª Questão: Quanto ganhou em média um Ciêntista de Dados no Brasil em 2020?

tabela_2020 <- tabela_microdados_vinculos |>
  filter(ano == "2020") |>
  summarise(media2020 = mean(valor_remuneracao_media), mediana2020 = median(valor_remuneracao_media))

tabela_2020 |>
  knitr::kable()
media2020 mediana2020
4823.555 3412.88

2ª Questão: Quanto a média salarial variou com o tempo?

# pacote para plotagem de gráficos
library(ggplot2)

tabela_medias_anuais <- tabela_microdados_vinculos |>
  group_by(ano) |>
  summarise(mediaAnual = mean(valor_remuneracao_media))

ggplot(tabela_medias_anuais) +
  aes(x = ano, y = mediaAnual) +
  geom_col() +
  scale_x_continuous(breaks = 2013:2020) +
  labs(y = "Ano", x = "Salário Médio (R$)")

ano mediaAnual
2013 3457.553
2014 3702.131
2015 4229.452
2016 4409.327
2017 4969.977
2018 4886.116
2019 4969.408
2020 4823.555

3ª Questão: Quanto a média salarial varia regionalmente?

tabela_media_uf <- tabela_microdados_vinculos |>
  group_by(sigla_uf) |>
  summarise(
    media_por_regiao = mean(valor_remuneracao_media)
  )

library(forcats)

tabela_media_uf |>
  mutate(sigla_uf = fct_reorder(sigla_uf, media_por_regiao)) |>
  arrange(desc(sigla_uf)) |>
  ggplot() +
  aes(y = sigla_uf, x = media_por_regiao) +
  geom_col() +
  labs(y = "Unidade da Federação", x = "Média Salarial (R$)")

Será que há muitos salários discrepantes puxando a média pra cima de tal forma que deixe de representar bem a amostra? Vamos verificar o comportamento no caso da mediana:

3ª Questão: Quanto a média salarial varia com as caracteristicas dos profissionais?

Pelo Sexo:

tabela_resumo_sexo <- tabela_microdados_vinculos |>
  group_by(sexo) |>
  summarise(
    media = mean(valor_remuneracao_media),
    mediana = median(valor_remuneracao_media)
  ) |>
  mutate(sexo, sexo = ifelse(sexo == "1", "Masculino", "Feminino"))

ggplot(tabela_resumo_sexo) +
  aes(x = sexo, y = media, fill = sexo) +
  geom_col()
tabela_resumo_sexo |>
  knitr::kable()
sexo media mediana
Masculino 5397.193 4000.0
Feminino 3649.779 2359.1

Pela Etnia:

raca_cor media mediana
Indígena 3200.315 2814.955
Branca 4355.907 2977.775
Preta 3115.713 2148.900
Amarela 6800.561 5409.820
Parda 2797.077 1806.400
Não Identificado 5665.834 4779.850

Pela Idade:

Restrições:

  1. Os dados são apenas de vínculos formais.
  2. Os salários médios são bem diferentes entre os CBO’s, o que indica que estes podem não ter sido os melhores códigos a serem escolhidos.

Verificação CBO

library(ggplot2)
codigos_cbo <- c("252515", "252525", "211110", "211205", "211210", "411035", "211215", "131120")
tabela_medias_CBO <- tabela_microdados_vinculos |>
  group_by(cbo_2002) |>
  summarise(media_salario = median(valor_remuneracao_media))

ggplot(tabela_medias_CBO) +
  aes(x = codigos_cbo, y = media_salario) +
  geom_col() +
  labs(y = "Salário médio (R$)", x = "Códigos por ocupação")

Dica: Distill is a publication format for scientific and technical writing, native to the web. Learn more about using Distill at https://rstudio.github.io/distill.