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.
Neste projeto, utilizamos os seguintes pacotes:
# 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.
#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.
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 à:
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>
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
# 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)
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
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
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
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