Diferença em diferenças

Em muitas pesquisas, estabelecer a equivalência entre grupos de tratamento e controle pode ser inviável devido a limitações contextuais ou técnicas, por exemplo, o impacto da presença de grupos criminosos no sistema educacional de uma região. Não dar ter conversas com os alguns criminosos e pedir para citiar uma regiao. Nesses casos, o método de diferenças-em-diferenças surge como uma abordagem quase-experimental eficaz para identificar efeitos causais, ao comparar as variações nos resultados entre os grupos antes e depois da intervenção.

O uso desse método possibilita identificar diferenças preexistentes que podem influenciar a variável de interesse. Por exemplo, em cidades mais organizadas e com investimentos já direcionados a um setor de atividade pública, uma avaliação de política pública poderia considerar essas características, evitando atribuir o impacto exclusivamente à intervenção. Isso garante que os resultados reflitam de forma mais precisa o efeito da política, ao levar em conta fatores contextuais que poderiam afetar os desfechos.

No capítulo sobre diferenças-em-diferenças do livro sobre a avaliações de impacto em políticas no SUS, os autores resumem bem o conceito de do método que na “mudança esperada na variável de interesse \(Y\) antes e depois do tratamento no grupo de tratamento, menos a mudança esperada no grupor de controle.”

O estimador de diferenças-em-difenrenças é dado:

\[\beta_{diff} = [E(Y_{2}|D = 1) - E(Y_{1}|D = 1)] - [E(Y_{2}|D = 0) - E(Y_{1}|D = 0)]\]

No cálculo, a diferença entre o grupo de tratamento e o grupo de controle após a intervenção é subtraída pela diferença entre os mesmos grupos antes da intervenção.

Esquematizando:

  1. Calcular \(\overline{Y}_{tratados, antes}\) e \(\overline{Y}_{tratados, antes}\) (médias antes da intervenção )

  2. Calcular \(\overline{Y}_{tratados, depois}\) e \(\overline{Y}_{tratados, depois}\) (médias depois da intervenção)

  3. Determinar a mudança em \(Y\) para cada grupo:

  1. Calcular a diferença nas mudanças:

Identificação do efeito causal

Um ponto importante levantado no guia de avaliação de políticas é que, apesar da simplicidade, deve-se prestar atenção na seguinte questão: sob quais condições pode-se interpretar diferenças-em-diferenças como efeito da política ou programa sobre Y?. A condição de identificação pode ser resumida a seguir:

  • Pressuposto 1: O estimador de diferenças-em-diferenças captura o efeito causal de um programa ou política sobre dada variável de interesse se na ausência da intervenção tanto o grupo de tratamento quanto o de controle teriam seguido tendências similares na variável dependente de interesse.

É importante destacar que uma condição essencial para o modelo de diferenças-em-diferenças é que as diferenças entre os grupos de tratamento e controle permaneçam constantes ao longo do tempo. No entanto, comprovar diretamente esse pressuposto é muitas vezes inviável, o que torna necessário realizar testes para avaliar sua plausibilidade. Uma forma de testar é usar um teste placebo, realiza-se uma estimativa adicional da diferença em diferenças utilizando um grupo de tratamento “falso”, isto é, um grupo que se sabe que não foi afetado pelo programa.

Diferenças por Regressão

A estimação de diferenças-em-diferenças pode ser obtidas através regressão, como no modelos a seguir:

\[Y_{it} = \alpha_{0} + \alpha_{1} Período_{t} + \alpha_{2} Tratamento{i} + \beta_{diff} Período_{t} x Tratamento_{i} + \varepsilon_{it}\]

  • \(\alpha_{0}\): intecepto
  • \(Período\): variável dummy que indica o período (anterior ou posterior ao tratamento).
  • \(Tratamento\): variável dummy que indica se é do grupo de tratamento ou de controle.
  • \(Período x Tratamento\): termo interativo parâmetro do método.
  • \(\varepsilon\): erro aleatório

O modelo poder ser estimado pelo método de Mínimo Quadrado Ordinários (MQO) e \(\beta_{diff}\) pode ser interpretado como o efeito causal do programa. Devido as variáveis dummy, pode-se obter a seguinte tabela:

