github.com/JoaoSilvaCorreia

DOI

Objetivo

Analisar as despesas com alimentação no domicílio e fora do domicílio das famílias brasileiras, utilizando os microdados da Pesquisa de Orçamentos Familiares (POF) 2017-2018. O estudo inclui a criação de um desenho amostral para expandir os resultados para a população, além de realizar uma análise descritiva e de regressão das despesas com alimentação.

Carregando as bibliotecas necessárias

knitr::opts_chunk$set(echo = TRUE)

# limpar ambiente
#rm(list=ls())

#Carregar pacotes necessários
library(data.table)   # Para manipulação de dados
library(knitr)        
library(dplyr)        # Para manipulação de dados
library(tidyr)        # Para manipulação de dados
library(tidyverse)    # Para manipulação de dados
library(ggplot2)      # Para visualização de dados
library(stargazer)    # Para gerar tabelas de regressão
library(tidyverse)    # Para manipulação de base de dados
library(broom)        # Para converter regressões em base de dados
library(data.table)   # Para gerar data frames
library(randomizr)    # Para randomização
library(RCT)          # Para análise de ensaios clínicos randomizados
library(xtable)       # Para gerar tabelas em LaTeX
library(MatchIt)      # Pacote para matching
library(cobalt)       # Para balanceamento de covariáveis
library(lfe)          # Para regressões com efeitos fixos
library(readxl)       # Para ler arquivos Excel
library(survey)       # Para análise de amostras complexas
library(geobr)        # Para baixar mapas do Brasil
library(sf)           # Para manipulação de dados espaciais
set.seed(2024) # Definindo uma semente para reprodutibilidade

Baixando os microdados da POF 2017-2018

Os dados da Pesquisa de Orçamentos Familiares (POF) 2017-2018 podem ser baixados diretamente do site do IBGE. Acesse o seguinte link para obter os microdados: Microdados da POF 2017-2018

Definindo o diretório de trabalho

Defina o diretório de trabalho onde os microdados baixados e descomprimidos estão localizados. Certifique-se de que o caminho esteja correto para o seu sistema.

setwd("D:/POF 2017-2018 (update 20250424)/Dados_20230713/")  #local dos microdados

1 - Base Morador

a) Carregar e processar a base

# Definindo o diretório de trabalho
setwd("D:/POF 2017-2018 (update 20250424)/Dados_20230713/")  #local dos microdados

# REGISTRO - MORADOR
MORADOR <- 
read.fwf("MORADOR.txt" 
   , widths = c(2,4,1,9,2,1,2,2,1,2,2,4,3,1,1,
                1,1,1,2,1,2,1,1,1,1,1,1,1,1,1,
                1,1,1,1,1,2,1,1,2,1,1,2,1,1,1,
                2,1,2,14,14,10,1,20,20,20,20)
   , na.strings=c(" ")
   , col.names = c("UF", "ESTRATO_POF", "TIPO_SITUACAO_REG", 
                   "COD_UPA", "NUM_DOM", "NUM_UC", "COD_INFORMANTE",
                   "V0306", "V0401", "V04021", "V04022", "V04023",
                   "V0403", "V0404", "V0405", "V0406", "V0407",
                   "V0408", "V0409", "V0410", "V0411", "V0412",
                   "V0413", "V0414", "V0415", "V0416", 
                   "V041711", "V041712", "V041721", "V041722",
                   "V041731", "V041732", "V041741", "V041742",
                   "V0418", "V0419", "V0420", "V0421", "V0422",
                   "V0423", "V0424", "V0425", "V0426", "V0427",
                   "V0428", "V0429", "V0430", "ANOS_ESTUDO",
                   "PESO", "PESO_FINAL", "RENDA_TOTAL",
                   "NIVEL_INSTRUCAO", "RENDA_DISP_PC","RENDA_MONET_PC",    
                   "RENDA_NAO_MONET_PC","DEDUCAO_PC"   )
   , dec="."
)   

b) Criar variáveis adicionais de código da UC, número de pessoas na UC e renda total da UC.

MORADOR2 <- MORADOR %>%
mutate(
 N = 1, #Cada observação da base
 CODUC = COD_UPA * 1000 + NUM_DOM * 10 + NUM_UC, #CODIGO DA UNIDADE DE CONSUMO
 RENDA_TOTAL_UC = RENDA_TOTAL, #Valor em reais (R$), considerando os centavos, do rendimento bruto total mensal da Unidade de Consumo
 LN_RENDA_TOTAL_UC = log(RENDA_TOTAL_UC + 1), #Logaritmo natural da renda total da Unidade de Consumo
 ) %>% 
filter(!(V0306 %in% c(18, 19))) # REMOVE EMPREGADO DOMESTICO E SEU PARENTE

