Econometria Aplicada - Exercício 4

Autor

José Victor Santos Lopes

Data de Publicação

21 de setembro de 2025

0.1 Paper e Dados

(Bleemer e Mehta 2022)

# Pacotes
library(dplyr)
library(data.table)
library(tidyverse)
library(fixest)
library(ggplot2)
library(pwr)
library(stargazer)
library(kableExtra)
library(httr)
library(rdrobust)
library(scales)
library(stringr)

# Base
# Download único do dta (GitHub)
.download_rdata <- function(url) {
    tf <- tempfile(fileext = ".dta")
    httr::GET(url, httr::write_disk(tf, overwrite = TRUE))
    tf
}

DATA_URL_MAIN <- "https://github.com/josevictorsl/econometriaaplicadaeesp/raw/main/base_EA4.dta"

tf_rdata <- .download_rdata(DATA_URL_MAIN)
load(tf_rdata)

1 Questão 1

Enunciado: Qual o principal parâmetro de interesse? Por que essa questão é relevante para as Ciências Econômicas ou para o formulador de política pública?

Começando pelo objetivo: deseja-se quantificar o ganho salarial específico associado a ingressar (marginalmente) no major de Economia, quando a elegibilidade muda de forma descontínua em torno de uma nota mínima. O estimando de interesse NÃO é um efeito médio amplo, mas um efeito causal local para aqueles estudantes cuja decisão efetivamente responde ao limiar de desempenho acadêmico (os compliers).

Por que há um desenho quase-experimental? A instituição impõe um threshold fixo na média das duas disciplinas introdutórias de Economia. Esse número gera um salto na probabilidade de seguir no curso, mas não transforma a decisão em determinística (fuzzy RDD). Ao aproximarmos a análise a moléculas de observações imediatamente ao redor do cutoff, diferenças sistemáticas prévias entre alunos tornam-se menos plausíveis; o limiar atua como mecanismo de alocação quase exógeno.

Definição do parâmetro (resultados potenciais): \[ {LATE}_{RD}(Y_i) = \lim_{\text{nota} \to 2.8^+} \mathbb{E}[Y_i(1) \mid \text{nota}, i \in C] - \lim_{\text{nota} \to 2.8^-} \mathbb{E}[Y_i(0) \mid \text{nota}, i \in C]. \]

Implementação empírica no caso fuzzy: razão entre a descontinuidade estimada no desfecho (salário) e a descontinuidade estimada na variável de tratamento (matricular-se em Economia): \[ \widehat{\text{LATE}} = \frac{\lim_{x \to c^+} \mathbb{E}[Y \mid X = x] - \lim_{x \to c^-} \mathbb{E}[Y \mid X = x]}{\lim_{x \to c^+} \mathbb{E}[D \mid X = x] - \lim_{x \to c^-} \mathbb{E}[D \mid X = x]}. \]

Elementos que tornam este enfoque relevante: 1. Heterogeneidade de retornos: o campo de estudo influencia fortemente salários iniciais; tratar “faculdade” como binário mascara diferenças substantivas. 2. Seleção não observada: estudantes que escolhem Economia podem possuir habilidades ou ambições distintas; o cutoff cria variação local menos contaminada por seleção ampla. 3. Informação para política: estimar retornos marginais pode orientar aconselhamento acadêmico e priorização de recursos de apoio em cursos introdutórios.

Componente distributivo (mobilidade): se candidatos de origem socioeconômica mais baixa se concentram logo abaixo de 2,8, políticas de reforço (tutoria, monitoria focalizada) que elevem marginalmente o desempenho podem ampliar o acesso a um major de maior retorno esperado, contribuindo para trajetórias de renda mais altas e potencial atenuação de desigualdades.

2 Questão 2

Enunciado: Descreva a base de dados utilizada para estimar o parâmetro de interesse.

Fontes de informação: i. Registros acadêmicos internos (UCSC): histórico completo por aluno (cortes 1999–2014) abrangendo desempenho em disciplinas, características demográficas (gênero, etnia, ano de entrada), localização pré-matrícula, status de residência, escola de ensino médio e pontuações padronizadas (SAT). ii. NSC StudentTracker: trajetórias de matrícula e conclusão em instituições de graduação/pós-graduação fora (ou dentro) da UCSC, permitindo rastrear continuidade educacional. iii. Departamento de Emprego da Califórnia: vínculos formais e salários anuais (principal resultado), além de setor de atividade. iv. UC Undergraduate Experience Survey: informa horas de estudo e aspirações ocupacionais; menor taxa de resposta, mas agrega proxies de esforço e preferências.

