Introdução

O projeto tem como intenção avaliar as variações de emprego e renda entre os trimestres de 2017 e 2019, vista a amplitude de eventos que afetaram essas duas varíaveis diretamente neste período, com a recessão econômica, reformas e eleições. Além disso, busca exibir as distorções entre as variáveis à nível Brasil, comparando com os dados do estado da Paraíba. Os dados são da Pesquisa Nacional por Amostra de Domícilios Contínua (PNADc).

Para compreender o que vem a ser o mercado de trabalho é necessário conceituar a condição da população de acordo com sua posição na atividade econômica. Inicialmente, o Instituto Brasileiro de Geografia e Estatística (IBGE) difere a População Total da População em Idade de Trabalhar (PIA), sendo este último os indivíduos com quatorze anos ou mais de idade. A partir desse subconjunto, classifica a condição de atividade como (i) População Economicamente Ativa (PEA), que é composta pela população Ocupada, ou seja, aqueles que exercem alguma atividade no mercado de trabalho privado de maneira Formal (OF) ou Informal (OI) e o Empregador/Conta própria Formal (ECF) ou Informal(ECI), e população Desocupada, formada pelos indivíduos que buscam por uma posição no mercado de trabalho; e (ii) População Não Economicamente Ativa (PNEA) ou Inativos (I), que compreende os aposentados e pensionistas, estudantes, desalentados e os dedicados as atividades domésticas.

Seguindo as definições apresentadas, este trabalho busca analisar algumas o rendimento e a distribuição da População em Idade Ativa dos trabalhadores do Brasil e da Paraíba ao longo dos anos de 2017 a 2019.

Pacotes

Neste projeto, utilizamos os seguintes pacotes:

  1. tidyverse
  2. lubridate
  3. PNADcIBGE
  4. expss
  5. ggseas
# Carregando os pacotes
library(tidyr)
library(dplyr) 
library(lubridate)
library(ggplot2)
library(PNADcIBGE)
library(expss)
library(ggseas)

O pacote PNADcIBGE foi desenvolvido para facilitar a importação e a análise dos dados da PNADc. A importação dos dados é definida de acordo com paramêtros do próprio pacote, podendo o pesquisador definir na função get_pnad o ano (year), trimestre (quarter), design e labels a ser importado. Para o argumento desing é possível importar os dados como data.frame se FALSE e TRUE para retornar um objeto do plano amostral para a análise com o pacote survey, label é um argumento lógico que indica se os níveis das variáveis devem ser rotulados de acordo com o dicionário da pesquisa.

Dados

#Importando a base da PNADc em data.frame e sem os rótulos do dicionário.
dadosPNADc = get_pnadc(year = ano, quarter = trimestre, design=FALSE, labels=FALSE) 

Para importar os dados de todos os trimestres de 2017 a 2019 foi utilizado a função for que repete os códigos definidos entre as chaves.

