knitr::opts_chunk$set( collapse = TRUE, comment = "#>", warning = FALSE, message = FALSE )
library(pof) library(tidyverse)
O objetivo dessa vinheta é realizar uma análise dos dados da POF de 2017/2018 sobre nutrientes consumidos pelos idosos no Brasil.
Para isso vamos precisar montar uma tabela com as variáveis
Ha dois quadros na tabela de alimentação, ver como tratar os dois.
O peimrio passo é ler a tabela com os estratos para ter informações sobre a região do estrato (capital, rural, etc)
setwd(here::here()) estratos <- readxl::read_excel("dados/2018/Documentos/Estratos POF 2017-2018.xls", skip = 6, col_names = c("uf", "capital", "resto_rm", "resto_uf", "rural")) %>% filter(!is.na(capital)) %>% mutate_all(str_replace, " [ae] ", ":") %>% pivot_longer(-uf, names_to = "tipo_domicilio") %>% mutate(value = ifelse(value == "-", NA, value), tipo_domicilio = str_replace(tipo_domicilio, "_", " "), estrato = map(value, ~eval(parse(text = .x)))) %>% unnest(estrato) %>% select(estrato, tipo_domicilio) %>% filter(!is.na(estrato))
O segundo é ler os dados de pessoas, aplicar os código usados para guardas as informações qualitativas e unir as informações dos estratos.
setwd(here::here()) pessoas <- ler_morador(2018) %>% transmute(estrato = ESTRATO_POF, cod_pessoa = paste0(ESTRATO_POF, COD_UPA, NUM_DOM, NUM_UC, COD_INFORMANTE), idade = V0403, sexo = V0404, cor = V0405, renda = RENDA_TOTAL, peso = PESO_FINAL) %>% mutate( cor = case_when( cor == 1 ~ "Branca", cor == 2 ~ "Preta", cor == 3 ~ "Amarela", cor == 4 ~ "Parda", cor == 5 ~ "Indígena", cor == 9 ~ "Sem declaração" ), sexo = ifelse(sexo == 1, "Homem", "Mulher") ) %>% left_join(estratos, "estrato") %>% select(-estrato)
O terceita passo consiste em ler a tabela de alimentos e fazer algumas agregações por pessoa.
setwd(here::here()) produtos <- readxl::read_excel( "dados/2018/Documentos/Cadastro de Produtos do Consumo Alimentar.xls" ) %>% set_names(c("codigo", "produto")) %>% mutate(codigo = as.numeric(codigo)) dic <- readxl::read_excel("dados/2018/Documentos/Dicion†rios de v†riaveis.xls", "Consumo Alimentar", skip = 2) %>% filter(!is.na(Tamanho)) posicoes <- as.numeric(dic$Tamanho) alimentos <- read_fwf("dados/2018/CONSUMO_ALIMENTAR.txt", fwf_widths(posicoes)) %>% set_names(dic$`Código da variável`) %>% mutate(cod_pessoa = paste0(ESTRATO_POF, COD_UPA, NUM_DOM, NUM_UC, COD_INFORMANTE)) %>% rename(codigo = V9001, quantidade = V9005, cod_medida = V9007, hora = V9015, cod_preparo = V9016, cod_refeicao = V9017, cod_local = V9018, gramas = QTD, azeite = V9019, mantega = V9020, acucar = V9021, adocante = V9022, mel = V9023, melado = V9024, mayonese = V9025, ketchup = V9026, mostarda = V9027, shoyu = V9028, queijo_ralado = V9029, creme_leite = V9030) %>% janitor::clean_names() %>% left_join(produtos, "codigo") alim_pessoa <- alimentos %>% group_by(cod_pessoa, produto) %>% summarise(qtd = sum(gramas), .groups = "drop") %>% pivot_wider(names_from = produto, values_from = qtd, values_fill = list(qtd = 0)) nut_pessoa <- alimentos %>% group_by(cod_pessoa) %>% summarise_at(vars(azeite:creme_leite, energia_kcal:folato), sum, na.rm = TRUE)
Para que possamos ao fim unir as inforamações das três tabelas
dados <- pessoas %>% right_join(alim_pessoa, "cod_pessoa") %>% left_join(nut_pessoa, "cod_pessoa")
Digamos que queiramos saber o consumo médio dos Nutrientes entre idosos por macrorregião do Brasil.
dados %>% filter(idade > 65) %>% mutate(regiao = str_sub(cod_pessoa, 1, 1) %>% as.numeric() %>% map_chr(~switch(.x, "Norte", "Nordeste", "Sul", "Sudeste", "Centro-Oeste" ))) %>% select(regiao, peso, energia_kcal:folato) %>% group_by(regiao) %>% summarise_at(vars(energia_kcal:folato), ~round(weighted.mean(.x, w = peso, na.rm = TRUE), 2)) %>% pivot_longer(-regiao, names_to = "Nutriente") %>% pivot_wider(names_from = regiao, values_from = value) %>% knitr::kable()
Outra possibilidade de anásise é verificar a quantidade de pesacado fresco comido pelos idosos nas diferentes regiões do Brasil ou de a cordo com a cor de pele.
Para tanto iremos utlizar um tradutor dos códigos dos produtos para grupos alimentares disponibilizado pelo IBGE.
setwd(here::here()) cod_peixes <- ler_tradutor_alimentacao(2018) %>% filter(nivel_3 == 1075) alim_peixes <- alimentos %>% mutate(codigo = codigo %/% 100) %>% semi_join(cod_peixes, "codigo") pessoas_peixes <- pessoas %>% left_join(alim_peixes,"cod_pessoa")
Com essa tabela em mãos podemos calcular o consumo médio de peixes na população como um todo:
pessoas_peixes %>% summarise(media = weighted.mean(gramas, peso_final, na.rm = TRUE)) %>% knitr::kable()
Ou entre os idosos:
pessoas_peixes %>% filter(idade > 65) %>% summarise(media = weighted.mean(gramas, peso_final, na.rm = TRUE)) %>% knitr::kable()
E podemos verificar as diferenças regionais e cor propostas ao início
pessoas_peixes %>% filter(idade > 65) %>% mutate(regiao = str_sub(cod_pessoa, 1, 1) %>% as.numeric() %>% map_chr(~switch(.x, "Norte", "Nordeste", "Sul", "Sudeste", "Centro-Oeste" ))) %>% group_by(regiao) %>% summarise(media = weighted.mean(gramas, peso_final, na.rm = TRUE)) %>% knitr::kable() pessoas_peixes %>% filter(idade > 65) %>% mutate(regiao = str_sub(cod_pessoa, 1, 1) %>% as.numeric() %>% map_chr(~switch(.x, "Norte", "Nordeste", "Sul", "Sudeste", "Centro-Oeste" ))) %>% group_by(cor) %>% summarise(media = weighted.mean(gramas, peso_final, na.rm = TRUE)) %>% knitr::kable()
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.