Complementos: renda familiar aproximada via renda média do CEP (IRS); conjunto de variáveis demográficas utilizado como controles para reduzir variância e explorar possíveis heterogeneidades. As notas de disciplinas introdutórias constituem insumo chave da regra institucional de progressão no curso de Economia.

Construção da running variable: define-se \((X_i = (G_{i1} + G_{i2})/2)\), média das duas disciplinas introdutórias (Economics 1 e 2). O threshold regulamentar é \((c=2{,}8)\). Como apenas duas componentes formam a média, a distribuição exibe discreção (mass points) e eventual heaping; justificam-se, portanto, (i) ajustes de densidade e (ii) esquemas de erros-padrão robustos a discretização (masspoints = "adjust"). Por anteceder a declaração formal do major, \((X_i)\) é pré-tratamento, apoiando a plausibilidade de exogeneidade local em torno de \((c)\).

3 Questão 3

Enunciado: O estimador de OLS para o efeito de ser major em Economia sobre o salário anual seria enviesado no contexto do estudo realizado por Bleemer e Mehta (2022)? Justifique sua resposta.

Intuição do viés antes da formalização: alunos que optam por Economia diferem, tipicamente, em atributos não observados (habilidade quantitativa, ambição setorial, redes). Tais atributos elevam simultaneamente (i) a probabilidade de escolher o major e (ii) salários futuros, de forma que uma simples comparação de médias incorre em confusão entre efeito causal e seleção. Assim, o coeficiente OLS tende a exagerar o retorno verdadeiro.

Formalização posterior. Especificando: \[ Y_i = \alpha + \omega P_i + \upsilon_i, \] com \(P_i\) indicador de (tornar-se / formar-se em) Economia e \(\upsilon_i\) englobando todos os fatores não observados correlacionados a salários. O estimador converge para: \[ \hat{\omega}_{OLS} = \tau + \frac{\text{Cov}(P_i,u_i)}{\text{Var}(P_i)}, \] onde \(\tau\) é o efeito causal local. Se \(\text{Cov}(P_i,u_i)>0\), temos viés positivo. A evidência empírica no artigo sustenta essa leitura: estimativas fuzzy RDD (que isolam variação quase-exógena no cutoff) são inferiores às diferenças brutas, sugerindo seleção positiva inflando o OLS.

4 Questão 4

Enunciado: Por que a estratégia de RDD parece adequada para responder à pergunta investigada por eles?

Racional da adequação: a regra de nota mínima cria um choque local na probabilidade de tratamento (acesso/permanência em Economia) explorável como variação exógena parcial. Em um entorno suficientemente estreito, pressupõe-se comparabilidade entre alunos, e o salto probabilístico permite a identificação de um LATE.

Hipóteses estruturantes:

  1. Continuidade contrafactual: (\(E[Y_i(0)\mid X]\)) e (\(E[Y_i(1)\mid X]\)) são contínuas em (\(X=2.8\)). Logo, qualquer descontinuidade observada em salários deve decorrer do acesso diferenciado ao major, não de mudança abrupta em composição não observada.

  2. Relevância fuzzy: (\(P(P_i=1\mid X)\)) apresenta salto estatisticamente relevante (≈ 36 p.p.) no cutoff. Isso assegura força instrumental suficiente para o denominador do estimador fuzzy.

  3. Monotonicidade: inexistem defiers (não há alunos que só fariam Economia se ficassem abaixo do corte). A resposta ao incentivo da regra é fraca ou nula para alguns (nevers/always), mas não domina casos de inversão.

  4. Limite bem definido: o efeito local convergente (limites à direita e esquerda) é finito, garantindo interpretabilidade.

Com essas condições, a regressão local (ou métodos robust bias-corrected) produzem uma razão de saltos com interpretação causal para compliers marginais.

5 Questão 5

