MBA em Análise de Dados

Disciplina: EF00009 – ANÁLISE DE DADOS II
Professor: Dr. Edward Costa
Local: Universidade Federal do Ceará – UFC


Introdução

Este exercício tem como objetivo aplicar técnicas de avaliação de impacto com base em modelos de regressão linear e diferenças em diferenças, utilizando dados observacionais.


Parte 1: Dados em Corte Transversal (school.csv)

A base de dados school.csv contém informações de escolas, incluindo uma variável de tratamento (visited) e variáveis de resultado e controle. O objetivo é estimar o impacto de um programa de visitas escolares sobre o desempenho dos estudantes em testes padronizados.

Variáveis

Variável Descrição
score Nota média dos alunos da escola em um exame padronizado (variável dependente)
visited Indicador binário do tratamento: 1 se a escola foi visitada, 0 caso contrário
income Renda média dos alunos da escola
stratio Razão aluno-professor (indicador de tamanho da turma)
english Percentual de alunos com proficiência mínima em inglês
#Carregando área de trabalho
setwd("~/03-R/02-Arquivos/mba-ciencia-de-dados/analise-dados-ii")

Carregando pacotes

library(tidyverse)
library(readr)

Carregando base de dados school

school <- read_csv("school.csv")
head(school)

Questões

Questão 1. Estime um modelo de regressão linear simples com score como variável dependente e visited como explicativa. O coeficiente de visited representa o efeito médio do tratamento sob aleatorização. Interprete esse coeficiente.

modelo_q1 <- lm(score ~ visited, data = school)
summary(modelo_q1)
## 
## Call:
## lm(formula = score ~ visited, data = school)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.45000 -0.16667 -0.03333  0.12500  0.55000 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  27.8167     0.1171 237.461   <2e-16 ***
## visited      -0.1667     0.1657  -1.006    0.338    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2869 on 10 degrees of freedom
## Multiple R-squared:  0.09191,    Adjusted R-squared:  0.001103 
## F-statistic: 1.012 on 1 and 10 DF,  p-value: 0.3381

O p-valor associado ao coeficiente de visited é 0.338. Como esse valor é maior que 0.05, não podemos rejeitar a hipótese nula de que o coeficiente é zero. Isso significa que a queda de 0.17 ponto não é estatisticamente significativa. Ou seja, não há evidências suficientes para afirmar que a visita teve um efeito real no score.

Questão 2. Inclua no modelo as covariadas income, stratio e english. O que mudou na estimativa do efeito de visited? O efeito permanece estável?

modelo_q2 <- lm(score ~ visited + income + stratio + english, data = school)
summary(modelo_q2)
## 
## Call:
## lm(formula = score ~ visited + income + stratio + english, data = school)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -0.34977 -0.08262  0.01201  0.13241  0.24550 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)   
## (Intercept) 19.223225   5.219439   3.683  0.00783 **
## visited     -0.651979   0.216565  -3.011  0.01965 * 
## income      -0.001147   0.054272  -0.021  0.98373   
## stratio     -0.160476   0.112620  -1.425  0.19720   
## english      0.174361   0.072887   2.392  0.04801 * 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.2263 on 7 degrees of freedom
## Multiple R-squared:  0.6047, Adjusted R-squared:  0.3789 
## F-statistic: 2.678 on 4 and 7 DF,  p-value: 0.121

O coeficiente mudou de -0.1667 para -0.6520. Isso significa que, após controlarmos por income, stratio e english, o efeito estimado da visita se tornou mais forte (mais negativo). Além disso, vemos que o p-valor para visited é de 0.01965. Como esse valor é menor que 0.05, o efeito de visited agora é estatisticamente significativo.

Assim observamos que o efeito de visited não permaneceu estável, pois a mudança drástica no valor do coeficiente e a nova significância estatística sugerem que as variáveis income, stratio e english estavam confundindo a relação entre visited e score. A inclusão delas no modelo ajudou a isolar melhor o verdadeiro impacto da visitação.

Questão 3. Discuta o papel das covariadas no controle de viés de seleção. Há indícios de comparabilidade entre as escolas tratadas e não tratadas?

school %>%
  group_by(visited) %>%
  summarise(across(c(income, stratio, english, score), mean, na.rm = TRUE))

