Regressão Linear
O modelo de regressão linear é a ferramenta mais tradicional para estimarmos impactos de tratamento. Estruturalmente, ela é uma comparação entre médias, estimando como o valor médio da variável dependente muda conforme alteramos os valores das variáveis independentes. Isso faz com que consigamos estimar efeitos médios por ela, assim como controlar variáveis condicionais e relações complexas. Como utilizamos Mínimos Quadrados Ordinários (MQO), estimamos parâmetros que, sob as suposições corretas de identificação, possuem uma interpretação causal direta. Considerando uma relação linear simples
Em cenários com diferentes grupos, isto é, subpopulações, se formos analisar a mão, avaliaríamos o efeito do tratamento de forma ponderada, ou seja, tirando a média pelo tamanho da amostra de cada uma. Entretanto, se formos utilizar a regressão linear com o mesmo objetivo, a ponderação acontece de forma diferente: os grupos são avaliados pela variância de valores entre eles.
A intuição é que o modelo busca extrair o máximo de informação possível: grupos onde a variável apresenta maior dispersão (em dummies, quando a proporção de tratados e controles é mais equilibrada) oferecem mais "contraste" para o estimador, recebendo, portanto, maior peso na composição do coeficiente final.
Em casos como esse, de tratamentos categóricos com efeitos heterogêneos - diferentes efeitos para diferentes grupos - isso significa que o
1. O Intercepto ( )
O coeficiente
- Ponto de Atenção: Essa interpretação matemática só possui valor prático se
for um cenário plausível ou observado nos dados (ex: idade = 0 pode não fazer sentido em certas análises laborais).
Em estudos com grupos de Controle e Tratamento (onde
2. O Coeficiente de Interesse ( )
O coeficiente
-
Se
for contínua: é a variação média em associada a um aumento de uma unidade em . -
Se
for binária (Dummy de Tratamento): é interpretado como o Efeito Médio do Tratamento (ATE ou ATT, dependendo da população condicionada).
Para utilizar dados categóricos (strings ou categorias numéricas) em uma regressão, é necessário transformá-los em variáveis binárias (Dummies).
-
Implementação:
-
Pandas: Utilize
pd.get_dummies(df, columns=['Var'], drop_first=True).- Statsmodels: Na fórmula, basta envolver a variável com
C():outcome ~ C(Variavel).
- Statsmodels: Na fórmula, basta envolver a variável com
-
Atenção (Armadilha da Dummy): Para uma variável com
categorias, devemos criar apenas colunas de dummies. Se incluirmos todas as colunas junto com o intercepto, criamos multicolinearidade perfeita (redundância). -
Interpretação: A categoria omitida torna-se a Categoria de Referência. Os coeficientes das outras dummies representam a diferença média em relação a essa categoria base (quando todas as dummies são 0).
3. Termo de Interação
Muitas vezes, a suposição de que o efeito de
Neste modelo, o efeito de
A interpretação dos coeficientes muda:
-
(Efeito Principal de ): Representa o efeito de sobre apenas quando . Não é mais o efeito médio global. -
(Coeficiente de Interação): Representa o quanto o efeito de muda para cada unidade adicional de . - Se
for uma variável binária (ex: para Mulheres, para Homens) e for o tratamento, então é a diferença de efeito do tratamento entre mulheres e homens, por exemplo.
- Se
Ao incluir uma interação
O Trade-off entre Viés e Variância
Causal Inference in Python: Applying Causal Inference — Part II, Cap. Frisch-Waugh-Lovell Theorem and Orthogonalization, pág. 106
Condicionar covariáveis irrelevantes ou em excesso no modelo pode introduzir um risco: o aumento da variância do estimador de
O aumento na variância ocorre frequentemente devido à multicolinearidade e significa que as estimativas de
Teorema Frisch‑Waugh‑Lovell
Outra forma de observamos isso, é entendermos melhor o funcionamento do teorema Teorema Frisch-Waugh-Lovell (FWL).
Ele demonstra que o coeficiente de
- Desviesamento (Debiasing Step)
- Remover o viés das variáveis de controle
da sua variável de interesse . - Regredimos a variável de tratamento
nas covariáveis de controle , (ex: ) - Coletamos os resíduos dessa regressão
. Estes resíduos representam a parte de que é ortogonal (não correlacionada) aos controles .
- Remover o viés das variáveis de controle
- Remoção de Ruído (Denoising Step)
- Remover o ruído das variáveis de controle
da sua variável dependente . - Regredimos a variável dependente
nas mesmas covariáveis de controle , (ex: ) - Coletamos os resíduos dessa regressão
. Estes resíduos representam a parte de que é independente dos controles .
- Remover o ruído das variáveis de controle
- Regressão Final
- A estimativa final do efeito causal
é obtida regredindo o resíduo da variável dependente no resíduo da variável de tratamento: . - O
obtido nesta regressão de resíduos é idêntico ao da regressão original .
- A estimativa final do efeito causal
Para ver exemplos via código, é só acessar aqui.
A regressão linear assume que a relação entre as regressoras e o resultado (condicional) é linear. Se a relação verdadeira for não linear, a especificação linear pode provocar viés de especificação. É importante verificar se isso ocorre, especialmente entre a variável de tratamento e o desfecho; caso ocorra, podemos aplicar transformações adequadas, por exemplo: logaritmos, termos polinomiais, interações ou transformações multiplicativas.
Regressão Linear como Modelo para Potenciais Outcome
Outra possibilidade de utilizar a regressão linear, é atuar como um modelo de imputação de potenciais resultados. Isto quer dizer que conseguimos estimar os efeitos causais, seja ATE ou ATT, preechendo valores contrafactuais.
A lógica reside na capacidade da regressão de modelar as funções de resultado potencial:
Efeito de Tratamento Médio (ATE)
O
Onde
Cálculo Simplificado com statsmodels
Em um modelo de regressão linear que inclui covariáveis
Se o seu modelo é
Python
formula_ate = 'Y ~ D + X1 + X2'
model_ate = smf.ols(formula_ate, data=data).fit()
ate_estimate = model_ate.params['D']
Efeito Médio de Tratamento nos Tratados (ATT)
O
Isto significa que usamos o grupo de controle
Cálculo Simplificado com statsmodels
model_mu0 = smf.ols('Y ~ X1 + X2', data=data[data['D'] == 0]).fit()
imputed_y0 = model_mu0.predict(data[data['D'] == 1]) # Imputar o contrafactual, isto é, usar model_mu0 para prever o Y_0 para as unidades do grupo tratado T=1.
att_estimate = (data[data['D'] == 1]['Y'] - imputed_y0).mean()