Enunciado: Utilize o arquivo de dados base_EA4.dta e o pacote rdrobust para realizar uma análise similar à apresentada por Bleemer e Mehta (2022). (a) Reproduza os gráficos de RDD para a probabilidade de se tornar major em Economia e para os salários anuais, seguindo o padrão das Figuras 1 e 2 do artigo referenciado. (b) Estime os coeficientes de efeito local para:(i) Efeito de estar acima do GPA de corte na probabilidade de major em Economia; (ii) Efeito de estar acima do GPA de corte no salário anual; (ii) Efeito de major em Economia no salário anual (fuzzy RDD / IV local) Compare os valores obtidos com aqueles apresentados nas figuras do artigo. Interprete os resultados considerando o contexto específico do seu conjunto de dados.

# Preparação e construção das variáveis principais
cutoff <- 2.8 # threshold do GPA médio introdutório
df <- df |>
    mutate(
        EGPA       = as.numeric(EGPA),
        Wage       = as.numeric(Wage),
        Major      = as.character(Major),
        major_econ = as.integer(stringr::str_to_lower(Major) == "economics"),
        run        = EGPA,
        above      = as.integer(run >= cutoff)
    ) |>
    filter(
        !is.na(run), !is.na(major_econ), !is.na(Wage),
        run >= 1.8 # exclusão opcional de valores muito baixos (como no paper)
    )

# Agregações (pontilhado / pontos do gráfico) por valor discreto de run
agg_major <- df |>
    group_by(run) |>
    summarise(p_major = mean(major_econ), n = n(), .groups = "drop")

agg_wage <- df |>
    group_by(run) |>
    summarise(wage = mean(Wage, na.rm = TRUE), n = n(), .groups = "drop")

# Identificadores de cluster (mass points) e largura fixa para local linear
cluster_id <- match(df$run, sort(unique(df$run)))
band_manual <- 0.6

run_rdd <- function(y, x, c, fuzzy = NULL) {
    attempt <- try(
        rdrobust(
            y = y, x = x, c = c,
            p = 1, kernel = "triangular",
            h = band_manual,
            vce = "cluster", cluster = cluster_id,
            masspoints = "adjust",
            fuzzy = fuzzy
        ),
        silent = TRUE
    )
    if (inherits(attempt, "try-error")) {
        message("Cluster falhou — usando vce='nn' (robusto a mass points)")
        attempt <- rdrobust(
            y = y, x = x, c = c,
            p = 1, kernel = "triangular",
            h = band_manual,
            vce = "nn", nnmatch = 3,
            masspoints = "adjust",
            fuzzy = fuzzy
        )
    }
    attempt
}

# Estimativas principais
r_first <- run_rdd(df$major_econ, df$run, cutoff) # (i) salto em D
r_wage <- run_rdd(df$Wage, df$run, cutoff) # (ii) reduced form em Y
r_fuzzy <- run_rdd(df$Wage, df$run, cutoff, df$major_econ) # (iii) fuzzy / IV local

# Extração de coeficientes (primeiro elemento: efeito local) e EPs
beta_first <- 100 * r_first$coef[1]
se_first <- 100 * r_first$se[1] # p.p.
beta_wage <- r_wage$coef[1]
se_wage <- r_wage$se[1]
iv_wage <- r_fuzzy$coef[1]
iv_se <- r_fuzzy$se[1]

# Quadro sintético
tab <- tibble::tibble(
    efeito = c(
        "Acima do cutoff -> Prob(major Economia)",
        "Acima do cutoff -> Salário anual",
        "Major em Economia -> Salário anual (IV fuzzy)"
    ),
    estimativa = c(beta_first, beta_wage, iv_wage),
    se = c(se_first, se_wage, iv_se),
    unidade = c("p.p.", "US$", "US$")
)

tab_display <- tab |>
    mutate(
        estimativa_fmt = case_when(
            unidade == "p.p." ~ sprintf("%.2f %s", estimativa, unidade),
            unidade == "US$" ~ scales::dollar(estimativa),
            TRUE ~ format(estimativa, digits = 3)
        ),
        se_fmt = case_when(
            unidade == "p.p." ~ sprintf("(%.2f)", se),
            unidade == "US$" ~ paste0("(", scales::dollar(se), ")"),
            TRUE ~ sprintf("(%.2f)", se)
        ),
        `Estimativa (EP)` = paste0(estimativa_fmt, " ", se_fmt)
    ) |>
    select(Efeito = efeito, `Estimativa (EP)`, Unidade = unidade)

