Introdução

Pessoal, espero que estejam ótimos!

Aqui é o lugar onde eu vou fazer as ilustrações para a ERU 487. Com este material eu espero que vocês consigam, em um futuro próximo, fazer as suas próprias ilustrações, análises, etc.

Pacotes Usados

Se o library("nomedopacote") não funcionar, talvez você não tenha instalado o pacote ainda. Por isso, talvez você precise utilizar o install.packages("nomedopacote") antes. Este procedimento de instalar algo precisa ser feito apenas uma vez, mas o carregamento do pacote, library("nomedopacote") precisa ser feito toda vez que você abrir o Rstudio.

Por isso, faça isso apenas da PRIMEIRA VEZ QUE ESTIVER USANDO O R:

install.packages("ipeadatar")
install.packages("ggplot2")
install.packages("ggthemes")
install.packages("sidrar")
install.packages("tidyr")
install.packages("tidyverse")
install.packages("wbstats")
install.packages("geobr")
install.packages("sp")
install.packages("sf", dependencies = TRUE)
install.packages("jsonlite")

Já esta parte aqui você precisa fazer TODA VEZ QUE INICIAR UMA NOVA SESSÃO:

library("ipeadatar")
library("ggplot2")
library("ggthemes")
library("sidrar")
library("tidyr")
library("tidyverse")
library("wbstats")
library("geobr")
library("sp")
library("sf")
library("jsonlite")

As bases de dados usadas aqui são públicas e eu não preciso enviá-las para vocês. A gente faz o download delas de três fontes preferencialmente:

  • IPEADATA com o library("ipeadatar")

  • Our World in Data com o read.csv combinado com library("jsonlite")

  • Dados do IBGE pelo library("sidrar")

Isso facilita a vida porque você não vai se preocupar com criar as bases, nem se a base está separada por vírgulas, por pontos, etc. A parte ruim é que você não vai aprender a lidar com esses problemas básicos logo no início.

Aula 01 - 11 de março de 2025

Eu fiz as ilustrações da aula de hoje com o ipeadatar.

Vale a pena usar o pacote!

Primeiro a gente vai olhar todas as séries disponíveis. Assim vai ficar bem mais fácil de procurar por elas depois.

A gente vai fazer isso usando este pacote ipeadatar.

as<-available_series(language = c("br"))

Agora você pode visualizar o objeto “as” e filtrar pelos nomes que está procurando.

De posse das bases, você precisa fazer boas perguntas e entender qual a melhor forma de respondê-las.

Será que é mais perigoso ser jovem hoje ou na época dos seus pais?

Procure por homicídios no objeto “as”.

Vamos então olhar as bases: THOMIC e THOMICJ.

th1<-ipeadata("THOMIC", language = c("br"), quiet = FALSE)
th2<-ipeadata("THOMICJ", language = c("br"), quiet = FALSE)

save(th1, file="th1.Rda")
save(th2, file="th2.Rda")


metadata("BM12_NUCLEOPIPCA12")


#DERAL12_ATFMAC12

farinha_crua <- ipeadata("DERAL12_ATFMAC12", language = c("br"), quiet = FALSE)
farinha_torrada <- ipeadata("DERAL12_ATFMAT12", language = c("br"), quiet = FALSE)
    

raiz <- ipeadata("DERAL12_PRMAN12", language = c("br"), quiet = FALSE)

Agora a gente vai filtrar as duas bases (th1 e th2) pelo código que indica que o valor é para o Brasil inteiro. Você pode fazer isso tanto pela coluna “uname” quanto pela “tcode”.

load("th1.Rda")
load("th2.Rda")
i1<-th1 %>% filter(uname=="Brasil")
i2<-th2 %>% filter(uname=="Brasil")
i1 <- i1 %>% mutate(th_total = value) 
i2 <- i2 %>% mutate(th_jovem = value) 

th3 <- merge(i1, i2, by="date") %>% select(date, th_jovem, th_total)
th3$ano <- as.numeric(substr(th3$date, 1, 4))

Fazendo o gráfico

ggplot(th3, aes(x = ano)) +
  geom_line(aes(y = th_total, color = "Total", linetype = "Total"), size = 1) +
  geom_point(aes(y = th_total, color = "Total"), size = 2) +
  geom_line(aes(y = th_jovem, color = "Jovem (15-29)", linetype = "Jovem (15-29)"), size = 1) +
  geom_point(aes(y = th_jovem, color = "Jovem (15-29)"), size = 2) +
  scale_color_manual(values = c("Total" = "gray20", "Jovem (15-29)" = "darkorange")) +
  scale_linetype_manual(values = c("Total" = "solid", "Jovem (15-29)" = "dotted")) +
  labs(x = "", y = "Taxa de homicídios (mortes/100mil)", color = "", linetype = "") +
  theme_minimal()

