Aula Prática - Inferência Causal Baseada em Regressões

Introdução

Antes de prosseguir com a aula prática sobre modelos de regressão, iremos assistir a dois vídeos. O primeiro vídeo apresenta de modo intuitivo a ideia de ceteris paribus em um contexto de regressão. Já o segundo vídeo discute em maior detalhe o problema do viés.

Ceteris Paribus

Viés de Seleção = Viés de Variável Omitida em Regressão

Dale,S., Krueger, A. Estimating the Payoff to Attending a More Selective College: An Application of Selection on Observables and Unobservables.The Quarterly Journal of Economics, Volume 117, Issue 4, November 2002, Pages 1491–1527.

Descrição atividade

A ideia para aula prática de hoje será reproduzir a Tabela 7.1 do livro de Stock e Watson reproduzida abaixo.

Observação: Na 1a edição do livro é a tabela 5.2.

  1. Fazer download da base de dados e do dicionário de variáveis. Importar dados para o R.

Antes de iniciar a atividade, vamos chamar os pacotes que serão utilizados. Nesta resolução são utilizados os seguintes pacotes do R. 1

1 Como não quero reportar as mensagens de erro e avisos que o R reproduz após a execução do comando library, inseri opções específicas para esse bloco de código. Para maiores detalhes, veja a página de referência sobre opções de execução.

library(tidyverse) # Conjunto de pacotes e funções para realizar análise de dados no R
library(readxl) # Para fazer leitura e também exportar arquivos em formato Excel.
library(gt) # Para elaboração de tabela com qualidade publicação
library(here) # Para facilitar trabalhar com caminhos de pastas
library(sandwich)   # vcovHC() para erros-padrão robustos
library(lmtest)     # coeftest()

Agora, vamos importar os dados e salvá-lo no objeto chamado caschool.

# Carregar os dados
# Ajuste o caminho conforme a localização do arquivo na sua máquina
caschool <- read_excel(here::here("labs","SW_Datasets","caschool.xlsx"))
  1. Estimar os modelos de regressão apresentados nas colunas 1 a 5 da tabela.

Abaixo estimamos as 5 especificações da tabela utilizando o comando lm. Em todos os casos, salvamos o resultado em um objeto para que possamos aplicar outras funções a esses para obtenção de outros resultados de interesse.

#Especificação 1
espec_1 <- lm(testscr ~ str, data = caschool)

#Especificação 2
espec_2 <- lm(testscr ~ str + el_pct, data = caschool)

#Especificação 3
espec_3 <- lm(testscr ~ str + el_pct + meal_pct, data = caschool)

#Especificação 4
espec_4 <- lm(testscr ~ str + el_pct + calw_pct, data = caschool)

#Especificação 5
espec_5 <- lm(testscr ~ str + el_pct + meal_pct+ calw_pct, data = caschool)

Uma vez que o modelo estimado foi salvo, podemos os resultados principais com as opções padrões utilizando a função summary. Vejamos o caso da primeira especificação:

#Especificação 1
summary(espec_1)

Call:
lm(formula = testscr ~ str, data = caschool)

Residuals:
    Min      1Q  Median      3Q     Max 
-47.727 -14.251   0.483  12.822  48.540 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 698.9330     9.4675  73.825  < 2e-16 ***
str          -2.2798     0.4798  -4.751 2.78e-06 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 18.58 on 418 degrees of freedom
Multiple R-squared:  0.05124,   Adjusted R-squared:  0.04897 
F-statistic: 22.58 on 1 and 418 DF,  p-value: 2.783e-06

Vocês notam alguma diferença em relação a tabela? Os desvios-padrão dos coeficientes são diferentes! Isto porque a tabela já reporta desvios robustos, ou seja, que já contemplam a possibilidade de termos um modelo heteroscedásticio. Para ver o resultado com desvio-padrão robusto, utilizaremos a função coeftest e o pacote sandwich para obter o resultado:2

2 Alternativamente, é possível utilizar o pacote estimatr para obter o resultado de modo mais direto. Veja a documentação do pacote aqui.

#Especificação 1
coeftest(espec_1, vcov. = vcovHC(espec_1,"HC1"))

t test of coefficients:

             Estimate Std. Error t value  Pr(>|t|)    
(Intercept) 698.93295   10.36436 67.4362 < 2.2e-16 ***
str          -2.27981    0.51949 -4.3886 1.447e-05 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Podemos proceder de forma análoga para obter os resultados das demais especificações. Não faremos isto nessa etapa, pois iremos trabalhar no item seguinte para já montar uma tabela de resultados.

  1. Utilizando o pacote gt e seu estagiário de IA, prepare a tabela para reportar os resultados. Não se preocupe em fazer exatamente igual a formatação, desde que apresente as informações principais (coeficientes, desvio-padrão robustos). Não há necessidade de mostrar na tabela o intervalo de confiança, como é feito apenas para variável student-teacher ratio no livro.

  2. Utilizando a tabela e interpretando os resultados apresentados, responda às seguintes perguntas:

    1. Qual especificação do modelo você julga ser a mais apropariada?

    2. Utilizando a especificação escolhida, qual o impacto de reduzir o tamanho médio das turmas em 1 aluno. Interprete o valor do coeficiente e também discute o resultado em termos de inferência estatística.

    3. Existe relação causal entre tamanho das turmas e notas? Caso sua resposta seja sim, explique qual foi a hipótese de identificação que você utilizou. Se não, diga qual hipótese o modelo não atende e por que ela não seria atendida.

    4. Imagine que você seja prefeito de uma cidade no Brasil. Seu secretário de educação te apresenta os resultados desse estudo utilizando os dados da Califórnia e sugere que vocês tentem reduzir o tamanho médio das turmas no município com o intuito de melhorar o desempenho escolar. O que você acharia dessa proposta? Justifique, apresentando argumentos de validade interna ou externa.