mylist1 <- list() #Criando uma lista para receber os objetos
for (ano in c(2017:2019)) { #Comando for para o conjunto de valores for (i in c(conjunto_de_valores)) {
  
  trimestre <- as.character(1) # Objeto criado para definir o trimestre

  dadosPNADc = get_pnadc(year = ano, quarter = trimestre, design=FALSE, labels=FALSE)%>%
    subset(select = c(Ano, Trimestre, UF, V1027, V1028, V2007, V2009, V2010, VD3004, VD4001, VD4002, VD4008, VD4009, VD4012, VD4019, VD4031))%>% #Seleção de variáveis utilizadas durante a manipulação dos dados
    subset(V2009 >=14)%>% #Mantendo apenas a População em Idade Ativa definida pelo IBGE como os indivíduos com quatorze anos ou mais.

    ###CRIANDO VARIÁVEIS###
    mutate(periodo = paste(Ano, Trimestre, sep="."))%>% #Variável período utilizando o mutate e paste concatenado as variáveis Ano e Trimestre separados por um "."

    mutate(regiao = ifelse(UF %in% 11:17, "Norte", 
                    (ifelse(UF %in% 21:29, "Nordeste", 
                    (ifelse(UF %in% 31:35, "Sudeste", 
                    (ifelse(UF %in% 41:43, "Sul", 
                    (ifelse(UF %in% 51:53, "Centro-Oeste",0))))))))))%>% #Variáel região utilizando o comando mutate e ifelse de acordo com as unidades da federação conforme o dicionário

    select(periodo,regiao, everything())%>% #Com o comando select é alterado a posiçãoo das novas variáveis no data.frame

    ###CRIANDO VARIÁVEIS - DUMMY###
    mutate(empcont = ifelse(VD4009=="08" | VD4009=="09",1,0))%>% # Utilizado o comando mutate e ifelse definimos as variáveis dummies de acordo com as definições do IBGE
    mutate(empcont = replace_na(empcont, 0))%>% #Com o comando replace_na alteramos para 0 as NA
    mutate(desocupado = ifelse(VD4002==2,1,0))%>%
    mutate(desocupado = replace_na(desocupado, 0))%>%
    mutate(inativo = ifelse(VD4001==2,1,0))%>%
    mutate(inativo = replace_na(inativo, 0))%>%
    mutate(formal = ifelse(VD4009=="01" | VD4009=="03" | VD4009=="05" | VD4009=="07",1,0))%>%
    mutate(formal = replace_na(formal, 0))%>%
    mutate(informal = ifelse(VD4009=="02" | VD4009=="04" | VD4009=="06"| VD4009=="10",1,0))%>%
    mutate(informal = replace_na(informal, 0))%>%
    mutate(sitocup = ifelse(formal==1, 1,
                            (ifelse(informal==1,2,
                                    (ifelse(empcont==1,3,
                                            (ifelse(desocupado==1,4,
                                                    (ifelse(inativo==1,5,0))))))))))%>% 
#Variável sitocup considerando as variáveis dummies criadas anteriormente e assumindo 1 para os indivíduos Ocupados no setor formal, 2 para Ocupados no setor Informal, 3 para o Empregador/ Conta própria, 4 para os Desocupados e 5 para os indiv?duos Inativos ou Desalentados.
    
    subset(select = c(Ano, periodo, regiao, UF, V1027, V1028, V2007, V2009, V2010, VD3004, VD4019, VD4031, sitocup)) #Mantendo apenas as variáveis necessárias para a análise
    
  mylist1[[ano]] <- dadosPNADc #Inserindo o data.frame do conjunto de dados na lista criada
  
  gc()
}

O loop foi repetido quatro vezes, alterando apenas os trimestres e para unir todos os objetos foi utilizado o comando rbind.

mylist <- rbind(mylist1, mylist2, mylist3, mylist4)
remove(mylist1, mylist2, mylist3, mylist4) #Comando remove para excluir as listas dos trimestres

Utilizando o comando do.call o objeto foi alterado de lista para data.frame.

DADOS <- do.call("rbind",mylist)

dir.create(paste0(getwd(),'/BASE_DADOS')) #Criando a pasta para receber a base

save(DADOS,file = (paste0(getwd(),'/BASE_DADOS/dados.RDa'))) ##Salvando a base

O carregamento do arquivo .RDa foi feito separadamente, utilizamos o comando load para carregar o mesmo.

1. Estrutura de dados

As variáveis são estruturadas de acordo com:

glimpse(DADOS) # Função glimpse, do tidyverse, permite visualizar estrutura dos dados
## Rows: 5,404,533
## Columns: 13
## $ Ano     <chr> "2017", "2017", "2017", "2017", "2017", "2017", "2017", "20...
## $ periodo <chr> "2017.1", "2017.1", "2017.1", "2017.1", "2017.1", "2017.1",...
## $ regiao  <chr> "Norte", "Norte", "Norte", "Norte", "Norte", "Norte", "Nort...
## $ UF      <chr> "11", "11", "11", "11", "11", "11", "11", "11", "11", "11",...
## $ V1027   <dbl> 112.765, 112.765, 112.765, 112.765, 112.765, 112.765, 112.7...
## $ V1028   <dbl> 123.5526, 123.5526, 123.5526, 123.5526, 123.5526, 123.5526,...
## $ V2007   <chr> "2", "1", "2", "2", "1", "1", "1", "1", "1", "2", "2", "1",...
## $ V2009   <dbl> 55, 20, 53, 25, 21, 17, 15, 46, 66, 53, 29, 26, 24, 42, 40,...
## $ V2010   <chr> "1", "4", "4", "4", "4", "4", "4", "4", "1", "4", "4", "4",...
## $ VD3004  <chr> "2", "2", "1", "4", "2", "4", "3", "2", "1", "2", "5", "3",...
## $ VD4019  <dbl> 1600, NA, NA, NA, NA, 400, NA, 1200, 1000, NA, NA, 990, NA,...
## $ VD4031  <dbl> 40, NA, NA, NA, NA, 12, NA, 44, 40, NA, NA, 44, NA, 40, 20,...
## $ sitocup <dbl> 1, 5, 5, 5, 5, 1, 5, 1, 1, 5, 5, 1, 5, 1, 1, 2, 3, 2, 2, 5,...