Provável que os pais de vocês fossem jovens por volta da década de 1990. Então, quando eles falarem que “na minha época era mais seguro”. Provavelmente eles tão certos.

Mas em Viçosa-MG é diferente

#tcode==3171303
i1 <- th1 %>% 
  filter(tcode == 3171303, date < "2022-01-01")
i2<-th2  %>% 
  filter(tcode == 3171303, date < "2022-01-01")
i1 <- i1 %>% mutate(th_total = value) 
i2 <- i2 %>% mutate(th_jovem = value) 

th3 <- merge(i1, i2, by="date") %>% select(date, th_jovem, th_total)
th3$ano <- as.numeric(substr(th3$date, 1, 4))

ggplot(th3, aes(x = ano)) +
  geom_line(aes(y = th_total, color = "Total", linetype = "Total"), size = 1) +
  geom_point(aes(y = th_total, color = "Total"), size = 2) +
  geom_line(aes(y = th_jovem, color = "Jovem (15-29)", linetype = "Jovem (15-29)"), size = 1) +
  geom_point(aes(y = th_jovem, color = "Jovem (15-29)"), size = 2) +
  scale_color_manual(values = c("Total" = "gray20", "Jovem (15-29)" = "darkorange")) +
  scale_linetype_manual(values = c("Total" = "solid", "Jovem (15-29)" = "dotted")) +
  labs(x = "", y = "Taxa de homicídios (mortes/100mil)", color = "", linetype = "") +
  theme_minimal()

Em Cruz das Almas - BA

#2909802

i1 <- th1 %>% 
  filter(tcode == 2909802, date < "2022-01-01")
i2<-th2  %>% 
  filter(tcode == 2909802, date < "2022-01-01")
i1 <- i1 %>% mutate(th_total = value) 
i2 <- i2 %>% mutate(th_jovem = value) 

th3 <- merge(i1, i2, by="date") %>% select(date, th_jovem, th_total)
th3$ano <- as.numeric(substr(th3$date, 1, 4))

ggplot(th3, aes(x = ano)) +
  geom_line(aes(y = th_total, color = "Total", linetype = "Total"), size = 1) +
  geom_point(aes(y = th_total, color = "Total"), size = 2) +
  geom_line(aes(y = th_jovem, color = "Jovem (15-29)", linetype = "Jovem (15-29)"), size = 1) +
  geom_point(aes(y = th_jovem, color = "Jovem (15-29)"), size = 2) +
  scale_color_manual(values = c("Total" = "gray20", "Jovem (15-29)" = "darkorange")) +
  scale_linetype_manual(values = c("Total" = "solid", "Jovem (15-29)" = "dotted")) +
  labs(x = "", y = "Taxa de homicídios (mortes/100mil)", color = "", linetype = "") +
  theme_minimal()

Alguma notícia boa?

Pelo menos a mortalidade infantil caiu.

Fui no “as” e procurei por “infantil”.

#DEPIS_TMI
#ADH_MORT1
mo1<-ipeadata("DEPIS_TMI", language = c("br"), quiet = FALSE)
mo2<-ipeadata("ODS_MORT5UF", language = c("br"), quiet = FALSE)

mo3<-mo2 %>% filter(uname=="Brasil")
mo3$ano<-year(mo3$date)

save(mo3, file="mo3.Rda")

Fazendo o gráfico para mo3.

load("mo3.Rda")

ggplot(mo3, aes(x = ano, y=value)) +
  geom_line(size=1, color="darkred") + 
  geom_point(size=2, color="darkred")+ 
  theme_minimal()+
    labs(x = "", y = "Mortalidade Infantil (5 anos, mortes/mil)") 

As vezes a gente tem um problema com gráficos com o eixo truncado. O gráfico acima parece que a taxa de mortalidade zerou. Mas isso não é verdade.

ggplot(mo3, aes(x = ano, y = value)) +
  geom_line(size = 1, color = "darkred") + 
  geom_point(size = 2, color = "darkred") + 
  scale_y_continuous(breaks = c(pretty(mo3$value), min(mo3$value))) +
  theme_minimal() +
  labs(x = "", y = "Mortalidade Infantil (5 anos, mortes/mil)")