#caculando o número de pessoas da UC
npessoas <- MORADOR2 %>%
group_by(CODUC) %>%
summarise(NPF = sum(N))

# Juntar com base morador
MORADOR2 <- MORADOR2 %>%
left_join(npessoas, by = "CODUC")%>%
  mutate(
    PE = NPF * PESO_FINAL, # Peso para análises per capita 
    RENDA_TOTAL_PC = RENDA_TOTAL_UC / NPF)%>% #renda total per capita
    filter(V0306 == 1) # Pessoa de referencia


MORADOR2

2 - Base Caderneta Coletiva

a) Carregar e processar a base

setwd("D:/POF 2017-2018 (update 20250424)/Dados_20230713/")  #local dos microdados

CADERNETA_COLETIVA <- 
  read.fwf("CADERNETA_COLETIVA.txt" 
           , widths = c(2,4,1,9,2,1,2,3,7,2,10,12,10,1,2,14,14,10,
                        9,4,5,9,5
           )
           , na.strings=c(" ")
           , col.names = c("UF", "ESTRATO_POF", "TIPO_SITUACAO_REG",
                           "COD_UPA", "NUM_DOM", "NUM_UC", "QUADRO",
                           "SEQ", "V9001", "V9002", "V8000", "DEFLATOR",
                           "V8000_DEFLA", "COD_IMPUT_VALOR",
                           "FATOR_ANUALIZACAO", "PESO", "PESO_FINAL",
                           "RENDA_TOTAL",
                           "V9005", "V9007", "V9009", "QTD_FINAL","V9004")
           , dec="."
  ) 

b) Criar variáveis adicionais

CADERNETA_COLETIVA <- CADERNETA_COLETIVA %>%
  mutate(
    CODUC = COD_UPA * 1000 + NUM_DOM * 10 + NUM_UC,
    DESP_MENSAL = (V8000_DEFLA * FATOR_ANUALIZACAO) / 12, #despesa mensal deflacionada e anualizada
    CODIGO = as.integer(substr(V9001, 1, 5))  # criando um código de 5 dígitos, para compatibilizar com o tradutor de alimentos
  )

CADERNETA_COLETIVA

3 - Base Despesa Individual

a) Carregar e processar a base

# REGISTRO - DESPESA INDIVIDUAL
setwd("D:/POF 2017-2018 (update 20250424)/Dados_20230713/")  #local dos microdados
DESPESA_INDIVIDUAL <- 
  read.fwf("DESPESA_INDIVIDUAL.txt" 
           , widths = c(2,4,1,9,2,1,2,2,2,7,2,10,2
                        ,2,1,1,1,12,10,1,2,14,14,10,5)
           , na.strings=c(" ")
           , col.names = c("UF", "ESTRATO_POF", "TIPO_SITUACAO_REG",
                           "COD_UPA", "NUM_DOM", "NUM_UC",
                           "COD_INFORMANTE", "QUADRO", "SEQ", "V9001",
                           "V9002", "V8000", "V9010", "V9011", "V9012",
                           "V4104", "V4105", "DEFLATOR", "V8000_DEFLA",
                           "COD_IMPUT_VALOR", "FATOR_ANUALIZACAO",
                           "PESO", "PESO_FINAL", "RENDA_TOTAL","V9004")
           , dec="."
  )   

b) Criar variáveis adicionais

DESPESA_INDIVIDUAL = DESPESA_INDIVIDUAL %>%
  mutate(
    CODUC = COD_UPA * 1000 + NUM_DOM * 10 + NUM_UC,
    DESP_MENSAL = (V8000_DEFLA * FATOR_ANUALIZACAO) / 12,
    CODIGO = as.integer(substr(V9001, 1, 5)),
    N = 1)


DESPESA_INDIVIDUAL

4 - Carregar Tradutor de Alimentos

#Carregar tradutores
setwd("D:/POF 2017-2018 (update 20250424)/Tradutores_20230713/")

trad_alim <- readxl::read_excel("Tradutor_Alimentacao.xls") 

trad_alim = trad_alim %>%
  rename(CODIGO = Codigo)

trad_alim

5 - Processar a despesa com alimentação (juntando as bases)

alimentos <- bind_rows(CADERNETA_COLETIVA, DESPESA_INDIVIDUAL) %>% #blind_rows junta as duas bases
left_join(trad_alim, by = "CODIGO") %>% 
mutate(ALIM_DOMI = ifelse(Nivel_1 == 1, DESP_MENSAL, 0),
ALIM_FORA = ifelse(Nivel_1 == 2, DESP_MENSAL, 0))%>%
  select(CODUC, ALIM_DOMI, ALIM_FORA, CODIGO)

alimentos

6 - Agregando as despesas de alimentaão com a base morador