A tabela de médias mostra que há diferenças significativas entre as escolas que foram visitadas (visited = 1) e as que não foram (visited = 0), o que aponta para um viés de seleção. As variáveis income, stratio e english são as nossas covariadas. Ao incluí-las no modelo de regressão, nós controlamos por essas diferenças. O modelo tenta isolar o efeito da visitação, removendo a influência dessas outras variáveis. Por exemplo, se escolas com menor renda (income) também têm scores mais baixos, e são essas escolas que foram visitadas, o modelo de regressão corrige para isso, nos dando uma estimativa mais pura do efeito da visita. Analisando as médias vemos que: income é diferente entre os grupos, da mesma forma nota-se uma diferença de média de stratio e de english. Com isso as diferenças nas médias dessas covariadas demonstram que as escolas visitadas e não visitadas não são comparáveis antes do tratamento. As escolas que receberam a visita já possuíam características diferentes das que não receberam, confirmando um forte indício de viés de seleção.

Questão 4. O que seria o contrafactual neste contexto? Como o modelo o estimado?

Neste contexto, o contrafactual para uma escola que foi visitada é o que teria acontecido com o seu score se ela não tivesse sido visitada. Da mesma forma, o contrafactual para uma escola não visitada é o que teria acontecido com o seu score se ela tivesse sido visitada. A grande questão da inferência causal é que nunca podemos observar o contrafactual. Uma escola ou foi visitada ou não foi; não podemos voltar no tempo para ver o outro cenário. Por isso, precisamos de métodos para estimá-lo. Podemos estimar isso com o modelo de regressão, pois ele usa as informações das escolas que não foram visitadas para “prever” qual seria o score das escolas visitadas se elas não tivessem recebido a visita.

Assim, para as escolas NÃO visitadas (visited = 0), o modelo usa o grupo de controle (as escolas não visitadas) como uma estimativa do contrafactual para as escolas visitadas. Para as escolas visitadas (visited = 1): O modelo usa as características das escolas visitadas para estimar qual seria o score delas no cenário em que não tivessem recebido a visita. A diferença entre o score observado nas escolas visitadas e o score contrafactual estimado é o efeito do tratamento (visited).

O modelo de regressão com as covariadas (income, stratioe english) faz um trabalho melhor, pois ele estima o contrafactual de uma forma mais sofisticada, levando em conta que os grupos não eram idênticos no início. Dessa forma, ajustando o score esperado de cada grupo com base nessas características, produzindo uma estimativa do efeito do tratamento mais precisa e menos enviesada.

Questão 6. Você considera que o modelo estimado permite identificar um efeito causal do programa de visita escolar sobre o desempenho (score)? Justifique sua resposta com base nos pressupostos do modelo e nas características da base de dados.

O modelo_q2 permite identificar um efeito causal do programa de visita escolar, mas sob uma forte suposição, pois nele efeito de visited se tornou estatisticamente significativo e o coeficiente mudou para um valor mais negativo. Isso sugere que as covariadas incluidas estavam de fato mascarando o verdadeiro efeito. Agora, o modelo ajustado está nos dando uma estimativa do efeito do tratamento isolado da influência dessas outras variáveis. Porém, só podemos confirmar isso sob a suposição de que income, stratio e english são as únicas variáveis que explicam tanto a decisão de visitar uma escola quanto o seu score for verdadeira. Se houver alguma outra característica importante que não foi incluída no modelo, como uma variável omitida, o viés de seleção ainda pode existir, e a estimativa do efeito causal pode não ser confiável.


Parte 2 – Modelo de Diferenças em Diferenças (DiD)

Contexto: Avaliação de Impacto do Programa de Microcrédito (Green Bank)

O experimento natural conduzido por Ashraf et al. (2006) avalia os efeitos de um programa de microcrédito voltado especificamente para mulheres nas Filipinas. O estudo teve como base uma colaboração com o banco Green Bank of Caraga, que implementou um programa de empréstimos em determinadas regiões em 1998.

A base de dados utilizada (hh_9198.dta) contém informações de dois momentos no tempo: - 1991 (antes da intervenção), - 1998 (após a intervenção).

As unidades de observação são os domicílios, identificados pela variável nh. A variável de resultado primária é o gasto total per capita do domicílio (exptot), usada como proxy de bem-estar econômico.

Tratamento