Então, boa parte dessa queda de 50 para 14, uma redução de 72%, deve-se aos avanços da medicina, vacinas, etc.

Aula 02 - 14 de março de 2025

Expectativa de vida ao nascer

#IDHMLO
#DEPIS_ESVIDA

longevidade<-ipeadata("DEPIS_ESVIDA", language = c("br"), quiet = FALSE)
longevidade2 <-ipeadata("EVNNEW", language = "br")
longevidade2$ano<-year(longevidade2$date)

l1<-ggplot(subset(longevidade2, uname == "Brasil"), aes(x = ano, y = value)) +
  geom_line(size = 1, color = "darkred") + 
  geom_point(size = 2, color = "darkred") + 
  scale_y_continuous(breaks = c(pretty(longevidade2$value), min(longevidade2$value))) +
  theme_minimal() +
  labs(x = "", y = "Expectativa de vida ao nascer (anos)")

l1 

ggsave(file = "l1.png", plot = l1, width = 6.472, height = 4)

Isso é muito ou pouco comparado ao resto do mundo?

Vamos olhar então como são esses dados no resto do mundo…

# Fetch the data
expectativadevida <- read.csv("https://ourworldindata.org/grapher/life-expectancy.csv?v=1&csvType=full&useColumnShortNames=true")

# Fetch the metadata
metadata <- fromJSON("https://ourworldindata.org/grapher/life-expectancy.metadata.json?v=1&csvType=full&useColumnShortNames=true")

save(expectativadevida, file="expectativadevida.Rda")
load("expectativadevida.Rda")
df_filtered <-expectativadevida %>%
  filter(Entity %in% c("World", "Brazil", "United States", "France", "Germany", "Canada", "Argentina")) %>%
  filter(Year>1900)



# Criar o gráfico
l3 <- ggplot(df_filtered, aes(x = Year, y = life_expectancy_0__sex_total__age_0, color = Entity)) +
  geom_line() +
  geom_point(size = 1)+
  labs(title = "",
       x = "",
       y = "Expectativa de Vida ao Nascer",
       color = "") +
  theme_minimal()


l3

ggsave(file = "l3.png", plot = l3, width = 6.472, height = 4)

Há dois gráficos que eu fiz, mas que não estão aqui, aqueles sobre o gênero das crianças nascidas na China. Não vou repetir agora, mas se alguém quiser especificamente aquele gráfico, eu incluo.

Aula 03 - 18 de março de 2025

Mostrar a disparidade do IDH no Brasil. Algumas cidades apresentam índices comparáveis aos de países desenvolvidos, enquanto outras possuem valores próximos aos da África Subsaariana.

Apresentar os dados e o mapa (possivelmente o que foi elaborado para o artigo sobre o peso dos BB serve pra isso).

Se você colocar um mapa feito por você mesmo no seu TCC, eu duvido ele não tirar mais de 70. Mapa é vida.

Mostrar também que todo país tem governo. Pra não ocorrer o caso exótico de alguém achar que dá pra não ter governo. Veja bem, o TAMANHO DO GOVERNO é um questionamento válido e importante. A EXISTÊNCIA DE GOVERNO parece ser um questionamento que só os meus amigos estranhos do twitter fazem (o Ronaldinho Gaúcho, o Dragon Ball, o Cebolinha, ou algum outro personagem – nunca é uma pessoa).

Tamanho do Governo

Pra medir o tamanho do governo geralmente a gente divide o gasto do governo (G) pelo PIB

\[ \frac{G}{Y}, \quad Y=PIB \]

library(jsonlite)

# Fetch the data
gastosgoverno <- read.csv("https://ourworldindata.org/grapher/historical-gov-spending-gdp.csv?v=1&csvType=full&useColumnShortNames=true")
save(gastosgoverno, file="gastosgoverno.Rda")

# Fetch the metadata
metadata <- fromJSON("https://ourworldindata.org/grapher/historical-gov-spending-gdp.metadata.json?v=1&csvType=full&useColumnShortNames=true")

Eu vou fazer para todos os países, destacando apenas o Brasil

load("gastosgoverno.Rda")

df2<-gastosgoverno %>% filter(expenditure<100) %>% filter(Year>"1950")