As variáveis codificadas referem-se à:

  1. v1027 - Peso do domícilio e das pessoas pré check;
  2. v1028 - Peso do domícilio e das pessoas pós check;
  3. v2007 - Sexo;
  4. v2009 - Idade do morador na data de referência;
  5. v2010 - Cor;
  6. vd3004 - Nível de instrução mais elevado alcançado;
  7. vd4019 - Rendimento mensal habitual de todos os trabalhos;
  8. vd4031 - Horas habitualmente trabalhadas por semana em todos os trabalhos.

2. Preparando um banco secundário para manipulação

db <- DADOS # Setando um banco secundário db, para uso nas análises
head(db) # Verificando o cabeçalho 
## # A tibble: 6 x 13
##   Ano   periodo regiao UF    V1027 V1028 V2007 V2009 V2010 VD3004 VD4019 VD4031
##   <chr> <chr>   <chr>  <chr> <dbl> <dbl> <chr> <dbl> <chr> <chr>   <dbl>  <dbl>
## 1 2017  2017.1  Norte  11     113.  124. 2        55 1     2        1600     40
## 2 2017  2017.1  Norte  11     113.  124. 1        20 4     2          NA     NA
## 3 2017  2017.1  Norte  11     113.  124. 2        53 4     1          NA     NA
## 4 2017  2017.1  Norte  11     113.  124. 2        25 4     4          NA     NA
## 5 2017  2017.1  Norte  11     113.  124. 1        21 4     2          NA     NA
## 6 2017  2017.1  Norte  11     113.  124. 1        17 4     4         400     12
## # ... with 1 more variable: sitocup <dbl>

Resultados

1. Rendimento médio mensal, por trimestre. Brasil e Paraíba, 2017 a 2019.

Percebe-se aumento constante do rendimento médio mensal do brasileiro. Todavia, em nivel estadual, a Paraíba apresenta oscilações no rendimento médio, com pico no 1º trimestre de 2019, com salário médio ainda distante do verificado no Brasil.

#Criando objeto salário médio para o Brasil agrupando o data.frame DADOS de acordo com a variável periodo 
br <- db %>%
  group_by(periodo) %>% 
  summarize(sal_medio = mean(VD4019, na.rm = TRUE))%>%
  mutate(territorio = "Brasil") 

#Criando objeto sal?rio médio para o Paraíba filtrando a variável UF==25 de acordo com o código do dicionário. agrupando o data.frame DADOS de acordo com a variável periodo 
pb <- db %>%
  filter(UF==25)%>%
  group_by(periodo) %>% 
  summarize(sal_medio = mean(VD4019, na.rm = TRUE))%>%
  mutate(territorio = "Paraíba")

#Para diferenciar os dados do Brasil e da Paraíba foi criado com o comando mutate a variável territorio
  
sal_medio <- merge(br, pb, all=TRUE) #Unindo os objetos com o comando merge 
sal_medio$periodo <- parse_date_time(sal_medio$periodo, "%Y.q") #Informando ao R que a variável periodo corresponde a uma série temporal

basicplot1 <- ggplot(sal_medio, aes(periodo, sal_medio, colour = territorio)) #Base para a elaboração do gráfico de rendimento médio mensal

basicplot1 +
  geom_line(size=1)+
  geom_point(size=4)+
  geom_text(aes(label = trunc(sal_medio)), 
            vjust = -1) +
  theme(axis.text.x=element_text(angle=90,hjust=1,vjust=0.5)) +
  theme_classic()+
  labs(color=NULL, x = "Período",y = "Rendimento Médio",title = "Rendimento mensal médio, por trimestre", subtitle = "Brasil e Paraíba, 2012 a 2019", caption = "Fonte: PNADc") # Gráfico de linhas, pontos e texto com salário médio mensal utilizando a função trunc para não incluir as casas decimais

2. Rendimento médio mensal, por trimestre em número índice (2017 = 100). Brasil e Paraíba, 2017 a 2019