#Agregar despesas por UC
alim_fam <- alimentos %>%
  left_join(MORADOR2, by = "CODUC") %>%
  mutate(
    ALIM_DOMI = ifelse(is.na(ALIM_DOMI), 0, ALIM_DOMI), #caso alguma UC não tenha gasto com alimentação em domicílio, atribui 0
    ALIM_FORA = ifelse(is.na(ALIM_FORA), 0, ALIM_FORA) #caso alguma UC não tenha gasto com alimentação fora do domicílio, atribui 0
  )


alim_fam

7 - Somando o gasto familiar com alimentos

alimentos_UC <- alim_fam %>%
  group_by(CODUC) %>%
  summarise(
    ALIM_DOMI = sum(ALIM_DOMI, na.rm = TRUE), #soma o gasto com alimentação em domicílio
    LN_ALIM_DOMI = log(ALIM_DOMI + 1), #logaritmo natural do gasto com alimentação em domicílio
    ALIM_FORA = sum(ALIM_FORA, na.rm = TRUE), #soma o gasto com alimentação fora do domicílio
    LN_ALIM_FORA = log(ALIM_FORA + 1), #logaritmo natural do gasto com alimentação fora do domicílio
    )

alimentos_UC

8 - Juntando o total de gastos com a base morador

alimentos_UC <- alimentos_UC %>%
  left_join(MORADOR2, by = "CODUC")

alimentos_UC

9 - Expandindo a amostra para a população com a criação de um desenho amostral

design_pof <- svydesign(
  ids = ~COD_UPA,                # unidade primária de amostragem
  strata = ~ESTRATO_POF,     # estrato de amostragem
  weights = ~PESO_FINAL,   # nome da variável de peso
  data = alimentos_UC, # base
  nest = TRUE # aninhamento dos dados
)


#summary(design_pof) # Resumo do desenho amostral

10 - Análise descritiva das despesas com alimentação

Média para o Brasil

svymean(~ALIM_DOMI + ALIM_FORA, design = design_pof, na.rm = TRUE)
##             mean     SE
## ALIM_DOMI 442.51 4.0460
## ALIM_FORA 210.66 4.0714

Média para as Unidades da Federação

descritivas = svyby(
  formula = ~ALIM_DOMI + ALIM_FORA, #variaveis de interesse
  by = ~UF,  #variavel de agrupamento
  design = design_pof, #desenho amostral
  FUN = svymean,  #função para calcular a média
  na.rm = TRUE
)

descritivas

Os resultados podem ser confirmados através do SIDRA - IBGE:

Tabela 6972

11 - Gráfico das despesas com alimentação por Unidade da Federação

#obtendo as UFs
estados <- read_state(code_state = "all", year = 2020) # retorna um sf com todos os estados


# Junta os dados de despesa ao mapa
mapa_despesas <- left_join(estados, descritivas, by = c("code_state" = "UF"))

Mapa de alimentação no domicílio

ggplot(mapa_despesas) +
  geom_sf(aes(fill = ALIM_DOMI), color = "white") +
  scale_fill_viridis_c(option = "plasma", name = "R$/mês") +
  labs(title = "Despesa média mensal familiar com alimentação no domicílio por UF") +
  theme_void()

Mapa de alimentação fora do domicílio

ggplot(mapa_despesas) +
  geom_sf(aes(fill = ALIM_FORA), color = "white") +
  scale_fill_viridis_c(option = "magma", name = "R$/mês") +
  labs(title = "Despesa média mensal familiar com alimentação fora do domicílio por UF") +
  theme_void()

12 - Análise de regressão das despesas com alimentação

Os modelos estimam a relação entre as despesas com alimentação e algumas características das famílias

Modelo 1 – Alimentação no domicílio

\[ \log(\text{Alimentacao}_i) = \beta_0 + \beta_1 \log(\text{Renda}_i) + \sum_{u=1}^{26} \delta_u \text{UF}_{ui} + \beta_2 \text{Moradores}_i + \varepsilon_i \]

Modelo 2 – Alimentação fora do domicílio

\[ \log(\text{Alimentacao}_i) = \beta_0 + \beta_1 \log(\text{Renda}_i) + \sum_{u=1}^{26} \delta_u \text{UF}_{ui} + \beta_2 \text{Moradores}_i + \varepsilon_i \] Os modelos foram estimados usando o estimador de variância robusta ajustado para o desenho amostral da POF (svyglm do pacote survey).

# Regressão das despesas com alimentação no domicílio
reg_alim_domi <- svyglm(LN_ALIM_DOMI ~ LN_RENDA_TOTAL_UC + as.factor(UF) + NPF, design = design_pof)
# Regressão das despesas com alimentação fora do domicílio
reg_alim_fora <- svyglm(LN_ALIM_FORA ~ LN_RENDA_TOTAL_UC + as.factor(UF) + NPF, design = design_pof)