gastos1<-ggplot(df2, aes(x = Year, y = expenditure, group = Entity, color = Entity == "Brazil")) +
  geom_line(alpha = 0.4) +  # Linhas para todos os países com transparência
  geom_point(data = df2[df2$Entity == "Brazil", ], size = 2) +  # Pontos só para o Brasil
  geom_line(data = df2[df2$Entity == "Brazil", ], size = 1.2) +  # Linha destacada para o Brasil
  scale_color_manual(values = c("gray70", "red"), labels = c("Outros", "Brasil")) +  # Ajuste na legenda
  theme_minimal() +
  labs(y = "Gastos do Governo (% do PIB)", x = NULL, color = NULL)  # Remove nome do eixo X e da legenda


ggsave(file = "gastos1.png", plot = gastos1, width = 6.472, height = 4)

gastos1

Vou olhar só para 2020

df3 <- gastosgoverno %>% filter(Year == "2020", expenditure < 70)

media_expenditure <- mean(df3$expenditure, na.rm = TRUE)  # Calcula a média

gastos2 <- ggplot(df3, aes(x = expenditure)) +
  geom_density(fill = "gray70", alpha = 0.5) +  # Distribuição dos dados
  geom_vline(data = df3 %>% filter(Entity == "Brazil"), 
             aes(xintercept = expenditure), 
             color = "darkgreen", size = 1.2) +  # Linha vertical para o Brasil
  geom_vline(aes(xintercept = media_expenditure), color = "blue", linetype = "dashed", size = 1) +  # Linha média
  geom_text(aes(x = media_expenditure, y = 0.025, label = paste0("Avg = ", round(media_expenditure, 1))), 
            color = "blue", angle = 0, vjust = -0.5, hjust = -0.3) +  # Texto da média
  geom_text(data = df3 %>% filter(Entity == "Brazil"),
            aes(x = expenditure, y = 0.02, label = "Brasil (2020)"), 
            color = "darkgreen", angle = 0, vjust = -0.5, hjust = -0.3) +  # Texto Brasil
  theme_minimal() +
  labs(x = "Gastos do Governo (% do PIB)", y = "Densidade")

ggsave(file = "gastos2.png", plot = gastos2, width = 6.472, height = 4)

gastos2

df4 <- gastosgoverno %>% filter(Year == "1980", expenditure < 70)

media_expenditure <- mean(df4$expenditure, na.rm = TRUE)  # Calcula a média

gastos3 <- ggplot(df4, aes(x = expenditure)) +
  geom_density(fill = "gray70", alpha = 0.5) +  # Distribuição dos dados
  geom_vline(data = df4 %>% filter(Entity == "Brazil"), 
             aes(xintercept = expenditure), 
             color = "darkgreen", size = 1.2) +  # Linha vertical para o Brasil
  geom_vline(aes(xintercept = media_expenditure), color = "blue", linetype = "dashed", size = 1) +  # Linha média
  geom_text(aes(x = media_expenditure, y = 0.025, label = paste0("Avg = ", round(media_expenditure, 1))), 
            color = "blue", angle = 0, vjust = -0.5, hjust = -0.3) +  # Texto da média
  geom_text(data = df4 %>% filter(Entity == "Brazil"),
            aes(x = expenditure, y = 0.02, label = "Brasil (1980)"), 
            color = "darkgreen", angle = 0, vjust = -0.5, hjust = -0.3) +  # Texto Brasil
  theme_minimal() +
  labs(x = "Gastos do Governo (% do PIB)", y = "Densidade")

ggsave(file = "gastos3.png", plot = gastos3, width = 6.472, height = 4)

gastos3

Vou olhar como que o Brasil se comporta em relação à média mundial

df2 <- gastosgoverno %>% filter(expenditure < 100, Year > 1950)

# Calculando a média mundial por ano
media_mundial <- df2 %>%
  group_by(Year) %>%
  summarise(expenditure = mean(expenditure, na.rm = TRUE)) %>%
  mutate(Entity = "Média Mundial")  # Criando um identificador

