Exercicios de Revisão

Author

João Cardoso L. Camargos

1 Exercícios de Revisão

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)

2 1 - Diff in Diff

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>

2.1 Tarefas

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

3 2 - RDD

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

3.1 Tarefas

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?

4 3 - Propensity Scores

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.

4.1 Tarefas

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