if (!require("pacman")) install.packages("pacman")Carregando pacotes exigidos: pacman
pacman::p_load(tidyverse,broom,foreign, dataverse, rddapp)Nesta aula faremos alguns exercícios de revisão em conjunto. Realizaremos as seguintes atividades, disponíveis em: https://rpubs.com/jclcamargos/rev_ex_avpb. Ao todo, revisaremos três técnicas, Diferenças em Diferenças, Regressão com Descontinuidade e aplicação de Propensity Scores.
Pacotes a serem usados:
if (!require("pacman")) install.packages("pacman")Carregando pacotes exigidos: pacman
pacman::p_load(tidyverse,broom,foreign, dataverse, rddapp)Vamos replicar o estudo de Fraser et al, 2020, em que a técnica de Diferenças em Diferenças foi aplicada para entender como o processo de organização social impacta a emissão de gás carbono. A teoria aponta que o aumento da organização social levaria a uma redução na emissão de gás carbono. Assim, o estudo mobilizou dados de diferentes cidades na região de Tóquio, avaliando sua capacidade de organização social e a classificando em alta (1) e baixa (0). Assim, utilizaremos a DiD para estimar o efeito ao longo do tempo. A base de dados a ser utilizada segue a seguinte estrutura:
| Nome | Descrição |
|---|---|
muni |
Nome do Municipio |
muni_code |
Código do Municipio |
year |
Ano |
counter |
Contagem do ano a partir de 2005 (0, 1,…,12) |
emissions |
Emissão de poluentes |
treat |
Tratamento binário (alto poder organizacional) |
fin_str_index |
Tratamento Continuo |
pop_density |
Densidade populacional |
income_per_capita |
Renda per capita |
pop_age_65_plus |
% de pessoas com 65 anos ou mais |
pop_college |
% com ensino superior completo |
value_agr_mill |
Produção agrícola em milhões de ienes por habitante |
value_manuf_mill |
Produção industrial em milhões de ienes por habitante |
value_commerce_mill |
Produção comercial em milhões de ienes por habitante |
Baixando os dados
#Limpando os arquivos
rm(list=ls())
# Carregando os dados
Sys.setenv("DATAVERSE_SERVER" = "dataverse.harvard.edu")
# Importando o banco de dados do Havard Dataverse
dat <- get_dataframe_by_name(
filename = "dataset.tab",
dataset = "10.7910/DVN/E8PEW7")Downloading ingested version of data with readr::read_tsv. To download the original version and remove this message, set original = TRUE.
Rows: 20892 Columns: 59
── Column specification ────────────────────────────────────────────────────────
Delimiter: "\t"
chr (6): pref_code, pref, pref_jp, muni_code, muni, muni_jp
dbl (53): year, emissions, emissions_manufacturing, emissions_construction_m...
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
# Limpando as cidades
dat <- dat |>
# Selecionando apenas as cidades na região de Tokyo
filter(pref == "Tokyo") |>
# Calculando a emissão de carbono em kilotons por 1000 residentes
mutate(emissions = emissions / pop * 1000) |>
# Calculando a densidade populacional
mutate(pop_density = pop / area_inhabitable) |>
# Criando uma contagem anual de 1, 2, 3, 4, etc.
mutate(counter = year - min(year)) |>
# Criando um tratamento se a cidade é ou foi uma cidade com alta capacidade e a contando como tratada pelo resto do periodo
mutate(treat = if_else(fin_str_index > median(fin_str_index), 1, NA_real_)) |>
group_by(muni_code) |>
fill(treat, .direction = "up") |>
mutate(treat = if_else(is.na(treat), 0, treat)) |>
ungroup() |>
# Garantidno um fator para efeitos fixos
mutate(year = factor(year),
muni_code = factor(muni_code)) |>
# Selecionando apenas as variáveis de interesse:
select(
muni, # nome do município
muni_code, # código único de cinco dígitos para identificação de cada cidade
year, # ano
counter, # número de anos passados desde 2005 (0, 1, 2, ...),
emissions, # emissões em quilotons por 1.000 habitantes
treat, # Alta capacidade de organização (1/0)
fin_str_index, # capacidade governamental (numérica) e um conjunto de covariáveis que também podem influenciar as emissões, incluindo:
pop_density, # densidade populacional
income_per_capita, # renda per capita
pop_age_65_plus, # % de pessoas com 65 anos ou mais
pop_college, # % com ensino superior completo
value_agr_mill, # produção agrícola em milhões de ienes por habitante
value_manuf_mill, # produção industrial em milhões de ienes por habitante
value_commerce_mill # produção comercial em milhões de ienes por habitante
)
head(dat)# A tibble: 6 × 14
muni muni_code year counter emissions treat fin_str_index pop_density
<chr> <fct> <fct> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Tokyo-to Ch… 13101 2017 12 86.8 1 0.501 50.1
2 Tokyo-to Ch… 13101 2016 11 82.2 1 0.501 50.1
3 Tokyo-to Ch… 13101 2015 10 86.3 1 0.496 50.1
4 Tokyo-to Ch… 13101 2014 9 83.9 1 0.492 50.1
5 Tokyo-to Ch… 13101 2013 8 86.7 1 0.490 50.2
6 Tokyo-to Ch… 13101 2012 7 80.3 1 0.491 50.2
# ℹ 6 more variables: income_per_capita <dbl>, pop_age_65_plus <dbl>,
# pop_college <dbl>, value_agr_mill <dbl>, value_manuf_mill <dbl>,
# value_commerce_mill <dbl>
1 - Faça o diagnóstico visual (por meio de um gráfico), da tendência paralela entre tratamento e controle
2 - Estime o efeito causal da organização social usando o estimador de Diferenças em Diferenças. Estime o modelo naive (sem controles) e interprete os resultados
3 - Reestime o modelo novamente, dessa vez inserindo os seguintes controles: Densidade Populacional, Renda per capta, % de pessoas com mais de 65 anos, % de pessoas com ensino superior, Produção agrícola, Produção industrial e Produção industrial. Interprete os resultados
Nesse caso, seguiremos um exemplo hipotético criado por Andrew Heiss para aplicação de RDD. Vamos avaliar uma política de inserção de alunos em um programa de monitoria caso tenham tirado uma nota abaixo 70% no exame de entrada da disciplina. Assim, veremos o impacto da tutoria no exame final do curso. Os dados seguem o seguinte padrão:
| Nome | Descrição |
|---|---|
id |
ID do aluno |
entrance_exam |
Nota do exame de entrada |
exit_exam |
Nota do exame de saída |
tutoring |
Tratamento (Participação na monitoria) |
Baixando os dados
url <- 'https://evalf20.classes.andrewheiss.com/data/tutoring_program.csv'
dat2 <- read.csv(url)
head(dat2) id entrance_exam exit_exam tutoring
1 1 92.4 78.1 FALSE
2 2 72.8 58.2 FALSE
3 3 53.7 62.0 TRUE
4 4 98.3 67.5 FALSE
5 5 69.7 54.1 TRUE
6 6 68.1 60.1 TRUE
1 - Faça o diagnóstico visual (por meio de um gráfico), para avaliar se usaremos um modelo sharp ou fuzzy
2 - Faça o diagnóstico visual (por meio de um gráfico), do efeito causal por meio de um gráfico, utilizando todos os casos
2 - Estime o tmanho efeito causal da monitoria usando o estimador de Regressão com Descontinuidade. Estime o modelo naive (sem determinar uma janela) e interprete os resultados
3 - Reestime o modelo novamente, dessa vez filtrando para obter uma janela de pessoas que tiraram entre 60 e 80 porcento no exame de entrada (janela de 10 pontos). Compare com os resultados do modelo anterior, qual seria o melhor?
Para finalizar nossa revisão, trabalharemos um pouco com propensity scores. Dessa forma, retornaremos ao banco de dados do exercício sobre Diferenças em Diferenças. Vamos reestimar o modelo, dessa vez usando Propensity Scores.
1 - Calcule o propensity score sobre a variável dependente, utilizando os mesmos controles explicitados na tarefa 1.3
2 - Faça um gráfico de densidade com a probabilidade de atribuição do tratamento a partir dos propensity scores
3 - Reestime o modelo de diferenças em diferenças, só que aplicando os propensity scores no lugar dos controles. Interprete os resultados