# O comando stat_index define um ponto inicial para efeito de comparação, permitindo o cálculo da variação.
basicplot1 +
  stat_index(index.ref = 1) +
  xlab('Período')+ylab('Índice 2017 = 100')+
  theme(axis.text.x=element_text(angle=90, hjust=1))+
  labs(title='Rendimento mensal médio (índice 2017 = 100)',
       subtitle='Brasil e Paraíba, 2017 a 2019',
       caption='Fonte: PNADc - IBGE.', caption_size = 0.1)

3. Rendimento mensal por sexo no Brasil e na Paraíba

Ao analisar os valores de rendimento mensal por sexo, percebe-se os maiores ganhos dos Homens no Brasil e na Paraíba, com ambos os ganhos maiores a nível nacional.

# Definindo um dataframe com valores de salário médio por sexo para a Para?ba (sexopb) e para o Brasil (sexobr).
sexobr <- db %>%
  group_by(Ano, V2007) %>% 
  summarize(sal_medio = mean(VD4019, na.rm = TRUE))%>%
  mutate(Sexo = ifelse(V2007==1,"Homem", "Mulher"))%>%
  mutate(UF = "Brasil")

sexopb <- db %>%
  filter(UF==25)%>%
  group_by(Ano, V2007) %>% 
  summarize(sal_medio = mean(VD4019, na.rm = TRUE))%>%
  mutate(Sexo = ifelse(V2007==1,"Homem", "Mulher"))%>% #Criando uma vari?vel para definir o r?tulo de acordo com o dicion?rio
  mutate(UF = "Paraíba")

sexo <- merge(sexobr, sexopb, all = TRUE)
sexo$Ano <- parse_date_time(sexo$Ano, "%Y")

sexo$Sexo = factor(sexo$Sexo, 
                   levels=c('Mulher', 'Homem')) #Definindo os n?veis da vari?vel


basicplot2 <- ggplot(sexo, aes(Ano, sal_medio, fill=Sexo)) +
  geom_col(position = "dodge") +  
  theme_bw()+
  facet_wrap(~ UF, ncol= 2, scales = "free") +
  theme(axis.text.x = element_text(angle = 90, size = 12.5), 
        axis.text.y=element_text(hjust=0.5, size=12.5), axis.title=element_text(size=12.5), 
        legend.position="bottom", legend.text=element_text(size=10), strip.text.x = element_text(size = 12.5)) +
  labs(fill=NULL, x = "Período",y = "Rendimento Médio",title = "Rendimento mensal médio por sexo", subtitle = "Brasil e Paraíba, 2017 a 2019", caption = "Fonte: PNADc")+
  coord_flip()

basicplot2

4. Rendimento médio mensal por nível de instrução, por trimestre. Brasil e Paraíba, 2017 a 2019

Percebe-se forte influência do ensino superior na definição do rendimento mensal.

nivelbr <- db %>%
  group_by(periodo, VD3004)%>%
  summarize(sal_medio = mean(VD4019, na.rm = TRUE))%>%
  mutate(UF = "Brasil")

nivelpb <- db %>%
  filter(UF==25)%>%
  group_by(periodo, VD3004)%>%
  summarize(sal_medio = mean(VD4019, na.rm = TRUE))%>%
  mutate(UF = "Paraíba")

Nivel <- merge(nivelbr, nivelpb, all=TRUE)%>%
  mutate(nivel = ifelse(VD3004 == 1, "Sem instrução e menos de 1 ano de estudo",
                        (ifelse(VD3004 == 2, "Fundamental incompleto ou equivalente",
                                (ifelse(VD3004 == 3, "Fundamental completo ou equivalente",
                                        (ifelse(VD3004 == 4, "Médio incompleto ou equivalente",
                                                (ifelse(VD3004 == 5, "Médio completo ou equivalente",
                                                        (ifelse(VD3004 == 6, "Superior incompleto ou equivalente", "Superior completo"))))))))))))
Nivel$periodo <- parse_date_time(Nivel$periodo, "%Y.q")

Nivel$nivel <- factor(Nivel$nivel, levels = c("Sem instrução e menos de 1 ano de estudo","Fundamental incompleto ou equivalente","Fundamental completo ou equivalente","Médio incompleto ou equivalente","Médio completo ou equivalente","Superior incompleto ou equivalente","Superior completo"))

