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.
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
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
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
# 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="."
)
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
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="."
)
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
# 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="."
)
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
#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
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
#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
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
alimentos_UC <- alimentos_UC %>%
left_join(MORADOR2, by = "CODUC")
alimentos_UC
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
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:
#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()
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.