gastos5 <- ggplot(df2, aes(x = Year, y = expenditure, group = Entity)) +
  geom_line(alpha = 0.4, color = "gray70") +  # Linhas para todos os países com transparência
  geom_line(data = df2 %>% filter(Entity == "Brazil"), size = 1.2, color = "red") +  # Linha destacada para o Brasil
  geom_point(data = df2 %>% filter(Entity == "Brazil"), size = 2, color = "red") +  # Pontos só para o Brasil
  geom_line(data = media_mundial, aes(x = Year, y = expenditure), size = 1.2, color = "blue") +  # Linha da média mundial
  theme_minimal() +
  labs(y = "Gastos do Governo (% do PIB)", x = NULL) +  # Remove nome do eixo X
  geom_text(data = media_mundial %>% filter(Year == 2010), 
            aes(x = Year, y = expenditure, label = "Média Mundial"), 
            color = "blue", hjust = 0.5, vjust = -1, fontface = "bold") +  # Rótulo da média mundial
  geom_text(data = df2 %>% filter(Entity == "Brazil", Year == 1980), 
            aes(x = Year, y = expenditure, label = "Brasil"), 
            color = "red", hjust = -1.2, vjust = -0.5, fontface = "bold")  # Rótulo do Brasil

ggsave(file = "gastos5.png", plot = gastos5, width = 6.472, height = 4)

gastos5

df2 <- gastosgoverno %>% filter(expenditure < 100, Year > 1950)

# Calculando a média mundial por ano
media_mundial <- df2 %>%
  group_by(Year) %>%
  summarise(expenditure = mean(expenditure, na.rm = TRUE)) %>%
  mutate(Entity = "Média Mundial")  # Criando um identificador

gastos6 <- ggplot(df2, aes(x = Year, y = expenditure, group = Entity)) +
  geom_line(alpha = 0.4, color = "gray70") +  # Linhas para todos os países com transparência
  geom_line(data = df2 %>% filter(Entity == "Brazil"), size = 1.2, color = "red") +  # Linha destacada para o Brasil
  geom_point(data = df2 %>% filter(Entity == "Brazil"), size = 2, color = "red") +  # Pontos só para o Brasil
  geom_line(data = df2 %>% filter(Entity == "Argentina"), size = 1.2, color = "green4") +  # Linha destacada para Argentina
  geom_point(data = df2 %>% filter(Entity == "Argentina"), size = 2, color = "green4") +  # Pontos só para Argentina
  geom_line(data = media_mundial, aes(x = Year, y = expenditure), size = 1.2, color = "blue") +  # Linha da média mundial
  theme_minimal() +
  labs(y = "Gastos do Governo (% do PIB)", x = NULL) +  # Remove nome do eixo X
  geom_text(data = media_mundial %>% filter(Year == 1980), 
            aes(x = Year, y = expenditure, label = "Mundo"), 
            color = "blue", hjust = 0.5, vjust = -1, fontface = "bold") +  # Rótulo da média mundial
  geom_text(data = df2 %>% filter(Entity == "Brazil", Year == 1980), 
            aes(x = Year, y = expenditure, label = "Brasil"), 
            color = "red", hjust = -1.2, vjust = -0.5, fontface = "bold") +  # Rótulo do Brasil
  geom_text(data = df2 %>% filter(Entity == "Argentina", Year == 1990), 
            aes(x = Year, y = expenditure+10, label = "Argentina"), 
            color = "green4", hjust = -1.2, vjust = 1, fontface = "bold")  # Rótulo da Argentina

ggsave(file = "gastos6.png", plot = gastos6, width = 6.472, height = 4)

gastos6

Desses primeiros gráficos:

  • Não existe lugar sem gasto do governo

  • O gasto brasileiro está entre os maiores

  • Pós-1985 o gasto sobe muito, provavelmente por conta da Constituição de 1988

Diferenças IDH - nível municipal

as<-available_series(language = c("br"))
idh<-ipeadata("IDHM", language = c("br"))
save(idh, file="idh.Rda")
load("idh.Rda")
idh$ano<-year(idh$date)

# Filtrar os dados
idh_filtrado <- idh %>% filter(tcode == 0)

# Encontrar a última observação
ultima_obs <- idh_filtrado %>% filter(ano == max(ano))

# Criar o gráfico
g_idh1 <- ggplot(idh_filtrado, aes(x = ano, y = value)) +
  geom_line(color = "darkblue") +
  geom_point(color = "darkblue") +
  geom_text(data = ultima_obs, aes(label = round(value, 2)), 
            vjust = 1.5, hjust = 0.8, color = "darkblue", size = 4) +
  theme_minimal() +
  labs(x = "", y = "IDH", title = "")

# Salvar o gráfico
ggsave(file = "g_idh1.png", plot = g_idh1, width = 6.472, height = 4)

g_idh1

Fazer por estado

idh$ano <- year(idh$date)

# Filtrar os estados
idh3 <- idh %>% filter(uname == "Estados")