basicplot3 <- ggplot(Nivel, aes(periodo, sal_medio, color=nivel)) +
  facet_wrap(~ UF, ncol= 2, scales = "free")+
  theme_bw()+
  geom_line(size=1) +
  geom_point(size=3)+
  theme(axis.text.x = element_text(angle = 90, size = 12.5), 
        axis.text.y=element_text(hjust=0.5, size=7), axis.title=element_text(size=12.5),legend.text=element_text(size=10), strip.text.x = element_text(size = 12.5)) +
  labs(color=NULL, x = "Período",y = "Rendimento Médio",title = "Rendimento mensal médio por nível de instrução, por trimestre", subtitle = "Brasil e Para?ba, 2017 a 2019", caption = "Fonte: PNADc")

basicplot3

5. Situação de ocupação da População em Idade Ativa. Brasil, 2017 a 2019

Ao avaliar os indicadores de ocupação, percebemos queda no percentual de pessoas ocupadas formalmente. Houveram aumentos nos percentuais dos Ocupados Informais e Empregadores/Conta Própria.

sitocup <- db %>%
  group_by(Ano, sitocup)%>%
  summarize(n = n())%>%
  mutate(prop = 100*(n/ sum(n)))%>%
  mutate(sitocup2 = ifelse(sitocup==1,"Ocupado Formal", 
                           (ifelse(sitocup==2,"Ocupado Informal",
                                   (ifelse(sitocup==3,"Empregador/ Conta própria",
                                           (ifelse(sitocup==4, "Desocupado", "Inativo"))))))))

sitocup$sitocup2 <-  factor(sitocup$sitocup2, 
                            levels = c("Ocupado Formal", "Ocupado Informal", "Empregador/ Conta própria", "Desocupado", "Inativo"))

basicplot4 <- ggplot(sitocup, aes("", y = prop, fill = sitocup2 )) + 
  geom_bar(stat = "identity") +
  geom_text(aes(label =sprintf("%.1f%%", prop, big.mark = ",")),
            size= 3, position = position_stack(vjust = 0.5)) +
  coord_polar(theta = "y") +
  facet_grid(facets=. ~ Ano)  +
  theme(axis.title.x = element_blank(),
        axis.title.y = element_blank(),legend.position='bottom',
        strip.text.x = element_text(size = 22)) + 
  guides(fill=guide_legend(nrow=2,byrow=TRUE)) +
  labs(title = "Distribuição da PIA (População em Idade Ativa), por situação de ocupação", x = NULL, y = NULL,
       subtitle = "Brasil, 2017 a 2019", fill= NULL, caption = "Fonte: PNADc.")

basicplot4

6. Situação de ocupação da População em Idade Ativa. Paraíba, 2017 a 2019

sitocuppb <- db %>%
  filter(UF==25)%>%
  group_by(Ano, sitocup)%>%
  summarize(n = n())%>%
  mutate(prop = 100*(n/ sum(n)))%>%
  mutate(sitocup2 = ifelse(sitocup==1,"Ocupado Formal", 
                           (ifelse(sitocup==2,"Ocupado Informal",
                                   (ifelse(sitocup==3,"Empregador/ Conta própria",
                                           (ifelse(sitocup==4, "Desocupado", "Inativo"))))))))

sitocuppb$sitocup2 <-  factor(sitocuppb$sitocup2, 
                            levels = c("Ocupado Formal", "Ocupado Informal", "Empregador/ Conta própria", "Desocupado", "Inativo"))

basicplot5 <- ggplot(sitocuppb, aes("", y = prop, fill = sitocup2 )) + 
  geom_bar(stat = "identity") +
  geom_text(aes(label =sprintf("%.1f%%", prop, big.mark = ",")),
            size= 3, position = position_stack(vjust = 0.5)) +
  coord_polar(theta = "y") +
  facet_grid(facets=. ~ Ano)  +
  theme(axis.title.x = element_blank(),
        axis.title.y = element_blank(),legend.position='bottom',
        strip.text.x = element_text(size = 22)) + 
  guides(fill=guide_legend(nrow=2,byrow=TRUE)) +
  labs(title = "Distribuição da PIA (População em Idade Ativa), por situação de ocupação", x = NULL, y = NULL,
       subtitle = "Brasil, 2017 a 2019", fill= NULL, caption = "Fonte: PNADc.")

basicplot5