Em casos mais complexos, o modelo de diferenças-em-diferenças pode ser ampliado para incluir variáveis adicionais que capturam as características dos elementos estudados, incorporando um vetor \(𝑍\). Quando o período de observação abrange múltiplos intervalos antes e depois da intervenção, também é possível avaliar os efeitos de longo prazo, desde que a coleta de dados seja mantida ao longo do tempo. Alternativamente, pode-se optar pela estimação do modelo com efeitos fixos.:

\[Y_{it} = \alpha_{0} + \mu_{t} + \theta_{i} + \beta_{diff} Período_{t} x Tratamento_{i} + \varepsilon_{it}\]

  • \(\mu\): efeito fixo de tempo
  • \(\theta\): efeito fixo de unidade

A inclusão de efeitos fixos permite um controle flexível sobre características que variam entre indivíduos, mas que permanecem constantes ao longo do tempo. Os efeitos fixos capturam características não observadas que são invariáveis para cada indivíduo, eliminando, assim, vieses resultantes dessas características. Por outro lado, os efeitos fixos também capturam choques que afetam todos os indivíduos de forma uniforme ao longo do tempo, como mudanças nas políticas públicas ou eventos macroeconômicos. Esse método é especialmente útil para isolar o efeito do tratamento, controlando variáveis não observadas que poderiam influenciar os resultados.

Plausibilidade do pressusposto de identificação

Devido à questão da contrafactualidade, o pressuposto de identificação não pode ser testado explicitamente. No entanto, é possível implementar testes que verifiquem indiretamente a plausibilidade desse pressuposto.

Pré-tendências:

No caso de tendências semelhantes, se as divergências começarem a surgir apenas após a implementação do programa, isso fornece evidências em favor do pressuposto de identificação. Para implementar formalmente esse teste, é necessário modificar o modelo da seguinte forma:

\[Y_{it} = \alpha_{0} + \mu_{t} + \theta_{i} + \sum \beta_{k}1[t = k] x D_{i} + \varepsilon_{it}\]

Onde:

  • \(\beta_{k}\): são estimadores para cada período, incluindo tanto o período pré e pós-intervenção.

A referência desses estimadores é um período pré-tratamento, e espera-se que os coeficientes desse período sejam próximos de zero e estatisticamente insignificantes. Esse tipo de avaliação oferece uma forma de julgar a plausibilidade do pressuposto de tendências paralelas.

Exemplos

No livro sobre o estudo de impacto lançado pelo Ministério da Saúde, podemos encontrar a aplicação do método no Programa Mais Médicos, onde o processo de causalidade foi analisado. Esse estudo examina como a implementação do programa influenciou indicadores de saúde em diferentes regiões, permitindo avaliar o efeito da presença de médicos na melhoria do atendimento e na saúde da população.

Outro exemplo foi a análise da diferença da políticas dos bancos do oitavo e sexto distritos, no estado do Missipppi EUA, para avaliar se a expansão de crédito seria benefico ou não.

Cada exemplo possui suas variações. A seguir, apresentamos um exemplo criado com dados aleatórios, imaginando uma intervenção em um contexto específico, com o objetivo de avaliar seus efeitos. Para ilustrar, geramos os dados de forma aleatória:

import pandas as pd
import numpy as np
import statsmodels.formula.api as smf
import matplotlib.pyplot as plt
import seaborn as sns

# Configuração do estilo do Seaborn
sns.set(style="whitegrid")

np.random.seed(42)