# Identificar os estados destacados
estados_destacados <- c(35, 27, 31)

# Criar o gráfico
g_idh2 <- ggplot(idh3, aes(x = ano, y = value, group = tcode, color = as.factor(tcode))) +
  geom_line(data = idh3 %>% filter(!tcode %in% estados_destacados), color = "gray85", size = 0.7) + 
  geom_line(data = idh3 %>% filter(tcode %in% estados_destacados), aes(color = as.factor(tcode)), size = 1) +
  geom_point(data = idh3 %>% filter(tcode %in% estados_destacados), aes(color = as.factor(tcode)), size = 2) +
  scale_color_manual(values = c("35" = "darkblue", "27" = "darkred", "31" = "darkgreen"),
                     labels = c("27" = "Alagoas", "31" = "Minas Gerais", "35" = "Sao Paulo"),
                     name = "") +
  theme_minimal() +
  labs(x = "", y = "IDH", title = "")

# Salvar o gráfico
ggsave(file = "g_idh2.png", plot = g_idh2, width = 6.472, height = 4)

g_idh2

IDH cidades

idh4 <- ipeadata("IDHM", language = "en")
idh4 <- idh4 %>% filter(uname == "Municipality")
idh4$ano <- year(idh4$date)

Incluindo “geom” das cidades para fazer os mapas.

muni <- read_municipality(year=2010)
## Using year/date 2010
state <- read_state(year=2010)
## Using year/date 2010
# Supondo que idh4 e muni são seus data frames
muni2 <- merge(idh4, muni, by.x = "tcode", by.y = "code_muni")

muni2<- st_as_sf(muni2)


# Criar o mapa
map1 <- ggplot() +
  geom_sf(data = subset(muni2, ano == 2010), aes(fill = value), color = NA) +  
  scale_fill_viridis_c(option = "viridis") +
  geom_sf(data = state, fill = NA, color = "black", linewidth = 0.5) +  
  theme_minimal()  # Tema minimalista


map1

Pra ficar bom mesmo, eu queria um mapa do IDH nos anos 2000 e um IDH nos 2010, mas mantendo as cores nos dois… ou seja, a intensidade de verdade que representa 0.6 tem que ser a mesma para os dois mapas

library(patchwork)
## Warning: package 'patchwork' was built under R version 4.3.3
# Encontrar o valor mínimo e máximo da variável `value` em ambos os anos
min_value <- min(muni2$value, na.rm = TRUE)
max_value <- max(muni2$value, na.rm = TRUE)

# Criar o mapa para o ano 2010 (map1)
map1 <- ggplot() +
  geom_sf(data = subset(muni2, ano == 2010), aes(fill = value), color = NA) +
  scale_fill_viridis_c(
    option = "viridis",
    limits = c(min_value, max_value),
    name = "IDH"  # Substituir "value" por "IDH" na legenda
  ) +
  geom_sf(data = state, fill = NA, color = "black", linewidth = 0.5) +
  theme_minimal() +
  labs(title = "IDH em 2010")

# Criar o mapa para o ano 2000 (map2)
map2 <- ggplot() +
  geom_sf(data = subset(muni2, ano == 2000), aes(fill = value), color = NA) +
  scale_fill_viridis_c(
    option = "viridis",
    limits = c(min_value, max_value),
    name = "IDH"  # Substituir "value" por "IDH" na legenda
  ) +
  geom_sf(data = state, fill = NA, color = "black", linewidth = 0.5) +
  theme_minimal() +
  labs(title = "IDH em 2000")

# Combinar os mapas lado a lado com patchwork
combined_plot <- map2 | map1

# Exibir o gráfico combinado
print(combined_plot)

ggsave(file = "idh_combined_plot.png", plot = combined_plot, width = 6.472, height = 4)

Vou fazer uma correlação entre o IDH em 2000 e o IDH em 2010 pra você perceber persistência

idh_2000 <- muni2 %>% 
  filter(ano==2000) %>%
    st_drop_geometry() %>%  # Remove a coluna de geometria
  select(tcode, value)



idh_2000$idh2000<-idh_2000$value

idh_2010 <- muni2 %>% 
  filter(ano==2010) %>%
    st_drop_geometry() %>%  # Remove a coluna de geometria
  select(tcode, value)

idh_2010$idh2010<-idh_2010$value



idh_comparison <- idh_2000 %>%
  left_join(idh_2010, by = "tcode")