tab_display |>
    invisible()  # tabela será renderizada em chunk separado com crossref

# Gráfico 1: primeiro estágio (probabilidade de major)
g1 <- ggplot(agg_major, aes(run, 100 * p_major, size = n)) +
    geom_point(shape = 21, fill = "lightblue", colour = "black", alpha = 0.9) +
    geom_smooth(data = subset(agg_major, run < cutoff), aes(weight = n), method = "lm", se = FALSE) +
    geom_smooth(data = subset(agg_major, run >= cutoff), aes(weight = n), method = "lm", se = FALSE) +
    geom_vline(xintercept = cutoff, linetype = "dashed", colour = "red") +
    scale_size_area(max_size = 12, guide = "none") +
    scale_y_continuous("Percent in major", limits = c(0, 100)) +
    scale_x_continuous("Average GPA in Economics 1 and 2") +
    annotate(
        "text",
        x = cutoff - 0.6, y = 15,
        label = sprintf("β = %.1f pp (%.1f)", beta_first, se_first),
        hjust = 0, size = 4
    ) +
    theme_bw(base_size = 12)

# Gráfico 2: salários
ymax <- max(agg_wage$wage, na.rm = TRUE) * 1.1
g2 <- ggplot(agg_wage, aes(run, wage, size = n)) +
    geom_point(shape = 21, fill = "lightblue", colour = "black", alpha = 0.9) +
    geom_smooth(data = subset(agg_wage, run < cutoff), aes(weight = n), method = "lm", se = FALSE) +
    geom_smooth(data = subset(agg_wage, run >= cutoff), aes(weight = n), method = "lm", se = FALSE) +
    geom_vline(xintercept = cutoff, linetype = "dashed", colour = "red") +
    scale_size_area(max_size = 12, guide = "none") +
    scale_y_continuous("Dollars", labels = scales::comma, limits = c(0, ymax)) +
    scale_x_continuous("Average GPA in Economics 1 and 2") +
    annotate(
        "text",
        x = cutoff - 0.6, y = 0.15 * ymax,
        label = sprintf(
            "β = %s (%s)\nIV = %s (%s)",
            scales::comma(round(beta_wage, 0)),
            scales::comma(round(se_wage, 0)),
            scales::comma(round(iv_wage, 0)),
            scales::comma(round(iv_se, 0))
        ),
        hjust = 0, size = 4
    ) +
    theme_bw(base_size = 12)
Tabela 1: Resumo dos efeitos locais (RDD Fuzzy)
Efeito Estimativa (EP) Unidade
Acima do cutoff -> Prob(major Economia) 35.14 p.p. (2.27) p.p.
Acima do cutoff -> Salário anual $7,640.70 ($606.17) US$
Major em Economia -> Salário anual (IV fuzzy) $21,744.16 ($1,040.78) US$
g1
Figura 1: Probabilidade de cursar Economia em função do EGPA (RDD local)
g2
Figura 2: Salário anual em função do EGPA (RDD local)
summary(r_first)
Sharp RD estimates using local polynomial regression.

Number of Obs.                15423
BW type                      Manual
Kernel                   Triangular
VCE method                       NN

Number of Obs.                 4489        10934
Eff. Number of Obs.            3660         5597
Order est. (p)                    1            1
Order bias  (q)                   2            2
BW est. (h)                   0.600        0.600
BW bias (b)                   0.600        0.600
rho (h/b)                     1.000        1.000
Unique Obs.                    4489        10934

=====================================================================
                   Point    Robust Inference
                Estimate         z     P>|z|      [ 95% C.I. ]       
---------------------------------------------------------------------
     RD Effect     0.351     7.612     0.000     [0.236 , 0.399]     
=====================================================================
summary(r_wage)
Sharp RD estimates using local polynomial regression.

Number of Obs.                15423
BW type                      Manual
Kernel                   Triangular
VCE method                       NN