# Gerar dados
n = 100  # número de observações por grupo por período
data = pd.DataFrame({
    'group': np.repeat(['treatment', 'control'], n),
    'period': np.tile(np.repeat(['pre', 'post'], n//2), 2),
    'outcome': np.concatenate([
        np.random.normal(50, 10, n//2),  # pré-tratamento para o grupo de tratamento
        np.random.normal(55, 10, n//2),  # pós-tratamento para o grupo de tratamento
        np.random.normal(50, 10, n//2),  # pré-tratamento para o grupo de controle
        np.random.normal(50, 10, n//2)   # pós-tratamento para o grupo de controle
    ])
})

# Adicionar o efeito do tratamento ao período pós-tratamento para o grupo de tratamento
data.loc[(data['group'] == 'treatment') & (data['period'] == 'post'), 'outcome'] += 5

# Criar variáveis dummy
data['post'] = (data['period'] == 'post').astype(int)
data['treat'] = (data['group'] == 'treatment').astype(int)
data['interaction'] = data['post'] * data['treat']

# Realizar a regressão
model = smf.ols('outcome ~ post + treat + interaction', data=data).fit()

# Exibir os resultados da regressão
print(model.summary())

# Plotar as médias dos resultados
plt.figure(figsize=(10, 6))
sns.barplot(data=data, x='period', y='outcome', hue='group', ci='sd', palette='pastel')
plt.title('Comparação dos Resultados entre Grupos de Tratamento e Controle')
plt.xlabel('Período')
plt.ylabel('Resultado (Outcome)')
plt.legend(title='Grupo')
plt.axhline(y=data['outcome'].mean(), color='red', linestyle='--', label='Média Geral')
plt.legend(loc='upper left')
plt.show()
                            OLS Regression Results                            
==============================================================================
Dep. Variable:                outcome   R-squared:                       0.213
Model:                            OLS   Adj. R-squared:                  0.201
Method:                 Least Squares   F-statistic:                     17.70
Date:                Sun, 03 Nov 2024   Prob (F-statistic):           3.30e-10
Time:                        06:28:19   Log-Likelihood:                -727.95
No. Observations:                 200   AIC:                             1464.
Df Residuals:                     196   BIC:                             1477.
Df Model:                           3                                         
Covariance Type:            nonrobust                                         
===============================================================================
                  coef    std err          t      P>|t|      [0.025      0.975]
-------------------------------------------------------------------------------
Intercept      49.6071      1.316     37.683      0.000      47.011      52.203
post            1.2318      1.862      0.662      0.509      -2.440       4.903
treat          -1.8619      1.862     -1.000      0.319      -5.533       1.810
interaction    11.2007      2.633      4.254      0.000       6.008      16.393
==============================================================================
Omnibus:                        0.858   Durbin-Watson:                   2.121
Prob(Omnibus):                  0.651   Jarque-Bera (JB):                0.762
Skew:                           0.151   Prob(JB):                        0.683
Kurtosis:                       2.995   Cond. No.                         6.85
==============================================================================

Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
C:\Users\filip\AppData\Local\Temp\ipykernel_15460\1942427977.py:41: FutureWarning:



The `ci` parameter is deprecated. Use `errorbar='sd'` for the same effect.

O modelo obtido pode ser representado pela seguinte forma de equação regressiva:

\[y = 49,61 + 1,24 \alpha_{1} - 1,87 \alpha_{2} + 11,20 \alpha_{3}\]

onde \(\alpha_{1}\) considera período, anterior ou posterior ao tratamento, \(\alpha_{2}\) se o elemento pertence ou não ao grupo de tratamento \(\alpha_{3}\) uma integração entre os elementos. Os resultados indicam que o incepto possui o valor de 49,60, ou seja, se todas os valores das variáveis dummy são 0, esse será 0 valor final, na tabela abaixo temos, os outros possíveis resultados:

def diff(p,t):
    int = p*t
    y = 49.61 + 1.24*p + 1.87*t + 11.20*int
    return y

data = {
  "Período": [0, 0, 1, 1],
  "Tratamento": [0, 1, 0, 1],
  "Resultado": [diff(0,0), diff(0,1), diff(1,0), diff(1,1)]
}

df = pd.DataFrame(data)

print(df) 
   Período  Tratamento  Resultado
0        0           0      49.61
1        0           1      51.48
2        1           0      50.85
3        1           1      63.92

De forma resumida, o método de diferenças em diferenças é uma ferramenta importante para inferência causal, desde que os pressupostos sejam bem fundamentados e a modelagem considere possíveis vieses ou variáveis não observadas. Ele oferece uma forma eficiente de medir o impacto de intervenções em estudos não experimentais, destacando-se por sua capacidade de controlar por fatores não observáveis que sejam constantes no tempo. No entanto, a precisão dos resultados depende da correta especificação do modelo e da verificação das hipóteses necessárias, como a de tendências paralelas, o que exige uma análise cuidadosa por parte dos pesquisadores.

Referências

Avaliação de Impacto na Prática Segunda edição.

Avaliação de impacto das políticas de saúde: um guia para o SUS [recurso eletrônico] / Ministério da Saúde, Secretaria de Ciência, Tecnologia, Inovação e Complexo da Saúde, Departamento de Ciência e Tecnologia. – Brasília: Ministério da Saúde, 2023.