O tratamento é definido com base na participação das chefes mulheres em programas de microcrédito em 1998. A variável de tratamento dfmfd98 assume o valor 1 se o domicílio participou em 1998 e 0 caso contrário. Esse indicador é atribuído a ambos os períodos, permitindo a comparação entre grupos ao longo do tempo.

Aplicação do Modelo de Diferenças em Diferenças (DiD)

Para estimar o efeito causal do microcrédito sobre o bem-estar econômico dos domicílios, é aplicado o método de Diferenças em Diferenças (DiD). O objetivo é isolar o impacto do programa ao comparar a evolução dos gastos per capita entre domicílios que participaram e não participaram do programa.

A ideia é que, se as tendências de evolução dos grupos fossem paralelas na ausência da intervenção, qualquer diferença adicional observada nos gastos dos domicílios tratados pode ser atribuída ao efeito do programa.

Especificação do modelo

O modelo pode ser estimado com e sem variáveis de controle adicionais (como escolaridade, idade e sexo do chefe do domicílio, acesso à terra, bens alimentares, etc.) para melhorar a precisão da estimativa.

Parte 3 – Estimador DiD via Regressão

Além da estimativa manual com diferenças de médias, o estimador de Diferenças em Diferenças (DiD) também pode ser implementado via regressão linear com interação, conforme discutido em Ravallion (2008). O coeficiente da interação é o estimador de impacto causal.


Apêndice: Explicação das Variáveis do Modelo DiD (Green Bank)

Objetivo

Avaliar o efeito causal da participação em um programa de microcrédito sobre os gastos per capita do domicílio, utilizando o modelo de Diferenças em Diferenças (DiD) com dois períodos: 1991 (pré-intervenção) e 1998 (pós-intervenção).

Variável dependente (resultado)

Variável Tipo Explicação
exptot Contínua Gasto total per capita do domicílio.
lexptot Contínua Log de (1 + exptot). Reduz assimetria e normaliza distribuição.

Variáveis principais do DiD

Variável Tipo Papel no Modelo Explicação
year Binária Tempo (t) 0 = 1991; 1 = 1998.
dfmfd98 Binária Grupo (T) 1 se o domicílio participou em 1998. Aplicada aos dois anos.
dfmfdyr Binária Interação (T × t) Produto dfmfd98 * year. Representa o efeito do tratamento.

Covariáveis de controle

Variável Tipo Explicação
sexhead Binária 1 se o chefe do domicílio é mulher.
agehead Contínua Idade do chefe do domicílio.
educhead Contínua Anos de estudo do chefe.
lnland Contínua Log da área de terra disponível.
vacess Binária Acesso à vila ou mercado.
pcirr Contínua Indicador de bens duráveis per capita.
rice Contínua Consumo per capita de arroz.
wheat Contínua Consumo per capita de trigo.
milk Contínua Consumo per capita de leite.
oil Contínua Consumo per capita de óleo.
egg Contínua Consumo per capita de ovos.

Interpretação dos Coeficientes

  • alpha: Média dos gastos dos domicílios de controle em 1991.
  • year (sigma): Mudança média nos gastos dos controles entre 1991 e 1998.
  • dfmfd98 (beta): Diferença média entre tratados e controles em 1991.
  • dfmfdyr (delta): Efeito causal estimado do programa.
  • Covariadas (Y): Controlam fatores que afetam os gastos independentemente do tratamento.

Regressão com Interação (DiD)

a) Gere a variável lexptot = log(1 + exptot).

b) Crie a variável dfmfd98:

df <- read.csv("base_greenbank_sms.csv")

df <- df %>%
  mutate(
    lnland = log(1 + hhland / 100),
    lexptot = log(1 + exptot),
    dfmfd1 = ifelse(dfmfd == 1 & year == 1, 1, 0)
  ) %>%
  group_by(nh) %>%
  mutate(dfmfd98 = max(dfmfd1)) %>%
  ungroup() %>%
  mutate(dfmfdyr = dfmfd98 * year)

c) Estime o modelo:

model_did_reg <- lm(lexptot ~ year + dfmfd98 + dfmfdyr, data = df)
summary(model_did_reg)
## 
## Call:
## lm(formula = lexptot ~ year + dfmfd98 + dfmfdyr, data = df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.37246 -0.29923 -0.05341  0.23732  2.32397 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  8.31048    0.02315 358.989  < 2e-16 ***
## year         0.14732    0.03274   4.500 7.28e-06 ***
## dfmfd98     -0.11457    0.03190  -3.591 0.000338 ***
## dfmfdyr      0.11138    0.04511   2.469 0.013657 *  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4578 on 1648 degrees of freedom
## Multiple R-squared:  0.05533,    Adjusted R-squared:  0.05361 
## F-statistic: 32.18 on 3 and 1648 DF,  p-value: < 2.2e-16

d) Interprete o coeficiente de dfmfdyr. O programa teve efeito sobre os gastos?

O valor do coeficiente para dfmfdyr foi de 0.11138, isso significa que a participação no programa de microcrédito aumentou os gastos per capita em aproximadamente 11.1% nos domicílios tratados, em comparação com a evolução dos gastos nos domicílios do grupo de controle. O p-valor associado a esse coeficiente é 0.013657, que é menor que 0.05. Portanto, podemos concluir que o programa de microcrédito teve um efeito causal positivo e estatisticamente significativo sobre os gastos per capita dos domicílios que participaram.

e) Estenda com controles:

model_did_controls <- lm(
  lexptot ~ year + dfmfd98 + dfmfdyr + sexhead + agehead + educhead +
    lnland + vaccess + pcirr + rice + wheat + milk + oil + egg,
  data = df
)
summary(model_did_controls)
## 
## Call:
## lm(formula = lexptot ~ year + dfmfd98 + dfmfdyr + sexhead + agehead + 
##     educhead + lnland + vaccess + pcirr + rice + wheat + milk + 
##     oil + egg, data = df)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -1.13760 -0.26360 -0.03747  0.22421  2.19400 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  7.4827033  0.1973802  37.910  < 2e-16 ***
## year         0.2492511  0.0544887   4.574 5.14e-06 ***
## dfmfd98     -0.0056525  0.0296586  -0.191  0.84888    
## dfmfdyr      0.0902307  0.0411774   2.191  0.02857 *  
## sexhead     -0.0799608  0.0400484  -1.997  0.04603 *  
## agehead      0.0014507  0.0008442   1.718  0.08592 .  
## educhead     0.0375293  0.0032732  11.466  < 2e-16 ***
## lnland       0.2083184  0.0219265   9.501  < 2e-16 ***
## vaccess     -0.0232830  0.0353470  -0.659  0.51018    
## pcirr        0.1116618  0.0352672   3.166  0.00157 ** 
## rice        -0.0025519  0.0080894  -0.315  0.75245    
## wheat        0.0039830  0.0096078   0.415  0.67852    
## milk         0.0164985  0.0040377   4.086 4.60e-05 ***
## oil          0.0018047  0.0025388   0.711  0.47729    
## egg          0.1205600  0.0370374   3.255  0.00116 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 0.4141 on 1637 degrees of freedom
## Multiple R-squared:  0.232,  Adjusted R-squared:  0.2254 
## F-statistic: 35.32 on 14 and 1637 DF,  p-value: < 2.2e-16

f) O efeito permanece significativo? Como interpretá-lo?

Sim, visto que o valor do coeficiente de dfmfdyr mudou de 0.11138 para 0.0902307, isso significa que a participação no programa de microcrédito está associada a um aumento de aproximadamente 9% nos gastos per capita. O p-valor é de 0.02857, que continua abaixo de 0.05. A inclusão das covariadas ajustou a estimativa, reduzindo-a de 11.1% para 9%. Isso sugere que parte do aumento inicial nos gastos per capita estava, na verdade, correlacionada com outras características dos domicílios (como escolaridade, posse de terra, etc.). O modelo com controles consegue isolar melhor o efeito puro do programa de microcrédito.

g) Com base nas evidências, qual sua conclusão sobre a eficácia do programa?

Com base nas evidências dos modelos DiD, o programa de microcrédito pode ser considerado eficaz. A análise mostrou que a participação no programa resultou em um aumento estatisticamente significativo nos gastos per capita dos domicílios tratados, mesmo após o controle por diversas características demográficas e de consumo. A redução da estimativa do efeito de 11.1% para 9% com a inclusão dos controles reforça a robustez da conclusão. O efeito de 9% é uma estimativa mais precisa do impacto real do programa.

h) O modelo permite inferência causal? Justifique com base nos pressupostos e nos dados.

