import numpy as np
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
import seaborn as sns
Descontínua
Em alguns programas de políticas públicas, utiliza-se um valor específico de uma variável como critério de seleção para definir quem está apto a participar. Por exemplo, na seleção de municípios para um programa de desenvolvimento urbano, são escolhidos apenas aqueles com população superior a 50 mil habitantes.
Essa situação com um limite populacional cria uma situação de descontinuidade na probabilidade de seleção, municípios com menos de 50 mil habitantes a probabilidade é 0, mas com uma população superior, é de 100%. Como solução para análises de impactos, os municipios que estão próximos a esse ponto de corte são utilizadas como grupos de tratamento e controle, partindo do príncipio que possuem semelhanças entre si.
Resumindo, regressão descontínua necessista de uma variação exógena uma variável quantitativa (running variable) gerando um cutoff e viabilizando a definição dos grupos de tratamento e controle.
De acordo com de Avaliação de Impacto,para aplicar o método de regressão descontínua, é considerar algumas condições como:
- O índice deve ordenar as pessoas ou unidade de forma contínua.
- O índice deve er um ponto de corte claramente definido.
- O ponto de corte deve exclusico do programa de interesse
- A pontuaçao não pode ser manipulada.
Fuzzy
Quando a aplicação do tratamento não é perfeita, ou seja, quando unidades de controle recebem o tratamento e unidades de tratamento não o recebem, o desenho de regressão descontínua na lógica fuzzy considera que a mudança na probabilidade de receber o tratamento é menor que 1, sendo o estimador assumindo um formato diferente:
\[\alpha_{RD} = \lim_{\varepsilon \to 0} E[Y_{i}|x_{i} = c + \varepsilon] - \lim_{\varepsilon \to 0} E[Y_{i}|x_{i} = c - \varepsilon]\]
Nesse caso, \(\alpha_{RD}\) é a diferença de probabilidade de tratamento entre as unidades de ambos lados do cutoff, com as observações próximo do ponto. Para obter o estimador na lógica fuzzy, dividi-se por \(\beta_{RD}\) por \(\alpha_{RD}\):
\[\delta_{RD} = \frac{\lim_{\varepsilon \to 0} E[Y_{i}|x_{i} = c + \varepsilon] - \lim_{\varepsilon \to 0} E[Y_{i}|x_{i} = c - \varepsilon]}{\lim_{\varepsilon \to 0} E[Y_{i}|x_{i} = c + \varepsilon] - \lim_{\varepsilon \to 0} E[Y_{i}|x_{i} = c - \varepsilon]} = \frac{\alpha_{RD}}{\beta_{RD}}\]
onde o parâmetro \(\delta_{RD}\) representa o LATE.
A estimação de \(\beta_{RD}\) na lógica fuzzy resulta numa interpretação importante para o desenho da política de intervenção analisada, pois calcula o Efeito de Inteção do Tratamento (ITT), o que singifica que o estimador traduz o efeito da elegilidade de tratamento.
Mantendo o cenário de um programa de bolsa de estudos onde os alunos com nota acima de 70 têm maior chance de receber uma bolsa, mas não todos recebem. Da mesma forma, alguns alunos com nota abaixo de 70 podem acabar recebendo a bolsa. A ideia é usar esse aumento de probabilidade como um “instrumento” para medir o impacto causal da bolsa na nota final dos alunos.
# Setting random seed for reproducibility
0)
np.random.seed(
# Generate synthetic data
= 200 # Total number of observations
n = np.random.uniform(50, 90, n) # Entrance exam scores between 50 and 90
score = 70 # Scholarship cutoff score
cutoff
# Probability of getting scholarship: higher above the cutoff but not certain
= np.where(score >= cutoff, 0.8, 0.3)
prob_scholarship = (np.random.rand(n) < prob_scholarship).astype(int)
scholarship
# Generate the outcome (final grade) with treatment effect
# Students receiving scholarship get a 10-point boost on average
= 50 + 0.5 * score + 10 * scholarship + np.random.normal(0, 5, n)
grade
# Create DataFrame
= pd.DataFrame({'score': score, 'scholarship': scholarship, 'grade': grade})
data 'above_cutoff'] = (data['score'] >= cutoff).astype(int) # Instrument variable
data[
# Visualizing the data
=(10, 6))
plt.figure(figsize='score', y='grade', data=data, hue='scholarship', palette='cool', edgecolor=None)
sns.scatterplot(x='red', linestyle='--', label='Cutoff (score=70)')
plt.axvline(cutoff, color'Entrance Exam Score')
plt.xlabel('Final Grade')
plt.ylabel('Fuzzy Regression Discontinuity at Scholarship Cutoff')
plt.title(
plt.legend() plt.show()
Nos resultados da primeira etapa, o coeficiente da variável above_cutoff mostra a relação entre cruzar o ponto de corte (ter nota >= 70) e a probabilidade de receber a bolsa. Isso representa o efeito do ponto de corte sobre a chance de obter o tratamento.
# Fuzzy RDD Analysis with Instrumental Variables (IV) Regression
# Step 1: First stage regression - predict scholarship based on cutoff
= sm.add_constant(data[['above_cutoff', 'score']])
X_first_stage = sm.OLS(data['scholarship'], X_first_stage).fit()
first_stage_model 'predicted_scholarship'] = first_stage_model.predict(X_first_stage)
data[print("First Stage Regression Results (Predicting Scholarship):")
print(first_stage_model.summary())
First Stage Regression Results (Predicting Scholarship):
OLS Regression Results
==============================================================================
Dep. Variable: scholarship R-squared: 0.268
Model: OLS Adj. R-squared: 0.261
Method: Least Squares F-statistic: 36.15
Date: Sun, 03 Nov 2024 Prob (F-statistic): 4.23e-14
Time: 06:48:12 Log-Likelihood: -111.92
No. Observations: 200 AIC: 229.8
Df Residuals: 197 BIC: 239.7
Df Model: 2
Covariance Type: nonrobust
================================================================================
coef std err t P>|t| [0.025 0.975]
--------------------------------------------------------------------------------
const 0.4196 0.319 1.316 0.190 -0.209 1.048
above_cutoff 0.5537 0.121 4.591 0.000 0.316 0.792
score -0.0020 0.005 -0.385 0.700 -0.012 0.008
==============================================================================
Omnibus: 3.676 Durbin-Watson: 1.911
Prob(Omnibus): 0.159 Jarque-Bera (JB): 2.696
Skew: -0.132 Prob(JB): 0.260
Kurtosis: 2.497 Cond. No. 786.
==============================================================================
Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
Nos resultados da segunda etapa, o coeficiente da variável predicted_scholarship representa o efeito causal estimado da bolsa na nota final. Esse é o Efeito Médio Local do Tratamento (LATE), que mede o impacto da bolsa nos alunos próximos ao ponto de corte, onde a probabilidade de receber a bolsa aumenta, mas não é garantida.
# Step 2: Second stage regression - use predicted scholarship in outcome model
= sm.add_constant(data[['predicted_scholarship', 'score']])
X_second_stage = sm.OLS(data['grade'], X_second_stage).fit()
second_stage_model
print("\nSecond Stage Regression Results (Effect on Grade):")
print(second_stage_model.summary())
Second Stage Regression Results (Effect on Grade):
OLS Regression Results
==============================================================================
Dep. Variable: grade R-squared: 0.643
Model: OLS Adj. R-squared: 0.640
Method: Least Squares F-statistic: 177.6
Date: Sun, 03 Nov 2024 Prob (F-statistic): 8.23e-45
Time: 06:48:12 Log-Likelihood: -648.63
No. Observations: 200 AIC: 1303.
Df Residuals: 197 BIC: 1313.
Df Model: 2
Covariance Type: nonrobust
=========================================================================================
coef std err t P>|t| [0.025 0.975]
-----------------------------------------------------------------------------------------
const 47.4505 3.674 12.915 0.000 40.205 54.696
predicted_scholarship 10.2674 3.189 3.220 0.001 3.979 16.555
score 0.5268 0.072 7.314 0.000 0.385 0.669
==============================================================================
Omnibus: 5.378 Durbin-Watson: 2.066
Prob(Omnibus): 0.068 Jarque-Bera (JB): 5.186
Skew: -0.305 Prob(JB): 0.0748
Kurtosis: 3.501 Cond. No. 714.
==============================================================================
Notes:
[1] Standard Errors assume that the covariance matrix of the errors is correctly specified.
Sobre a validade da regressão descontínua
Um ponto importante para a utilização da regressão descontínua
A regressão descontínua é muito útil quando existe um ponto de corte conhecida em uma variável contínua e que não se deveria observar descontinuidade do indicador caso não houvesse a intervençao.
Os componentes principais são:
Variável Corte: a regra ou ponto específico em um variável que determina a atribuição ao tratamento
Variável Running: variável contínua usada para determinar a elegibilidade para o tratamento
Descontinuidade: ponto onde há uma mudança abrupta na probabalidade de receber o tratamento.
As vantagens desse modelos é o fonercimento de estimativas causais robustar sem a necessidade de randomização explícita e aplicabilidade em diversas áreas. Entretanto, o efeito causal causal apenas os indivíduos próxioms ao ponto de corte, limitando a generalização e uma definição clara da regra de corte.
Para avaliar o modelo, é importante utilizar alguns métodos que possam avaliar a validade do modelo. Testes de robustez são alternativa que procurar demonstar estabilidade do valor coeficiente estimado. Uma possibilidade inicial é a utilização de polínômios com runinng variable além do método de primeiro grau. Regressões não-parammétricas podem modificar o peso atribuído às unidades observacionais de acordo a distância e frequância em relação ao cutoff.
Também é póssível a utilização de diferentes bandwidths de estimação, pois apesar da busca da melhor banda, é esperado que não ocorra alterações grandes no valor dos coeficientes obtidos. O cuidado necessário neste tipo de avaliaçao é a quantidade de elementos utilizados para análise, pois com redução da banda, espera-se que ocorra redução na quantidade de unidades para avaliação.
Resumindo
A regressão descontínua (RD) é uma metodologia de avaliação causal importante por sua capacidade de identificar efeitos de tratamento de forma robusta, especialmente quando há uma regra clara de elegibilidade baseada em um ponto de corte de uma variável contínua. Ao comparar indivíduos próximos ao limite, mas em lados opostos, a RD explora variações quase experimentais para estimar o impacto da intervenção. No entanto, a validade das estimativas depende da escolha adequada da janela de análise e da suposição de que, exceto pela intervenção, os grupos próximos ao ponto de corte são comparáveis. Assim, a regressão descontínua é uma ferramenta útil e precisa, mas exige cuidados para garantir a confiabilidade dos resultados.
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.