Number of Obs.                 4489        10934
Eff. Number of Obs.            3660         5597
Order est. (p)                    1            1
Order bias  (q)                   2            2
BW est. (h)                   0.600        0.600
BW bias (b)                   0.600        0.600
rho (h/b)                     1.000        1.000
Unique Obs.                    4489        10934

=====================================================================
                   Point    Robust Inference
                Estimate         z     P>|z|      [ 95% C.I. ]       
---------------------------------------------------------------------
     RD Effect  7640.701     6.482     0.000  [5033.083 , 9396.164]  
=====================================================================
summary(r_fuzzy)
Fuzzy RD estimates using local polynomial regression.

Number of Obs.                15423
BW type                      Manual
Kernel                   Triangular
VCE method                       NN

Number of Obs.                 4489        10934
Eff. Number of Obs.            3660         5597
Order est. (p)                    1            1
Order bias  (q)                   2            2
BW est. (h)                   0.600        0.600
BW bias (b)                   0.600        0.600
rho (h/b)                     1.000        1.000
Unique Obs.                    4489        10934

First-stage estimates.

=====================================================================
                   Point    Robust Inference
                Estimate         z     P>|z|      [ 95% C.I. ]       
=====================================================================
     Rd Effect     0.351     7.612     0.000     [0.236 , 0.399]     
=====================================================================

Treatment effect estimates.

=====================================================================
                   Point    Robust Inference
                Estimate         z     P>|z|      [ 95% C.I. ]       
---------------------------------------------------------------------
     RD Effect 21744.165    11.844     0.000 [18882.882 , 26371.781] 
=====================================================================

5.1 Interpretação e comparação dos achados

Esta seção sintetiza os três componentes estimados (primeiro estágio, forma reduzida e efeito causal local) e confronta cada um com os valores apresentados nas Figuras 1 e 2 do estudo original. Ver Tabela 1 para o resumo numérico. A ideia é avaliar aderência numérica e a plausibilidade econômica dos resultados na base EA4.

  1. Primeiro estágio (cutoff → probabilidade de cursar Economia, ver Figura 1): salto estimado de 35,1 p.p. (EP = 2,27) contra 36,1 p.p. (EP = 2,7) no artigo. Diferença absoluta: −1,0 p.p.; diferença relativa ≈ −2,8%. A proximidade confirma forte relevância instrumental.
  2. Forma reduzida (cutoff → salário, ver Figura 2): descontinuidade de US$ 7.641 (EP = 606) versus US$ 7.989 (EP = 1.885). Diferença: −US$ 348 (≈ −4,4%). Mesma direção e escala.
  3. Efeito causal local (IV / fuzzy LATE): US$ 21.744 (EP = 1.041) frente a US$ 22.123 (EP = 5.847) (diferença: −US$ 379; ≈ −1,7%).

Coerência interna: \(( \widehat{\text{LATE}} \approx \frac{\text{Reduced Form}}{\text{First Stage}} )\). Usando os valores obtidos: \((7.641 / 0{,}351 \approx 21.8)\) mil, alinhado ao IV direto (≈ 21.7 mil). A consistência algébrica fortalece a credibilidade das estimativas.

Escala econômica: considerando salário médio amostral em torno de US$ 54 mil (informação de referência do paper), o LATE implica ganho da ordem de 40% para o subconjunto de estudantes cuja decisão de majorar responde marginalmente ao cutoff, muito próximo ao efeito percentual relatado no artigo (≈ 46%). Trata-se, portanto, de um impacto de grande magnitude econômica no curto prazo de mercado de trabalho.

Síntese causal:
• (Relevância) O cutoff de EGPA = 2,8 induz um salto pronunciado na probabilidade de ingressar em Economia.
• (Retorno local) Há incremento salarial imediato associado à elegibilidade, indicando que a trilha curricular do major carrega conteúdo produtivo ou sinalização valorizada.
• (LATE robusto) O efeito IV reproduz o padrão publicado, com diferenças relativas pequenas e sem inversão de sinal, sugerindo que a base EA4 captura a mecânica principal de seleção e retorno inicial.

Escopo: a interpretação continua circunscrita ao conjunto de compliers marginais; não se infere efeito médio para todos os estudantes. Ainda assim, a aderência numérica às Figuras 1 e 2 legitima a qualidade do microdado para fins de exercício replicativo e ilustra a importância da escolha do major na determinação de salários iniciais.