Sim, o modelo de Diferenças em Diferenças (DiD) permite a inferência causal, mas a validade dessa conclusão está diretamente ligada ao cumprimento do pressuposto de tendências paralelas, que é a base de toda a metodologia DiD. Cuja ideia fundamental por trás é que, na ausência do programa de microcrédito, a trajetória de evolução dos gastos per capita nos domicílios que participaram do programa teria sido a mesma que a trajetória dos domicílios que não participaram. Em outras palavras, os grupos de tratamento e controle seguiriam tendências idênticas ao longo do tempo.

No nosso caso, o coeficiente de dfmfdyr atua como o estimador de impacto, capturando o desvio dessa tendência paralela. Como observamos que este coeficiente é estatisticamente significativo, isso sugere que a tendência do grupo de tratamento foi significativamente diferente da tendência do grupo de controle. Atribuímos essa diferença ao programa de microcrédito, pois é a única intervenção distinta entre os dois grupos.

Além disso, a inclusão de variáveis de controle no segundo modelo fortalece essa justificativa. Ao controlar por características como educhead, lnland e outras, nós ajustamos para possíveis diferenças iniciais entre os grupos que poderiam ter afetado suas tendências de gastos ao longo do tempo. Esse ajuste aumenta nossa confiança de que a suposição de tendências paralelas é mais plausível, tornando a inferência causal do modelo mais robusta.

Portanto, a inferência causal é possível porque o DiD, juntamente com os controles adicionais, oferece uma metodologia para isolar o efeito do programa, separando-o das tendências de evolução naturais e das diferenças iniciais entre os grupos.

extra: i) Gere um gráfico mostrtando as trajetórias do controle, do tratamento e o contrafactural

df2 <- df %>%
  mutate(
    lnland = log(1 + hhland / 100),
    lexptot = log(1 + exptot),
    dfmfd1 = ifelse(dfmfd == 1 & year == 1, 1, 0)
  ) %>%
  group_by(nh) %>%
  mutate(dfmfd98 = max(dfmfd1)) %>%
  ungroup() %>%
  mutate(dfmfdyr = dfmfd98 * year)

# 1. calculando a media de lexptot por grupo e ano para o grafico
did_data_summary <- df2 %>%
  group_by(year, dfmfd98) %>%
  summarise(
    mean_lexptot = mean(lexptot, na.rm = TRUE),
    .groups = 'drop'
  )

# 2. calculando a diferenca de tendencia para o contrafactual
# Diferença no grupo de controle (tendencia natural)
control_diff <- did_data_summary %>%
  filter(dfmfd98 == 0) %>%
  summarise(diff = mean_lexptot[year == 1] - mean_lexptot[year == 0]) %>%
  pull(diff)

# media do grupo tratado em 1991 (ponto de partida do contrafactual)
treated_1991_mean <- did_data_summary %>%
  filter(dfmfd98 == 1, year == 0) %>%
  pull(mean_lexptot)

# ponto final do contrafactual
counterfactual_end <- treated_1991_mean + control_diff

# 3. gerando o grafico DiD com o contrafactual
ggplot(did_data_summary, aes(x = year, y = mean_lexptot, color = factor(dfmfd98))) +
  
  # Adicionar as linhas dos grupos de tratamento e controle
  geom_line(aes(group = dfmfd98), size = 1.2) +
  geom_point(size = 3) +
  
  # Adicionar a linha do contrafactual (pontilhada)
  annotate(
    "segment",
    x = 0,
    y = treated_1991_mean,
    xend = 1,
    yend = counterfactual_end,
    linetype = "dashed",
    color = "black",
    size = 1.2
  ) +
  
  # rotulos e anotações para o gráfico
  labs(
    title = "Efeito do Microcrédito nos Gastos per Capita (DiD)",
    subtitle = "Linha pontilhada mostra o contrafactual",
    y = "Log dos Gastos Per Capita (lexptot)",
    x = "Ano",
    color = "Grupo"
  ) +
  scale_color_manual(
    values = c("darkblue", "red"),
    labels = c("Controle (não participou)", "Tratamento (participou)")
  ) +
  scale_x_continuous(
    breaks = c(0, 1),
    labels = c("1991", "1998")
  ) +
  theme_minimal() +
  theme(legend.position = "bottom")