# Criar o gráfico de correlação
correlation_plot <- ggplot(idh_comparison, aes(y = idh2000, x = idh2010)) +
  geom_point(alpha = 0.2, color = "darkblue") +  # Pontos com transparência
  geom_smooth(method = "lm", color = "darkred", se = FALSE) +  # Linha de tendência
  labs(
    y = "IDH em 2000",
    x = "IDH em 2010",
    title = "",
    subtitle = ""
  ) +
  theme_minimal()

correlation_plot
## `geom_smooth()` using formula = 'y ~ x'

ggsave(file = "idh_correlation_plot.png", plot = correlation_plot, width = 6.472, height = 4)
## `geom_smooth()` using formula = 'y ~ x'

Quero fazer um mapa evidenciando só os lugares com IDH baixo (menor do que 0.55) e IDH elevado (maior do que 0.7)

muni2_categorized <- muni2 %>%
  mutate(
    idh_category = case_when(
      value < 0.55 ~ "IDH Baixo (< 0.55)",
      value > 0.7 ~ "IDH Elevado (> 0.7)",
      TRUE ~ "IDH Médio (0.55 - 0.7)"
    )
  )

idh_colors <- c(
  "IDH Baixo (< 0.55)" = "darkred",  # Vermelho escuro para IDH baixo
  "IDH Médio (0.55 - 0.7)" = "gray",  # Cinza para IDH médio
  "IDH Elevado (> 0.7)" = "darkblue"  # Azul escuro para IDH alto
)

map10 <- ggplot() +
  geom_sf(
    data = subset(muni2_categorized, ano == 2010),
    aes(fill = idh_category),  # Usar a categoria de IDH para preenchimento
    color = NA  # Sem borda nos polígonos
  ) +
  scale_fill_manual(values = idh_colors) +  # Definir cores manualmente
  geom_sf(
    data = state,
    fill = NA,  # Sem preenchimento para os estados
    color = "black",  # Bordas pretas para os estados
    linewidth = 0.5
  ) +
  theme_minimal() +  # Tema minimalista
  labs(
    title = "IDH em 2010",
    fill = ""  # Título da legenda
  )

# Exibir o mapa
print(map10)

ggsave(file = "idh_map10.png", plot = map10, width = 6.472, height = 4)

Aula 04 - 21 de março de 2025

A gente precisa falar sobre desigualdade:

Como é a distribuição de renda no Brasil

Você precisa ter uma ideia clara de quão pobre e desigual é o Brasil pra saber se uma política pública atinge o top-10 ou o bottom-10. E se essa política diminui ou aumenta a desigualdade. Eu não quero que você seja especialista em diversas políticas públicas, a gente não vai conseguir. Mas você tem que saber se a desigualdade sobe ou desce para políticas públicas que de forma bem explícita beneficiem os mais ricos ou os mais pobres. Pra isso, você precisa conhecer a distribuição de renda.

PNAD Continua

Não rodar isso porque demora muito, o código fica lento. Mas incluir caso alguém precise.

library(PNADcIBGE)
library(convey)
library(survey)

dadosPNADc <- get_pnadc(year=2023, quarter=4)

giniBR <- svygini(formula=~VD4020, design=dadosPNADc, na.rm=TRUE)
giniBR


giniUF <- svyby(formula=~VD4020, by=~UF, design=dadosPNADc, FUN=svygini, na.rm=TRUE)
giniUF
UF VD4020 se.VD4020
Rondônia 0.42590 0.01450
Acre 0.46787 0.01266
Amazonas 0.50803 0.01172
Roraima 0.48410 0.01797
Pará 0.54699 0.01193
Amapá 0.47034 0.01393
Tocantins 0.49613 0.01342
Maranhão 0.50309 0.01022
Piauí 0.58273 0.02885
Ceará 0.53087 0.01450
Rio Grande do Norte 0.52879 0.01700
Paraíba 0.57711 0.02112
Pernambuco 0.50914 0.01279
Alagoas 0.47199 0.01492
Sergipe 0.54081 0.01456
Bahia 0.53149 0.01155
Minas Gerais 0.47790 0.01091
Espírito Santo 0.46552 0.00960
Rio de Janeiro 0.52018 0.00708
São Paulo 0.49774 0.00772
Paraná 0.44894 0.00910
Santa Catarina 0.41157 0.00624
Rio Grande do Sul 0.48388 0.00628
Mato Grosso do Sul 0.47293 0.01204
Mato Grosso 0.45805 0.01254
Goiás 0.47544 0.01127
Distrito Federal 0.55957 0.00983
curvaLorenz <- svylorenz(formula=~VD4020, design=dadosPNADc, quantiles=seq(from=0, to=1, by=0.05), na.rm=TRUE)
curvaLorenz
decis <- svyquantile(x=~VD4020, design=dadosPNADc, quantiles=c(0.1,0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95, 0.99), ci=FALSE, na.rm=TRUE)
decis
VD4020 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 0.95 0.99
[1,] 600 1200 1320 1500 2000 2300 3000 4000 6000 10000 21750