stargazer(reg_alim_domi, reg_alim_fora, 
          type = "text", 
          title = "Regressões das despesas com alimentação")
## 
## Regressões das despesas com alimentação
## ==============================================
##                       Dependent variable:     
##                   ----------------------------
##                    LN_ALIM_DOMI  LN_ALIM_FORA 
##                        (1)            (2)     
## ----------------------------------------------
## LN_RENDA_TOTAL_UC    0.586***      1.149***   
##                      (0.019)        (0.020)   
##                                               
## as.factor(UF)12      1.705***      1.290***   
##                      (0.148)        (0.152)   
##                                               
## as.factor(UF)13      1.599***        0.147    
##                      (0.143)        (0.153)   
##                                               
## as.factor(UF)14      1.297***      -0.883***  
##                      (0.193)        (0.156)   
##                                               
## as.factor(UF)15      1.517***       0.304*    
##                      (0.166)        (0.163)   
##                                               
## as.factor(UF)16      2.323***      0.865***   
##                      (0.139)        (0.173)   
##                                               
## as.factor(UF)17       0.242         -0.248    
##                      (0.192)        (0.171)   
##                                               
## as.factor(UF)21      1.434***      0.473***   
##                      (0.152)        (0.156)   
##                                               
## as.factor(UF)22      1.756***      1.608***   
##                      (0.145)        (0.178)   
##                                               
## as.factor(UF)23      1.588***      0.711***   
##                      (0.137)        (0.143)   
##                                               
## as.factor(UF)24      1.761***      1.593***   
##                      (0.141)        (0.163)   
##                                               
## as.factor(UF)25      1.408***       0.346**   
##                      (0.151)        (0.156)   
##                                               
## as.factor(UF)26      1.485***      0.985***   
##                      (0.138)        (0.143)   
##                                               
## as.factor(UF)27      1.126***       -0.135    
##                      (0.158)        (0.148)   
##                                               
## as.factor(UF)28      1.614***      2.094***   
##                      (0.141)        (0.163)   
##                                               
## as.factor(UF)29      1.598***      1.352***   
##                      (0.143)        (0.147)   
##                                               
## as.factor(UF)31      1.234***      0.878***   
##                      (0.134)        (0.143)   
##                                               
## as.factor(UF)32      0.316**        -0.206    
##                      (0.148)        (0.156)   
##                                               
## as.factor(UF)33      0.966***       -0.062    
##                      (0.147)        (0.148)   
##                                               
## as.factor(UF)35      0.950***        0.076    
##                      (0.141)        (0.141)   
##                                               
## as.factor(UF)41      0.905***       0.267*    
##                      (0.147)        (0.148)   
##                                               
## as.factor(UF)42      1.300***        0.036    
##                      (0.147)        (0.153)   
##                                               
## as.factor(UF)43      1.492***      0.603***   
##                      (0.136)        (0.146)   
##                                               
## as.factor(UF)50      1.086***      1.654***   
##                      (0.153)        (0.152)   
##                                               
## as.factor(UF)51      0.753***      0.787***   
##                      (0.177)        (0.160)   
##                                               
## as.factor(UF)52      1.198***      0.950***   
##                      (0.155)        (0.158)   
##                                               
## as.factor(UF)53      0.653***      0.501***   
##                      (0.153)        (0.155)   
##                                               
## NPF                  0.123***      0.124***   
##                      (0.009)        (0.010)   
##                                               
## Constant            -1.385***      -7.146***  
##                      (0.195)        (0.199)   
##                                               
## ----------------------------------------------
## Observations          58,014        58,014    
## Log Likelihood     -137,175.900  -144,998.100 
## Akaike Inf. Crit.  274,409.900    290,054.200 
## ==============================================
## Note:              *p<0.1; **p<0.05; ***p<0.01

Foram estimados dois modelos de regressão linear com erros-padrão robustos ao plano amostral, a fim de investigar as despesas mensais com alimentação no domicílio e fora do domicílio. Os resultados indicam que a renda total da unidade de consumo exerce influência positiva e estatisticamente significativa sobre ambos os tipos de despesa. Especificamente, um aumento de 1% na renda está associado a um aumento de aproximadamente 0,59% na despesa com alimentação no domicílio e 1,15% na alimentação fora do domicílio, sugerindo maior elasticidade do segundo tipo de despesa em relação à renda.

O número de pessoas na família também apresenta assosciação positiva significativa, com cada acréscimo de um membro estando relacionado a um aumento médio de 12% nas despesas alimentares. Adicionalmente, observam-se diferenças regionais relevantes, mesmo após o controle por renda e tamanho da família, o que pode refletir variações nos preços relativos entre as regiões e padrões culturais de consumo.