6 Questão 6

Enunciado: Quais testes de placebo e robustez os autores utilizam para checar a validade dos resultados encontrados? Além dos testes de placebo e robustez implementados pelos autores, quais testes você sugeriria para avaliar a validade do RDD nesse contexto?

Estrutura básica de estimação: regressões locais lineares (kernel triangular) em torno do cutoff, com erros-padrão clusterizados por valor discreto da running variable. A robustez é investigada alternando especificações e janelas.

Principais variações implementadas pelos autores: i. Inclusão de termos quadráticos (p=2) como teste de sensibilidade a forma funcional. ii. Adição de controles demográficos + efeitos fixos de escola de ensino médio. iii. Redução de bandwidth (janelas mais estreitas) para testar estabilidade local. iv. Alteração de métodos de inferência (ajustes de mass points / esquemas alternativos de variância).

Checagens de validade (placebos / continuidade):

  • Covariadas pré-determinadas (sexo, etnia, etc.) sem saltos estatisticamente significativos no cutoff ⇒ sustenta hipótese de continuidade dos potenciais.

  • Placebo temporal (pré-política 2000–2002): ausência de descontinuidade em salários ou probabilidade de escolher Economia ⇒ reduz preocupação com tendências estruturais pré-existentes.

Manipulação da running variable: testada via densidade (McCrary / rddensity, ver Figura 3). O objetivo é rejeitar a hipótese de um salto artificial na distribuição de (X) em 2,8.

library(rddensity)
res_den <- rddensity(X = df$EGPA, c = 2.8)
summary(res_den)

Manipulation testing using local polynomial density estimation.

Number of obs =       15423
Model =               unrestricted
Kernel =              triangular
BW method =           estimated
VCE method =          jackknife

c = 2.8               Left of c           Right of c          
Number of obs         4489                10934               
Eff. Number of obs    4489                10934               
Order est. (p)        2                   2                   
Order bias (q)        3                   3                   
BW est. (h)           1.4                 1.4                 

Method                T                   P > |T|             
Robust                -1.0197             0.3079              

P-values of binomial tests (H0: p=0.5).

Window Length / 2          <c     >=c    P>|T|
0.100                     807     896    0.0329
0.200                     807    1846    0.0000
0.300                    1567    2816    0.0000
0.400                    2273    3738    0.0000
0.500                    2833    4668    0.0000
0.600                    3278    5597    0.0000
0.700                    3660    6487    0.0000
0.800                    3969    7364    0.0000
0.900                    4177    8128    0.0000
1.000                    4325    8791    0.0000
invisible(rdplotdensity(res_den, df$EGPA))  
Figura 3: Teste de densidade da running variable (rddensity)

Interpretação esperada: não rejeição ⇒ sem evidência de sorting estratégico em torno do threshold.

Extensões sugeridas adicionais:

  1. Cutoffs falsos (2,6; 3,0) para verificar ausência de “efeitos” espúrios.

  2. Bandwidths data-driven (CCT) versus janela fixa empregada.

  3. Diagnóstico de heaping: inspeção de frequências relativas de valores de EGPA próximos a 2,8.

  4. Sequência de especificações: sem controles → + controles → + efeitos fixos, avaliando estabilidade do coeficiente.

  5. Análises de heterogeneidade (gênero, background socioeconômico, coorte de ingresso) conectando a discussão de mobilidade.

  6. Teste de robustez funcional: comparação p=1 vs p=2 e restrição a regressões locais estritamente lineares para evitar extrapolação.

Síntese interpretativa: convergência de (i) ausência de saltos em covariadas, (ii) inexistência de manipulação de densidade e (iii) placebos temporais neutros sustenta a validade interna. Logo, o efeito estimado representa um LATE para compliers no entorno de 2,8, com suporte empírico consistente e coerente com a estratégia fuzzy RDD.

Referências

Bleemer, Zachary, e Aashish Mehta. 2022. «Will Studying Economics Make You Rich? A Regression Discontinuity Analysis of the Returns to College Major». American Economic Journal: Applied Economics 14 (2): 1–22.