Isso quer dizer que o primeiro decil, os 10% mais pobres estão separados por este valor de 600. Quem ganha isso ou menos, está no 10% que menos ganha. Quem ganha 6000 ou mais está no 10% que mais recebe salários. Quem ganha 10.000 ou mais está nos 5% mais recebe salários… e assim por diante.

# Dados
decis <- c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95, 0.99)
valores <- c(600, 1200, 1320, 1500, 2000, 2300, 3000, 4000, 6000, 10000, 21750)

# Dados
decis <- c(0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 0.95, 0.99)
valores <- c(600, 1200, 1320, 1500, 2000, 2300, 3000, 4000, 6000, 10000, 21750)

# Configurar a janela gráfica para 2 linhas e 3 colunas
par(mfrow = c(2, 3))

# 1. Gráfico de Barras
barplot(valores, names.arg = decis, col = "skyblue", 
        main = "Gfico de Barras", xlab = "Decis", ylab = "Valores",
        border = "darkblue")

PIB per capita PPP Brasil

pib1<-ipeadata("WDI_PIBPPCCAPBRA", language="en") 
pib1$ano<-year(pib1$date)
pib1$ppp<-pib1$value
# Criar o gráfico
kru<-ggplot(pib1, aes(x = ano, y = ppp)) +
  geom_line(size = 1, color = "black") +  # Linha do PIB
  geom_point(size = 2, color = "black") +  # Pontos do PIB
  geom_vline(xintercept = 2014, linetype = "dashed", color = "darkblue", size = 1) +  # Linha tracejada em 2014
  annotate("segment", x = 2012, xend = 2014, y = max(pib1$ppp) * 0.9, yend = max(pib1$ppp) * 0.9, 
           color = "black", arrow = arrow(type = "closed", length = unit(0.2, "cm"))) +  # Seta (agora apontando para a direita)
  annotate("text", x = 2011.5, y = max(pib1$ppp) * 0.9, label = "Fala do Krugman de que estava tudo bem", 
           color = "black", hjust = 1, vjust = 0) +  # Texto da seta (agora à esquerda)
  scale_y_log10() +  # Escala logarítmica no eixo y
  labs(
    title = "",
    x = "",
    y = "PIB per capita (ppp, escala logarítmica)"
  ) +
  theme_minimal()

kru

ggsave(file = "kru.png", plot = kru, width = 6.472, height = 4)

Na aula de pobreza e Bolsa Família no Futuro

as<-available_series(language = c("br"))
#FAM_PBF
#VAL_PBF
x<-metadata("VAL_PBF")

beneficiarios<-ipeadata("FAM_PBF", language="en")
## Warning: There was 1 warning in `dplyr::mutate()`.
## ℹ In argument: `TERCODIGO = as.integer(.data$TERCODIGO)`.
## Caused by warning:
## ! NAs introduzidos por coerção
valor<-ipeadata("VAL_PBF", language="en")
## Warning: There was 1 warning in `dplyr::mutate()`.
## ℹ In argument: `TERCODIGO = as.integer(.data$TERCODIGO)`.
## Caused by warning:
## ! NAs introduzidos por coerção
b<-beneficiarios %>% filter(uname=="Brazil")
v<-valor %>% filter(uname=="Brazil")


b$ano<-year(b$date)
v$ano<-year(v$date)

b$quantidade<-b$value
b$valor<-v$value

bf<-merge(b, v, by="ano") %>% select(ano, quantidade, valor)

bf$media<-bf$valor/bf$quantidade
bf1<-ggplot(bf, aes(x=ano, y=valor/1000000)) + geom_line() + geom_point() + theme_minimal()
bf1

#VAL_PBF12
valor<-ipeadata("VAL_PBF12", language="en")
v<-valor %>% filter(uname=="Brazil")
bf2<-ggplot(v, aes(x=date, y=value/1000000)) + geom_line() + geom_point() + theme_minimal()
bf2