Uma introdução à Econometria Aplicada com R

Da intuição econômica ao código reproduzível

Rodrigo Nobre Fernandez

2026

Edição ampliada com Microeconometria Avançada · HTML gerado diretamente dos arquivos RMarkdown

Nota editorial

Esta edição em R constitui uma nova versão, ampliada e reorganizada, escrita por Rodrigo Nobre Fernandez. O ponto de partida pedagógico é a experiência acumulada com o material introdutório anteriormente publicado para o Gretl, mas a presente obra foi reconstruída para uma lógica de pesquisa reproduzível: dados, código, objetos de estimação, diagnósticos, inferência e comunicação dos resultados fazem parte do mesmo fluxo.

A edição anterior, publicada em 2023, permanece citada nas referências como antecedente bibliográfico (Loures e Fernandez 2023). A autoria da presente edição é individual. Essa separação é importante porque a nova versão não é uma simples troca de telas do Gretl por comandos de R: capítulos foram ampliados, novos tópicos foram incorporados e a organização foi modificada para aproximar o estudante da prática contemporânea de pesquisa empírica.

Os exemplos utilizam conjuntos de dados associados à quinta edição de Principles of Econometrics, de Hill, Griffiths e Lim (Hill, Griffiths, e Lim 2018). O objetivo não é reproduzir o texto daquela obra, mas utilizar bases e problemas econométricos conhecidos como veículo de aprendizado do software. Antes de distribuir publicamente os arquivos de dados junto a uma edição comercial, devem ser verificadas as condições de licença e redistribuição aplicáveis.

Prefácio

A econometria aplicada exige duas competências que devem ser desenvolvidas em conjunto: compreender o modelo econômico e transformar essa compreensão em um procedimento empírico auditável. Em sala de aula, é comum encontrar estudantes que acompanham uma derivação algébrica, mas encontram dificuldade quando precisam organizar uma base, construir variáveis, estimar um modelo, diagnosticar problemas, interpretar coeficientes e produzir uma tabela que possa ser reproduzida por outra pessoa.

A linguagem R é especialmente adequada para reduzir essa distância. Importação, transformação, estimação, teste, gráfico e tabela podem ser registrados no mesmo projeto. Cada decisão fica documentada em código. Isso muda a natureza do aprendizado: o estudante deixa de memorizar uma sequência de cliques e passa a construir uma análise que pode ser revisada, corrigida e reutilizada.

Este livro não pretende ser um catálogo de comandos. Em cada capítulo, a pergunta econômica e a especificação vêm antes do software. O computador executa um estimador; ele não escolhe a pergunta de pesquisa, não justifica uma variável de controle e não transforma uma correlação em efeito causal. A ênfase está em compreender o que está sendo estimado, quais hipóteses sustentam a interpretação e como comunicar a incerteza.

A edição ampliada acrescenta fundamentos de probabilidade, álgebra matricial, simulação de Monte Carlo, bootstrap, endogeneidade e variáveis instrumentais, volatilidade ARCH/GARCH, tópicos modernos de diferenças em diferenças e uma seção extensa de reprodutibilidade. Esta revisão incorpora ainda uma parte avançada de microeconometria, com 2SLS e diagnósticos de instrumentos, FE-IV, painéis dinâmicos e GMM, máxima verossimilhança construída manualmente e modelos binários em painel. Esses acréscimos foram desenhados para que o livro possa servir tanto em uma disciplina introdutória quanto como referência inicial para trabalhos de conclusão de curso, disciplinas de microeconometria e projetos aplicados.

Como usar este livro

Cada capítulo foi organizado em quatro camadas. A primeira apresenta a pergunta e a intuição econômica. A segunda formaliza o modelo e suas hipóteses. A terceira mostra a implementação em R. A quarta discute interpretação, diagnóstico e exercícios. O leitor que estiver tendo o primeiro contato com econometria pode seguir os capítulos em ordem. Quem já cursou econometria pode utilizar as caixas, exemplos e apêndices como referência computacional.

Os blocos de código foram escritos para serem executados a partir da raiz do projeto. Recomenda-se manter a pasta dados/ e executar inicialmente scripts/00_setup.R. Ao modificar um exemplo, o estudante deve salvar sua própria versão em um script separado em vez de alterar silenciosamente os dados originais.

Reprodutibilidade. A regra operacional do livro é simples: nenhum resultado importante deve existir apenas como número copiado de uma tela. Coeficientes, tabelas e figuras devem poder ser regenerados a partir dos dados e do código.

Download das bases: Para o download dos dados utilizado clique aqui.

Fundamentos e regressão linear

Capítulo 0 — R, dados e reprodutibilidade

Como referências de base para o uso de R em econometria e para fluxos reproduzíveis, este capítulo dialoga com Kleiber e Zeileis (2008) e Wickham, Çetinkaya-Rundel, e Grolemund (2023).

Por que usar R?

A linguagem R é um ambiente de computação estatística de código aberto. Em econometria, sua principal vantagem não é apenas a quantidade de estimadores disponíveis. O ganho mais importante é a possibilidade de registrar toda a análise em um script: os dados são importados, transformados, estimados e apresentados por meio de instruções que podem ser executadas novamente.

Esse princípio é central para a pesquisa empírica. Uma tabela de regressão sem o código que a gerou é apenas um resultado final. Um script bem organizado registra o caminho entre a base original e esse resultado. Isso facilita a revisão, a identificação de erros, a atualização dos dados e a replicação por terceiros.

Instalação e pacotes

O núcleo de R já contém as funções necessárias para regressão linear, testes básicos e gráficos. Alguns capítulos utilizarão pacotes adicionais. A instalação precisa ser realizada apenas uma vez:

pacotes <- c(
  "tidyverse", "broom", "modelsummary", "lmtest", "sandwich",
  "car", "AER", "plm", "urca", "vars", "nnet", "MASS",
  "sampleSelection", "systemfit", "marginaleffects", "pscl", "tseries"
)

install.packages(pacotes)

Em uma nova sessão, os pacotes que forem necessários devem ser carregados com library().

library(tidyverse)
library(broom)
library(modelsummary)

Nota metodológica. Não é uma boa prática carregar dezenas de pacotes sem necessidade. Neste livro, cada capítulo indica explicitamente os pacotes usados. Isso reduz conflitos entre funções com nomes iguais e torna o script mais fácil de auditar.

Estrutura do projeto

Os exemplos deste livro supõem a seguinte estrutura de diretórios:

econometria_R/
|-- livro_R.tex
|-- capitulos/
|-- dados/
|-- figuras/
|-- scripts/

Uma regra simples evita muitos problemas: caminhos devem ser relativos ao projeto e nunca depender da pasta pessoal de um computador específico. Assim, em vez de escrever

C:/Users/Aluno/Desktop/food.csv

usaremos:

food <- read.csv("dados/food.csv")

Conhecendo uma base de dados

Antes de estimar qualquer regressão, o pesquisador deve inspecionar a estrutura da base. Para o conjunto food.csv:

food <- read.csv("dados/food.csv")

head(food)
str(food)
summary(food)
colSums(is.na(food))

A função head() mostra as primeiras observações; str() revela os tipos das variáveis; summary() apresenta estatísticas descritivas; e a última linha conta valores ausentes.

Interpretação econômica. A inspeção inicial não é uma formalidade. Um coeficiente economicamente absurdo muitas vezes é consequência de uma unidade de medida mal interpretada, uma variável lida como texto, valores ausentes codificados incorretamente ou observações duplicadas.

Objetos e fórmulas em R

A maior parte dos estimadores de R utiliza uma notação de fórmula. Em uma regressão de yy sobre xx:

modelo <- lm(y ~ x, data = dados)

O símbolo ~ pode ser lido como “é modelado em função de”. Para uma regressão múltipla:

modelo <- lm(y ~ x1 + x2 + x3, data = dados)

Uma vez estimado, modelo é um objeto. Podemos extrair informações sem reestimar a equação:

coef(modelo)
residuals(modelo)
fitted(modelo)
vcov(modelo)
confint(modelo)

Essa ideia será usada em todo o livro: estimamos um modelo uma vez e depois interrogamos o objeto resultante.

Um roteiro mínimo para uma análise empírica

Uma análise reproduzível pode ser organizada em sete etapas:

  1. formular a pergunta econômica;

  2. definir a unidade de observação e as variáveis;

  3. importar e validar os dados;

  4. realizar análise descritiva e gráfica;

  5. especificar e estimar o modelo;

  6. executar diagnósticos e análises de robustez;

  7. interpretar e comunicar os resultados.

A ordem importa. O software não deve decidir a pergunta nem a especificação. O código serve ao argumento econômico, e não o contrário.

Exercícios

  1. Importe andy.csv e identifique o número de observações e variáveis.

  2. Calcule média, desvio-padrão, mínimo e máximo de sales, price e advert.

  3. Verifique se há valores ausentes em cps5_small.csv.

  4. Explique por que um caminho absoluto prejudica a reprodutibilidade de um projeto.

  5. Crie um script que limpe o ambiente, carregue apenas os pacotes necessários e importe food.csv.

Como pensar em dados antes de programar

Antes de escrever qualquer linha de código, é útil distinguir quatro elementos: a unidade de observação, a população de interesse, o período de referência e a unidade de medida das variáveis. Esses elementos parecem triviais, mas muitos erros empíricos começam exatamente quando um deles permanece implícito. Uma linha pode representar uma pessoa, uma firma, um município, um estado ou um mês. A interpretação de médias, desvios-padrão e coeficientes depende dessa definição.

Considere uma base em que cada linha representa uma família e em que income mede renda semanal em centenas de dólares. Se o pesquisador esquecer a escala da variável, uma estimativa correta pode receber uma interpretação errada. Por isso, um bom projeto empírico começa com um dicionário de dados.

food <- read.csv("dados/food.csv")
str(food)
head(food)
summary(food)
colSums(is.na(food))

Interpretação econômica. A inspeção inicial não é burocracia. Ela serve para responder perguntas substantivas: quantas observações existem? As variáveis estão nas unidades esperadas? Há valores ausentes? Existem códigos numéricos que deveriam ser fatores? Os valores mínimos e máximos são plausíveis?

Tipos de objetos que aparecem com frequência

Em aplicações econométricas, o leitor encontrará vetores, fatores, matrizes, data frames, listas e objetos de modelo. A maior parte do trabalho diário ocorre com data frames e objetos retornados por funções de estimação. O operador $ acessa uma coluna, enquanto colchetes permitem seleção por linhas e colunas.

class(food)
class(food$income)
food[1:5, c("food_exp", "income")]

É importante perceber que uma regressão estimada também é um objeto. A função lm() não imprime apenas uma tabela: ela devolve uma estrutura que contém coeficientes, resíduos, valores ajustados, matriz do modelo, graus de liberdade e informações que outras funções podem reutilizar.

m0 <- lm(food_exp ~ income, data = food)
class(m0)
names(m0)
coef(m0)
residuals(m0)[1:5]
fitted(m0)[1:5]

Transformações de variáveis

Transformações devem ser justificadas pela pergunta econômica. Logaritmos são úteis quando a relação é aproximadamente proporcional; diferenças são úteis em séries temporais e painéis; razões podem ter interpretação econômica direta, mas também podem introduzir denominadores instáveis.

food$ln_food   <- log(food$food_exp)
food$ln_income <- log(food$income)
food$income2   <- food$income^2

A regra mais segura é conservar a variável original e criar uma nova variável transformada. Isso facilita a auditoria do código e reduz o risco de substituir silenciosamente dados brutos.

Valores ausentes e amostra efetiva

Funções de estimação usualmente removem observações com valores ausentes nas variáveis utilizadas. Isso significa que duas regressões aparentemente comparáveis podem usar amostras diferentes.

complete.cases(food[, c("food_exp", "income")]) |> table()
nobs(m0)

Nota metodológica. Nunca compare coeficientes entre modelos sem verificar o número de observações. Uma alteração pode refletir mudança de especificação, mudança de amostra ou ambas.

Pipe, dplyr e uma alternativa organizada

O livro utiliza predominantemente funções do R base para manter baixa a barreira de entrada. Entretanto, o pacote dplyr pode tornar operações encadeadas mais legíveis.

library(dplyr)

food |>
  summarise(
    n = n(),
    renda_media = mean(income),
    gasto_medio = mean(food_exp)
  )

O objetivo não é transformar o aluno em especialista em manipulação de dados antes de aprender econometria. Basta dominar um conjunto pequeno e estável de operações e saber documentá-las.

Erros comuns no início de um projeto

  1. usar setwd() com caminhos absolutos que só funcionam em um computador;

  2. sobrescrever a base bruta durante a limpeza;

  3. recodificar valores sem registrar a regra;

  4. criar variáveis depois de observar os resultados e apresentar a decisão como se fosse prévia;

  5. copiar resultados manualmente para tabelas;

  6. não registrar versões de pacotes em projetos de longa duração.

Checklist do capítulo

Ao concluir este capítulo, o leitor deve conseguir abrir uma base, identificar sua estrutura, produzir estatísticas básicas, criar transformações simples, entender uma fórmula do tipo y ~ x1 + x2 e reconhecer que um modelo estimado é um objeto reutilizável.

Capítulo 1 — Regressão linear simples

A apresentação de MQO segue a tradição dos textos introdutórios de econometria, especialmente Hill, Griffiths, e Lim (2018), Wooldridge (2020) e Stock e Watson (2020).

O modelo

Considere o modelo de gastos semanais com alimentação:

food_expi=β1+β2incomei+ei,food\_exp_i = \beta_1 + \beta_2 income_i + e_i,

em que food_exp representa a despesa semanal com alimentação, income é a renda semanal medida em centenas de dólares, eie_i reúne os fatores não observados que afetam a despesa e β1\beta_1 e β2\beta_2 são parâmetros desconhecidos.

O objetivo inicial é estimar a relação média entre renda e gasto alimentar. A regressão não afirma, por si só, que uma mudança exógena na renda causará exatamente a variação estimada. Uma interpretação causal exige hipóteses adicionais sobre a origem da variação em income e sobre a relação entre o regressor e o erro.

Representando os dados

food <- read.csv("dados/food.csv")

plot(
  food$income, food$food_exp,
  xlab = "Renda semanal (US$ 100)",
  ylab = "Despesa semanal com alimentacao (US$)",
  pch = 19
)

A representação gráfica deve preceder a regressão. Ela permite identificar valores extremos, relações não lineares e mudanças na dispersão dos dados.

Despesa semanal com alimentação e renda.

Estimando por mínimos quadrados ordinários

O estimador de Mínimos Quadrados Ordinários (MQO) escolhe os coeficientes que minimizam a soma dos quadrados dos resíduos:

minb1,b2∑i=1n(yi−b1−b2xi)2.\min_{b_1,b_2}\sum_{i=1}^{n}\left(y_i-b_1-b_2x_i\right)^2.

Em R, a função básica é lm():

m_food <- lm(food_exp ~ income, data = food)
summary(m_food)

Para esses dados, a equação estimada é aproximadamente

food_exp̂=83,416+10,210income,\widehat{food\_exp}=83{,}416+10{,}210\,income,

com erros-padrão de aproximadamente 43,41043{,}410 e 2,0932{,}093, respectivamente. O coeficiente de determinação é R2≈0,385R^2\approx0{,}385 e o erro-padrão da regressão é aproximadamente 89,5289{,}52.

Interpretação econômica. Como a renda é medida em centenas de dólares, o coeficiente 10,21010{,}210 indica que um aumento de US$ 100 na renda semanal está associado, em média, a um aumento de cerca de US$ 10,21 na despesa semanal com alimentação. A interpretação econômica exige atenção à unidade de medida: dizer apenas “um aumento de uma unidade em renda” ocultaria a escala da variável.

Extraindo resultados do objeto

coef(m_food)
summary(m_food)$coefficients
summary(m_food)$r.squared
summary(m_food)$adj.r.squared
sigma(m_food)
vcov(m_food)

O objeto m_food contém todas as informações necessárias para análises posteriores. Essa forma de trabalho reduz erros de transcrição e evita que números sejam copiados manualmente de uma tela para outra.

Elasticidade em um modelo linear

Em um modelo linear em níveis, a elasticidade não é constante. Para um ponto (x,y)(x,y),

ε=∂E(y|x)∂xxE(y|x)=β2xE(y|x).\varepsilon=\frac{\partial E(y|x)}{\partial x}\frac{x}{E(y|x)} =\beta_2\frac{x}{E(y|x)}.

Uma medida comum é calcular a elasticidade nas médias amostrais:

b2 <- coef(m_food)["income"]

elasticidade_media <- b2 * mean(food$income) / mean(food$food_exp)
elasticidade_media

O valor é aproximadamente 0,7060{,}706. Portanto, no ponto médio da amostra, um aumento de 1% na renda está associado a um aumento de cerca de 0,71% no gasto alimentar. A elasticidade abaixo da unidade é compatível com uma resposta proporcionalmente menor do gasto em relação à renda.

Predição

Para uma família com renda semanal de US$ 2.000, temos income = 20. A previsão pontual pode ser calculada diretamente:

novo <- data.frame(income = 20)
predict(m_food, newdata = novo)

O valor previsto é aproximadamente US$ 287,61.

predict(m_food, newdata = novo, interval = "confidence", level = 0.95)
predict(m_food, newdata = novo, interval = "prediction", level = 0.95)

É essencial distinguir os dois intervalos. O intervalo de confiança refere-se à média condicional E(y|x0)E(y|x_0); o intervalo de predição refere-se a uma nova observação individual e, por incorporar a variabilidade do novo erro, é mais amplo.

Variância e matriz de covariância

A matriz de variância-covariância dos coeficientes é obtida por:

vcov(m_food)
sqrt(diag(vcov(m_food)))

A raiz quadrada dos elementos da diagonal reproduz os erros-padrão dos coeficientes. A covariância entre intercepto e inclinação aparece nos elementos fora da diagonal.

Nota metodológica. O fato de uma regressão produzir coeficientes, erros-padrão e R2R^2 não garante que a especificação seja adequada. A partir dos próximos capítulos, inferência, forma funcional e comportamento dos resíduos serão tratados explicitamente.

Exercícios

  1. Reestime o modelo usando lm() e confirme os coeficientes apresentados no texto.

  2. Calcule manualmente o valor previsto quando income=25 e compare com predict().

  3. Calcule a elasticidade nas rendas 10, 20 e 30. A elasticidade permanece constante? Explique.

  4. Extraia a matriz de variância-covariância e confirme os erros-padrão.

  5. Refaça o gráfico de dispersão incluindo a reta estimada por abline(m_food).

Derivação intuitiva do MQO

A reta estimada por MQO é escolhida para tornar pequena a distância vertical entre cada observação e a reta. Para uma amostra (xi,yi)(x_i,y_i), os resíduos são êi=yi−b1−b2xi.\hat e_i=y_i-b_1-b_2x_i. Minimizar a soma dos quadrados dos resíduos produz b2=∑i(xi−x‾)(yi−y‾)∑i(xi−x‾)2,b1=y‾−b2x‾.b_2=\frac{\sum_i(x_i-\bar x)(y_i-\bar y)}{\sum_i(x_i-\bar x)^2}, \qquad b_1=\bar y-b_2\bar x. A fórmula mostra que a inclinação depende da covariação entre xx e yy relativamente à variação de xx. Se xx praticamente não varia, o denominador é pequeno e a inclinação torna-se pouco informativa.

x <- food$income
y <- food$food_exp
b2_manual <- sum((x-mean(x))*(y-mean(y))) / sum((x-mean(x))^2)
b1_manual <- mean(y) - b2_manual*mean(x)
c(intercepto=b1_manual, inclinacao=b2_manual)

Identidades úteis dos resíduos

Em uma regressão com intercepto, MQO produz algumas identidades importantes. A soma dos resíduos é numericamente zero e a média dos valores ajustados coincide com a média da variável dependente.

sum(residuals(m_food))
mean(fitted(m_food))
mean(food$food_exp)
sum(food$income * residuals(m_food))

Essas propriedades decorrem das condições de primeira ordem do problema de minimização. Elas não provam que o modelo é correto, mas ajudam a entender a geometria do estimador.

O que o summary() está mostrando?

A saída de summary(m_food) reúne informações de naturezas diferentes. A primeira parte resume os resíduos. A tabela de coeficientes apresenta estimativa, erro-padrão, estatística tt e valor-pp. Em seguida aparecem o erro-padrão residual, R2R^2, R2R^2 ajustado e o teste FF global.

Roteiro de leitura. Ao ler uma regressão, siga uma ordem fixa: (1) confirme a variável dependente e a amostra; (2) leia sinal e magnitude dos coeficientes; (3) verifique a unidade de medida; (4) examine a incerteza; (5) só então discuta ajuste e diagnósticos.

Hipóteses para interpretação

A regressão simples descreve a melhor aproximação linear da relação condicional entre yy e xx. Para interpretar b2b_2 como estimador de um efeito causal médio, é necessária uma condição de exogeneidade que, de forma simplificada, pode ser escrita como E(ei∣xi)=0.E(e_i\mid x_i)=0. Essa condição afirma que, dado xix_i, o erro não contém fatores sistematicamente relacionados com o regressor. Em dados observacionais, essa hipótese é forte e deve ser defendida com teoria, desenho de pesquisa ou variáveis de controle adequadas.

Escala e mudança de unidades

Se income fosse transformada de centenas de dólares para dólares, o coeficiente numérico seria dividido por 100, mas a relação substantiva não mudaria. Essa propriedade é útil para detectar interpretações incorretas.

food$income_dolar <- 100 * food$income
m_escala <- lm(food_exp ~ income_dolar, data=food)
coef(m_escala)

Uma primeira leitura gráfica dos resíduos

Mesmo em um capítulo introdutório, é útil verificar se os erros parecem crescer com a renda ou se a relação média apresenta curvatura.

par(mfrow=c(1,2))
plot(food$income, residuals(m_food), pch=19)
abline(h=0, lty=2)
qqnorm(residuals(m_food)); qqline(residuals(m_food))
par(mfrow=c(1,1))

Esses gráficos não substituem testes nem identificam automaticamente a solução. Eles orientam perguntas para os capítulos seguintes.

Exemplo resolvido: previsão e elasticidade

Considere income=25. A previsão é ŷ=83,416+10,210(25)≈338,66.\widehat y=83{,}416+10{,}210(25)\approx338{,}66. A elasticidade nesse ponto é ε(25)=10,21025338,66≈0,75.\varepsilon(25)=10{,}210\frac{25}{338{,}66}\approx0{,}75. Observe que a elasticidade mudou em relação ao cálculo na média. Isso ocorre porque, no modelo linear em níveis, a inclinação é constante, mas a elasticidade não.

Erros comuns de interpretação

  1. tratar o intercepto como economicamente relevante mesmo quando x=0x=0 está fora da amostra;

  2. interpretar associação como causalidade;

  3. ignorar unidades de medida;

  4. afirmar que R2R^2 mede a importância causal do regressor;

  5. extrapolar previsões para valores de xx muito distantes dos observados.

Exercícios adicionais

  1. Mostre algebricamente por que a reta de MQO passa pelo ponto (x‾,y‾)(\bar x,\bar y).

  2. Reestime o modelo depois de medir a renda em dólares. Explique a mudança no coeficiente.

  3. Calcule a previsão e a elasticidade para income=15, 20, 25 e 30.

  4. Compare a média dos resíduos com zero e explique por que a igualdade depende da presença do intercepto.

  5. Faça uma regressão sem intercepto usando lm(food_exp ~ income - 1). Compare os resultados e discuta por que não se deve remover a constante sem justificativa econômica.

Capítulo 2 — Estimação por intervalo e testes de hipóteses

Os conceitos de estimação intervalar, testes e incerteza amostral são tratados em linha com Hill, Griffiths, e Lim (2018), Wooldridge (2020) e Greene (2018).

Incerteza amostral

Uma estimativa pontual não deve ser confundida com o parâmetro populacional. Se repetíssemos o processo de amostragem, obteríamos valores diferentes para os coeficientes estimados. A inferência estatística quantifica essa incerteza sob um conjunto explícito de hipóteses.

Para um coeficiente βk\beta_k, um intervalo de confiança bilateral de nível 1−α1-\alpha é construído como

bk±tα/2,dfse(bk).b_k \pm t_{\alpha/2,\,df}\,se(b_k).

No modelo de gastos com alimentação, o intervalo de 95% pode ser obtido sem consultar tabelas impressas.

food <- read.csv("dados/food.csv")
m_food <- lm(food_exp ~ income, data = food)

confint(m_food, level = 0.95)

O valor crítico da distribuição tt também pode ser obtido diretamente:

df <- df.residual(m_food)
tc <- qt(0.975, df = df)
tc

Para 38 graus de liberdade, o valor é aproximadamente 2,0242{,}024.

Teste de uma hipótese simples

Suponha que se queira testar

H0:β2=0contraH1:β2>0.H_0:\beta_2=0 \qquad\text{contra}\qquad H_1:\beta_2>0.

A estatística é

t=b2−0se(b2).t=\frac{b_2-0}{se(b_2)}.

b2  <- coef(m_food)["income"]
se2 <- summary(m_food)$coefficients["income", "Std. Error"]
t_calculado <- b2 / se2
t_calculado

O valor é aproximadamente 4,884{,}88. Para obter o valor-pp unilateral:

p_unilateral <- 1 - pt(t_calculado, df = df)
p_unilateral

Como o valor-pp é muito pequeno, a hipótese nula é rejeitada nos níveis usuais de significância.

Nota metodológica. Rejeitar H0:β2=0H_0:\beta_2=0 não demonstra automaticamente importância econômica e muito menos causalidade. Com amostras grandes, efeitos economicamente pequenos podem ser estimados com grande precisão. A magnitude do coeficiente e sua unidade devem ser discutidas juntamente com a incerteza estatística.

Teste bilateral e hipótese diferente de zero

Para testar H0:β2=10H_0:\beta_2=10, por exemplo:

t10 <- (b2 - 10) / se2
p10 <- 2 * (1 - pt(abs(t10), df = df))
c(t = t10, p_value = p10)

O teste bilateral dobra a probabilidade de cauda porque desvios em ambas as direções contam contra a hipótese nula.

Usando linearHypothesis()

Para modelos mais complexos, o pacote car simplifica a formulação das restrições:

library(car)
linearHypothesis(m_food, "income = 0")
linearHypothesis(m_food, "income = 10")

Essa função será particularmente útil quando várias restrições forem testadas simultaneamente.

Intervalo de confiança e teste: a mesma informação

Em um teste bilateral ao nível de 5%, H0:βk=cH_0:\beta_k=c será rejeitada se cc estiver fora do intervalo de confiança de 95%. Essa equivalência ajuda a interpretar resultados: o intervalo revela um conjunto de valores paramétricos compatíveis com os dados e o modelo estatístico adotado.

Erros do tipo I, tipo II e poder

Fixar α=0,05\alpha=0{,}05 significa aceitar uma probabilidade de 5% de rejeitar a hipótese nula quando ela é verdadeira, sob o desenho repetido do teste. Isso é o erro do tipo I. O erro do tipo II ocorre quando não rejeitamos uma hipótese nula falsa. O poder do teste é a probabilidade de rejeitar H0H_0 quando uma alternativa específica é verdadeira.

A escolha entre precisão, tamanho da amostra, variabilidade dos dados e magnitude do efeito é inseparável do poder estatístico. Um resultado “não significativo” pode representar ausência de efeito ou simplesmente pouca informação.

Exercícios

  1. Construa intervalos de confiança de 90%, 95% e 99% para o coeficiente de renda.

  2. Teste H0:β2=5H_0:\beta_2=5 contra uma alternativa bilateral.

  3. Teste H0:β2=5H_0:\beta_2=5 contra H1:β2>5H_1:\beta_2>5. Compare os valores-pp.

  4. Mostre numericamente a equivalência entre o teste bilateral de 5% e o intervalo de confiança de 95%.

  5. Explique por que “não rejeitar” uma hipótese nula não é o mesmo que provar que ela é verdadeira.

De onde vem a distribuição t?

Quando a variância do erro é desconhecida, ela precisa ser estimada. Sob as hipóteses clássicas e normalidade dos erros, a padronização do coeficiente pela estimativa de seu erro-padrão gera uma estatística com distribuição tt. À medida que os graus de liberdade crescem, a distribuição tt se aproxima da normal padrão.

curve(dnorm(x), from=-4, to=4, lwd=2)
curve(dt(x, df=5), add=TRUE, lty=2, lwd=2)
curve(dt(x, df=30), add=TRUE, lty=3, lwd=2)

A cauda mais pesada para poucos graus de liberdade representa a incerteza adicional gerada pela estimação da variância.

Valor-p: interpretação correta

O valor-pp é a probabilidade, calculada sob H0H_0, de obter uma estatística pelo menos tão incompatível com a hipótese nula quanto a observada. Ele não é a probabilidade de H0H_0 ser verdadeira. Tampouco mede a importância econômica do efeito.

Nota metodológica. As frases “há 3% de chance de a hipótese nula ser verdadeira” e “o coeficiente tem 97% de chance de ser positivo” não são interpretações frequentistas válidas de um valor-pp de 0,03.

Intervalo de confiança como conjunto de valores compatíveis

É útil ler um intervalo de confiança não apenas como uma regra mecânica, mas como um conjunto de valores que não seriam rejeitados por testes bilaterais ao nível correspondente. Intervalos largos sinalizam baixa precisão. Intervalos estreitos podem ocorrer mesmo para efeitos pequenos quando a amostra é grande.

Tamanho de efeito e relevância econômica

Considere dois estudos que estimem o mesmo coeficiente, mas com erros-padrão muito diferentes. O primeiro pode ser estatisticamente significativo e o segundo não, embora a magnitude econômica seja idêntica. Por isso, uma boa apresentação reporta coeficiente, erro-padrão ou intervalo de confiança, unidade de medida e contexto substantivo.

Poder estatístico por simulação

Podemos visualizar a ideia de poder simulando amostras em que o verdadeiro coeficiente é conhecido.

set.seed(123)
B <- 1000
n <- 40
beta <- 0.3
rejeita <- logical(B)

for (b in 1:B) {
  x <- rnorm(n)
  y <- 1 + beta*x + rnorm(n)
  m <- lm(y ~ x)
  rejeita[b] <- summary(m)$coefficients["x","Pr(>|t|)"] < 0.05
}
mean(rejeita)

Repetindo o experimento com diferentes valores de nn, variância do erro e magnitude de β\beta, o aluno observa diretamente que poder não é propriedade fixa de um teste abstrato: depende do desenho e do efeito relevante.

Testes múltiplos

Quando dezenas de hipóteses são testadas e apenas resultados significativos são destacados, a taxa efetiva de falsos positivos pode ser muito maior que o nível nominal de 5%. Em trabalhos exploratórios, transparência sobre o conjunto de testes é essencial. Em análises confirmatórias, ajustes para múltiplas comparações ou definição prévia de hipóteses podem ser apropriados.

p <- c(0.002, 0.018, 0.041, 0.08, 0.20)
p.adjust(p, method="bonferroni")
p.adjust(p, method="BH")

Exercícios adicionais

  1. Calcule manualmente um intervalo de 99% para o coeficiente de renda e confirme com confint().

  2. Simule o poder para n=20n=20, 4040, 100100 e 500500, mantendo o restante fixo.

  3. Explique por que aumentar nn pode tornar estatisticamente significativo um efeito economicamente irrelevante.

  4. Gere 100 hipóteses nulas verdadeiras em simulação e conte quantos valores-pp ficam abaixo de 0,05.

  5. Compare ajustes de Bonferroni e Benjamini–Hochberg em um vetor de valores-pp.

Capítulo 3 — Previsão, qualidade do ajuste e problemas de especificação

A discussão sobre previsão, qualidade de ajuste e especificação toma como referências Hill, Griffiths, e Lim (2018), Wooldridge (2020) e Stock e Watson (2020).

Previsão no modelo de gastos com alimentação

A previsão para uma nova observação usa a função de regressão estimada, mas há duas fontes distintas de incerteza. A primeira é a incerteza sobre a média condicional; a segunda é a variação idiossincrática de uma nova família em torno dessa média. Em R, a diferença aparece no argumento interval de predict().

food <- read.csv("dados/food.csv")
m_lin <- lm(food_exp ~ income, data = food)
novo <- data.frame(income = 20)

predict(m_lin, novo, interval = "confidence")
predict(m_lin, novo, interval = "prediction")

O intervalo de predição é necessariamente mais amplo porque inclui a variância do novo erro. No exemplo, a previsão pontual permanece próxima de US$ 287,61.

Qualidade do ajuste

O coeficiente de determinação é

R2=1−SQRSQT,R^2=1-\frac{SQR}{SQT},

em que SQRSQR é a soma dos quadrados dos resíduos e SQTSQT é a soma total dos quadrados. Para o modelo linear:

summary(m_lin)$r.squared
anova(m_lin)

SQR <- sum(residuals(m_lin)^2)
SQT <- sum((food$food_exp - mean(food$food_exp))^2)
1 - SQR / SQT

O resultado é R2≈0,385R^2\approx0{,}385. Isso significa que cerca de 38,5% da variação amostral dos gastos é explicada pela relação linear com a renda. Não significa que 38,5% do comportamento individual seja “causado” pela renda.

Nota metodológica. R2R^2 mede ajuste in-sample. Ele não é um critério suficiente para escolher um modelo causal nem garante bom desempenho fora da amostra. Adicionar regressores quase sempre aumenta R2R^2, inclusive quando eles não têm conteúdo econômico relevante.

Forma funcional

Uma relação econômica não precisa ser linear nas variáveis para ser linear nos parâmetros. Quatro especificações usuais são:

y=β1+β2x+e,y=β1+β2lnx+e,lny=β1+β2x+e,lny=β1+β2lnx+e.\begin{aligned} y &= \beta_1+\beta_2x+e,\\ y &= \beta_1+\beta_2\ln x+e,\\ \ln y &= \beta_1+\beta_2x+e,\\ \ln y &= \beta_1+\beta_2\ln x+e. \end{aligned}

No modelo linear-log de gastos com alimentação:

m_linlog <- lm(food_exp ~ log(income), data = food)
summary(m_linlog)

A estimativa é aproximadamente

food_exp̂=−97,19+132,17ln(income).\widehat{food\_exp}=-97{,}19+132{,}17\ln(income).

Como ∂E(y|x)/∂x=β2/x\partial E(y|x)/\partial x=\beta_2/x, o efeito marginal diminui à medida que a renda aumenta. Isso é coerente com a hipótese de que famílias de renda mais alta destinam uma parcela menor de renda adicional à alimentação.

No modelo log-linear:

m_loglin <- lm(log(food_exp) ~ income, data = food)
summary(m_loglin)

Uma variação de uma unidade em income altera aproximadamente 100β2100\beta_2 por cento em food_expfood\_exp para coeficientes pequenos. Para maior precisão, usa-se 100[exp(β2)−1]100[\exp(\beta_2)-1].

No modelo log-log:

m_loglog <- lm(log(food_exp) ~ log(income), data = food)
summary(m_loglog)

Nesse caso, β2\beta_2 é diretamente uma elasticidade.

Resíduos como instrumento de diagnóstico

Os resíduos são

êi=yi−ŷi.\hat e_i=y_i-\hat y_i.

Um gráfico dos resíduos contra valores ajustados ajuda a identificar padrões sistemáticos.

plot(fitted(m_lin), residuals(m_lin), pch = 19)
abline(h = 0, lty = 2)
Resíduos do modelo linear de gastos com alimentação.

Padrões de funil sugerem heterocedasticidade; curvatura sistemática sugere forma funcional inadequada; observações isoladas podem indicar valores influentes ou erros de dados.

Teste RESET

O teste RESET de Ramsey investiga se potências dos valores ajustados contêm informação adicional não capturada pela especificação original.

library(lmtest)
resettest(m_lin, power = 2:3, type = "fitted")

A rejeição não identifica qual é a especificação correta. Ela apenas sinaliza que a forma funcional ou o conjunto de regressores pode estar incompleto.

Normalidade dos resíduos

O teste de Jarque–Bera pode ser executado com:

library(tseries)
jarque.bera.test(residuals(m_lin))

Um histograma e um gráfico quantil-quantil também são úteis:

hist(residuals(m_lin), breaks = 10)
qqnorm(residuals(m_lin))
qqline(residuals(m_lin))

Nota metodológica. A normalidade dos erros não é necessária para que MQO seja não viesado ou consistente sob as hipóteses usuais de exogeneidade. Ela é especialmente útil para justificar inferência exata em pequenas amostras. Em aplicações modernas, amostras maiores e erros-padrão robustos frequentemente reduzem a dependência dessa hipótese.

Observações influentes

Uma observação pode ter grande resíduo, grande alavancagem ou ambas. A distância de Cook resume influência sobre os coeficientes:

cook <- cooks.distance(m_lin)
plot(cook, type = "h")
which(cook > 4 / nrow(food))

A identificação de um ponto influente não autoriza sua exclusão automática. Primeiro deve-se verificar se há erro de registro; depois, avaliar se a observação pertence à população de interesse e reportar análises de sensibilidade.

Exercícios

  1. Compare R2R^2 e R2R^2 ajustado dos modelos linear, linear-log, log-linear e log-log.

  2. Para cada especificação, interprete economicamente o coeficiente de renda.

  3. Produza gráficos de resíduos e discuta qual forma funcional parece mais adequada.

  4. Execute o teste RESET para as quatro especificações.

  5. Identifique observações influentes pelo critério 4/n4/n e reestime o modelo sem elas apenas como exercício de sensibilidade.

Ajuste dentro da amostra e desempenho fora da amostra

Um modelo pode explicar bem os dados usados na estimação e prever mal novas observações. A distinção entre ajuste e previsão é central. Para fins preditivos, uma estratégia simples é separar dados em treino e teste.

set.seed(123)
id <- sample(seq_len(nrow(food)), size=floor(.75*nrow(food)))
treino <- food[id, ]
teste  <- food[-id, ]

m_treino <- lm(food_exp ~ income, data=treino)
pred <- predict(m_treino, newdata=teste)
RMSE <- sqrt(mean((teste$food_exp-pred)^2))
MAE  <- mean(abs(teste$food_exp-pred))
c(RMSE=RMSE, MAE=MAE)

Com amostras pequenas, uma única divisão pode ser instável. Validação cruzada é uma extensão natural, mas o princípio básico já fica claro: previsão deve ser avaliada com informação não utilizada na estimação.

RMSE, MAE e função de perda

O RMSE penaliza mais fortemente erros grandes porque eleva os resíduos ao quadrado. O MAE usa desvios absolutos e é menos sensível a observações extremas. Não existe métrica universalmente superior: a escolha depende do custo econômico dos erros.

Transformações logarítmicas e retransformação

Quando a variável dependente aparece em log, a previsão de log(y)\log(y) não pode ser simplesmente exponenciada e interpretada sempre como E(y|x)E(y|x). Pela desigualdade de Jensen, E[exp(u)]≠exp(E[u]).E[\exp(u)]\neq \exp(E[u]). Uma correção comum sob normalidade do erro é multiplicar pela correção de viés exp(σ̂2/2)\exp(\hat\sigma^2/2). Em aplicações empíricas, o método de smearing oferece uma alternativa menos dependente da normalidade.

m_log <- lm(log(food_exp) ~ log(income), data=food)
smear <- mean(exp(residuals(m_log)))
pred_log <- predict(m_log, newdata=food)
pred_nivel <- exp(pred_log) * smear

Observações influentes em mais detalhe

Uma observação pode ter alto leverage por possuir valores incomuns dos regressores. Ela pode ser influente quando, além disso, altera substancialmente a estimativa. Distância de Cook combina essas dimensões.

h <- hatvalues(m_lin)
d <- cooks.distance(m_lin)
which.max(h)
which.max(d)
plot(d, type="h", ylab="Distancia de Cook")

A presença de uma observação influente não justifica sua exclusão automática. Primeiro deve-se verificar se há erro de registro, se a observação pertence à população de interesse e se o modelo está inadequado para aquela região do espaço amostral.

Escolha funcional guiada por teoria

Testes e gráficos podem indicar inadequação, mas a forma funcional deve dialogar com a teoria econômica. Elasticidades constantes sugerem modelos log-log; efeitos marginais decrescentes podem sugerir logaritmos ou polinômios; restrições de domínio também importam.

Comparando especificações

AIC(m_lin, m_linlog, m_loglin, m_loglog)
BIC(m_lin, m_linlog, m_loglin, m_loglog)

AIC e BIC podem auxiliar em comparação preditiva entre modelos estimados na mesma amostra e para a mesma variável dependente transformada da mesma forma. Comparar diretamente critérios de informação entre modelos com variáveis dependentes em escalas diferentes exige cuidado.

Exercícios adicionais

  1. Divida a base em treino e teste cinco vezes e compare a variação do RMSE.

  2. Compare MAE e RMSE para os modelos linear e linear-log.

  3. Identifique as três observações com maior distância de Cook.

  4. Reestime o modelo sem a observação mais influente e compare o coeficiente de renda. Justifique por que isso é um diagnóstico e não uma licença para apagar dados.

  5. Estime um modelo quadrático de gastos com alimentação e calcule o efeito marginal da renda em três pontos.

Capítulo 4 — Modelo de regressão múltipla

Para regressão múltipla e interpretação ceteris paribus, ver Wooldridge (2020), Greene (2018) e Hill, Griffiths, e Lim (2018).

Da regressão simples à regressão múltipla

A regressão múltipla permite estudar a relação entre uma variável dependente e vários regressores simultaneamente. A forma geral é

yi=β1+β2xi2+⋯+βkxik+ei.y_i=\beta_1+\beta_2x_{i2}+\cdots+\beta_kx_{ik}+e_i.

A interpretação de βj\beta_j é condicional: ele mede a variação na média de yy associada a uma unidade adicional de xjx_j, mantendo os demais regressores constantes. Essa expressão, ceteris paribus, é o principal ganho da regressão múltipla, mas não transforma automaticamente associação em causalidade.

Vendas, preço e publicidade

O exemplo utiliza a base andy.csv:

salesi=β1+β2pricei+β3adverti+ei.sales_i=\beta_1+\beta_2price_i+\beta_3advert_i+e_i.

andy <- read.csv("dados/andy.csv")
m_andy <- lm(sales ~ price + advert, data = andy)
summary(m_andy)

A equação estimada é aproximadamente

saleŝ=118,914−7,908price+1,863advert.\widehat{sales}=118{,}914-7{,}908\,price+1{,}863\,advert.

As vendas e a publicidade são medidas em milhares de dólares. Mantida a publicidade constante, um aumento unitário no índice de preço está associado a uma redução de cerca de 7,91 mil dólares nas vendas mensais. Mantido o preço constante, mil dólares adicionais de publicidade estão associados a cerca de 1,86 mil dólares adicionais de vendas.

O R2R^2 é aproximadamente 0,4480{,}448 e o R2R^2 ajustado, 0,4330{,}433.

Somas de quadrados e variância residual

anova(m_andy)
sigma(m_andy)
summary(m_andy)$r.squared
summary(m_andy)$adj.r.squared

A estimativa da variância do erro é

σ̂2=SQRn−k,\hat\sigma^2=\frac{SQR}{n-k},

em que kk inclui o intercepto. No exemplo, σ̂≈4,886\hat\sigma\approx4{,}886.

Intervalos de confiança

confint(m_andy, level = 0.95)

Os intervalos tornam explícita a precisão das estimativas. Uma apresentação adequada deve incluir coeficientes e medidas de incerteza, e não apenas asteriscos de significância.

Polinômios

Se o retorno marginal da publicidade diminui com o nível de gasto, uma especificação quadrática é natural:

salesi=β1+β2pricei+β3adverti+β4adverti2+ei.sales_i=\beta_1+\beta_2price_i+\beta_3advert_i+\beta_4advert_i^2+e_i.

m_andy_q <- lm(
  sales ~ price + advert + I(advert^2),
  data = andy
)
summary(m_andy_q)

As estimativas são aproximadamente β̂3=12,151\hat\beta_3=12{,}151 e β̂4=−2,768\hat\beta_4=-2{,}768. O sinal negativo do termo quadrático produz concavidade.

Relação quadrática entre publicidade e vendas, mantendo preço na média.

Efeitos marginais

No modelo quadrático,

∂E(sales|x)∂advert=β3+2β4advert.\frac{\partial E(sales|x)}{\partial advert}=\beta_3+2\beta_4advert.

Para advert = 1:

b <- coef(m_andy_q)
ef_advert_1 <- b["advert"] + 2 * b["I(advert^2)"] * 1
ef_advert_1

O efeito é aproximadamente 6,62. O efeito marginal depende do ponto em que é avaliado, portanto não faz sentido interpretar isoladamente β3\beta_3 como se o termo quadrático não existisse.

Interações

Uma interação permite que o efeito marginal de um regressor dependa de outro. Com a base cps5_small.csv:

wage=β1+β2educ+β3exper+β4(educ×exper)+e.wage=\beta_1+\beta_2educ+\beta_3exper+\beta_4(educ\times exper)+e.

cps <- read.csv("dados/cps5_small.csv")
m_int <- lm(wage ~ educ * exper, data = cps)
summary(m_int)

A sintaxe educ * exper inclui educ, exper e a interação. O efeito marginal da escolaridade é

∂E(wage|x)∂educ=β2+β4exper.\frac{\partial E(wage|x)}{\partial educ}=\beta_2+\beta_4exper.

b <- coef(m_int)
c(
  exper_0  = b["educ"],
  exper_20 = b["educ"] + 20 * b["educ:exper"]
)

Também podemos permitir concavidade da experiência em uma equação logarítmica:

m_wage <- lm(
  log(wage) ~ educ * exper + I(exper^2),
  data = cps
)
summary(m_wage)

Nota metodológica. Em modelos com polinômios e interações, a significância de um coeficiente isolado raramente responde à pergunta substantiva. Testes e intervalos devem ser construídos para o efeito marginal relevante.

Exercícios

  1. Reestime o modelo de vendas sem advert. Compare o coeficiente de preço.

  2. Calcule o ponto de máximo da função quadrática de publicidade, −β3/(2β4)-\beta_3/(2\beta_4).

  3. Construa um intervalo de confiança para o efeito marginal da publicidade em advert=1 usando o método delta ou marginaleffects.

  4. No modelo salarial, calcule o retorno da escolaridade para 0, 10, 20 e 30 anos de experiência.

  5. Explique por que a presença de uma interação altera a interpretação dos efeitos principais.

Interpretação ceteris paribus

No modelo múltiplo, a inclinação de um regressor é interpretada mantendo os demais constantes. Essa frase esconde uma ideia importante: o coeficiente usa apenas a variação de xjx_j que não é explicada linearmente pelos outros regressores. Essa intuição é formalizada pelo teorema de Frisch–Waugh–Lovell.

Teorema de Frisch–Waugh–Lovell

Considere yy explicado por x1x_1 e x2x_2. Para obter o coeficiente de x1x_1, podemos: regressar x1x_1 em x2x_2 e guardar os resíduos; regressar yy em x2x_2 e guardar os resíduos; por fim, regressar os resíduos de yy nos resíduos de x1x_1.

rx <- residuals(lm(price ~ advert, data=andy))
ry <- residuals(lm(sales ~ advert, data=andy))
m_fwl <- lm(ry ~ rx)
coef(m_fwl)
coef(m_andy)["price"]

O resultado numérico para a inclinação coincide. O FWL ajuda a compreender a expressão “mantendo os demais constantes” sem imaginar uma comparação impossível entre unidades literalmente idênticas em todas as demais características.

Padronização e comparação de magnitudes

Coeficientes de variáveis medidas em unidades diferentes não devem ser comparados diretamente. Uma alternativa descritiva é padronizar os regressores.

andy_z <- transform(
  andy,
  z_sales=as.numeric(scale(sales)),
  z_price=as.numeric(scale(price)),
  z_advert=as.numeric(scale(advert))
)
lm(z_sales ~ z_price + z_advert, data=andy_z)

Coeficientes padronizados podem ser úteis para comparação de escala, mas não resolvem problemas de endogeneidade nem constituem medida universal de importância causal.

Polinômios e pontos de retorno

Num modelo quadrático y=β1+β2x+β3x2+e,y=\beta_1+\beta_2x+\beta_3x^2+e, o efeito marginal é β2+2β3x\beta_2+2\beta_3x. Se β3<0\beta_3<0, o ponto de máximo estimado ocorre em x*=−β22β3.x^*=-\frac{\beta_2}{2\beta_3}. É essencial verificar se x*x^* está dentro do suporte dos dados. Um ponto de retorno fora da amostra não deve receber interpretação substantiva forte.

Interações como efeitos condicionais

Para y=β0+β1x+β2z+β3xz+e,y=\beta_0+\beta_1x+\beta_2z+\beta_3xz+e, o efeito marginal de xx é ∂E(y|x,z)∂x=β1+β3z.\frac{\partial E(y|x,z)}{\partial x}=\beta_1+\beta_3z. Assim, não faz sentido interpretar isoladamente β1\beta_1 sem dizer a qual valor de zz ele se refere.

# forma recomendada: usar * para incluir efeitos principais e interacao
m_int <- lm(sales ~ price * advert, data=andy)
summary(m_int)

Exercícios adicionais

  1. Demonstre numericamente o FWL para o coeficiente de publicidade.

  2. Padronize preço e publicidade e compare os coeficientes padronizados.

  3. Estime um modelo com advert2 e calcule o efeito marginal da publicidade em diferentes níveis.

  4. Estime uma interação entre preço e publicidade e represente graficamente duas retas para níveis baixos e altos de publicidade.

  5. Explique por que a inclusão de controles pode aumentar ou diminuir um coeficiente.

Capítulo 5 — Inferência adicional e especificação no modelo múltiplo

A inferência conjunta, a especificação e o problema de variáveis omitidas são discutidos com base em Wooldridge (2020) e Greene (2018).

Teste F para restrições conjuntas

O teste tt é adequado para uma única restrição. Quando queremos testar várias simultaneamente, usamos um teste FF. No modelo quadrático de publicidade:

H0:β3=β4=0.H_0:\beta_3=\beta_4=0.

Podemos comparar o modelo irrestrito com um modelo que contém apenas preço:

andy <- read.csv("dados/andy.csv")
m_u <- lm(sales ~ price + advert + I(advert^2), data = andy)
m_r <- lm(sales ~ price, data = andy)

anova(m_r, m_u)

O teste produz F≈8,44F\approx8{,}44 e valor-p≈0,0005p\approx0{,}0005. Há forte evidência contra a hipótese de que os termos de publicidade sejam conjuntamente irrelevantes, condicionalmente ao preço.

Também é possível usar:

library(car)
linearHypothesis(m_u, c("advert = 0", "I(advert^2) = 0"))

Restrições lineares

Considere uma demanda log-log por cerveja:

lnq=β1+β2lnpb+β3lnpl+β4lnpr+β5lni+e.\ln q=\beta_1+\beta_2\ln pb+\beta_3\ln pl+\beta_4\ln pr+\beta_5\ln i+e.

beer <- read.csv("dados/beer.csv")
beer <- transform(
  beer,
  lq  = log(q), lpb = log(pb), lpl = log(pl),
  lpr = log(pr), li = log(i)
)

m_beer <- lm(lq ~ lpb + lpl + lpr + li, data = beer)
summary(m_beer)
linearHypothesis(m_beer, "lpb + lpl + lpr + li = 0")

Como todas as variáveis estão em logaritmo, os coeficientes são elasticidades condicionais. A restrição linear deve ter uma justificativa econômica anterior ao teste; ela não deve ser escolhida depois de observar os resultados.

Viés de variável omitida

Omitir uma variável relevante gera viés em MQO quando a variável omitida está correlacionada com os regressores incluídos. Com edu_inc.csv, considere

ln(faminc)=β1+β2he+β3we+e,\ln(faminc)=\beta_1+\beta_2he+\beta_3we+e,

em que he e we representam escolaridade do marido e da esposa.

edu <- read.csv("dados/edu_inc.csv")
edu$lfaminc <- log(edu$faminc)

m_completo <- lm(lfaminc ~ he + we, data = edu)
m_omitido  <- lm(lfaminc ~ he, data = edu)

modelsummary::modelsummary(list(
  "Completo" = m_completo,
  "Sem escolaridade da esposa" = m_omitido
))

No modelo completo, o coeficiente de he é aproximadamente 0,0440{,}044; ao omitir we, ele sobe para cerca de 0,0610{,}061. A mudança é compatível com a lógica do viés de variável omitida, embora a demonstração causal exija discutir a estrutura da correlação entre as variáveis.

Variáveis irrelevantes e precisão

Adicionar regressores sem conteúdo explicativo não cria viés sob as hipóteses clássicas, mas pode aumentar a variância dos estimadores.

m_base <- lm(lfaminc ~ he + we, data = edu)
m_irrel <- lm(
  lfaminc ~ he + we + xtra_x5 + xtra_x6,
  data = edu
)

modelsummary::modelsummary(list(Base = m_base, Irrelevantes = m_irrel))

Seleção do modelo

Critérios como R2R^2 ajustado, AIC e BIC podem auxiliar a comparação de especificações, mas não substituem teoria, desenho de identificação ou validação fora da amostra.

AIC(m_base, m_irrel)
BIC(m_base, m_irrel)
summary(m_base)$adj.r.squared
summary(m_irrel)$adj.r.squared

Para diagnóstico da forma funcional:

library(lmtest)
resettest(m_base, power = 2:3, type = "fitted")

Colinearidade

Colinearidade elevada não torna MQO viesado por si só. O principal efeito é reduzir a precisão, aumentando erros-padrão e tornando difícil separar efeitos parciais.

Uma função de produção Cobb–Douglas para arroz pode ser estimada em logaritmos:

rice <- read.csv("dados/rice5.csv")

m_rice <- lm(
  log(prod) ~ log(area) + log(fert) + log(labor),
  data = rice
)

library(car)
vif(m_rice)

O fator de inflação da variância é

VIFj=11−Rj2.VIF_j=\frac{1}{1-R_j^2}.

A regra “VIF maior que 10” é apenas heurística. Um VIF alto sinaliza dificuldade de identificar efeitos separados, mas a decisão deve considerar o objetivo da análise e a estrutura dos dados.

Mínimos quadrados não lineares

Considere

yt=βx1t+β2x2t+et.y_t=\beta x_{1t}+\beta^2x_{2t}+e_t.

Como o parâmetro aparece de forma não linear, usamos nls().

nlls <- read.csv("dados/nlls.csv")

m_nls <- nls(
  y ~ b * x1 + b^2 * x2,
  data = nlls,
  start = list(b = 1)
)
summary(m_nls)

Outro exemplo é uma curva logística para a participação da produção de aço em fornos elétricos:

yt=α1+exp(−β−δt)+et.y_t=\frac{\alpha}{1+\exp(-\beta-\delta t)}+e_t.

steel <- read.csv("dados/steel.csv")

m_steel <- nls(
  eaf ~ alpha / (1 + exp(-beta - delta * t)),
  data = steel,
  start = list(alpha = 1, beta = -4, delta = 0.1),
  control = nls.control(maxiter = 500)
)
summary(m_steel)

Nota metodológica. Modelos não lineares podem ser sensíveis a valores iniciais e convergir para soluções locais. Convergência numérica não é evidência de que a especificação econômica esteja correta.

Exercícios

  1. Reproduza o teste conjunto dos termos de publicidade por anova(). Depois, repita o teste com a função do pacote car.

  2. Teste se a soma das elasticidades do modelo de cerveja é igual a zero.

  3. Compare o erro-padrão de he nos modelos com e sem variáveis artificiais irrelevantes.

  4. Calcule VIFs para a função de produção de arroz e discuta sua interpretação.

  5. Reestime o modelo não linear com diferentes valores iniciais e verifique a estabilidade da solução.

O viés de variável omitida em uma fórmula

Num caso simples, suponha que o verdadeiro modelo seja y=β0+β1x+β2z+u,y=\beta_0+\beta_1x+\beta_2z+u, mas estimemos uma regressão de yy apenas em xx. O viés assintótico associado à omissão de zz depende de duas relações: o efeito de zz sobre yy e a associação entre zz e xx. Intuitivamente, viés∝β2Cov(x,z)Var(x).\text{viés}\propto \beta_2\,\frac{Cov(x,z)}{Var(x)}. Portanto, uma variável omitida precisa ser relevante para yy e correlacionada com o regressor de interesse para gerar o viés clássico.

Controle ruim também pode gerar viés

Adicionar mais variáveis não é sempre melhor. Controlar por uma variável causada pelo tratamento pode bloquear parte do efeito de interesse; controlar por um collider pode criar associação espúria. A escolha dos controles deve preceder a regressão e ser baseada no desenho causal ou em uma pergunta preditiva claramente distinta.

Nota metodológica. A regra “coloque todos os controles disponíveis” não é um princípio econométrico. Em modelos causais, a seleção deve refletir a estrutura que relaciona tratamento, resultado e confundidores.

Testes conjuntos e lógica econômica

Um teste FF pode responder se um grupo de variáveis adiciona conteúdo explicativo condicionalmente às demais. Em vez de testar coeficientes um a um, hipóteses econômicas frequentemente geram restrições conjuntas.

library(car)
linearHypothesis(m_andy, c("price = 0", "advert = 0"))

AIC, BIC e validação

Critérios de informação equilibram ajuste e complexidade. O AIC costuma priorizar desempenho preditivo relativo, enquanto o BIC penaliza mais fortemente modelos com muitos parâmetros à medida que nn cresce. Nenhum deles transforma seleção de variáveis em estratégia de identificação causal.

Colinearidade: o que ela faz e o que não faz

Colinearidade alta aumenta a variância dos estimadores e pode tornar difícil separar efeitos individuais. Ela não cria, por si só, viés em MQO quando as demais hipóteses se mantêm. Também não existe um limiar universal de VIF acima do qual a regressão “deixa de funcionar”.

library(car)
vif(m_andy)

A resposta adequada depende da pergunta. Se duas variáveis representam conceitos economicamente distintos e são necessárias à identificação, removê-las apenas para reduzir VIF pode piorar o modelo.

Incerteza de especificação

Em pesquisa aplicada, resultados podem depender de controles, transformações e amostra. Em vez de ocultar essa sensibilidade, é preferível definir uma especificação principal e mostrar alternativas justificadas. O objetivo de robustez não é produzir uma parede de regressões, mas revelar quais conclusões são estáveis.

Exercícios adicionais

  1. Construa um exemplo simulado em que a omissão de uma variável gere viés positivo e outro em que gere viés negativo.

  2. Mostre, por simulação, que incluir um regressor irrelevante aumenta a variância do coeficiente de interesse em média.

  3. Compare AIC e BIC em três especificações aninhadas.

  4. Crie uma variável quase colinear com price e observe o efeito nos erros-padrão.

  5. Discuta um exemplo econômico em que controlar por uma variável pós-tratamento seria inadequado.

Indicadores, tratamento e inferência robusta

Capítulo 6 — Variáveis indicadoras, tratamento e diferenças em diferenças

Além da formulação clássica com variáveis indicadoras, a seção causal é informada por Angrist e Pischke (2009) e Imbens e Rubin (2015). Para diferenças em diferenças com adoção heterogênea no tempo, ver Callaway e Sant’Anna (2021), Goodman-Bacon (2021) e Sun e Abraham (2021).

Variáveis indicadoras

Uma variável indicadora assume valor 1 quando uma condição é satisfeita e 0 caso contrário. Ela permite deslocar o intercepto, alterar inclinações ou representar categorias qualitativas.

Com a base utown.csv, considere

price=β1+β2sqft+β3age+δ1utown+δ2pool+δ3fplace+e.price=\beta_1+\beta_2sqft+\beta_3age+\delta_1utown+\delta_2pool+\delta_3fplace+e.

utown <- read.csv("dados/utown.csv")

m_utown <- lm(
  price ~ sqft + age + utown + pool + fplace,
  data = utown
)
summary(m_utown)

O coeficiente de uma dummy mede a diferença condicional de intercepto entre o grupo com valor 1 e a categoria de referência, mantendo os demais regressores constantes.

Interação entre dummy e variável contínua

Para permitir que o efeito do tamanho da casa difira nas proximidades da universidade:

price=⋯+γ(sqft×utown)+e.price=\cdots+\gamma(sqft\times utown)+e.

m_utown_int <- lm(
  price ~ sqft + age + utown + pool + fplace + sqft:utown,
  data = utown
)
summary(m_utown_int)

As estimativas centrais são aproximadamente: δ̂1=27,45\hat\delta_1=27{,}45 e γ̂=1,30\hat\gamma=1{,}30. Assim, o efeito marginal do tamanho é β2\beta_2 fora da área universitária e β2+γ\beta_2+\gamma próximo à universidade.

b <- coef(m_utown_int)
c(
  fora = b["sqft"],
  perto = b["sqft"] + b["sqft:utown"]
)

Modelo de probabilidade linear

Quando yy é binária, MQO pode ser usado como modelo de probabilidade linear (MPL). Com a base coke.csv:

coke <- read.csv("dados/coke.csv")

m_lpm <- lm(
  coke ~ pratio + disp_coke + disp_pepsi,
  data = coke
)

library(lmtest)
library(sandwich)
coeftest(m_lpm, vcov = vcovHC(m_lpm, type = "HC1"))

Como a variância de uma variável binária depende de sua probabilidade, o erro do MPL é heterocedástico por construção. Por isso, erros-padrão robustos são a escolha natural.

Efeito de tratamento em experimento

Na base star.csv, small identifica estudantes em turmas pequenas. Uma comparação simples é

star <- read.csv("dados/star.csv")

m_star <- lm(totalscore ~ small, data = star)
summary(m_star)

O coeficiente de small é aproximadamente 13,7413{,}74 pontos. Em um experimento aleatorizado, uma diferença de médias pode ter interpretação causal porque o mecanismo de atribuição do tratamento quebra, em expectativa, a relação entre tratamento e fatores não observados.

Nota metodológica. Em dados observacionais, incluir uma dummy de tratamento em uma regressão não produz causalidade por decreto. É necessário justificar por que, condicionalmente aos controles e ao desenho, o tratamento pode ser tratado como exógeno.

Diferenças em diferenças

O estimador de diferenças em diferenças (DiD) compara a mudança temporal no grupo tratado com a mudança no grupo de controle. No caso de dois grupos e dois períodos:

yit=β0+β1Treati+β2Postt+δ(Treati×Postt)+eit.y_{it}=\beta_0+\beta_1Treat_i+\beta_2Post_t+\delta(Treat_i\times Post_t)+e_{it}.

O parâmetro δ\delta é o estimador DiD.

A base njmin3.csv contém informações de estabelecimentos de fast-food em New Jersey e Pennsylvania antes e depois de uma mudança no salário mínimo.

nj <- read.csv("dados/njmin3.csv")

m_did <- lm(fte ~ nj + d + d_nj, data = nj)
summary(m_did)

A estimativa para a interação é aproximadamente 2,752{,}75 empregados equivalentes em tempo integral. Essa estimativa só pode ser interpretada causalmente sob hipóteses como tendências paralelas na ausência do tratamento, ausência de choques diferenciais simultâneos e composição comparável.

Uma formulação equivalente é:

m_did2 <- lm(fte ~ nj * d, data = nj)
summary(m_did2)

DiD moderno: uma ressalva importante

O modelo simples de dois grupos e dois períodos é transparente. Em painéis com adoção em datas diferentes, o estimador tradicional com efeitos fixos de unidade e tempo pode combinar comparações inadequadas e atribuir pesos negativos. Por isso, aplicações modernas de DiD com adoção escalonada devem investigar estimadores específicos para heterogeneidade de efeitos e dinâmica temporal, em vez de assumir que um único TWFE resolve o problema.

Exercícios

  1. Estime o prêmio de localização universitária sem e com a interação sqft:utown.

  2. No MPL da escolha de Coca-Cola, identifique previsões fora do intervalo [0,1][0,1].

  3. Compare a média de totalscore entre turmas pequenas e regulares.

  4. Calcule manualmente a diferença em diferenças usando as quatro médias de fte por estado e período e compare com δ̂\hat\delta.

  5. Liste três ameaças à hipótese de tendências paralelas no exemplo do salário mínimo.

Categorias e grupo de referência

Quando uma variável qualitativa possui JJ categorias, um modelo com intercepto inclui tipicamente J−1J-1 dummies. A categoria omitida funciona como referência. O chamado dummy variable trap ocorre se todas as categorias e o intercepto forem incluídos simultaneamente, produzindo colinearidade perfeita.

# Exemplo generico
# dados$regiao <- factor(dados$regiao)
# lm(y ~ regiao + x, data=dados)

Mudar a categoria de referência altera a parametrização, mas não os valores ajustados do modelo.

Interações entre dummies e contínuas

Se DD é uma dummy e xx contínua, y=β0+β1x+δD+γ(Dx)+u,y=\beta_0+\beta_1x+\delta D+\gamma(Dx)+u, então δ\delta mede a diferença de intercepto quando x=0x=0 e γ\gamma mede a diferença de inclinação entre os grupos. Se x=0x=0 não tem interpretação econômica, centralizar xx em um valor relevante pode tornar δ\delta mais útil.

utown <- read.csv("dados/utown.csv")
utown$sqft_c <- utown$sqft - mean(utown$sqft)
m_c <- lm(price ~ sqft_c * utown + age + pool + fplace, data=utown)
summary(m_c)

Diferenças em diferenças como diferença de mudanças

Com dois grupos e dois períodos, DiD̂=(Y‾T,1−Y‾T,0)−(Y‾C,1−Y‾C,0).\widehat{DiD}=(\bar Y_{T,1}-\bar Y_{T,0})-(\bar Y_{C,1}-\bar Y_{C,0}). A regressão equivalente é Yit=α+δTreati+λPostt+τ(Treati×Postt)+uit,Y_{it}=\alpha+\delta Treat_i+\lambda Post_t+\tau(Treat_i\times Post_t)+u_{it}, em que τ\tau é o estimador DiD.

Hipótese de tendências paralelas

A hipótese central não exige que níveis sejam iguais antes do tratamento. Ela exige que, na ausência do tratamento, a evolução média do grupo tratado teria acompanhado a evolução do controle. Essa hipótese é contrafactual e não pode ser testada diretamente. Dados pré-tratamento podem, entretanto, revelar tendências claramente incompatíveis com ela.

Estudo de evento

Com vários períodos, indicadores de tempo relativo ao tratamento ajudam a visualizar dinâmica e pré-tendências.

# Esqueleto com fixest
# library(fixest)
# feols(y ~ i(event_time, treated, ref=-1) | id + time,
#       cluster=~id, data=dados)

Coeficientes pré-tratamento próximos de zero são evidência favorável, mas não prova de tendências paralelas. Poder estatístico limitado pode esconder divergências economicamente relevantes.

Adoção escalonada

Quando unidades começam o tratamento em datas diferentes e os efeitos variam ao longo do tempo, o estimador tradicional de efeitos fixos de duas vias pode combinar comparações inadequadas e pesos não intuitivos. Métodos de coortes e tempo relativo foram desenvolvidos para lidar com esse caso.

Nota metodológica. A presença de uma dummy tratado × pós não torna automaticamente um desenho causal. É preciso justificar grupo de comparação, momento do tratamento, ausência de antecipação e comportamento contrafactual.

Exercícios adicionais

  1. Reparametrize um modelo de dummies mudando a categoria de referência e confirme que os valores ajustados não mudam.

  2. Centralize uma variável contínua antes de interagir com uma dummy e interprete o novo intercepto diferencial.

  3. Construa manualmente o estimador DiD com quatro médias e compare com a regressão.

  4. Simule um caso com pré-tendências divergentes e mostre como DiD pode atribuir ao tratamento uma diferença que já estava emergindo.

  5. Explique por que efeitos heterogêneos no tempo complicam TWFE com adoção escalonada.

Capítulo 7 — Heterocedasticidade

A inferência robusta à heterocedasticidade remonta a White (1980); os testes e estimadores discutidos também se relacionam a Breusch e Pagan (1979), Newey e West (1987) e à implementação descrita por Zeileis (2004).

O problema

No modelo clássico homocedástico,

Var(ei|X)=σ2.Var(e_i|X)=\sigma^2.

Com heterocedasticidade,

Var(ei|X)=σi2,Var(e_i|X)=\sigma_i^2,

isto é, a variância condicional do erro depende da observação. Sob exogeneidade, os coeficientes de MQO continuam consistentes, mas a fórmula convencional de variância pode ser incorreta. Consequentemente, testes e intervalos baseados no erro-padrão usual podem falhar.

Exemplo com gastos de alimentação

food <- read.csv("dados/food.csv")
m_food <- lm(food_exp ~ income, data = food)

plot(fitted(m_food), residuals(m_food), pch = 19)
abline(h = 0, lty = 2)

No exemplo, a dispersão dos resíduos tende a aumentar com a renda.

Erros-padrão robustos

Uma correção robusta à heterocedasticidade altera a matriz de variância estimada, não os coeficientes de MQO.

library(lmtest)
library(sandwich)

coeftest(m_food)
coeftest(m_food, vcov = vcovHC(m_food, type = "HC1"))

Para a inclinação de renda, o erro-padrão convencional é aproximadamente 2,0932{,}093, enquanto o HC1 é próximo de 1,811{,}81 nesta amostra. Erro robusto não é necessariamente maior; ele é diferente porque utiliza uma estimativa distinta da estrutura de variância.

Nota metodológica. A expressão “erro-padrão robusto” não significa robustez a qualquer falha do modelo. HC corrige a inferência para heterocedasticidade, mas não corrige endogeneidade, forma funcional errada, dependência serial, agrupamento ou erro de mensuração.

Teste de Breusch–Pagan

library(lmtest)
bptest(m_food)

No exemplo, a estatística LM é aproximadamente 7,387{,}38, com valor-pp próximo de 0,00660{,}0066, indicando evidência contra homocedasticidade.

Teste de White

Uma versão simples do teste de White utiliza uma regressão auxiliar dos resíduos ao quadrado em funções dos regressores. Com uma única variável explicativa:

u2 <- residuals(m_food)^2
aux <- lm(u2 ~ income + I(income^2), data = food)
LM <- nrow(food) * summary(aux)$r.squared
p_value <- 1 - pchisq(LM, df = 2)
c(LM = LM, p_value = p_value)

A rejeição indica heterocedasticidade ou, em algumas versões, outras formas de má especificação da variância condicional.

Mínimos quadrados ponderados

Se a forma da heterocedasticidade for conhecida até um fator de escala, podemos transformar o modelo. Se, por exemplo,

Var(ei|X)=σ2hi,Var(e_i|X)=\sigma^2h_i,

então ponderar por 1/hi1/h_i produz erros transformados homocedásticos.

# Exemplo ilustrativo: variancia proporcional a income^2
m_wls <- lm(
  food_exp ~ income,
  data = food,
  weights = 1 / income^2
)
summary(m_wls)

A ponderação só é justificável quando há argumento para a função de variância. Escolher pesos para obter significância é uma prática inválida.

HC0, HC1, HC2 e HC3

O pacote sandwich oferece várias correções. HC1 é comum em aplicações econométricas; HC2 e HC3 ajustam observações de alta alavancagem e podem ser atraentes em amostras pequenas.

for (tipo in c("HC0", "HC1", "HC2", "HC3")) {
  print(coeftest(m_food, vcov = vcovHC(m_food, type = tipo)))
}

Exercícios

  1. Compare os erros-padrão convencional, HC0, HC1, HC2 e HC3.

  2. Execute os testes de Breusch–Pagan e White e compare suas conclusões.

  3. Reestime as especificações linear-log e log-linear do capítulo anterior com HC1.

  4. Explique por que heterocedasticidade não implica, por si só, viés no coeficiente de MQO.

  5. Proponha uma função de variância economicamente plausível para gastos familiares e discuta como ela poderia ser testada.

Por que a heterocedasticidade altera a inferência

Com heterocedasticidade, MQO continua minimizando a mesma soma de quadrados, mas a fórmula clássica da variância pressupõe uma variância de erro comum. Se Var(ui|Xi)=σi2,Var(u_i|X_i)=\sigma_i^2, a matriz correta precisa permitir que cada observação contribua de forma diferente para a incerteza.

A lógica do estimador sanduíche

De forma matricial, um estimador robusto possui estrutura Var̂(β̂)=(X′X)−1X′Ω̂X(X′X)−1.\widehat{Var}(\hat\beta)=(X'X)^{-1}X'\widehat\Omega X(X'X)^{-1}. A parte central, Ω̂\widehat\Omega, é construída com resíduos e pode receber correções finitas. As variantes HC0–HC3 diferem justamente nessas correções.

Robusto não significa imune a má especificação

Erros-padrão HC corrigem a matriz de variância diante de heterocedasticidade. Eles não corrigem variável omitida, simultaneidade, erro de medida, forma funcional errada ou dependência serial e espacial não modelada.

HC versus cluster

Quando observações dentro de um mesmo grupo compartilham choques, erros HC tratam dependência intragrupo como se não existisse. Nesse caso, erros agrupados por cluster podem ser apropriados. A escolha do nível de agrupamento deve seguir o processo de dependência e o desenho da pesquisa.

# Exemplo de estrutura
# library(sandwich); library(lmtest)
# coeftest(modelo, vcov = vcovCL(modelo, cluster = ~ estado))

Mínimos quadrados ponderados: eficiência com risco de especificação

Se a forma da heterocedasticidade é conhecida ou bem estimada, WLS pode ganhar eficiência. Na prática, pesos mal especificados podem introduzir novas distorções de eficiência e interpretação. Quando o objetivo principal é inferência sobre a média condicional, MQO com erros robustos costuma ser uma referência segura.

Diagnóstico gráfico

Além dos testes formais, gráficos de resíduos contra ajustados e contra regressores podem revelar padrões. Em grandes amostras, testes de heterocedasticidade podem rejeitar por desvios pequenos; em pequenas amostras, podem ter pouco poder. O diagnóstico deve combinar evidência gráfica, conhecimento do processo gerador e inferência robusta.

Exercícios adicionais

  1. Compare erros-padrão clássicos, HC1 e HC3 no modelo de alimentos.

  2. Simule dados com variância do erro proporcional a x2x^2 e compare cobertura de intervalos clássicos e robustos.

  3. Explique por que WLS exige mais estrutura que erros robustos.

  4. Crie grupos artificiais com choque comum e mostre que HC e cluster podem produzir inferência diferente.

  5. Discuta qual nível de cluster seria plausível em um painel município-ano com uma política definida no nível estadual.

Séries temporais

Capítulo 8 — Séries temporais, estacionariedade e cointegração

A abordagem de estacionariedade, raiz unitária e cointegração se apoia em Dickey e Fuller (1979), Engle e Granger (1987) e Hamilton (1994).

Por que séries temporais exigem cuidados adicionais?

Em dados de corte transversal, a ordem das observações normalmente não carrega informação substantiva. Em séries temporais, a ordem é parte do problema. Valores próximos no tempo podem ser fortemente dependentes, tendências podem produzir correlações artificiais e choques podem ter efeitos persistentes.

Uma série fracamente estacionária possui média e variância constantes e autocovariância que depende apenas da distância entre as observações, não do calendário. Essa propriedade é importante porque muitos resultados assintóticos usuais pressupõem algum tipo de estabilidade temporal.

Visualizando uma série

A base gdp5.csv contém PIB real trimestral dos Estados Unidos.

gdp <- read.csv("dados/gdp5.csv")
gdp_ts <- ts(gdp$gdp, start = c(1984, 1), frequency = 4)

plot(gdp_ts, ylab = "PIB real", xlab = "Ano")
PIB real trimestral dos Estados Unidos.

O gráfico sugere forte tendência. Regressões em níveis entre duas séries com tendência podem produzir R2R^2 elevado e estatísticas tt aparentemente significativas mesmo sem relação econômica verdadeira.

Primeiras diferenças

A primeira diferença é

Δyt=yt−yt−1.\Delta y_t=y_t-y_{t-1}.

dgdp <- diff(gdp_ts)
plot(dgdp)

Diferenciar remove uma raiz unitária em muitos processos integrados de ordem um, I(1)I(1), mas também muda a pergunta econômica: um modelo em diferenças explica variações, não níveis de longo prazo.

Tendência determinística

A base toody5.csv permite ilustrar uma tendência determinística na produtividade agrícola.

toody <- read.csv("dados/toody5.csv")

m_trend <- lm(
  log(y) ~ trend + I(trend^2) + rain,
  data = toody
)
summary(m_trend)

Quando uma série é estacionária em torno de uma tendência determinística, remover a tendência é conceitualmente diferente de tomar primeira diferença. A escolha deve refletir o processo gerador dos dados.

Regressão espúria

A base spurious.csv contém dois passeios aleatórios independentes.

sp <- read.csv("dados/spurious.csv")
m_spurious <- lm(rw1 ~ rw2, data = sp)
summary(m_spurious)

Apesar de independentes por construção, uma regressão em níveis pode apresentar R2R^2 alto e estatística tt enorme. Esse exemplo mostra por que significância convencional em séries não estacionárias pode ser enganosa.

Teste de Dickey–Fuller aumentado

Considere

Δyt=α+γyt−1+∑j=1pδjΔyt−j+ut.\Delta y_t=\alpha+\gamma y_{t-1}+\sum_{j=1}^{p}\delta_j\Delta y_{t-j}+u_t.

A hipótese nula do teste ADF é γ=0\gamma=0, isto é, presença de raiz unitária.

library(urca)

adf_gdp <- ur.df(
  gdp_ts,
  type = "trend",
  lags = 4,
  selectlags = "AIC"
)
summary(adf_gdp)

A inclusão de constante, tendência e defasagens deve ser decidida com base no comportamento da série e na especificação do teste. Um ADF mal especificado pode ter baixo poder.

Taxas de juros e cointegração

A base usdata5.csv contém, entre outras variáveis, a taxa de títulos de três anos (br) e a taxa de fundos federais (ffr). Se duas séries são I(1)I(1), mas existe uma combinação linear estacionária entre elas, dizemos que são cointegradas.

O procedimento de Engle–Granger em duas etapas é:

us <- read.csv("dados/usdata5.csv")

coint <- lm(br ~ ffr, data = us)
uhat <- residuals(coint)

adf_res <- ur.df(uhat, type = "none", lags = 4, selectlags = "AIC")
summary(adf_res)

Os valores críticos para resíduos de uma regressão de cointegração não são, em geral, os mesmos do teste ADF padrão em uma série observada; por isso, procedimentos específicos ou o teste de Johansen são preferíveis em sistemas multivariados.

Modelo de correção de erro

Se brtbr_t e ffrtffr_t são cointegradas, uma representação de correção de erro pode ser escrita como

Δbrt=α+λût−1+θΔffrt+vt,\Delta br_t=\alpha+\lambda\hat u_{t-1}+\theta\Delta ffr_t+v_t,

em que ût−1\hat u_{t-1} mede o desvio da relação de longo prazo.

us$du_br  <- c(NA, diff(us$br))
us$du_ffr <- c(NA, diff(us$ffr))
us$ecm1   <- c(NA, head(uhat, -1))

m_ecm <- lm(du_br ~ ecm1 + du_ffr, data = us)
summary(m_ecm)

Um λ\lambda negativo é compatível com ajuste em direção ao equilíbrio de longo prazo.

Nota metodológica. Não existe uma regra automática “não estacionária = diferenciar”. Se séries I(1)I(1) são cointegradas, diferenciar tudo e ignorar o termo de correção de erro elimina informação sobre o equilíbrio de longo prazo.

Exercícios

  1. Construa gráficos de br, ffr e suas primeiras diferenças.

  2. Execute ADF com e sem tendência e discuta a sensibilidade da conclusão.

  3. Reproduza a regressão espúria em níveis e em primeiras diferenças.

  4. Estime uma relação de cointegração entre br e ffr e examine os resíduos.

  5. Explique a diferença econômica entre remover uma tendência determinística e diferenciar uma série.

Estacionariedade fraca

Uma série fracamente estacionária possui média constante, variância finita constante e covariância que depende apenas da distância entre observações, não da data em si. Essa definição permite dependência temporal sem permitir que sua estrutura mude arbitrariamente ao longo do tempo.

Autocorrelação e correlograma

A autocorrelação de ordem kk mede a associação linear entre yty_t e yt−ky_{t-k}. A função de autocorrelação amostral pode ser visualizada por

# supondo serie temporal y
# acf(y)
# pacf(y)

A ACF e a PACF são úteis para diagnóstico, mas a escolha de defasagens não deve ser feita apenas por reconhecimento visual de padrões.

Processos AR(1)

Considere yt=α+ρyt−1+ut.y_t=\alpha+\rho y_{t-1}+u_t. Se |ρ|<1|\rho|<1, o processo é estacionário e choques desaparecem gradualmente. Se ρ=1\rho=1, temos uma raiz unitária e os choques têm efeito permanente sobre o nível.

Para |ρ|<1|\rho|<1, a média de longo prazo é E(yt)=α1−ρ.E(y_t)=\frac{\alpha}{1-\rho}.

Regressão espúria por simulação

Duas caminhadas aleatórias independentes podem produzir R2R^2 elevado e estatísticas tt aparentemente significativas.

set.seed(123)
n <- 200
x <- cumsum(rnorm(n))
y <- cumsum(rnorm(n))
summary(lm(y ~ x))

O problema não é que MQO deixou de calcular uma reta, mas que a distribuição usual das estatísticas não se aplica da forma convencional.

ADF e escolha de componentes determinísticos

Testes de raiz unitária dependem de intercepto, tendência e número de defasagens. Incluir tendência desnecessária reduz poder; omitir tendência relevante também distorce o teste. A decisão deve combinar gráfico, teoria e propriedades da série.

Cointegração como equilíbrio de longo prazo

Se xtx_t e yty_t são I(1)I(1), mas existe β\beta tal que yt−βxty_t-\beta x_t é estacionário, as séries são cointegradas. A combinação cointegrante representa uma relação de equilíbrio de longo prazo, enquanto o modelo de correção de erro descreve ajustes de curto prazo.

Modelo de correção de erro

Uma forma simples é Δyt=α+λ(yt−1−βxt−1)+γΔxt+ut.\Delta y_t=\alpha+\lambda(y_{t-1}-\beta x_{t-1})+\gamma\Delta x_t+u_t. Para estabilidade, espera-se frequentemente λ<0\lambda<0: desvios positivos do equilíbrio no período anterior geram ajuste para baixo em yy.

Exercícios adicionais

  1. Simule AR(1) com ρ=0,3\rho=0{,}3, 0,80{,}8, 0,980{,}98 e 11. Compare os gráficos.

  2. Gere duas caminhadas aleatórias independentes e repita a regressão espúria 500 vezes. Conte quantas vezes o coeficiente parece significativo a 5%.

  3. Compare ACF de uma série em nível e em primeira diferença.

  4. Discuta o papel do intercepto e da tendência em um teste ADF.

  5. Estime uma relação de longo prazo entre duas séries I(1)I(1) e teste a estacionariedade dos resíduos.

Capítulo 9 — Vetor autorregressivo e vetor de correção de erro

A formulação de VAR, causalidade de Granger, cointegração e VECM dialoga com Sims (1980), Granger (1969), Johansen (1988) e Lütkepohl (2005).

Sistemas dinâmicos

Um vetor autorregressivo (VAR) trata um conjunto de variáveis como conjuntamente endógenas. Para duas séries estacionárias e uma defasagem:

yt=β10+β11yt−1+β12xt−1+vyt,xt=β20+β21xt−1+β22yt−1+vxt.\begin{aligned} y_t &= \beta_{10}+\beta_{11}y_{t-1}+\beta_{12}x_{t-1}+v_{yt},\\ x_t &= \beta_{20}+\beta_{21}x_{t-1}+\beta_{22}y_{t-1}+v_{xt}. \end{aligned}

Cada equação pode ser estimada por MQO quando os regressores defasados são predeterminados sob as condições usuais.

Seleção do número de defasagens

A base fred5.csv contém logaritmos de consumo real e renda disponível real.

fred <- read.csv("dados/fred5.csv")
y <- ts(fred[, c("consn", "y")], start = c(1986, 1), frequency = 4)

library(vars)
VARselect(y, lag.max = 8, type = "const")

AIC, HQ, SC/BIC e FPE podem indicar ordens diferentes. A decisão deve equilibrar parcimônia, ausência de autocorrelação residual e coerência econômica.

Estimando um VAR

Se as séries utilizadas no sistema forem estacionárias:

var2 <- VAR(y, p = 2, type = "const")
summary(var2)
serial.test(var2, lags.pt = 12, type = "PT.asymptotic")
stability(var2)

Causalidade de Granger

A causalidade de Granger pergunta se defasagens de uma variável contêm informação útil para prever outra, condicionalmente ao conjunto de informações do VAR.

causality(var2, cause = "y")

Nota metodológica. “Causar no sentido de Granger” não é sinônimo de causalidade estrutural. Trata-se de conteúdo preditivo temporal condicionado ao modelo e ao conjunto de variáveis incluídas.

Cointegração e VECM

A base gdp.csv contém índices de PIB real para Estados Unidos e Austrália. Se ambas as séries são I(1)I(1) e cointegradas, um VECM preserva simultaneamente dinâmica de curto prazo e relação de longo prazo.

gdp <- read.csv("dados/gdp.csv")
gdp_ts <- ts(gdp[, c("usa", "aus")], start = c(1970, 1), frequency = 4)

library(urca)
jo <- ca.jo(gdp_ts, type = "trace", ecdet = "const", K = 2, spec = "transitory")
summary(jo)

O teste de Johansen avalia o posto da matriz de longo prazo. Se o posto for 1 em um sistema com duas variáveis, existe uma relação de cointegração.

vecm <- cajorls(jo, r = 1)
summary(vecm$rlm)

Transformando o VECM em VAR

Para obter funções de impulso-resposta a partir de um VECM estimado:

vec_as_var <- vec2var(jo, r = 1)

ir <- irf(
  vec_as_var,
  impulse = "usa",
  response = "aus",
  n.ahead = 12,
  boot = TRUE
)
plot(ir)

Impulso-resposta e identificação

Uma função de impulso-resposta descreve a trajetória esperada de uma variável após um choque no sistema. Porém, os resíduos reduzidos do VAR podem ser contemporaneamente correlacionados. Para interpretar choques como estruturais é necessário impor uma identificação, por exemplo uma ordenação de Cholesky, restrições de sinais ou outras hipóteses estruturais.

A ordenação de Cholesky é sensível à ordem das variáveis. Assim, uma IRF ortogonalizada não deve ser apresentada como evidência estrutural sem justificar a identificação.

Decomposição da variância do erro de previsão

fevd_result <- fevd(vec_as_var, n.ahead = 12)
plot(fevd_result)

A FEVD mostra qual parcela do erro de previsão em diferentes horizontes é atribuída a cada inovação identificada. Como na IRF, a interpretação depende do esquema de identificação.

Exercícios

  1. Use VARselect() para comparar ordens de defasagem em fred5.csv.

  2. Estime um VAR e teste autocorrelação residual.

  3. Teste causalidade de Granger nas duas direções.

  4. Execute o teste de Johansen para usa e aus com diferentes escolhas de KK.

  5. Inverta a ordenação das variáveis em uma IRF ortogonalizada e discuta a sensibilidade.

Estabilidade do VAR

Um VAR deve ser dinamicamente estável para que choques desapareçam e para que funções de impulso-resposta tenham interpretação de longo horizonte usual. Em pacotes como vars, as raízes do polinômio característico podem ser examinadas.

# library(vars)
# roots(modelo_var, modulus=TRUE)

Em uma parametrização estável, os módulos relevantes ficam dentro do círculo unitário segundo a convenção usada pela função.

Ordem das variáveis e identificação recursiva

Uma IRF ortogonalizada por decomposição de Cholesky impõe uma ordem contemporânea. A primeira variável é tratada como não respondendo contemporaneamente às posteriores, enquanto as últimas podem reagir no mesmo período às anteriores. Portanto, trocar a ordem pode alterar a IRF.

Nota metodológica. Uma IRF não é “causal” apenas porque o comando foi executado. A interpretação estrutural depende das restrições de identificação e da plausibilidade econômica dessas restrições.

Intervalos de confiança de IRF

Pacotes econométricos costumam construir bandas por bootstrap. Bandas largas lembram que respostas dinâmicas são funções não lineares de vários coeficientes estimados.

# irf_obj <- irf(var_fit, impulse="x", response="y",
#                n.ahead=12, boot=TRUE, runs=1000)
# plot(irf_obj)

Granger: previsão condicional, não mecanismo estrutural

Dizer que xx Granger-causa yy significa que defasagens de xx ajudam a prever yy condicionalmente às demais variáveis do sistema. Isso não elimina a possibilidade de variável omitida, causa comum ou antecipação. A expressão deve ser lida no sentido preditivo temporal.

FEVD e horizonte

A decomposição da variância do erro de previsão responde qual parcela da incerteza de previsão de uma variável, em cada horizonte, é atribuída aos choques identificados. Como as IRFs, a FEVD depende do esquema de identificação.

VECM e número de relações cointegrantes

Com mais de duas séries, pode haver múltiplas relações cointegrantes. O procedimento de Johansen estima o posto de cointegração e os vetores correspondentes. A escolha de termos determinísticos e defasagens influencia os resultados e precisa ser reportada.

Exercícios adicionais

  1. Estime um VAR com duas ordens de defasagem diferentes e compare AIC, BIC e resíduos.

  2. Inverta a ordem de duas variáveis e compare IRFs ortogonalizadas.

  3. Explique a diferença entre um teste de Granger e uma afirmação causal estrutural.

  4. Calcule FEVD para horizontes 1, 4, 8 e 12.

  5. Discuta como um erro na determinação do posto de cointegração afeta a escolha entre VAR e VECM.

Capítulo 10 — Volatilidade variável no tempo: ARCH e GARCH

Os modelos ARCH e GARCH foram introduzidos por Engle (1982) e Bollerslev (1986), respectivamente.

Por que modelar a variância?

Em muitas séries financeiras e macroeconômicas, a média pode parecer relativamente estável enquanto a variância muda ao longo do tempo. Períodos tranquilos são seguidos por períodos de elevada volatilidade. Esse agrupamento de volatilidade motiva modelos para a variância condicional.

Retornos em vez de preços

Preços de ativos frequentemente possuem tendência estocástica. Uma transformação comum é o retorno logarítmico rt=100[log(Pt)−log(Pt−1)].r_t=100[\log(P_t)-\log(P_{t-1})]. Retornos podem ser aproximadamente estacionários mesmo quando preços não são.

# preco <- ts(...)
# retorno <- 100*diff(log(preco))
# plot(retorno)

Modelo ARCH

No ARCH(1), rt=μ+εt,εt=σtzt,σt2=ω+αεt−12,\begin{aligned} r_t &= \mu+\varepsilon_t,\\ \varepsilon_t &= \sigma_t z_t,\\ \sigma_t^2 &= \omega+\alpha\varepsilon_{t-1}^2, \end{aligned} com ω>0\omega>0 e α≥0\alpha\ge0. Um grande choque no período anterior aumenta a variância prevista hoje.

Teste para efeito ARCH

Uma forma de diagnóstico regressa resíduos ao quadrado em suas próprias defasagens. A hipótese nula é ausência de dependência ARCH. Em R, pacotes específicos oferecem testes LM.

# Exemplo conceitual
# library(FinTS)
# ArchTest(residuals(modelo_media), lags=5)

Modelo GARCH

O GARCH(1,1) adiciona a própria variância defasada: σt2=ω+αεt−12+βσt−12.\sigma_t^2=\omega+\alpha\varepsilon_{t-1}^2+\beta\sigma_{t-1}^2. O parâmetro α\alpha mede reação a novas informações e β\beta captura persistência. Quando α+β\alpha+\beta está próximo de 1, choques de volatilidade desaparecem lentamente.

Previsão de volatilidade

Modelos GARCH são usados para previsão de risco, intervalos dinâmicos e aplicações financeiras. A qualidade depende tanto da equação de variância quanto da distribuição escolhida para os choques. Caudas pesadas frequentemente tornam a normalidade condicional inadequada.

Assimetria

Em mercados financeiros, choques negativos podem aumentar volatilidade mais que choques positivos de mesma magnitude. Modelos EGARCH e GJR-GARCH incorporam essa assimetria.

R e pacotes

Um pacote amplamente utilizado é rugarch. Como o objetivo deste livro é introdutório, o código abaixo serve como roteiro e pode exigir instalação do pacote.

# library(rugarch)
# spec <- ugarchspec(
#   variance.model=list(model="sGARCH", garchOrder=c(1,1)),
#   mean.model=list(armaOrder=c(0,0), include.mean=TRUE),
#   distribution.model="std"
# )
# fit <- ugarchfit(spec, data=retorno)
# show(fit)

Limitações

ARCH/GARCH modelam dependência na variância condicional, mas não resolvem quebras estruturais, mudanças de regime ou problemas de especificação da média. Persistência elevada pode refletir mudanças de regime não modeladas.

Exercícios

  1. Explique por que preços de ativos e retornos têm propriedades temporais diferentes.

  2. Simule um ARCH(1) e mostre o agrupamento de volatilidade.

  3. Interprete α\alpha e β\beta em um GARCH(1,1).

  4. Discuta o significado de α+β\alpha+\beta próximo de 1.

  5. Pesquise a diferença conceitual entre GARCH simétrico e EGARCH.

Painel e microeconometria

Capítulo 11 — Dados em painel

Para dados em painel, esta exposição combina Baltagi (2021), Wooldridge (2020) e a implementação em plm de Croissant e Millo (2008) com resultados clássicos de Hausman (1978), Mundlak (1978) e Arellano (1987).

Estrutura dos dados

Dados em painel acompanham unidades i=1,…,Ni=1,\ldots,N ao longo de períodos t=1,…,Tt=1,\ldots,T. Uma especificação básica é

yit=β1+𝐱it′𝛃+ci+uit,y_{it}=\beta_1+\bm{x}_{it}'\bm\beta+c_i+u_{it},

em que cic_i representa heterogeneidade individual invariável no tempo. O problema central é decidir como tratar cic_i e sua possível correlação com os regressores.

A base nls_panel.csv contém 716 mulheres observadas em cinco anos, totalizando 3.580 observações.

nls <- read.csv("dados/nls_panel.csv")

library(plm)
pnls <- pdata.frame(nls, index = c("id", "year"))
pdim(pnls)

Pooled OLS

O modelo agrupado ignora cic_i como componente separado:

m_pool <- plm(
  lwage ~ educ + exper + I(exper^2),
  data = pnls,
  model = "pooling"
)
summary(m_pool)

Se a heterogeneidade individual omitida estiver correlacionada com educação ou experiência, pooled OLS será inconsistente para os efeitos estruturais de interesse.

Efeitos fixos: transformação within

Subtraindo a média temporal de cada indivíduo:

yit−y‾i=(𝐱it−𝐱‾i)′𝛃+(uit−u‾i).y_{it}-\bar y_i=(\bm{x}_{it}-\bar{\bm{x}}_i)'\bm\beta+(u_{it}-\bar u_i).

O termo cic_i desaparece. Em R:

m_fe <- plm(
  lwage ~ exper + I(exper^2),
  data = pnls,
  model = "within",
  effect = "individual"
)
summary(m_fe)

Variáveis invariantes no tempo não podem ser identificadas pelo estimador within porque sua variação intrapessoal é zero.

Efeitos fixos de tempo

Choques agregados podem ser controlados por efeitos de tempo:

m_twfe <- plm(
  lwage ~ exper + I(exper^2),
  data = pnls,
  model = "within",
  effect = "twoways"
)
summary(m_twfe)

Em aplicações causais, efeitos fixos de unidade e tempo controlam apenas componentes aditivos invariantes por unidade ou comuns por tempo. Eles não resolvem automaticamente tendências diferenciais, simultaneidade ou tratamentos endógenos.

Primeiras diferenças

Δyit=Δ𝐱it′𝛃+Δuit.\Delta y_{it}=\Delta\bm{x}_{it}'\bm\beta+\Delta u_{it}.

m_fd <- plm(
  lwage ~ exper + I(exper^2),
  data = pnls,
  model = "fd"
)
summary(m_fd)

Com T=2T=2, within e primeira diferença são equivalentes para uma inclinação única sob a mesma especificação. Para T>2T>2, a eficiência relativa depende da estrutura de autocorrelação do erro.

Efeitos aleatórios

O estimador de efeitos aleatórios pressupõe, em sua forma clássica,

E(ci|Xi)=0.E(c_i|X_i)=0.

m_re <- plm(
  lwage ~ educ + exper + I(exper^2),
  data = pnls,
  model = "random"
)
summary(m_re)

Essa hipótese permite identificar coeficientes de variáveis invariantes no tempo e combinar variação within e between, mas é forte em muitas aplicações observacionais.

Hausman e escolha entre FE e RE

# modelos comparaveis em regressores que variam no tempo
m_fe_h <- plm(lwage ~ exper + I(exper^2), data = pnls, model = "within")
m_re_h <- plm(lwage ~ exper + I(exper^2), data = pnls, model = "random")

phtest(m_fe_h, m_re_h)

O teste de Hausman verifica diferenças sistemáticas entre estimadores sob hipóteses específicas. Não deve ser usado como um botão automático que decide o modelo substantivo.

Erros-padrão agrupados

Observações do mesmo indivíduo podem ter erros correlacionados ao longo do tempo. Uma prática comum é agrupar a inferência pela unidade:

library(lmtest)
library(sandwich)

coeftest(
  m_fe,
  vcov = vcovHC(m_fe, type = "HC1", cluster = "group")
)

O nível de agrupamento deve seguir a estrutura da dependência dos erros e, em desenhos de tratamento, frequentemente a unidade de atribuição.

Exercícios

  1. Confirme que o painel possui 716 indivíduos e cinco períodos.

  2. Compare pooled OLS, FE e RE para uma especificação comum.

  3. Explique por que educ pode desaparecer em um modelo within se for invariável ao longo do painel.

  4. Compare erros-padrão convencionais e clusterizados por indivíduo.

  5. Discuta por que um teste de Hausman não substitui uma justificativa econômica para a correlação entre cic_i e XitX_{it}.

O que efeitos fixos realmente removem

O modelo yit=βxit+αi+uity_{it}=\beta x_{it}+\alpha_i+u_{it} permite que αi\alpha_i seja correlacionado com xitx_{it}. A transformação within subtrai as médias temporais de cada unidade: yit−y‾i=β(xit−x‾i)+(uit−u‾i).y_{it}-\bar y_i=\beta(x_{it}-\bar x_i)+(u_{it}-\bar u_i). Assim, características invariantes no tempo são eliminadas, observadas ou não. Em contrapartida, seus efeitos diretos não podem ser estimados no FE tradicional.

Variação within e between

Uma variável pode variar muito entre unidades e pouco ao longo do tempo dentro de cada unidade. FE utiliza apenas a variação within para identificar β\beta. Isso pode produzir erros-padrão altos mesmo em painéis aparentemente grandes.

# Exemplo generico
# aggregate(x ~ id, data=dados, FUN=sd)

Painéis desbalanceados

Um painel não precisa ter todas as unidades em todos os períodos. Modelos podem ser estimados em painéis desbalanceados, mas o mecanismo de entrada e saída merece atenção. Se o desaparecimento de unidades estiver relacionado ao resultado ou ao tratamento, seleção pode comprometer a interpretação.

Efeitos aleatórios e Mundlak

RE pressupõe ortogonalidade entre o efeito individual e os regressores sob a formulação clássica. A abordagem de Mundlak inclui médias individuais dos regressores para modelar explicitamente parte dessa correlação.

# dados$x_bar <- ave(dados$x, dados$id, FUN=mean)
# plm(y ~ x + x_bar, data=dados, model="random", index=c("id","tempo"))

Essa parametrização também ajuda a separar componentes within e between.

Cluster e número de grupos

Para uma discussão aplicada da inferência cluster-robust, ver Cameron e Miller (2015).

Erros-padrão agrupados dependem mais do número de clusters do que do número total de observações. Com poucos grupos, aproximações assintóticas podem ser ruins. Correções de pequena amostra ou métodos de bootstrap por cluster podem ser necessários.

Efeitos fixos de duas vias

Adicionar efeitos fixos de unidade e tempo controla por heterogeneidade invariável da unidade e por choques comuns a todas as unidades em cada período. Isso é poderoso, mas não remove confundidores que variam entre unidades e no tempo de forma correlacionada com o tratamento.

Painel dinâmico: uma advertência

O viés do estimador within em painéis dinâmicos com TT pequeno é o conhecido viés de Nickell (Nickell 1981). Estimadores GMM para esse contexto são desenvolvidos, entre outros, por Arellano e Bond (1991).

Quando a variável dependente defasada aparece em um painel com TT pequeno, o estimador within pode ser viesado. Métodos de painel dinâmico, como estimadores GMM, pertencem a uma etapa posterior do curso. O ponto importante aqui é reconhecer que adicionar yi,t−1y_{i,t-1} não é uma extensão inocente.

Exercícios adicionais

  1. Calcule manualmente as médias por unidade e reproduza a transformação within para um painel pequeno.

  2. Compare pooled OLS e FE e explique por que diferenças nos coeficientes podem sinalizar heterogeneidade omitida.

  3. Separe a variância total de um regressor em componentes within e between.

  4. Estime uma especificação de Mundlak e interprete as médias individuais.

  5. Discuta por que 10.000 observações distribuídas em 20 clusters não equivalem, para inferência agrupada, a 10.000 observações independentes.

Capítulo 12 — Modelos com variável dependente qualitativa ou limitada

Os modelos de resposta binária, multinomial, ordenada, censura e seleção amostral seguem referências como Cameron e Trivedi (2005) e Greene (2018).

Escolhas binárias

Quando a variável dependente assume apenas os valores 0 e 1, o objeto econômico é uma probabilidade condicional. Três abordagens introdutórias são o modelo de probabilidade linear, o probit e o logit.

A base transport.csv registra a escolha entre automóvel e transporte coletivo. Define-se

dtime=bustime−autotime10.dtime=\frac{bustime-autotime}{10}.

Valores positivos indicam que o ônibus é mais lento que o automóvel.

Modelo de probabilidade linear

transport <- read.csv("dados/transport.csv")

m_lpm <- lm(auto ~ dtime, data = transport)

library(lmtest)
library(sandwich)
coeftest(m_lpm, vcov = vcovHC(m_lpm, type = "HC1"))

A estimativa da inclinação é aproximadamente 0,0700{,}070. Como dtime é medido em unidades de dez minutos, dez minutos adicionais de desvantagem do ônibus estão associados a aproximadamente 7 pontos percentuais a mais na probabilidade de escolher o automóvel.

O MPL é simples e seus efeitos marginais são constantes, mas pode gerar probabilidades menores que zero ou maiores que um e possui heterocedasticidade por construção.

Probit

No probit,

P(yi=1|xi)=Φ(xi′β).P(y_i=1|x_i)=\Phi(x_i'\beta).

m_probit <- glm(
  auto ~ dtime,
  family = binomial(link = "probit"),
  data = transport
)
summary(m_probit)

A inclinação estimada do índice é próxima de 0,3000{,}300. Esse coeficiente não é diretamente uma mudança em probabilidade. O efeito marginal é

∂P(y=1|x)∂xj=ϕ(x′β)βj.\frac{\partial P(y=1|x)}{\partial x_j}=\phi(x'\beta)\beta_j.

library(marginaleffects)
avg_slopes(m_probit)
slopes(m_probit, newdata = data.frame(dtime = 2))

Logit

No logit,

P(yi=1|xi)=Λ(xi′β)=exp(xi′β)1+exp(xi′β).P(y_i=1|x_i)=\Lambda(x_i'\beta)=\frac{\exp(x_i'\beta)}{1+\exp(x_i'\beta)}.

m_logit <- glm(
  auto ~ dtime,
  family = binomial(link = "logit"),
  data = transport
)
summary(m_logit)
avg_slopes(m_logit)
Probabilidade estimada de escolha do automóvel no modelo logit.

Um exemplo com escolha de refrigerante

Na base coke.csv, a variável coke é igual a 1 quando o consumidor escolhe Coca-Cola e zero quando escolhe Pepsi.

coke <- read.csv("dados/coke.csv")

m_coke_logit <- glm(
  coke ~ pratio + disp_coke + disp_pepsi,
  family = binomial(link = "logit"),
  data = coke
)
summary(m_coke_logit)

O coeficiente de pratio é aproximadamente −1,996-1{,}996: aumentos no preço relativo da Coca-Cola reduzem o índice logit da escolha de Coca-Cola. Para interpretação substantiva, prefira probabilidades previstas, efeitos marginais ou razões de chances, conforme a pergunta.

Teste de razão de verossimilhança

Modelos aninhados estimados por máxima verossimilhança podem ser comparados por

LR=2(ℓU−ℓR)∼χJ2.LR=2(\ell_U-\ell_R)\sim\chi^2_J.

m_u <- m_coke_logit
m_r <- update(m_u, . ~ . - disp_coke)
anova(m_r, m_u, test = "Chisq")

Regressor endógeno em um modelo binário

A base mroz.csv permite estudar participação feminina na força de trabalho. Um modelo linear com escolaridade potencialmente endógena pode ser estimado por 2SLS:

mroz <- read.csv("dados/mroz.csv")
mroz$exper2 <- mroz$exper^2

library(AER)
m_iv <- ivreg(
  lfp ~ educ + exper + exper2 + kidsl6 + age |
    mothereduc + exper + exper2 + kidsl6 + age,
  data = mroz
)
summary(m_iv, diagnostics = TRUE)

Aqui, mothereduc é usada como instrumento excluído para educ. Relevância pode ser avaliada no primeiro estágio; validade exige uma restrição de exclusão substantiva, que não pode ser demonstrada apenas com correlações amostrais.

Nota metodológica. Em modelos não lineares, substituir simplesmente o regressor endógeno por seu valor ajustado de primeiro estágio não reproduz, em geral, um estimador IV válido. Métodos como control function, IV-probit ou estimação por máxima verossimilhança requerem hipóteses adicionais e devem ser tratados com cuidado.

Logit multinomial

A base nels_small.csv contém três escolhas educacionais: não cursar faculdade, faculdade de dois anos e faculdade de quatro anos.

nels <- read.csv("dados/nels_small.csv")
nels$choice <- factor(nels$psechoice)

library(nnet)
m_mnl <- multinom(choice ~ grades, data = nels, trace = FALSE)
summary(m_mnl)
predict(m_mnl, type = "probs")[1:6, ]

O multinomial logit impõe a propriedade de independência das alternativas irrelevantes (IIA). Essa hipótese deve ser discutida quando alternativas são substitutas próximas.

Probit ordenado

Se as categorias possuem ordenação substantiva, um modelo ordenado pode explorar essa informação.

nels$choice_ord <- ordered(nels$psechoice)

library(MASS)
m_op <- polr(
  choice_ord ~ grades + faminc + parcoll,
  data = nels,
  method = "probit",
  Hess = TRUE
)
summary(m_op)

No modelo latente, pontos de corte transformam uma variável contínua não observada em categorias ordenadas. Os coeficientes deslocam o índice latente; probabilidades por categoria devem ser calculadas para interpretação.

Tobit

Horas trabalhadas possuem massa em zero para mulheres que não trabalham e valores positivos contínuos para as demais. Um Tobit tipo I assume uma variável latente

hoursi*=xi′β+ui,hoursi=max(0,hoursi*).hours_i^*=x_i'\beta+u_i,\qquad hours_i=\max(0,hours_i^*).

library(AER)
m_tobit <- tobit(
  hours ~ educ + exper + age + kidsl6,
  left = 0,
  data = mroz
)
summary(m_tobit)

A interpretação dos coeficientes latentes não é igual ao efeito marginal sobre E(hours|x)E(hours|x); para aplicações substantivas, deve-se calcular o efeito apropriado.

Seleção amostral de Heckman

Se o salário é observado apenas para quem participa do mercado de trabalho e a seleção está correlacionada com o erro salarial, uma regressão sobre a subamostra pode ser viesada.

library(sampleSelection)

m_heckman <- selection(
  selection = lfp ~ educ + age + kidsl6 + kids618 + exper,
  outcome   = wage ~ educ + exper + I(exper^2),
  data = mroz,
  method = "2step"
)
summary(m_heckman)

A identificação é muito mais convincente quando a equação de seleção possui pelo menos uma variável excluída da equação de resultado com justificativa econômica plausível.

Exercícios

  1. Compare MPL, probit e logit para transport.csv em termos de probabilidades previstas.

  2. Calcule o efeito marginal médio de pratio no modelo de escolha de Coca-Cola.

  3. Construa uma matriz de classificação usando limiar de 0,5 e discuta por que acurácia não é o único critério de avaliação.

  4. Estime o multinomial logit com controles adicionais e obtenha probabilidades previstas para diferentes notas.

  5. Explique a diferença entre censura, truncamento e seleção amostral.

Máxima verossimilhança em linguagem intuitiva

Logit, probit, Poisson, Tobit e vários modelos deste capítulo são estimados por máxima verossimilhança. A ideia é escolher os parâmetros que tornam os dados observados mais plausíveis segundo o modelo probabilístico especificado. Em vez de minimizar uma soma de quadrados, maximiza-se uma função de verossimilhança ou, numericamente, sua versão logarítmica.

Probabilidades previstas

Em modelos binários, P(yi=1|xi)=F(xi′β),P(y_i=1|x_i)=F(x_i'\beta), em que FF é a normal acumulada no probit e a logística no logit. Como FF é não linear, o mesmo coeficiente pode produzir mudanças diferentes de probabilidade em pontos distintos da distribuição dos regressores.

# depois de um glm binomial
# p_hat <- predict(modelo, type="response")
# range(p_hat)

Efeitos marginais

Para um regressor contínuo, ∂P(y=1|x)∂xj=f(x′β)βj,\frac{\partial P(y=1|x)}{\partial x_j}=f(x'\beta)\beta_j, onde ff é a densidade associada. O efeito marginal médio calcula essa derivada para cada observação e depois tira a média.

# library(marginaleffects)
# avg_slopes(modelo_logit)

Para dummies, uma diferença discreta entre probabilidades previstas com D=1D=1 e D=0D=0 costuma ser mais natural que a derivada.

Odds ratio no logit

No logit, exp(βj)\exp(\beta_j) é a razão multiplicativa das odds para uma unidade adicional em xjx_j. Odds não são probabilidades. Uma duplicação das odds não implica duplicação da probabilidade.

Classificação e limiar

Transformar probabilidades previstas em classes exige um limiar, como 0,5. Esse limiar não é parte intrínseca do logit. Se falso positivo e falso negativo tiverem custos diferentes, outro limiar pode ser mais apropriado. Métricas de classificação devem ser tratadas como problema preditivo, separado da inferência causal sobre coeficientes.

Multinomial e hipótese IIA

No logit multinomial, a hipótese de independência das alternativas irrelevantes pode ser forte. Ela implica uma estrutura específica para razões de probabilidades entre alternativas. Quando alternativas são muito semelhantes, modelos mais flexíveis podem ser necessários.

Modelos ordenados

Probit ou logit ordenado usa uma variável latente contínua e pontos de corte. O modelo pressupõe que a mesma inclinação governa a passagem entre categorias, enquanto os limiares definem as fronteiras observadas. A interpretação deve ser feita em probabilidades, não apenas no sinal dos coeficientes.

Tobit não é solução genérica para muitos zeros

O Tobit é apropriado quando existe uma variável latente contínua censurada em um limite conhecido. Muitos zeros por decisão econômica genuína podem exigir modelos de duas partes ou outras estruturas. Censura e solução de canto não são sinônimos automáticos.

Seleção amostral

O modelo de Heckman trata um mecanismo de seleção em que o resultado é observado apenas para uma subamostra e os erros das equações de seleção e resultado podem estar correlacionados. Identificação é muito mais convincente quando há uma variável que afeta seleção, mas não entra diretamente na equação de resultado.

Exercícios adicionais

  1. Compare probabilidades previstas de logit e probit para as mesmas observações.

  2. Calcule efeitos marginais médios e efeitos na média dos regressores. Explique a diferença.

  3. Converta um coeficiente logit em odds ratio e mostre por que isso não é uma variação percentual da probabilidade.

  4. Avalie sensibilidade de uma matriz de classificação a limiares 0,3, 0,5 e 0,7.

  5. Construa um exemplo em que Tobit seria inadequado apesar de muitos zeros na variável dependente.

Capítulo 13 — Endogeneidade, variáveis instrumentais e 2SLS

A identificação por variáveis instrumentais é discutida à luz de Angrist e Pischke (2009), Imbens e Angrist (1994) e Staiger e Stock (1997).

Por que MQO pode falhar

A condição central para uma interpretação causal de MQO é que os regressores sejam ortogonais ao erro. Quando E(xiui)≠0,E(x_i u_i)\neq 0, o regressor é endógeno e MQO geralmente é inconsistente. Endogeneidade pode surgir de simultaneidade, variável omitida, erro de medida, seleção ou dinâmica mal especificada.

Um instrumento válido

Uma variável instrumental zz precisa cumprir duas ideias. A primeira é relevância: Cov(z,x)≠0.Cov(z,x)\neq0. A segunda é exogeneidade/exclusão: E(zu)=0.E(zu)=0. A relevância pode ser examinada empiricamente; exclusão depende de teoria e desenho institucional.

Primeiro estágio, forma reduzida e 2SLS

Com um regressor endógeno xx, instrumento zz e controles ww, o primeiro estágio é xi=π0+π1zi+wi′π2+vi.x_i=\pi_0+\pi_1z_i+w_i'\pi_2+v_i. A forma reduzida relaciona o resultado ao instrumento: yi=γ0+γ1zi+wi′γ2+ηi.y_i=\gamma_0+\gamma_1z_i+w_i'\gamma_2+\eta_i. No caso exatamente identificado e sem complicações adicionais, a razão entre efeito reduzido e primeiro estágio fornece a estimativa IV do efeito de xx sobre yy.

Estimando em R

O pacote AER disponibiliza ivreg().

library(AER)

# Forma geral:
# ivreg(y ~ x_endog + w1 + w2 |
#         z + w1 + w2,
#       data=dados)

Os controles exógenos aparecem nos dois lados da barra vertical. Os instrumentos excluídos aparecem apenas no conjunto de instrumentos.

Diagnóstico do primeiro estágio

Um instrumento estatisticamente relacionado com xx pode ainda ser fraco. O problema de instrumentos fracos não é apenas “erro-padrão grande”: aproximações usuais de 2SLS e testes tt podem ter comportamento ruim. A força precisa ser avaliada no primeiro estágio com estatísticas adequadas ao caso.

Nota metodológica. A regra F>10F>10 é um atalho histórico, não uma garantia. Com múltiplos instrumentos, heterocedasticidade ou múltiplos regressores endógenos, diagnósticos mais específicos são preferíveis.

Teste de endogeneidade

Uma comparação do tipo Durbin–Wu–Hausman pode avaliar se a diferença entre um estimador eficiente sob exogeneidade e um estimador consistente sob endogeneidade é sistemática. Porém, o teste depende da validade dos instrumentos; instrumentos inválidos não transformam o procedimento em diagnóstico confiável.

Sobreidentificação

Com instrumentos excedentes, testes de sobreidentificação investigam conjuntamente as condições adicionais de momento. Uma rejeição é motivo de preocupação. Uma não rejeição não valida instrumentos por decreto, sobretudo quando o teste tem baixo poder.

LATE e interpretação local

Quando o instrumento afeta a probabilidade ou intensidade de tratamento de maneira heterogênea, a interpretação de IV pode ser local: o efeito é identificado para unidades cujo tratamento responde ao instrumento sob hipóteses como monotonicidade. Isso lembra que “o coeficiente IV” não é automaticamente um efeito médio para toda a população.

Exemplo conceitual

Suponha interesse no efeito da escolaridade sobre salários. Habilidade não observada pode afetar ambas as variáveis, gerando endogeneidade. Um instrumento plausível precisaria alterar escolaridade e não salário por outros canais. A distância a uma instituição, mudanças de legislação ou regras de elegibilidade às vezes são usadas, mas cada desenho exige defesa institucional específica.

Exercícios

  1. Liste quatro fontes de endogeneidade e dê um exemplo econômico de cada uma.

  2. Escreva primeiro estágio e forma reduzida para um modelo com um instrumento e dois controles.

  3. Explique por que relevância pode ser testada com dados, mas exclusão não pode ser provada apenas por correlação.

  4. Simule um instrumento forte e um fraco e compare a distribuição de estimativas 2SLS.

  5. Discuta por que adicionar muitos instrumentos fracos pode piorar o problema.

  6. Explique a interpretação local de IV em um exemplo de política pública.

Capítulo 14 — Modelos de equações simultâneas

A exposição de equações simultâneas e 2SLS segue Hill, Griffiths, e Lim (2018), Wooldridge (2020) e Greene (2018).

Oferta e demanda de trufas

Considere um sistema de mercado:

qi=α1+α2pi+α3psi+α4dii+edi,qi=β1+β2pi+β3pfi+esi.\begin{aligned} q_i &= \alpha_1+\alpha_2p_i+\alpha_3ps_i+\alpha_4di_i+e_{di},\\ q_i &= \beta_1+\beta_2p_i+\beta_3pf_i+e_{si}. \end{aligned}

O preço pp e a quantidade qq são determinados simultaneamente. Como o preço de equilíbrio responde aos choques de oferta e demanda, ele é correlacionado com os erros estruturais. Por isso, MQO aplicado diretamente às equações estruturais é, em geral, inconsistente.

Forma reduzida

As variáveis endógenas podem ser escritas como funções de todas as variáveis exógenas do sistema:

qi=π11+π21psi+π31dii+π41pfi+v1i,pi=π12+π22psi+π32dii+π42pfi+v2i.\begin{aligned} q_i &= \pi_{11}+\pi_{21}ps_i+\pi_{31}di_i+\pi_{41}pf_i+v_{1i},\\ p_i &= \pi_{12}+\pi_{22}ps_i+\pi_{32}di_i+\pi_{42}pf_i+v_{2i}. \end{aligned}

truf <- read.csv("dados/truffles.csv")

rf_q <- lm(q ~ ps + di + pf, data = truf)
rf_p <- lm(p ~ ps + di + pf, data = truf)

summary(rf_q)
summary(rf_p)

As estimativas reproduzem aproximadamente:

q̂=7,895+0,656ps+2,167di−0,507pf,p̂=−32,512+1,708ps+7,602di+1,354pf.\begin{aligned} \hat q&=7{,}895+0{,}656ps+2{,}167di-0{,}507pf,\\ \hat p&=-32{,}512+1{,}708ps+7{,}602di+1{,}354pf. \end{aligned}

Mínimos quadrados em dois estágios

Na equação de demanda, pf desloca a oferta e pode servir como instrumento excluído para preço, juntamente com as demais variáveis exógenas. Em R:

library(AER)

demanda_iv <- ivreg(
  q ~ p + ps + di | ps + di + pf,
  data = truf
)
summary(demanda_iv, diagnostics = TRUE)

O coeficiente de preço é aproximadamente −0,374-0{,}374, sinal compatível com demanda negativamente inclinada.

Para a oferta, ps e di podem deslocar a demanda e instrumentar o preço:

oferta_iv <- ivreg(
  q ~ p + pf | ps + di + pf,
  data = truf
)
summary(oferta_iv, diagnostics = TRUE)

O que acontece nos dois estágios?

Didaticamente, o 2SLS pode ser entendido como:

  1. regressar o preço endógeno sobre todos os instrumentos e controles exógenos;

  2. usar apenas a variação do preço prevista por esses instrumentos para identificar a inclinação estrutural.

primeiro <- lm(p ~ ps + di + pf, data = truf)
truf$p_hat <- fitted(primeiro)
segundo_didatico <- lm(q ~ p_hat + ps + di, data = truf)
summary(segundo_didatico)

Os coeficientes do segundo estágio manual coincidem com 2SLS, mas os erros-padrão calculados por lm() no segundo passo são incorretos porque ignoram que p̂\hat p foi estimado. Por isso, deve-se usar ivreg() para inferência.

Relevância, exclusão e identificação

Um instrumento precisa satisfazer duas condições distintas:

  1. relevância: estar relacionado com o regressor endógeno condicionalmente aos demais controles;

  2. validade/exclusão: afetar a variável dependente apenas por meio do regressor endógeno e ser ortogonal ao erro estrutural.

A primeira pode ser investigada nos dados; a segunda é fundamentalmente uma hipótese econômica e institucional.

Instrumentos fracos

Instrumentos fracamente correlacionados com o regressor endógeno podem produzir estimativas 2SLS imprecisas e inferência distorcida. O conhecido limiar F>10F>10 é apenas uma regra aproximada, particularmente limitada com múltiplos instrumentos, heterocedasticidade ou mais de um regressor endógeno. Em aplicações sérias, devem-se reportar diagnósticos adequados ao desenho.

Sistemas com systemfit

Quando o interesse está no sistema como um todo, o pacote systemfit fornece ferramentas adicionais:

library(systemfit)

eqD <- q ~ p + ps + di
eqS <- q ~ p + pf
sistema <- list(demand = eqD, supply = eqS)
inst <- ~ ps + di + pf

fit_2sls <- systemfit(
  sistema,
  method = "2SLS",
  inst = inst,
  data = truf
)
summary(fit_2sls)

Exercícios

  1. Estime as duas equações de forma reduzida e confirme os sinais.

  2. Compare MQO e 2SLS na equação de demanda. Por que diferem?

  3. Examine o primeiro estágio do preço.

  4. Explique por que pf é plausível como instrumento para preço na demanda, mas não deve entrar diretamente na demanda se a restrição de exclusão for válida.

  5. Mostre por que usar lm() no segundo estágio produz erros-padrão inadequados.

Identificação em sistemas simultâneos

Em um sistema de oferta e demanda, preço e quantidade são determinados conjuntamente. A condição de exclusão exige variáveis que desloquem uma equação sem entrar diretamente na outra. Essas exclusões não são meros detalhes algébricos: são a fonte da identificação.

Forma reduzida e mecanismo

A forma reduzida expressa cada variável endógena como função apenas das variáveis exógenas do sistema. Ela é estimável por MQO sob hipóteses usuais, mas seus coeficientes misturam parâmetros estruturais. A passagem da forma reduzida para a estrutural depende das restrições de identificação.

2SLS como projeção

O primeiro estágio projeta o regressor endógeno no espaço gerado pelos instrumentos. O segundo estágio usa essa componente prevista. Em notação matricial, X̂=PZX,PZ=Z(Z′Z)−1Z′.\hat X=P_ZX,\qquad P_Z=Z(Z'Z)^{-1}Z'. O estimador 2SLS pode ser escrito como β̂2SLS=(X′PZX)−1X′PZy.\hat\beta_{2SLS}=(X'P_ZX)^{-1}X'P_Zy.

Teste de sobreidentificação

Quando existem mais instrumentos excluídos do que regressores endógenos, restrições adicionais permitem testes de sobreidentificação. Uma rejeição sinaliza incompatibilidade entre o conjunto de instrumentos e as condições de momento, mas uma não rejeição não prova validade de cada instrumento.

Comparando OLS e 2SLS

Diferenças entre OLS e 2SLS podem ser informativas, mas 2SLS normalmente é menos preciso porque utiliza apenas a variação de XX explicada pelos instrumentos. Se instrumentos são fracos, a imprecisão pode ser extrema.

Exercícios adicionais

  1. Escreva as equações estrutural e reduzida do exemplo de trufas.

  2. Reproduza manualmente o primeiro estágio e compare valores ajustados com os usados por ivreg().

  3. Explique por que os erros-padrão do segundo estágio manual com lm() estão errados.

  4. Discuta uma variável que poderia deslocar oferta sem deslocar demanda e uma que poderia deslocar demanda sem deslocar oferta.

  5. Mostre por simulação o que acontece com a variância de 2SLS quando a correlação entre instrumento e regressor endógeno diminui.

Capítulo 15 — Modelos de contagem

Os modelos de Poisson e binomial negativa são apresentados com base em Cameron e Trivedi (2005) e Greene (2018).

Variáveis dependentes de contagem

Quando yiy_i representa o número de ocorrências de um evento, valores negativos não são possíveis e a distribuição costuma ser assimétrica. O modelo de Poisson parte de

Yi|Xi∼Poisson(μi),log(μi)=Xi′β.Y_i|X_i\sim Poisson(\mu_i), \qquad \log(\mu_i)=X_i'\beta.

Portanto,

μi=exp(Xi′β)>0.\mu_i=\exp(X_i'\beta)>0.

Essa ligação exponencial é importante: um modelo em que λ=Xβ\lambda=X\beta sem restrição poderia gerar médias negativas e não corresponde à regressão Poisson padrão.

Consultas médicas

A base rwm88_small.csv contém o número de visitas ao médico, docvis, além de idade, sexo e cobertura pública.

Distribuição do número de consultas médicas.
rwm <- read.csv("dados/rwm88_small.csv")

m_pois <- glm(
  docvis ~ age + female + public,
  family = poisson(link = "log"),
  data = rwm
)
summary(m_pois)

Os coeficientes são aproximadamente 0,01160{,}0116 para idade, 0,1280{,}128 para sexo feminino e 0,5730{,}573 para seguro público.

Razões de incidência

Como

μ(xj+1)μ(xj)=exp(βj),\frac{\mu(x_j+1)}{\mu(x_j)}=\exp(\beta_j),

exp(βj)\exp(\beta_j) é uma razão de taxas/incidências (IRR) para um aumento unitário no regressor.

exp(coef(m_pois))
exp(confint(m_pois))

Para uma dummy, a mudança percentual aproximada na média condicional é 100[exp(β)−1]100[\exp(\beta)-1].

Equidispersão e superdispersão

A distribuição de Poisson satisfaz

E(Yi|Xi)=Var(Yi|Xi)=μi.E(Y_i|X_i)=Var(Y_i|X_i)=\mu_i.

Na amostra de consultas médicas, a média de docvis é aproximadamente 2,992{,}99, enquanto a variância amostral é superior a 30. Isso sugere forte superdispersão.

c(
  media = mean(rwm$docvis),
  variancia = var(rwm$docvis)
)

A comparação bruta entre média e variância é apenas diagnóstico inicial, pois a equidispersão relevante é condicional a XX.

Teste de dispersão

O pacote AER oferece um teste de dispersão:

library(AER)
dispersiontest(m_pois)

A rejeição da equidispersão sugere que a variância condicional excede a imposta pelo Poisson.

Binomial negativa

Uma especificação NB2 permite

Var(Yi|Xi)=μi+αμi2.Var(Y_i|X_i)=\mu_i+\alpha\mu_i^2.

Quando α→0\alpha\rightarrow0, o modelo se aproxima do Poisson.

library(MASS)
m_nb <- glm.nb(
  docvis ~ age + female + public,
  data = rwm
)
summary(m_nb)

Os coeficientes continuam sendo interpretados no índice logarítmico. A diferença principal está na estrutura de variância e na estimação do parâmetro de dispersão.

Erros-padrão robustos no Poisson

Há um resultado importante: mesmo quando a distribuição condicional não é literalmente Poisson, o estimador Poisson de pseudo-máxima verossimilhança pode estimar consistentemente os parâmetros da média condicional se

E(Y|X)=exp(Xβ)E(Y|X)=\exp(X\beta)

estiver corretamente especificada. Nesse caso, erros-padrão robustos são essenciais.

library(lmtest)
library(sandwich)
coeftest(m_pois, vcov = vcovHC(m_pois, type = "HC1"))

Portanto, detectar superdispersão não implica automaticamente que a binomial negativa seja sempre superior. A escolha depende da pergunta, da especificação da média e das propriedades desejadas.

Excesso de zeros

Se a frequência de zeros é muito maior do que a prevista pelos modelos padrão, modelos hurdle ou zero-inflated podem ser considerados. Porém, esses modelos introduzem uma estrutura adicional: geralmente assumem um processo para a ocorrência de zeros e outro para a contagem positiva.

library(pscl)

m_zip <- zeroinfl(
  docvis ~ age + female + public | age + female + public,
  data = rwm,
  dist = "poisson"
)
summary(m_zip)

A presença de muitos zeros, isoladamente, não prova a existência de dois processos. A escolha deve ser orientada por mecanismo econômico e avaliação do ajuste.

Exercícios

  1. Estime o Poisson e interprete exp(β)\exp(\beta) para public.

  2. Compare média e variância de docvis e execute o teste de dispersão.

  3. Estime a binomial negativa e compare AIC com o Poisson.

  4. Compare erros-padrão Poisson convencionais e robustos.

  5. Explique por que superdispersão não é sinônimo de excesso de zeros.

Probabilidades no modelo de Poisson

A função de probabilidade é P(Yi=yi|Xi)=exp(−μi)μiyiyi!,yi=0,1,2,…P(Y_i=y_i|X_i)=\frac{\exp(-\mu_i)\mu_i^{y_i}}{y_i!}, \qquad y_i=0,1,2,\ldots com μi=exp(Xi′β)\mu_i=\exp(X_i'\beta). A ligação log garante média positiva e permite interpretação multiplicativa.

Exposição e offset

Contagens podem depender do tempo ou tamanho de exposição. Número de acidentes em um ano e número de acidentes em dez anos não são diretamente comparáveis. Se EiE_i representa exposição, um modelo de taxa pode escrever log(μi)=Xi′β+log(Ei),\log(\mu_i)=X_i'\beta+\log(E_i), onde log(Ei)\log(E_i) entra como offset com coeficiente fixado em 1.

# glm(y ~ x1 + x2 + offset(log(exposicao)),
#     family=poisson, data=dados)

Poisson PML além de dados de contagem

A lógica de pseudo-máxima verossimilhança do Poisson pode ser útil para variáveis não negativas quando a média condicional exponencial está corretamente especificada. O estimador não exige literalmente que a variância seja igual à média para consistência da média; por isso, erros robustos são frequentemente reportados.

Binomial negativa e heterogeneidade não observada

A binomial negativa introduz dispersão adicional. Ela pode melhorar ajuste quando a variância condicional excede a média, mas sua escolha deve ser baseada na estrutura do problema, não apenas em um teste automático.

Zero-inflated versus hurdle

Modelos zero-inflated supõem que zeros podem surgir de dois processos: um estado estrutural que sempre produz zero e o processo de contagem. Modelos hurdle separam a decisão de ser positivo da intensidade condicional entre observações positivas. Essas interpretações não são equivalentes e devem ser defendidas substantivamente.

Exercícios adicionais

  1. Calcule IRRs e intervalos de confiança do Poisson e da binomial negativa.

  2. Crie uma variável de exposição simulada e estime um modelo com offset.

  3. Compare valores previstos de Poisson e NB para observações com alta contagem.

  4. Explique a diferença conceitual entre excesso de zeros, superdispersão e censura.

  5. Construa um exemplo econômico em que um modelo hurdle seja mais plausível que um zero-inflated.

Pesquisa empírica e reprodutibilidade

Capítulo 16 — Do banco de dados ao trabalho empírico

A organização do fluxo empírico em código reproduzível é compatível com Wickham, Çetinkaya-Rundel, e Grolemund (2023) e com a aplicação econométrica em R de Kleiber e Zeileis (2008).

A econometria como processo

Ao terminar um curso introdutório, o estudante deveria ser capaz de fazer mais do que reproduzir comandos isolados. O produto final é um argumento empírico completo: uma pergunta, um desenho, dados adequados, uma especificação defensável, diagnósticos, robustez e comunicação transparente.

Uma sequência útil é

Pergunta→Dados→Desenho→Modelo→Diagnóstico→Robustez→Conclusão.\text{Pergunta}\rightarrow\text{Dados}\rightarrow\text{Desenho}\rightarrow\text{Modelo}\rightarrow\text{Diagnóstico}\rightarrow\text{Robustez}\rightarrow\text{Conclusão}.

1. Defina a pergunta antes do estimador

Uma pergunta como “qual é o efeito de XX sobre YY?” exige esclarecer população, unidade de observação, horizonte temporal e natureza do efeito. Perguntas causais também exigem uma fonte de variação exógena ou uma estratégia de identificação. O estimador deve ser consequência dessa estrutura, e não o ponto de partida.

2. Construa um dicionário de dados

Antes da estimação, registre para cada variável:

Essa prática evita erros silenciosos e torna a replicação possível.

3. Separe preparação e análise

Uma organização recomendada é manter scripts distintos:

01_importacao.R
02_limpeza.R
03_descritivas.R
04_modelos.R
05_robustez.R
06_tabelas_figuras.R

O script de estimação deve consumir uma base analítica já validada. Misturar limpeza e modelos em centenas de linhas torna difícil descobrir de onde veio um resultado.

4. Produza uma tabela descritiva antes da regressão

library(dplyr)

food <- read.csv("dados/food.csv")
food |>
  summarise(
    n = n(),
    renda_media = mean(income),
    renda_dp = sd(income),
    gasto_medio = mean(food_exp),
    gasto_dp = sd(food_exp)
  )

Uma tabela descritiva deve permitir ao leitor entender a escala dos dados sem precisar inferi-la a partir de coeficientes.

5. Crie uma especificação principal e justificativas

O modelo principal deve ser escrito como equação e como código. Cada controle precisa de uma justificativa. “Incluí porque ficou significativo” é uma regra de seleção que pode induzir viés de especificação e invalida a interpretação convencional dos valores-pp.

6. Diferencie diagnóstico de robustez

Diagnóstico pergunta se uma hipótese do modelo parece violada: heterocedasticidade, autocorrelação, colinearidade, influência. Robustez pergunta se a conclusão substantiva resiste a decisões razoáveis alternativas: amostras, controles, janelas temporais, funções de tendência, formas funcionais e estimadores.

Uma análise de robustez não deve ser uma busca por especificações que preservem significância. O objetivo é revelar sensibilidade, inclusive quando ela enfraquece a conclusão.

7. Gere tabelas diretamente dos objetos

library(modelsummary)

m1 <- lm(food_exp ~ income, data = food)
m2 <- lm(log(food_exp) ~ log(income), data = food)

modelsummary(
  list("Linear" = m1, "Log-log" = m2),
  stars = TRUE,
  output = "latex"
)

Evite copiar coeficientes manualmente para Word ou planilhas. Tabelas geradas diretamente dos objetos diminuem erros e são automaticamente atualizadas quando o modelo muda.

8. Registre o ambiente computacional

No fim de cada projeto, salve informações da sessão:

sessionInfo()

Para projetos de maior duração, ferramentas como renv permitem registrar versões dos pacotes e reconstruir o ambiente.

# install.packages("renv")
# renv::init()
# renv::snapshot()

9. Um checklist antes de divulgar resultados

  1. A pergunta está claramente definida?

  2. A unidade de observação está explícita?

  3. As unidades das variáveis estão corretas?

  4. O número de observações da regressão é o esperado?

  5. Valores ausentes alteraram a amostra entre modelos?

  6. A especificação é motivada antes dos resultados?

  7. Os erros-padrão refletem a estrutura de dependência dos dados?

  8. A interpretação distingue associação, previsão e causalidade?

  9. As análises de robustez relevantes foram reportadas, inclusive as desfavoráveis?

  10. Outra pessoa consegue executar o projeto do início ao fim?

Reprodutibilidade. O padrão ideal deste livro é simples: cada número exibido em uma tabela ou figura deve ser rastreável até um script e uma base de dados. Se um resultado não puder ser reproduzido, ele ainda não está pronto para ser tratado como produto final de pesquisa.

Projeto final sugerido

Escolha uma pergunta econômica simples e produza um relatório com:

  1. motivação e hipótese;

  2. descrição da base e dicionário de variáveis;

  3. duas figuras descritivas;

  4. especificação econométrica;

  5. tabela principal;

  6. um diagnóstico relevante;

  7. pelo menos duas análises de robustez justificadas;

  8. interpretação econômica das magnitudes;

  9. limitações e condições necessárias para uma interpretação causal;

  10. apêndice com código integral.

O objetivo não é usar o método mais sofisticado disponível. É construir uma análise em que a pergunta, os dados e o estimador estejam alinhados.

Da pasta ao projeto reproduzível

Um projeto empírico deve ser executável a partir de uma raiz conhecida. Uma estrutura simples é

projeto/
  dados_brutos/
  dados_processados/
  scripts/
  tabelas/
  figuras/
  texto/
  README.md

Dados brutos devem ser tratados como somente leitura. Toda transformação deve ser reproduzida por scripts.

Registro de decisões

Nem toda decisão aparece no código. Mudanças de definição, fontes descartadas, problemas de coleta e justificativas para exclusões devem ser registradas em um README ou diário de pesquisa. Isso reduz a dependência da memória do pesquisador.

Pré-análise e separação entre exploração e confirmação

Explorar dados é legítimo e frequentemente necessário. O problema surge quando hipóteses geradas após ver os dados são apresentadas como se tivessem sido definidas antes. Em projetos confirmatórios, pré-registros e planos de análise podem reduzir flexibilidade oportunista. Em projetos exploratórios, a transparência sobre essa natureza é a melhor defesa.

Tabelas de especificação

Uma tabela de regressão deve permitir ao leitor identificar claramente variável dependente, amostra, controles, efeitos fixos, estrutura de erros-padrão e unidade dos coeficientes.

# Exemplo com modelsummary
# modelsummary(
#   list("(1)"=m1, "(2)"=m2, "(3)"=m3),
#   gof_omit="IC|Log|F",
#   stars=TRUE
# )

Robustez como mapa de sensibilidade

Uma boa seção de robustez responde: quais decisões razoáveis poderiam alterar a conclusão? Mudança de janela, definição de tratamento, controles, outliers, forma funcional, tendência, cluster e estimador são exemplos. Robustez deve ser desenhada a partir de ameaças à validade, não do desejo de acumular resultados significativos.

Gráficos como argumento

Gráficos não são decoração. Um estudo de evento mostra dinâmica; um gráfico de resíduos revela especificação; uma distribuição evidencia assimetria; um gráfico de coeficientes compara magnitudes e incerteza. Cada figura deve responder a uma pergunta que seria mais difícil de entender em uma tabela.

Controle de versão

Git é especialmente útil para código e texto em LaTeX. Commits pequenos e mensagens informativas permitem rastrear quando um resultado mudou e por quê. Arquivos grandes de dados podem exigir estratégias separadas, mas scripts e documentação devem estar sob controle de versão.

Checklist ampliado de replicação

  1. O projeto roda a partir de uma sessão limpa?

  2. Todos os caminhos são relativos à raiz do projeto?

  3. O README informa ordem de execução?

  4. Existe distinção entre dados brutos e processados?

  5. Sementes aleatórias estão fixadas quando necessário?

  6. Tabelas e figuras são geradas por código?

  7. A versão do R e dos principais pacotes foi registrada?

  8. As restrições de acesso ou licença dos dados estão documentadas?

  9. O script principal falha de forma informativa se faltar uma dependência?

  10. Outra pessoa consegue reproduzir os resultados sem intervenção manual?

Exercícios adicionais

  1. Reorganize um trabalho antigo seu segundo a estrutura de pastas apresentada.

  2. Construa um README que permita a um colega reproduzir uma tabela e uma figura.

  3. Escolha um resultado empírico e liste cinco ameaças à validade e uma verificação de robustez para cada uma.

  4. Gere automaticamente uma tabela LaTeX a partir de dois objetos de regressão.

  5. Use sessionInfo() e descreva quais informações são importantes para replicação.

Capítulo 17 — Estudos de caso completos em R

Os estudos de caso retomam a lógica aplicada de Hill, Griffiths, e Lim (2018) e a implementação econométrica em R de Kleiber e Zeileis (2008).

Por que terminar com estudos integrados?

Nos capítulos anteriores, cada técnica foi apresentada isoladamente para tornar a lógica transparente. Em pesquisa, porém, o pesquisador não recebe um exercício dizendo qual estimador deve ser usado. Ele recebe uma pergunta, uma base imperfeita e um conjunto de decisões. Este capítulo reúne etapas que normalmente aparecem separadas: leitura dos dados, descrição, modelo, diagnóstico, interpretação e comunicação.

Estudo de caso 1: demanda por alimentos

A base food.csv contém 40 observações de despesa semanal com alimentação e renda. A pergunta inicial é descritiva: como a despesa média se relaciona com a renda? Uma pergunta causal exigiria uma fonte de variação exógena na renda que a base, por si só, não fornece.

Inspeção

food <- read.csv("dados/food.csv")
str(food)
summary(food)
cor(food$food_exp, food$income)

Antes da regressão, represente os dados.

plot(food$income, food$food_exp,
     pch=19,
     xlab="Renda semanal (US$ 100)",
     ylab="Despesa semanal com alimentacao")

Modelo básico

m1 <- lm(food_exp ~ income, data=food)
summary(m1)
confint(m1)

O modelo básico resume a inclinação média linear. A interpretação deve mencionar a escala da renda e reconhecer que o intercepto pode ter pouco conteúdo econômico se renda zero estiver distante do suporte observado.

Forma funcional

m2 <- lm(food_exp ~ log(income), data=food)
m3 <- lm(log(food_exp) ~ log(income), data=food)

Comparar formas funcionais exige observar resíduos, coerência econômica e objetivo da análise. O modelo log-log fornece elasticidade constante; o modelo linear produz efeito marginal constante e elasticidade variável.

Inferência robusta

library(lmtest)
library(sandwich)
coeftest(m1, vcov=vcovHC(m1, type="HC1"))

A comparação entre erros clássicos e robustos ajuda a separar coeficiente de inferência. Se o sinal e a magnitude permanecem semelhantes, mas a precisão muda, a conclusão econômica deve refletir essa incerteza.

Relatório curto

Um parágrafo de resultados adequado poderia seguir quatro passos: descrever a especificação; interpretar o coeficiente em unidades; apresentar a incerteza; registrar que a relação é associativa. Evite a sequência “coeficiente significativo, logo existe efeito”. A estatística é uma parte do argumento, não o argumento inteiro.

Estudo de caso 2: salários em painel

A base nls_panel.csv contém observações repetidas de indivíduos ao longo do tempo. A variável lwage é log do salário, e há informação sobre experiência, educação, sindicato e características individuais.

Estrutura do painel

nls <- read.csv("dados/nls_panel.csv")
dim(nls)
length(unique(nls$id))
table(nls$year)

O primeiro passo é confirmar quantas unidades e períodos existem e se o painel é balanceado.

Pooled OLS

m_pool <- lm(lwage ~ exper + I(exper^2) + union + educ,
             data=nls)
summary(m_pool)

A especificação pooled usa variação entre e dentro dos indivíduos e ignora heterogeneidade individual fixa não observada.

Efeitos fixos

library(plm)
pnls <- pdata.frame(nls, index=c("id","year"))
m_fe <- plm(lwage ~ exper + I(exper^2) + union,
            data=pnls, model="within")
summary(m_fe)

Educação não varia para muitos indivíduos e pode ser absorvida pelos efeitos fixos. Essa não é uma falha do software: é consequência da fonte de variação utilizada pelo estimador.

Erros agrupados

library(lmtest)
library(sandwich)
coeftest(m_fe, vcov=vcovHC(m_fe, method="arellano",
                           type="HC1", cluster="group"))

Observações do mesmo indivíduo provavelmente compartilham dependência serial. Erros agrupados no indivíduo reconhecem essa estrutura.

O que FE não resolve

Efeitos fixos removem confundidores invariantes no tempo, mas não eliminam variáveis não observadas que mudam no tempo e são correlacionadas com os regressores. Por exemplo, mudanças de produtividade ou seleção para sindicato podem continuar endógenas.

Estudo de caso 3: escolha de transporte

A base transport.csv contém uma variável binária auto, além de tempos de viagem por automóvel e ônibus. O objetivo é modelar a probabilidade de escolha do automóvel.

Exploração

tr <- read.csv("dados/transport.csv")
summary(tr)
table(tr$auto)
with(tr, tapply(dtime, auto, mean))

dtime resume diferença de tempo entre alternativas. Uma diferença de tempo maior deve, economicamente, alterar a atratividade relativa dos modos.

LPM e logit

m_lpm <- lm(auto ~ dtime, data=tr)
m_logit <- glm(auto ~ dtime,
               family=binomial(link="logit"), data=tr)
summary(m_lpm)
summary(m_logit)

O LPM é fácil de interpretar, mas pode gerar previsões fora de [0,1][0,1] e possui heterocedasticidade intrínseca. O logit mantém probabilidades no intervalo admissível.

Probabilidades e efeitos marginais

p <- predict(m_logit, type="response")
cbind(tr, prob_auto=p)

# se marginaleffects estiver instalado:
# library(marginaleffects)
# avg_slopes(m_logit)

Em amostras pequenas, a incerteza pode ser elevada e separação pode se tornar problema. O exemplo é útil didaticamente, mas não deve ser tratado como evidência definitiva sobre comportamento de transporte em uma população ampla.

Estudo de caso 4: dinâmica macroeconômica

A base usdata5.csv contém séries de juros e inflação. O objetivo é mostrar um fluxo mínimo para séries temporais.

Ordenação temporal

us <- read.csv("dados/usdata5.csv")
head(us)
plot(us$ffr, type="l", ylab="Federal funds rate", xlab="Tempo")

Em uma aplicação real, é preferível converter o identificador temporal para uma classe de data ou série temporal apropriada. Aqui mantemos o foco econométrico.

Estacionariedade

library(urca)
# exemplo: ajuste os termos deterministicos ao contexto
adf_ffr <- ur.df(us$ffr, type="drift", lags=4)
summary(adf_ffr)

Se séries não forem estacionárias, decidir entre diferenças, cointegração e VECM é parte do modelo, não um pré-processamento automático.

VAR

library(vars)
Y <- na.omit(us[, c("ffr","br","infn")])
sel <- VARselect(Y, lag.max=8, type="const")
sel$selection
# v <- VAR(Y, p=2, type="const")

A escolha de defasagens deve considerar critérios de informação, resíduos e plausibilidade econômica. Modelos muito curtos deixam dinâmica nos resíduos; modelos muito longos consomem graus de liberdade.

Como comparar os quatro estudos

Os quatro exemplos usam o mesmo software, mas perguntas e estruturas de dados diferentes. A base de alimentos é transversal; salários são painel; escolha de transporte é binária; juros e inflação são séries temporais. O estimador muda porque o processo gerador e a pergunta mudam.

Estrutura dos estudos de caso
Exemplo Estrutura Ferramenta principal
Alimentos corte transversal MQO/robusto
Salários painel efeitos fixos
Transporte resposta binária logit/LPM
Macroeconomia série temporal ADF/VAR

Exercício integrador

Escolha uma das quatro bases e produza um relatório de quatro páginas contendo: pergunta; descrição dos dados; gráfico principal; especificação; tabela de resultados; diagnóstico; uma análise de sensibilidade; conclusão em linguagem econômica. O relatório deve ser totalmente regenerável por um único script.

Capítulo 18 — Comunicação de resultados econométricos

A comunicação de inferência deve evitar uma leitura dicotômica de significância; nesse ponto, é útil a orientação de Wasserstein e Lazar (2016).

Por que apresentação faz parte da econometria?

Uma análise tecnicamente correta pode ser incompreensível se unidades, amostra e incerteza não forem apresentadas. Comunicação não é etapa cosmética posterior à estimação. Ela é parte do processo de verificação: ao tentar explicar um coeficiente em palavras, o pesquisador frequentemente descobre erros de escala, sinal ou interpretação.

Tabela descritiva

Uma tabela descritiva deve informar número de observações, média, dispersão e, quando útil, percentis. Variáveis binárias têm média igual à proporção de uns, o que pode ser mais informativo que uma tabela de frequências separada.

food <- read.csv("dados/food.csv")
data.frame(
  variavel=c("food_exp","income"),
  n=c(sum(!is.na(food$food_exp)), sum(!is.na(food$income))),
  media=c(mean(food$food_exp), mean(food$income)),
  dp=c(sd(food$food_exp), sd(food$income)),
  minimo=c(min(food$food_exp), min(food$income)),
  maximo=c(max(food$food_exp), max(food$income))
)

Tabela de regressão

Evite despejar a saída completa de summary() em um artigo. Uma tabela deve conter apenas informações relevantes ao argumento e notas suficientes para reconstruir a especificação.

library(modelsummary)
modelsummary(
  list("Linear"=m1, "Log-log"=m3),
  stars=TRUE,
  output="latex"
)

Uma nota adequada deve indicar como erros-padrão foram calculados, quais efeitos fixos estão presentes, unidade de observação e período quando isso não for óbvio.

Significância estatística

Estrelas podem facilitar leitura, mas também incentivam raciocínio binário. Um coeficiente com p=0,049p=0{,}049 não é substantivamente diferente de outro com p=0,051p=0{,}051. Intervalos de confiança e magnitudes ajudam a evitar a falsa fronteira entre “existe” e “não existe”.

Casas decimais

Precisão visual deve ser compatível com precisão econômica. Reportar oito casas decimais para um coeficiente medido com grande incerteza cria falsa exatidão. Escolha casas decimais de forma consistente e preserve precisão maior apenas quando a escala da variável exigir.

Gráfico de coeficientes

Quando várias especificações estimam o mesmo parâmetro, um gráfico de pontos e intervalos pode ser mais legível que uma tabela extensa.

# Exemplo com modelsummary ou marginaleffects
# modelplot(list(m1,m2,m3), coef_omit="Intercept")

Gráficos de efeitos marginais

Em modelos não lineares e interações, gráficos de efeitos ou probabilidades previstas frequentemente comunicam melhor que coeficientes brutos. Sempre indique faixa observada dos dados para evitar que o leitor interprete extrapolações.

Texto de resultados

Um parágrafo de resultados deve responder quatro perguntas: qual é a especificação? qual é a magnitude? quão precisa é a estimativa? qual é a interpretação substantiva? Repetir todos os números da tabela em prosa raramente melhora o texto.

Associação, previsão e causalidade

As três linguagens devem ser distintas. Em associação, prefira “está associado a”. Em previsão, diga “melhora a previsão” ou “probabilidade prevista”. Em causalidade, use “efeito” apenas quando o desenho e as hipóteses justificarem a interpretação.

Resultados nulos

Não rejeitar uma hipótese nula pode ser resultado substantivo, mas precisa ser interpretado à luz da precisão. Um intervalo estreito em torno de zero informa algo diferente de um intervalo largo que inclui efeitos positivos e negativos economicamente grandes.

Robustez e transparência

Não selecione para a tabela principal apenas especificações que mantêm estrelas. Se uma conclusão muda sob decisões plausíveis, isso é parte do resultado. A credibilidade de um trabalho depende mais da transparência sobre sensibilidade do que de uma aparência artificial de estabilidade.

Apêndice de replicação

Um artigo ou monografia pode incluir uma seção curta descrevendo dados, código, versões e ordem de execução. Quando dados não podem ser compartilhados, forneça scripts de preparação e instruções para obtenção legal da fonte.

Checklist de uma tabela econométrica

  1. A variável dependente está explicitamente identificada?

  2. A unidade dos coeficientes está clara?

  3. O número de observações está reportado?

  4. A amostra muda entre colunas? Se sim, isso está explicado?

  5. Erros-padrão robustos ou agrupados estão descritos?

  6. Efeitos fixos estão indicados?

  7. As notas permitem entender a especificação sem reler toda a metodologia?

  8. O texto interpreta magnitudes, não apenas valores-pp?

Exercícios

  1. Pegue uma tabela de regressão antiga e reescreva suas notas para torná-la autossuficiente.

  2. Produza um gráfico de coeficientes para três especificações.

  3. Reescreva cinco frases causais como associações e discuta quando a linguagem causal seria defensável.

  4. Compare uma tabela com estrelas e uma sem estrelas, mas com intervalos de confiança.

  5. Escreva um parágrafo de resultados que não repita mecanicamente a tabela.

Microeconometria avançada

Esta parte retoma problemas já apresentados no livro e os leva a uma camada adicional de identificação, estimação e diagnóstico. O objetivo não é transformar o texto em um manual de pós-graduação, mas mostrar como a lógica de variáveis instrumentais, dados em painel e máxima verossimilhança se conecta a rotinas empíricas mais exigentes.

Capítulo 19 — Variáveis instrumentais além do básico

Este capítulo amplia a discussão de variáveis instrumentais do Capítulo 12. A construção combina o material histórico de microeconometria disponibilizado para esta edição com a apresentação moderna de 2SLS em (Wooldridge 2020; Angrist e Pischke 2009; Staiger e Stock 1997). Os scripts antigos são tratados como matéria-prima pedagógica: a álgebra é preservada, mas caminhos absolutos, attach(), instalação de pacotes dentro do código e rotinas frágeis foram removidos.

2SLS como projeção

Considere

y=Xβ+u, y = X\beta + u,

em que algumas colunas de XX são endógenas. Seja ZZ a matriz de instrumentos, contendo instrumentos excluídos e regressoras exógenas. A matriz de projeção sobre o espaço gerado por ZZ é

PZ=Z(Z′Z)−1Z′. P_Z = Z(Z'Z)^{-1}Z'.

O estimador de mínimos quadrados em dois estágios pode ser escrito diretamente como

β̂2SLS=(X′PZX)−1X′PZy. \widehat\beta_{2SLS} = (X'P_ZX)^{-1}X'P_Zy.

Essa expressão é útil porque revela o que o primeiro estágio faz: substitui a variação potencialmente endógena de XX por sua projeção linear em ZZ.

Nota metodológica. Estimar o segundo estágio com os valores ajustados do primeiro estágio reproduz os coeficientes de 2SLS, mas os erros-padrão de uma regressão OLS ingênua no segundo estágio não são, em geral, os erros-padrão corretos de 2SLS. Use um estimador IV próprio para inferência.

Aplicação 1: escolaridade e salários na base Mroz

A versão de Mroz usada nesta parte é a base de Wooldridge presente no material histórico, com 753 observações. Como lwage é observado apenas para mulheres que trabalham, a equação salarial utiliza as 428 observações com inlf == 1.

mroz_w <- read.csv("dados/micro_avancada/mroz_wooldridge.csv")
mroz_w <- subset(mroz_w, inlf == 1)

nrow(mroz_w)

Começamos pela equação salarial estimada por MQO:

m_ols <- lm(
  lwage ~ educ + exper + expersq,
  data = mroz_w
)
summary(m_ols)

Na auditoria independente da base, o coeficiente de educ por MQO é aproximadamente 0,10750{,}1075. Isso corresponde, sob a interpretação log-linear usual, a uma associação de aproximadamente 10,7% por ano adicional de escolaridade, antes de discutir endogeneidade.

Primeiro estágio e relevância

Usamos motheduc e fatheduc como instrumentos excluídos para educ:

educi=π0+π1experi+π2experi2+π3motheduci+π4fatheduci+vi. educ_i = \pi_0+\pi_1 exper_i+\pi_2 exper_i^2 +\pi_3 motheduc_i+\pi_4 fatheduc_i+v_i.

m_fs <- lm(
  educ ~ exper + expersq + motheduc + fatheduc,
  data = mroz_w
)

m_fs0 <- lm(
  educ ~ exper + expersq,
  data = mroz_w
)

anova(m_fs0, m_fs)

Na reprodução numérica da auditoria, o teste conjunto dos dois instrumentos no primeiro estágio produz F≈55,4F\approx55{,}4. Esse resultado documenta relevância amostral nesta especificação. Ele não demonstra a restrição de exclusão.

2SLS com ivreg()

library(AER)

m_iv <- ivreg(
  lwage ~ educ + exper + expersq |
    motheduc + fatheduc + exper + expersq,
  data = mroz_w
)

summary(m_iv, diagnostics = TRUE)

A auditoria independente encontra coeficiente de educ próximo de 0,06140{,}0614 no 2SLS homocedástico. A diferença em relação ao MQO não deve ser interpretada mecanicamente como prova de viés no MQO: ela depende da validade dos instrumentos e da população de variação induzida por eles.

Reproduzindo 2SLS por matrizes

O código abaixo recupera a lógica dos scripts antigos, agora sem attach():

X <- with(mroz_w, cbind(1, exper, expersq, educ))
Z <- with(mroz_w, cbind(1, exper, expersq, motheduc, fatheduc))
y <- mroz_w$lwage

Pz <- Z %*% solve(crossprod(Z)) %*% t(Z)

b_2sls <- solve(
  t(X) %*% Pz %*% X,
  t(X) %*% Pz %*% y
)

drop(b_2sls)
coef(m_iv)

As duas rotinas devem entregar os mesmos coeficientes, salvo diferenças numéricas de arredondamento.

Endogeneidade por função-controle

Uma forma pedagógica de construir o teste de Durbin–Wu–Hausman é guardar o resíduo do primeiro estágio e incluí-lo na equação estrutural:

m_fs_cf <- lm(
  educ ~ exper + expersq + motheduc + fatheduc,
  data = mroz_w
)

mroz_w$vhat <- resid(m_fs_cf)

m_cf <- lm(
  lwage ~ educ + exper + expersq + vhat,
  data = mroz_w
)

summary(m_cf)

Sob as hipóteses apropriadas, a significância de vhat informa sobre endogeneidade de educ. O procedimento só é interpretável se os instrumentos forem válidos.

Sobreidentificação

Com dois instrumentos excluídos para uma variável endógena, há uma restrição de sobreidentificação. No caso homocedástico, uma versão didática do teste de Sargan usa os resíduos de 2SLS:

mroz_w$u_iv <- resid(m_iv)

m_sargan_aux <- lm(
  u_iv ~ exper + expersq + motheduc + fatheduc,
  data = mroz_w
)

J <- nobs(m_sargan_aux) * summary(m_sargan_aux)$r.squared
p_J <- pchisq(J, df = 1, lower.tail = FALSE)

c(J = J, p_value = p_J)

A auditoria encontra J≈0,38J\approx0{,}38 e p≈0,54p\approx0{,}54. Uma não rejeição não prova que ambos os instrumentos sejam válidos; apenas indica que as restrições adicionais não são rejeitadas por esse teste e nessa especificação.

Inferência robusta

library(lmtest)
library(sandwich)

coeftest(
  m_iv,
  vcov = vcovHC(m_iv, type = "HC1")
)

A inferência robusta não conserta instrumentos fracos ou inválidos. Ela trata a matriz de variância sob heterocedasticidade.

Aplicação 2: Card e a força do instrumento

A base card permite estudar o retorno à escolaridade usando proximidade a uma faculdade de quatro anos (nearc4) como instrumento.

card <- read.csv("dados/micro_avancada/card_wooldridge.csv")

controles_card <- c(
  "exper", "expersq", "black", "south", "smsa",
  "reg661", "reg662", "reg663", "reg664", "reg665",
  "reg666", "reg667", "reg668", "smsa66"
)

f_ols <- as.formula(
  paste("lwage ~ educ +", paste(controles_card, collapse = " + "))
)

m_card_ols <- lm(f_ols, data = card)
coef(m_card_ols)["educ"]

O primeiro estágio inclui os mesmos controles e nearc4:

f_fs <- as.formula(
  paste("educ ~", paste(c(controles_card, "nearc4"), collapse = " + "))
)

m_card_fs <- lm(f_fs, data = card)
summary(m_card_fs)$coef["nearc4", ]

Na auditoria, o coeficiente de nearc4 no primeiro estágio é aproximadamente 0,3200{,}320, com estatística t2≈13,3t^2\approx13{,}3 para o único instrumento excluído. A estimativa OLS do retorno à educação é aproximadamente 0,07470{,}0747, enquanto a estimativa 2SLS exatamente identificada fica em torno de 0,13150{,}1315, com incerteza substancialmente maior.

f_iv <- as.formula(
  paste(
    "lwage ~ educ +", paste(controles_card, collapse = " + "),
    "|", paste(c(controles_card, "nearc4"), collapse = " + ")
  )
)

m_card_iv <- ivreg(f_iv, data = card)
summary(m_card_iv, diagnostics = TRUE)

Interpretação econômica. A maior estimativa IV não implica que MQO necessariamente “subestimava o efeito verdadeiro”. IV pode identificar um efeito local para pessoas cuja escolaridade responde ao instrumento, e instrumentos fracos podem amplificar ruído. A interpretação depende do desenho econômico.

O que a auditoria corrigiu nos scripts históricos

Os scripts antigos continham ideias econométricas úteis, mas alguns pontos não poderiam ser incorporados literalmente: um arquivo .xlsx era lido com read.csv(), havia caminhos absolutos do Windows, uso de attach(), um erro sintático na rotina de Hausman e erros-padrão de segundo estágio calculados de forma inadequada em uma versão manual. Nesta edição, a álgebra foi mantida e a implementação foi reescrita.

Exercícios

  1. Reproduza a estimativa matricial de 2SLS para Mroz sem construir explicitamente a matriz PZP_Z, usando produtos cruzados.
  2. Compare erros-padrão homocedásticos e HC1 no modelo IV.
  3. Reestime Mroz usando apenas motheduc e depois apenas fatheduc. Discuta precisão e interpretação.
  4. No exemplo de Card, inclua também nearc2 e avalie como mudam o primeiro estágio e a estimativa 2SLS.
  5. Explique por que um teste de sobreidentificação não pode decidir sozinho se um instrumento é substantivamente válido.

Capítulo 20 — Painéis, endogeneidade e variáveis instrumentais

Efeitos fixos resolvem um problema importante: heterogeneidade não observada invariável no tempo. Eles não resolvem simultaneidade, erro de medida ou regressoras que permanecem correlacionadas com o erro idiossincrático. Este capítulo combina a transformação within com variáveis instrumentais, seguindo a lógica de (Baltagi 2021; Wooldridge 2020) e recuperando as rotinas FE-IV presentes no material histórico.

Um ponto de partida com jtrain1

A base jtrain1 contém 157 empresas observadas em até três anos. O material histórico trabalha com a subamostra de empresas para as quais scrap > 0; nela permanecem 54 empresas e 162 observações, formando um painel balanceado de três períodos.

library(plm)

jtrain <- read.csv("dados/micro_avancada/jtrain1_wooldridge.csv")
jtrain <- subset(jtrain, scrap > 0)

pjt <- pdata.frame(jtrain, index = c("fcode", "year"))

pdim(pjt)

Uma especificação de efeitos fixos pode ser escrita como

m_jt_fe <- plm(
  lscrap ~ d88 + d89 + grant + grant_1,
  data = pjt,
  model = "within"
)

summary(m_jt_fe)

A variável union não varia no tempo dentro da empresa e, por isso, não é identificada por efeitos fixos. Esse é um exemplo concreto de uma propriedade geral do estimador within.

Quando FE ainda não basta

Considere

yit=βxit+γ′wit+αi+uit, y_{it}=\beta x_{it}+\gamma'w_{it}+\alpha_i+u_{it},

com

E(xituit)≠0. E(x_{it}u_{it})\neq0.

A transformação within remove αi\alpha_i, mas preserva a correlação entre xit−x‾ix_{it}-\bar x_i e uit−u‾iu_{it}-\bar u_i. Precisamos de instrumentos que variem no tempo e satisfaçam condições de momento após a transformação.

FE-2SLS

Defina a matriz de remoção de médias por unidade por MM. Depois da transformação,

ỹ=My,X̃=MX,Z̃=MZ. \widetilde y = My,\qquad \widetilde X = MX,\qquad \widetilde Z = MZ.

O estimador FE-IV é

β̂FE−IV=(X̃′PZ̃X̃)−1X̃′PZ̃ỹ. \widehat\beta_{FE-IV} = (\widetilde X'P_{\widetilde Z}\widetilde X)^{-1} \widetilde X'P_{\widetilde Z}\widetilde y.

Aplicação: demanda de passageiros e tarifas aéreas

A base airfare possui 1.149 rotas observadas em quatro anos, totalizando 4.596 observações. O exemplo histórico trata lfare como endógena e usa concen como instrumento.

air <- read.csv("dados/micro_avancada/airfare_wooldridge.csv")
pair <- pdata.frame(air, index = c("id", "year"))

pdim(pair)

Primeiro, a especificação FE sem instrumentação:

m_air_fe <- plm(
  lpassen ~ y98 + y99 + y00 + lfare,
  data = pair,
  model = "within"
)

summary(m_air_fe)

Na auditoria independente, a elasticidade within associada a lfare é aproximadamente −1,155-1{,}155.

Primeiro estágio within

m_air_fs <- plm(
  lfare ~ y98 + y99 + y00 + concen,
  data = pair,
  model = "within"
)

summary(m_air_fs)

Na reprodução numérica, concen possui coeficiente within próximo de 0,1690{,}169, e sua estatística t2t^2 é aproximadamente 44 nessa equação simples de primeiro estágio.

FE-IV em plm

m_air_feiv <- plm(
  lpassen ~ y98 + y99 + y00 + lfare |
    y98 + y99 + y00 + concen,
  data = pair,
  model = "within"
)

summary(m_air_feiv)

A reconstrução matricial independente do exemplo produz coeficiente de lfare próximo de −0,30-0{,}30. A diferença em relação ao FE-OLS é grande e deve ser tratada como um convite à investigação, não como uma validação automática do instrumento.

Nota metodológica. O uso de concentração de mercado como instrumento para tarifa é pedagogicamente útil para mostrar FE-IV, mas a restrição de exclusão é substantivamente exigente: concentração pode afetar demanda por canais além do preço. O livro não apresenta esse instrumento como desenho causal definitivo.

Inferência agrupada por rota

library(lmtest)
library(sandwich)

coeftest(
  m_air_feiv,
  vcov = vcovHC(m_air_feiv, type = "HC1", cluster = "group")
)

Em painéis, erros dentro da mesma unidade podem ser correlacionados ao longo do tempo. A inferência deve refletir essa dependência (Arellano 1987; Cameron e Miller 2015).

Reconstrução manual da transformação within

vars <- c("lpassen", "lfare", "concen", "y98", "y99", "y00")

air_w <- air
for (v in vars) {
  air_w[[paste0(v, "_w")]] <-
    air_w[[v]] - ave(air_w[[v]], air_w$id, FUN = mean)
}

library(AER)

m_air_manual <- ivreg(
  lpassen_w ~ y98_w + y99_w + y00_w + lfare_w |
    y98_w + y99_w + y00_w + concen_w,
  data = air_w
)

coef(m_air_manual)
coef(m_air_feiv)

Esse confronto é uma boa auditoria de implementação: a forma manual e plm() devem concordar em coeficientes quando especificação, amostra e transformação coincidem.

Primeiras diferenças: exemplo com prison

A base prison acompanha 51 unidades por 14 anos. Ela é útil para recordar que primeira diferença também remove efeitos invariantes:

prison <- read.csv("dados/micro_avancada/prison_wooldridge.csv")
pprison <- pdata.frame(prison, index = c("state", "year"))

m_prison_fd <- plm(
  log(criv + crip) ~ lpris + polpc + incpc +
    ag0_14 + ag15_17 + ag18_24 + ag25_34 +
    unem + black + metro,
  data = pprison,
  model = "fd"
)

summary(m_prison_fd)

FE e primeira diferença eliminam heterogeneidade invariável por mecanismos diferentes. A escolha entre eles depende da estrutura temporal do erro e da pergunta.

RE-IV: por que exige mais hipóteses

O material histórico também implementava efeitos aleatórios com variáveis instrumentais por álgebra matricial. O ponto conceitual é importante, mas a versão antiga continha cálculos de componentes de variância copiados entre bases e, em um trecho, dimensões de painel incorretas. Por isso, esta edição não reproduz aquela rotina como algoritmo recomendado.

RE-IV requer hipóteses sobre a relação entre efeito individual, instrumentos e regressoras. Quando a correlação entre heterogeneidade individual e regressores é plausível, FE-IV costuma ser um ponto de partida mais transparente.

Exercícios

  1. Mostre algebricamente que a transformação within aplicada a uma variável invariável no tempo produz zero.
  2. Reestime o exemplo airfare sem dummies de ano. Explique o que muda na identificação.
  3. Compare FE-OLS e FE-IV e discuta por que a diferença entre os coeficientes não é, sozinha, evidência de validade de concen.
  4. Obtenha erros-padrão agrupados por rota e compare com a matriz convencional.
  5. No exemplo prison, compare primeira diferença e efeitos fixos para uma especificação comum.

Capítulo 21 — Painéis dinâmicos e GMM

A inclusão da variável dependente defasada em um painel curto cria um problema que não é resolvido simplesmente adicionando efeitos fixos. O capítulo desenvolve a intuição do viés de Nickell (Nickell 1981) e apresenta o estimador de Arellano–Bond (Arellano e Bond 1991) como um sistema de condições de momento.

O modelo dinâmico

Considere

yit=ρyi,t−1+xit′β+αi+uit. y_{it} = \rho y_{i,t-1} +x_{it}'\beta +\alpha_i +u_{it}.

A transformação within elimina αi\alpha_i, mas yi,t−1−y‾iy_{i,t-1}-\bar y_i permanece correlacionado com uit−u‾iu_{it}-\bar u_i. Com TT pequeno, o viés não desaparece rapidamente quando NN cresce.

Primeiras diferenças

Diferenciando,

Δyit=ρΔyi,t−1+Δxit′β+Δuit. \Delta y_{it} = \rho\Delta y_{i,t-1} +\Delta x_{it}'\beta +\Delta u_{it}.

O problema continua porque

Cov(Δyi,t−1,Δuit)≠0. Cov(\Delta y_{i,t-1},\Delta u_{it})\neq0.

Sob ausência de correlação serial apropriada em uitu_{it}, níveis suficientemente defasados de yy podem instrumentar a variável dependente defasada em diferenças:

E(yi,t−sΔuit)=0,s≥2. E(y_{i,t-s}\Delta u_{it})=0,\qquad s\ge2.

A base wagepan

A base contém 545 indivíduos observados durante oito anos, totalizando 4.360 observações.

library(plm)

wagepan <- read.csv("dados/micro_avancada/wagepan_wooldridge.csv")
pwage <- pdata.frame(wagepan, index = c("nr", "year"))

pdim(pwage)

Uma construção manual simples

Antes do GMM completo, podemos montar uma versão didática em primeira diferença com apenas yi,t−2y_{i,t-2} como instrumento de Δyi,t−1\Delta y_{i,t-1}.

wagepan <- wagepan[order(wagepan$nr, wagepan$year), ]

lag_id <- function(x, id, k = 1) {
  ave(
    x, id,
    FUN = function(z) c(rep(NA, k), head(z, -k))
  )
}

wagepan$L1_lwage <- lag_id(wagepan$lwage, wagepan$nr, 1)
wagepan$L2_lwage <- lag_id(wagepan$lwage, wagepan$nr, 2)

wagepan$D_lwage <- wagepan$lwage - wagepan$L1_lwage
wagepan$D_L1_lwage <- wagepan$L1_lwage - wagepan$L2_lwage

wagepan$L1_union <- lag_id(wagepan$union, wagepan$nr, 1)
wagepan$L1_married <- lag_id(wagepan$married, wagepan$nr, 1)

wagepan$D_union <- wagepan$union - wagepan$L1_union
wagepan$D_married <- wagepan$married - wagepan$L1_married

ab_simple <- na.omit(
  wagepan[, c(
    "D_lwage", "D_L1_lwage", "L2_lwage",
    "D_union", "D_married"
  )]
)

Estimamos então um 2SLS em diferenças:

library(AER)

m_ab_simple <- ivreg(
  D_lwage ~ D_L1_lwage + D_union + D_married |
    L2_lwage + D_union + D_married,
  data = ab_simple
)

summary(m_ab_simple, diagnostics = TRUE)

Na verificação independente, essa versão deliberadamente simples gera coeficiente de aproximadamente 0,1150{,}115 para a defasagem do salário. Ela não é o estimador Arellano–Bond completo; serve para tornar visível a lógica do instrumento interno.

GMM em diferenças com pgmm()

O estimador de Arellano–Bond usa múltiplas condições de momento disponíveis ao longo do painel. Uma especificação compacta é:

pwage <- pdata.frame(
  read.csv("dados/micro_avancada/wagepan_wooldridge.csv"),
  index = c("nr", "year")
)

m_ab1 <- pgmm(
  lwage ~ lag(lwage, 1) + union + married |
    lag(lwage, 2:4),
  data = pwage,
  effect = "twoways",
  model = "onestep",
  transformation = "d"
)

summary(m_ab1)

A escolha de defasagens 2:4 é intencionalmente restrita. Usar todas as defasagens disponíveis pode gerar proliferação de instrumentos.

Dois estágios GMM

m_ab2 <- pgmm(
  lwage ~ lag(lwage, 1) + union + married |
    lag(lwage, 2:4),
  data = pwage,
  effect = "twoways",
  model = "twosteps",
  transformation = "d"
)

summary(m_ab2, robust = TRUE)

Em amostras finitas, a matriz de variância de dois estágios requer correções apropriadas. A saída robusta deve ser preferida à leitura ingênua da variância assintótica não corrigida.

Testes de autocorrelação

Após diferenciar, espera-se correlação de primeira ordem nos resíduos transformados mesmo quando uitu_{it} não é serialmente correlacionado. A preocupação central é autocorrelação de segunda ordem:

mtest(m_ab2, order = 1)
mtest(m_ab2, order = 2)

Rejeitar AR(1) em diferenças não é, por si, evidência contra o modelo. Rejeitar AR(2) é mais preocupante porque enfraquece a validade de defasagens de nível como instrumentos.

Teste de sobreidentificação

sargan(m_ab2)

O teste deve ser lido em conjunto com o número de instrumentos. Muitos instrumentos podem sobreajustar variáveis endógenas e reduzir o poder de testes de validade.

Proliferação de instrumentos

Um painel com TT moderado pode produzir rapidamente dezenas ou centenas de instrumentos. Isso cria três problemas: sobreajuste do primeiro estágio, instabilidade numérica e testes de Hansen/Sargan pouco informativos.

Roteiro de leitura. Em aplicações, relate explicitamente o número de instrumentos, restrinja o conjunto de defasagens e compare especificações. Um resultado não se torna confiável apenas porque o software convergiu.

Primeira diferença em um painel longo: prison

A base prison possui 51 unidades e 14 períodos. Ela permite comparar o raciocínio de primeira diferença em um painel mais longo com a lógica de instrumentos internos:

prison <- read.csv("dados/micro_avancada/prison_wooldridge.csv")
pprison <- pdata.frame(prison, index = c("state", "year"))

m_fd_prison <- plm(
  lcriv ~ lpris + polpc + incpc + unem,
  data = pprison,
  model = "fd"
)

summary(m_fd_prison)

Nem todo painel em diferenças exige GMM. GMM aparece quando a dinâmica ou a endogeneidade torna regressoras transformadas correlacionadas com o erro transformado.

O que foi corrigido do material histórico

As rotinas originais de pgmm() tinham a intuição correta, mas uma versão de airfare reutilizava valores de NN e TT de outra base ao recalcular componentes de variância. Em outro trecho, a função objetivo GMM usava o vetor não transformado no lugar do vetor within. Essas linhas não foram preservadas. O novo capítulo separa claramente FE-IV, diferença-IV e GMM dinâmico.

Exercícios

  1. Mostre por que yi,t−2y_{i,t-2} pode ser ortogonal a Δuit\Delta u_{it} sob ausência de autocorrelação serial em uitu_{it}.
  2. Reestime m_ab1 usando apenas lag(lwage, 2:3) como instrumentos e compare.
  3. Aumente deliberadamente a faixa de defasagens e registre quantos instrumentos são produzidos.
  4. Explique a diferença entre rejeitar AR(1) e AR(2) no teste de Arellano–Bond.
  5. Compare o 2SLS didático de uma única defasagem com o GMM de múltiplas condições de momento.

Capítulo 22 — Máxima verossimilhança em microeconometria

Muitos estimadores usados em microeconometria são soluções de um problema de máxima verossimilhança. Este capítulo abre a “caixa preta” de glm() e mostra como construir a função objetivo diretamente. A referência conceitual é (Cameron e Trivedi 2005; Greene 2018).

Da distribuição à função objetivo

Para uma variável binária yi∈{0,1}y_i\in\{0,1\},

P(yi=1|xi)=F(xi′β). P(y_i=1|x_i)=F(x_i'\beta).

A contribuição individual para a verossimilhança é

Li(β)=F(xi′β)yi[1−F(xi′β)]1−yi, L_i(\beta) = F(x_i'\beta)^{y_i} [1-F(x_i'\beta)]^{1-y_i},

e a log-verossimilhança é

ℓ(β)=∑i=1n[yilogF(xi′β)+(1−yi)log{1−F(xi′β)}]. \ell(\beta) = \sum_{i=1}^n \left[ y_i\log F(x_i'\beta) + (1-y_i)\log\{1-F(x_i'\beta)\} \right].

No probit, F=ΦF=\Phi; no logit, F=ΛF=\Lambda.

A base Mroz e o modelo de participação

mroz <- read.csv("dados/micro_avancada/mroz_wooldridge.csv")

f_part <- inlf ~ nwifeinc + educ + exper + expersq +
  age + kidslt6 + kidsge6

O modelo de probabilidade linear é um ponto de comparação:

m_lpm <- lm(f_part, data = mroz)

range(fitted(m_lpm))

Na auditoria, os valores ajustados do MPL variam aproximadamente de −0,35-0{,}35 a 1,131{,}13, ilustrando a razão pela qual modelos binários não lineares podem ser atraentes.

Probit e logit com glm()

m_probit <- glm(
  f_part,
  family = binomial(link = "probit"),
  data = mroz
)

m_logit <- glm(
  f_part,
  family = binomial(link = "logit"),
  data = mroz
)

summary(m_probit)
summary(m_logit)

Na reprodução independente do probit, os coeficientes do índice são aproximadamente 0,1310{,}131 para educ, 0,1230{,}123 para exper e −0,868-0{,}868 para kidslt6.

Probit estimado manualmente com optim()

Construímos a matriz XX e minimizamos o negativo da log-verossimilhança. O truncamento numérico de probabilidades evita log(0) durante a otimização.

X <- model.matrix(f_part, data = mroz)
y <- mroz$inlf

nll_probit <- function(b, X, y) {
  eta <- drop(X %*% b)
  p <- pnorm(eta)
  p <- pmin(pmax(p, 1e-12), 1 - 1e-12)

  -sum(
    y * log(p) +
      (1 - y) * log(1 - p)
  )
}

opt_probit <- optim(
  par = rep(0, ncol(X)),
  fn = nll_probit,
  X = X,
  y = y,
  method = "BFGS",
  hessian = TRUE
)

opt_probit$par
coef(m_probit)

Os vetores de coeficientes devem coincidir numericamente.

Hessiana e matriz de variância

Na vizinhança do máximo,

Var̂(β̂)≈[−H(β̂)]−1 \widehat{Var}(\widehat\beta) \approx [-H(\widehat\beta)]^{-1}

quando HH é a Hessiana da log-verossimilhança. Como optim() está minimizando a negativa da log-verossimilhança, usamos diretamente a inversa da Hessiana da função minimizada:

V_opt <- solve(opt_probit$hessian)
se_opt <- sqrt(diag(V_opt))

cbind(
  optim = opt_probit$par,
  se_optim = se_opt,
  glm = coef(m_probit),
  se_glm = sqrt(diag(vcov(m_probit)))
)

Um erro encontrado no material histórico calculava sqrt(diag(H)) como erro-padrão. Isso está incorreto: a matriz de variância requer a inversa da informação/Hessiana apropriada.

Logit manual

nll_logit <- function(b, X, y) {
  eta <- drop(X %*% b)
  p <- plogis(eta)
  p <- pmin(pmax(p, 1e-12), 1 - 1e-12)

  -sum(
    y * log(p) +
      (1 - y) * log(1 - p)
  )
}

opt_logit <- optim(
  par = rep(0, ncol(X)),
  fn = nll_logit,
  X = X,
  y = y,
  method = "BFGS",
  hessian = TRUE
)

cbind(
  optim = opt_logit$par,
  glm = coef(m_logit)
)

Efeitos marginais

Os coeficientes de probit e logit pertencem ao índice latente. Para o probit,

∂P(yi=1|xi)∂xij=ϕ(xi′β)βj. \frac{\partial P(y_i=1|x_i)}{\partial x_{ij}} = \phi(x_i'\beta)\beta_j.

library(marginaleffects)

avg_slopes(m_probit)

Na auditoria, o efeito marginal médio de educ no probit é aproximadamente 0,0390{,}039, enquanto kidslt6 reduz a probabilidade estimada em cerca de 0,26, mantidas as demais covariáveis na lógica do efeito marginal médio.

Teste de razão de verossimilhança

m_probit0 <- update(m_probit, . ~ 1)

LR <- 2 * (
  as.numeric(logLik(m_probit)) -
    as.numeric(logLik(m_probit0))
)

df_LR <- attr(logLik(m_probit), "df") -
  attr(logLik(m_probit0), "df")

p_LR <- pchisq(LR, df = df_LR, lower.tail = FALSE)

c(LR = LR, df = df_LR, p_value = p_LR)

O pseudo-R2R^2 de McFadden pode ser calculado por

1 - as.numeric(logLik(m_probit)) /
  as.numeric(logLik(m_probit0))

A reprodução independente fornece aproximadamente 0,2210{,}221. Esse número não deve ser interpretado como proporção da variância explicada no sentido de MQO.

Inferência robusta em modelos ML

library(lmtest)
library(sandwich)

coeftest(
  m_probit,
  vcov = vcovHC(m_probit, type = "HC1")
)

A especificação probabilística define a função de média e, em máxima verossimilhança plenamente especificada, também a distribuição. Em aplicações, erros-padrão sandwich podem ser úteis quando o pesquisador quer robustez a certas formas de má especificação.

Exercícios

  1. Reescreva a log-verossimilhança do probit usando dbinom() e probabilidades previstas.
  2. Compare optim() com diferentes valores iniciais.
  3. Verifique numericamente que solve(opt_probit$hessian) reproduz aproximadamente vcov(m_probit).
  4. Calcule efeitos marginais no valor médio dos regressores e compare com efeitos marginais médios.
  5. Mostre por que pseudo-R2R^2 não possui a mesma interpretação do R2R^2 de MQO.

Capítulo 23 — Modelos de resposta binária em painel

Quando a variável dependente é binária e os mesmos indivíduos são observados repetidamente, surgem simultaneamente não linearidade e heterogeneidade não observada. Este capítulo desenvolve uma rota aplicada: pooled probit/logit, modelo linear com efeitos fixos, logit com efeitos fixos e uma parametrização correlacionada à Mundlak–Chamberlain (Mundlak 1978; Cameron e Trivedi 2005).

A base lfp

A base possui 5.663 indivíduos observados em cinco períodos, totalizando 28.315 observações.

lfp <- read.csv("dados/micro_avancada/lfp_wooldridge.csv")

c(
  observacoes = nrow(lfp),
  individuos = length(unique(lfp$id)),
  periodos = length(unique(lfp$period))
)

Pooled probit

Ignorando inicialmente a estrutura de painel:

m_pool_probit <- glm(
  lfp ~ black + age + agesq + educ +
    per1 + per2 + per3 + per4 +
    lhinc + kids,
  family = binomial(link = "probit"),
  data = lfp
)

summary(m_pool_probit)

Na auditoria independente, os coeficientes do índice para lhinc e kids são aproximadamente −0,211-0{,}211 e −0,199-0{,}199, respectivamente. O problema é que a regressão pooled trata observações repetidas como se a heterogeneidade individual não tivesse papel estrutural.

Inferência agrupada por indivíduo

Mesmo quando o estimador pooled é mantido como modelo de média, a dependência intrapessoal deve ser reconhecida na inferência:

library(lmtest)
library(sandwich)

V_id <- vcovCL(
  m_pool_probit,
  cluster = lfp$id
)

coeftest(m_pool_probit, vcov = V_id)

Modelo de probabilidade linear com efeitos fixos

O MPL tem uma vantagem em painel: a transformação within é direta.

library(plm)

plfp <- pdata.frame(lfp, index = c("id", "period"))

m_lpm_fe <- plm(
  lfp ~ per1 + per2 + per3 + per4 + lhinc + kids,
  data = plfp,
  model = "within"
)

summary(m_lpm_fe)

Na reconstrução independente, os coeficientes within são aproximadamente −0,009-0{,}009 para lhinc e −0,039-0{,}039 para kids. Variáveis invariantes ou quase invariantes não são identificadas da mesma maneira.

Por que probit FE é difícil

Num probit com efeito individual,

P(yit=1|xit,αi)=Φ(xit′β+αi), P(y_{it}=1|x_{it},\alpha_i) = \Phi(x_{it}'\beta+\alpha_i),

a estimação de um parâmetro αi\alpha_i para cada indivíduo gera o problema de parâmetros incidentais quando TT é pequeno. Diferentemente do logit, não há uma transformação condicional simples que elimine αi\alpha_i mantendo uma verossimilhança de baixa dimensão.

Logit com efeitos fixos

Para logit, é possível usar métodos apropriados para efeitos fixos. Uma implementação moderna utiliza fixest:

library(fixest)

m_logit_fe <- feglm(
  lfp ~ lhinc + kids + i(period) | id,
  family = "logit",
  data = lfp
)

summary(m_logit_fe)

Unidades sem variação no desfecho ao longo do tempo não contribuem para a identificação das inclinações em uma formulação condicional/FE logit. Isso muda a população efetivamente informativa.

Mundlak–Chamberlain: heterogeneidade correlacionada

Uma estratégia pragmática modela a correlação entre heterogeneidade individual e regressoras adicionando médias individuais de variáveis que mudam no tempo:

αi=θ0+x‾i′θ+ai,E(ai|Xi)=0. \alpha_i = \theta_0+ \bar x_i'\theta+a_i, \qquad E(a_i|X_i)=0.

Criamos as médias de renda e número de filhos:

lfp$mean_lhinc <- ave(
  lfp$lhinc, lfp$id,
  FUN = mean
)

lfp$mean_kids <- ave(
  lfp$kids, lfp$id,
  FUN = mean
)

Uma especificação pooled-probit enriquecida é:

m_mundlak_probit <- glm(
  lfp ~ black + age + agesq + educ +
    per1 + per2 + per3 + per4 +
    lhinc + kids + mean_lhinc + mean_kids,
  family = binomial(link = "probit"),
  data = lfp
)

summary(m_mundlak_probit)

Na auditoria, o coeficiente de lhinc cai em magnitude para cerca de −0,029-0{,}029, enquanto mean_lhinc fica próximo de −0,250-0{,}250. Isso mostra que efeitos within e between podem ser muito diferentes.

Nota metodológica. A regressão acima não é uma máxima verossimilhança de probit com efeito aleatório integrado. Ela é usada aqui para ensinar a lógica de Mundlak–Chamberlain no índice condicional. O material histórico utilizava pglm para RE-probit; a nova edição evita apresentar uma rotina de pacote como se resolvesse, por si só, as hipóteses sobre a distribuição do efeito individual.

Efeitos marginais e a pergunta substantiva

library(marginaleffects)

avg_slopes(
  m_mundlak_probit,
  variables = c("lhinc", "kids")
)

Em modelos de painel não lineares, é crucial declarar qual efeito está sendo calculado: condicional ao efeito individual, populacional, within ou uma média sobre a distribuição das covariáveis.

Heterogeneidade não observada versus dependência de estado

Uma sequência persistente de participação pode ocorrer porque a pessoa tem um traço permanente não observado ou porque participar em t−1t-1 altera causalmente a chance de participar em tt. Esses mecanismos são diferentes.

Um modelo dinâmico binário,

P(yit=1|yi,t−1,xit,αi), P(y_{it}=1|y_{i,t-1},x_{it},\alpha_i),

exige hipóteses adicionais sobre condições iniciais e distribuição de αi\alpha_i. Por isso, este livro encerra a seção no ponto em que o leitor consegue reconhecer o problema, em vez de oferecer uma receita automática.

O que foi corrigido do script histórico

O script original de painel binário continha uma chamada plm(dados, nrow(dados)/5) para criar o painel; a função correta é pdata.frame(). Além disso, a instalação de pglm ocorria dentro do script e as médias individuais eram construídas por manipulação matricial dependente de ordenação. Nesta edição, índices são explícitos e as médias são construídas por ave().

Exercícios

  1. Compare erros-padrão usuais e agrupados no pooled probit.
  2. Calcule a proporção de indivíduos que nunca mudam lfp e discuta sua contribuição para FE-logit.
  3. Reestime o modelo de Mundlak adicionando médias individuais de outras covariáveis que variam no tempo.
  4. Compare o sinal e a magnitude de kids no pooled probit, LPM-FE e especificação Mundlak.
  5. Explique por que um probit com milhares de dummies individuais e T=5T=5 pode sofrer problema de parâmetros incidentais.

Apêndices

Apêndice A — Fundamentos de probabilidade e estatística em R

Para uma revisão mais formal de probabilidade e inferência aplicada à econometria, ver Greene (2018) e Wooldridge (2020).

Variáveis aleatórias

Uma variável aleatória associa resultados de um experimento a números. Em econometria, tratamos renda, consumo, salário, produção ou retorno como realizações de processos aleatórios. A distribuição descreve quais valores são possíveis e suas probabilidades.

Esperança

Para uma variável discreta, E(X)=∑xxP(X=x).E(X)=\sum_x xP(X=x). Para uma variável contínua com densidade f(x)f(x), E(X)=∫xf(x)dx.E(X)=\int x f(x)\,dx. A esperança é uma propriedade da distribuição, não necessariamente um valor observado na amostra.

Variância e desvio-padrão

Var(X)=E[(X−E(X))2]=E(X2)−[E(X)]2.Var(X)=E[(X-E(X))^2]=E(X^2)-[E(X)]^2. O desvio-padrão é a raiz da variância e retorna à unidade original da variável.

Covariância e correlação

Cov(X,Y)=E[(X−E(X))(Y−E(Y))].Cov(X,Y)=E[(X-E(X))(Y-E(Y))]. A correlação normaliza a covariância: Corr(X,Y)=Cov(X,Y)Var(X)Var(Y).Corr(X,Y)=\frac{Cov(X,Y)}{\sqrt{Var(X)Var(Y)}}. Correlação zero não implica independência em geral.

Esperança condicional

A função E(Y|X=x)E(Y|X=x) é central para regressão. Ela descreve a média de YY entre unidades com determinado valor de XX. O modelo linear aproxima essa função por uma reta ou hiperplano.

Lei das expectativas iteradas

E[Y]=E[E(Y|X)].E[Y]=E[E(Y|X)]. Essa identidade aparece repetidamente em demonstrações econométricas e ajuda a entender por que hipóteses condicionais implicam resultados não condicionais.

Distribuição normal

Se X∼N(μ,σ2)X\sim N(\mu,\sigma^2), a distribuição é simétrica e determinada por média e variância. Em R:

dnorm(0)
pnorm(1.96)
qnorm(0.975)
rnorm(5, mean=0, sd=1)

As famílias de funções seguem um padrão: d para densidade, p para probabilidade acumulada, q para quantil e r para geração aleatória.

Distribuição t

qt(0.975, df=38)
pt(2.024, df=38)

A distribuição tt tem caudas mais pesadas que a normal para poucos graus de liberdade.

Qui-quadrado e F

Distribuições χ2\chi^2 e FF aparecem em testes de variância, heterocedasticidade e restrições conjuntas.

qchisq(0.95, df=5)
qf(0.95, df1=2, df2=40)

Lei dos grandes números

Sob condições regulares, a média amostral converge para a esperança populacional quando nn cresce. Podemos visualizar isso por simulação.

set.seed(123)
x <- rnorm(10000, mean=5, sd=2)
cum_media <- cumsum(x)/seq_along(x)
plot(cum_media, type="l")
abline(h=5, lty=2)

Teorema central do limite

Mesmo quando a população não é normal, a distribuição da média amostral tende a normalidade após padronização sob condições apropriadas.

set.seed(123)
B <- 5000
medias <- replicate(B, mean(rexp(30, rate=1)))
hist(medias, breaks=40, probability=TRUE)
curve(dnorm(x, mean=1, sd=1/sqrt(30)), add=TRUE)

Amostra, parâmetro e estimador

Um parâmetro é uma característica fixa da população. Um estimador é uma regra que usa uma amostra para aproximá-lo. A estimativa é o valor numérico produzido em uma amostra específica. Essa distinção evita confundir β\beta com β̂\hat\beta.

Viés, consistência e eficiência

Um estimador é não viesado se sua esperança coincide com o parâmetro. É consistente se converge em probabilidade para o parâmetro quando n→∞n\to\infty. Entre estimadores comparáveis, maior eficiência significa menor variância sob um conjunto de hipóteses.

Exercícios

  1. Gere 1.000 observações normais e compare média/variância amostrais com os parâmetros usados.

  2. Mostre por simulação que correlação zero não garante independência construindo Y=X2Y=X^2 com XX simétrico.

  3. Ilustre a lei dos grandes números com uma distribuição uniforme.

  4. Repita a ilustração do TCL para amostras de tamanho 5, 30 e 100.

  5. Obtenha valores críticos de normal, tt, χ2\chi^2 e FF diretamente no R.

Apêndice B — Álgebra matricial para regressão

A notação matricial de MQO e 2SLS segue tratamentos usuais como Greene (2018) e Wooldridge (2020).

Por que matrizes?

A notação matricial permite escrever regressões com muitos regressores de forma compacta e revela a geometria de MQO. O modelo geral é y=Xβ+u,y=X\beta+u, onde yy é n×1n\times1, XX é n×kn\times k, β\beta é k×1k\times1 e uu é n×1n\times1.

Estimador MQO

Minimizamos S(β)=(y−Xβ)′(y−Xβ).S(\beta)=(y-X\beta)'(y-X\beta). As condições de primeira ordem são X′(y−Xβ̂)=0,X'(y-X\hat\beta)=0, portanto β̂=(X′X)−1X′y,\hat\beta=(X'X)^{-1}X'y, desde que X′XX'X seja invertível.

Reproduzindo lm() por matrizes

food <- read.csv("dados/food.csv")
y <- as.matrix(food$food_exp)
X <- cbind(1, food$income)
b <- solve(t(X)%*%X) %*% t(X) %*% y
b
coef(lm(food_exp ~ income, data=food))

Matriz de projeção

Defina PX=X(X′X)−1X′.P_X=X(X'X)^{-1}X'. Então ŷ=PXy.\hat y=P_Xy. A matriz PXP_X projeta yy no espaço gerado pelas colunas de XX.

Matriz annihilator

MX=I−PX,M_X=I-P_X, e os resíduos são û=MXy.\hat u=M_Xy. Como X′û=0X'\hat u=0, os resíduos são ortogonais às colunas de XX.

Variância de MQO

Sob homocedasticidade, Var(β̂|X)=σ2(X′X)−1.Var(\hat\beta|X)=\sigma^2(X'X)^{-1}. A estimativa usual substitui σ2\sigma^2 por σ̂2=û′ûn−k.\hat\sigma^2=\frac{\hat u'\hat u}{n-k}.

Heterocedasticidade em notação matricial

Se Var(u|X)=Ω,Var(u|X)=\Omega, então Var(β̂|X)=(X′X)−1X′ΩX(X′X)−1.Var(\hat\beta|X)=(X'X)^{-1}X'\Omega X(X'X)^{-1}. Essa fórmula é a origem dos estimadores robustos tipo sanduíche.

FWL matricial

Se X=[X1X2]X=[X_1\ X_2], o coeficiente de X1X_1 pode ser obtido regressando MX2yM_{X_2}y em MX2X1M_{X_2}X_1. O teorema mostra por que regressão múltipla usa a parte residualizada de cada regressor.

2SLS em matrizes

Com instrumentos ZZ, PZ=Z(Z′Z)−1Z′P_Z=Z(Z'Z)^{-1}Z' e β̂2SLS=(X′PZX)−1X′PZy.\hat\beta_{2SLS}=(X'P_ZX)^{-1}X'P_Zy. A expressão deixa claro que 2SLS substitui a variação total de XX por sua projeção no espaço dos instrumentos.

Exercícios

  1. Reproduza uma regressão múltipla com operações matriciais.

  2. Verifique numericamente que X′ûX'\hat u é aproximadamente zero.

  3. Mostre que PXPX=PXP_XP_X=P_X.

  4. Mostre que MXMX=MXM_XM_X=M_X.

  5. Implemente 2SLS matricialmente em um exemplo simulado.

Apêndice C — Simulação de Monte Carlo e bootstrap

A lógica de reamostragem por bootstrap é desenvolvida em Efron e Tibshirani (1993); aqui ela é utilizada como ferramenta didática para compreender propriedades amostrais.

Por que simular?

Simulação permite estudar propriedades de estimadores quando conhecemos o processo gerador dos dados. Em vez de confiar apenas em demonstrações algébricas, podemos observar viés, variância, cobertura e poder em milhares de amostras artificiais.

Uma simulação básica de MQO

Considere yi=2+0,5xi+ui,ui∼N(0,1).y_i=2+0{,}5x_i+u_i, \qquad u_i\sim N(0,1).

set.seed(123)
B <- 5000
n <- 50
b <- numeric(B)

for (r in 1:B) {
  x <- rnorm(n)
  y <- 2 + .5*x + rnorm(n)
  b[r] <- coef(lm(y ~ x))[2]
}
mean(b)
sd(b)
hist(b, breaks=40)

A média das estimativas deve ficar próxima de 0,5. A dispersão do histograma aproxima a distribuição amostral do estimador.

Cobertura de intervalos

Um intervalo de 95% deveria conter o verdadeiro parâmetro em aproximadamente 95% das repetições sob as hipóteses que justificam o procedimento.

set.seed(123)
B <- 2000
cobre <- logical(B)
for (r in 1:B) {
  x <- rnorm(50)
  y <- 2 + .5*x + rnorm(50)
  m <- lm(y ~ x)
  ci <- confint(m)["x",]
  cobre[r] <- ci[1] <= .5 && .5 <= ci[2]
}
mean(cobre)

Heterocedasticidade por simulação

Altere o erro para que sua variância dependa de |x||x|. Compare intervalos clássicos e robustos. A simulação torna visível por que a matriz de variância importa mesmo quando o coeficiente de MQO permanece centrado no parâmetro.

Viés por variável omitida

Gere zi=0.8xi+vi,yi=1+0.5xi+zi+ui.\begin{aligned} z_i &= 0.8x_i+v_i,\\ y_i &= 1+0.5x_i+z_i+u_i. \end{aligned} Estime o modelo com e sem zz. Como zz afeta yy e é correlacionado com xx, a regressão curta atribui parte do efeito de zz a xx.

Instrumentos fracos

Simule xi=πzi+vix_i=\pi z_i+v_i com diferentes valores de π\pi. À medida que π\pi se aproxima de zero, a distribuição de 2SLS se torna instável. Esse exercício é uma das formas mais claras de entender que a fraqueza do primeiro estágio é problema de identificação, não apenas de “significância”.

Bootstrap

O bootstrap reamostra observações da própria amostra para aproximar a distribuição de um estimador.

set.seed(123)
B <- 2000
boot_b <- numeric(B)
for (r in 1:B) {
  id <- sample(seq_len(nrow(food)), replace=TRUE)
  boot_b[r] <- coef(lm(food_exp ~ income, data=food[id,]))[2]
}
quantile(boot_b, c(.025,.975))

Quando bootstrap exige cuidado

Reamostragem simples por linhas pressupõe observações independentes. Séries temporais e dados agrupados exigem esquemas de bootstrap que preservem dependência, como block bootstrap ou cluster bootstrap.

Exercícios

  1. Estude o viés e a variância de MQO para n=20n=20, 50 e 500.

  2. Compare cobertura de intervalos clássicos e robustos sob heterocedasticidade.

  3. Simule variável omitida com correlação positiva e negativa.

  4. Mostre a deterioração de 2SLS quando o primeiro estágio enfraquece.

  5. Compare intervalo bootstrap percentil com o intervalo tt convencional no exemplo de alimentos.

Apêndice D — Soluções comentadas de exercícios selecionados

Este apêndice apresenta soluções de alguns exercícios representativos. O objetivo não é fornecer um gabarito completo, mas mostrar como estruturar raciocínio, código e interpretação.

Regressão simples: mudança de unidade

Se renda passa de centenas de dólares para dólares, definimos income_dolar=100incomeincome\_dolar=100\,income. No modelo y=β0+β1income+u,y=\beta_0+\beta_1 income+u, a nova inclinação é β1/100\beta_1/100. O efeito de um aumento de US$100 permanece o mesmo.

food$income_dolar <- 100*food$income
coef(lm(food_exp ~ income_dolar, data=food))

Inferência: teste bilateral

Para testar H0:β2=5H_0:\beta_2=5, calcule t=β̂2−5se(β̂2).t=\frac{\hat\beta_2-5}{se(\hat\beta_2)}. O valor-pp bilateral usa as duas caudas. Em R:

b <- coef(m_food)["income"]
se <- summary(m_food)$coefficients["income","Std. Error"]
t <- (b-5)/se
p <- 2*(1-pt(abs(t), df=df.residual(m_food)))
c(t=t,p=p)

Regressão múltipla: FWL

Para isolar o efeito de preço controlando por publicidade, residualizamos ambas as variáveis em relação à publicidade e regressamos um resíduo no outro. O coeficiente coincide com o de preço no modelo múltiplo. Essa igualdade é numérica e teórica.

Dummies: mudança de referência

Se uma variável de região possui três categorias, trocar a categoria base muda intercepto e coeficientes das dummies, mas não altera previsões. A interpretação sempre é relativa ao grupo omitido.

DiD: quatro médias

Calcule médias para tratado/controle antes/depois. Primeiro obtenha a mudança do tratado, depois a mudança do controle e subtraia. A interação em uma regressão 2x2 recupera a mesma quantidade.

Heterocedasticidade: clássico versus HC

O coeficiente de MQO não muda ao pedir uma matriz HC. O que muda é a estimativa da variância e, portanto, erros-padrão, estatísticas e intervalos. Isso separa claramente estimação do parâmetro e inferência.

Séries temporais: regressão espúria

Duas caminhadas aleatórias independentes podem gerar relação aparentemente significativa. Ao diferenciar as séries, a relação espúria geralmente desaparece. A lição não é diferenciar tudo automaticamente, mas testar a ordem de integração e pensar em cointegração.

Painel: within

Para cada unidade, subtraia de yity_{it} e xitx_{it} suas médias temporais. Uma regressão sem intercepto dos dados transformados reproduz a inclinação de efeitos fixos em um modelo simples.

Logit: odds não são probabilidades

Se β=log(2)\beta=\log(2), uma unidade adicional em xx dobra as odds. Se a probabilidade inicial é 0,2, as odds são 0,2/0,8=0,250,2/0,8=0,25. Dobrando para 0,5, a nova probabilidade é 0,5/(1+0,5)=1/30,5/(1+0,5)=1/3, não 0,4.

Contagem: interpretação de IRR

Se β=0,1\beta=0,1, a IRR é e0,1≈1,105e^{0,1}\approx1,105. Mantidos os demais regressores, uma unidade adicional em xx está associada a aproximadamente 10,5% de aumento na média condicional da contagem.

Projeto empírico: especificação principal

Uma boa especificação principal deve ser definida por argumento econômico e desenho, não por busca de significância. Robustez serve para mostrar sensibilidade a decisões alternativas plausíveis, inclusive quando os resultados enfraquecem.

Apêndice E — Referência rápida de R para econometria

Importação

d <- read.csv("dados.csv")
# library(haven)
# d <- read_dta("dados.dta")

Inspeção

str(d)
summary(d)
head(d)
nrow(d)
colSums(is.na(d))

Transformações

d$ln_y <- log(d$y)
d$x2 <- d$x^2
d$dummy <- as.integer(d$grupo == "tratado")

MQO

m <- lm(y ~ x1 + x2, data=d)
summary(m)
coef(m)
confint(m)
vcov(m)
predict(m)
residuals(m)
fitted(m)

Erros robustos

library(lmtest)
library(sandwich)
coeftest(m, vcov=vcovHC(m, type="HC1"))

Testes lineares

library(car)
linearHypothesis(m, c("x1=0", "x2=0"))

Variáveis instrumentais

library(AER)
iv <- ivreg(y ~ x_endog + w | z + w, data=d)
summary(iv, diagnostics=TRUE)

Painel

library(plm)
pd <- pdata.frame(d, index=c("id","tempo"))
fe <- plm(y ~ x1 + x2, data=pd, model="within")
re <- plm(y ~ x1 + x2, data=pd, model="random")
phtest(fe,re)

Séries temporais

# y <- ts(..., frequency=4)
# plot(y)
# acf(y)
# diff(y)

ADF e cointegração

library(urca)
# summary(ur.df(y, type="trend", lags=2))
# summary(ca.jo(cbind(y,x), type="trace", K=2))

VAR

library(vars)
# VARselect(dados_var, lag.max=8, type="const")
# v <- VAR(dados_var, p=2, type="const")
# causality(v, cause="x")
# irf(v, impulse="x", response="y", boot=TRUE)

Logit e probit

logit <- glm(y ~ x1 + x2, family=binomial("logit"), data=d)
probit <- glm(y ~ x1 + x2, family=binomial("probit"), data=d)
predict(logit, type="response")

Poisson e binomial negativa

pois <- glm(y ~ x1 + x2, family=poisson("log"), data=d)
library(MASS)
nb <- glm.nb(y ~ x1 + x2, data=d)
exp(coef(pois))

Tabelas

library(modelsummary)
modelsummary(list("Modelo 1"=m1, "Modelo 2"=m2), output="latex")

Reprodutibilidade

set.seed(123)
sessionInfo()

Apêndice F — Glossário econométrico essencial

Relação estatística entre variáveis. Não implica, por si só, causalidade.

Correlação de uma série ou de erros com seus próprios valores defasados.

Método de reamostragem usado para aproximar distribuições amostrais e incerteza.

Conteúdo preditivo de valores defasados de uma variável para outra, condicionalmente ao sistema.

Situação em que a variável latente existe, mas observações além de um limite são registradas no próprio limite.

Grupo dentro do qual erros podem ser correlacionados.

Parâmetro ou estimativa que quantifica a relação entre regressor e variável dependente na especificação adotada.

Relação estacionária entre combinações lineares de séries não estacionárias de mesma ordem de integração.

Propriedade pela qual um estimador converge para o verdadeiro parâmetro quando a amostra cresce.

Variável incluída para modelar heterogeneidade relevante. Sua escolha deve refletir a pergunta e o desenho.

Estratégia que compara mudança de um grupo tratado com mudança de um grupo de comparação.

Variável indicadora, geralmente igual a zero ou um.

Componente específico de uma unidade ou período absorvido por uma transformação ou conjunto de indicadores.

Variação percentual de uma variável associada a variação de 1% em outra.

Correlação entre regressor e erro, tornando MQO geralmente inconsistente para o parâmetro estrutural.

Medida da variabilidade amostral estimada de um estimador.

Propriedade temporal em que momentos relevantes não dependem do calendário, sob definição adotada.

Regra que transforma dados em uma estimativa de um parâmetro.

Decomposição da variância do erro de previsão em contribuições dos choques identificados.

Relação entre variáveis endógenas e variáveis exógenas/instrumentos sem impor interpretação estrutural completa.

Variância condicional do erro que muda entre observações.

Restrição paramétrica avaliada por um teste estatístico.

Condições que permitem aprender um parâmetro a partir da distribuição observada e das hipóteses do modelo.

Variável relevante para o regressor endógeno e exógena ao erro estrutural sob a restrição de exclusão.

Procedimento que, em amostras repetidas, cobre o parâmetro com frequência nominal sob as hipóteses do modelo.

Função de impulso-resposta que descreve a reação dinâmica a um choque identificado.

Modelo binário com função logística acumulada.

Mínimos Quadrados Ordinários, estimador que minimiza a soma dos quadrados dos resíduos.

Forte relação linear entre regressores, capaz de aumentar variância das estimativas.

Termo conhecido inserido no preditor linear com coeficiente fixo, comum em modelos de taxas de contagem.

Dados que acompanham as mesmas unidades ao longo do tempo.

Quantidade populacional desconhecida que o modelo procura estimar.

Estimador baseado na função de média exponencial, com uso que pode exceder contagens literais sob condições adequadas.

Estimativa de um resultado futuro ou não observado. Não exige interpretação causal.

Modelo binário baseado na distribuição normal acumulada.

Caso em que um processo autorregressivo apresenta persistência estocástica compatível com não estacionariedade.

Relação aparentemente significativa produzida por propriedades temporais inadequadamente tratadas, como tendências estocásticas independentes.

Diferença entre valor observado e valor ajustado pelo modelo.

Sensibilidade de uma conclusão a decisões alternativas razoáveis ou a relaxamento de hipóteses específicas.

Variância condicional superior à permitida pela especificação Poisson equidispersa.

Modelo para variável latente contínua observada sob censura em um limite.

Probabilidade, sob a hipótese nula, de observar uma estatística tão ou mais extrema que a obtida.

Vetor autorregressivo, sistema em que cada variável depende de defasagens próprias e das demais.

Modelo de correção de erro vetorial para séries cointegradas.

Diferença sistemática entre a esperança de um estimador e o parâmetro, em sentido de amostras repetidas.

Apêndice G — Exercícios integradores e projetos de revisão

Bloco I: regressão e inferência

  1. Use food.csv. Produza gráfico, MQO, IC de 95%, elasticidade na média e intervalo de predição para três níveis de renda.

  2. Compare modelos linear, linear-log e log-log. Escolha um e justifique sem usar apenas R2R^2.

  3. Simule 1.000 amostras de uma regressão simples e estime cobertura dos intervalos.

  4. Crie heterocedasticidade artificial e compare erros clássicos, HC1 e HC3.

  5. Construa um exemplo em que um regressor se torna não significativo por colinearidade sem que seu verdadeiro efeito desapareça.

Bloco II: causalidade e identificação

  1. Desenhe um DAG simples para uma relação entre educação e salário com habilidade não observada. Discuta controles possíveis.

  2. Construa um DiD 2x2 simulado e recupere o efeito por quatro médias e por regressão.

  3. Simule uma violação de tendências paralelas.

  4. Crie um instrumento válido em dados simulados e compare OLS e 2SLS.

  5. Enfraqueça progressivamente o primeiro estágio e registre erro-padrão e distribuição do estimador IV.

Bloco III: séries temporais

  1. Simule AR(1) para quatro valores de ρ\rho e compare persistência.

  2. Gere duas caminhadas aleatórias independentes e documente regressão espúria.

  3. Estime ADF com diferentes componentes determinísticos e explique por que os resultados mudam.

  4. Construa um VAR bivariado simulado, estime IRF e inverta a ordem de Cholesky.

  5. Simule um GARCH(1,1) e examine o agrupamento de volatilidade.

Bloco IV: painel e respostas não lineares

  1. Use nls_panel.csv para comparar pooled, FE e RE.

  2. Calcule erros agrupados por indivíduo e compare com erros convencionais.

  3. Use transport.csv para estimar LPM, logit e probit.

  4. Compare probabilidades previstas e efeitos marginais.

  5. Use uma base de contagem e compare Poisson, Poisson robusto e binomial negativa.

Projeto 1: nota técnica

Produza uma nota de 5 a 7 páginas com uma pergunta empírica simples. A nota deve incluir motivação, dados, uma figura, uma tabela descritiva, uma especificação principal, uma análise de sensibilidade e conclusão. O código deve gerar automaticamente todos os objetos.

Projeto 2: replicação

Escolha um artigo aplicado com dados acessíveis. Reproduza uma tabela ou figura central e escreva um relatório de replicação indicando: fonte dos dados, diferenças de software, resultados coincidentes, resultados divergentes e possíveis causas das divergências.

Projeto 3: previsão versus causalidade

Use a mesma base para construir dois modelos com objetivos distintos. O primeiro deve priorizar previsão fora da amostra; o segundo deve responder uma pergunta causal defensável. Compare seleção de variáveis, métricas e linguagem de conclusão.

Projeto 4: painel de política pública

Monte ou utilize um painel unidade-tempo. Defina uma intervenção, descreva o momento de tratamento e construa um DiD. Discuta tendências paralelas, antecipação, efeitos heterogêneos e nível de cluster. O objetivo principal é a argumentação do desenho, não a obtenção de significância.

Projeto 5: série macroeconômica

Selecione duas ou três séries macroeconômicas. Faça gráficos, testes de estacionariedade, escolha entre níveis/diferenças/VECM, estime um sistema e interprete IRFs com uma discussão explícita das restrições de identificação.

Critérios de avaliação sugeridos

Critério Peso sugerido
Pergunta e motivação econômica 15%
Qualidade e documentação dos dados 15%
Adequação do desenho e do estimador 25%
Interpretação e diagnóstico 20%
Reprodutibilidade 15%
Clareza de tabelas, figuras e texto 10%

Apêndice H — Laboratório de R para econometria aplicada

Este apêndice reúne operações que aparecem repetidamente em projetos empíricos. O objetivo é servir como consulta rápida, não como curso completo de programação.

Selecionar linhas

food <- read.csv("dados/food.csv")
food_20 <- subset(food, income >= 20)
head(food_20)

Selecionar colunas

food_xy <- food[, c("income", "food_exp")]

Ordenar observações

food_ord <- food[order(food$income), ]
food_ord_desc <- food[order(-food$income), ]

Criar grupos

food$alta_renda <- as.integer(food$income > median(food$income))
table(food$alta_renda)

Recodificar fatores

food$grupo <- factor(food$alta_renda,
                     levels=c(0,1),
                     labels=c("Baixa", "Alta"))
levels(food$grupo)

Estatísticas por grupo

aggregate(food_exp ~ grupo, data=food,
          FUN=function(x) c(media=mean(x), dp=sd(x), n=length(x)))

Merge entre bases

Combinar bases exige uma chave que identifique corretamente as unidades. Duplicatas na chave podem multiplicar linhas silenciosamente.

# base <- merge(base_a, base_b,
#               by=c("id","ano"), all.x=TRUE)

Depois do merge, sempre compare número de linhas e unicidade da chave.

Detectar duplicatas

# duplicated(base[c("id","ano")]) |> table()
# base[duplicated(base[c("id","ano")]), ]

Valores ausentes

colSums(is.na(food))
food_cc <- food[complete.cases(food), ]

Remover todas as linhas com qualquer valor ausente pode ser muito mais agressivo do que remover apenas observações ausentes nas variáveis do modelo.

Winsorização: use com justificativa

wins <- function(x, p=.01) {
  q <- quantile(x, c(p,1-p), na.rm=TRUE)
  pmin(pmax(x,q[1]),q[2])
}
# dados$x_w <- wins(dados$x)

Winsorizar não corrige automaticamente outliers; altera os dados. A regra deve ser definida e reportada.

Funções próprias

elasticidade_linear <- function(modelo, x0, y0) {
  b <- coef(modelo)[2]
  as.numeric(b*x0/y0)
}
elasticidade_linear(m_food,
                     mean(food$income),
                     mean(food$food_exp))

Criar funções reduz repetição e torna regras de cálculo auditáveis.

Aplicar a mesma regressão a várias amostras

# Exemplo didatico
limites <- c(10,15,20)
resultados <- lapply(limites, function(corte) {
  d <- subset(food, income >= corte)
  lm(food_exp ~ income, data=d)
})
sapply(resultados, function(m) coef(m)[2])

Extrair resultados com broom

# library(broom)
# tidy(m_food, conf.int=TRUE)
# glance(m_food)
# augment(m_food)

O pacote broom transforma objetos de modelo em data frames, facilitando gráficos e tabelas programáticas.

Sequência de modelos

m1 <- lm(food_exp ~ income, data=food)
m2 <- lm(food_exp ~ income + I(income^2), data=food)
m3 <- lm(log(food_exp) ~ log(income), data=food)
modelos <- list(linear=m1, quadratico=m2, loglog=m3)

Guardar resultados em CSV

coef_tab <- data.frame(
  termo=names(coef(m1)),
  estimativa=coef(m1)
)
write.csv(coef_tab, "coeficientes_m1.csv", row.names=FALSE)

Em projetos reproduzíveis, porém, o ideal é regenerar o arquivo a partir do script em vez de editar manualmente o CSV de saída.

Gerar figuras em arquivo

pdf("figura_food.pdf", width=7, height=5)
plot(food$income, food$food_exp, pch=19)
abline(m1, lwd=2)
dev.off()

Definir explicitamente dimensões ajuda a manter consistência entre versões.

Sementes aleatórias

set.seed(2026)
sample(1:100, 10)

A semente torna reproduzíveis divisões treino-teste, bootstrap e Monte Carlo. Ela não torna um procedimento estatístico melhor; apenas permite repetir exatamente a aleatoriedade computacional.

Loops versus vetorização

Loops em R são perfeitamente válidos. Para simulações, clareza é mais importante que evitar for() a qualquer custo.

betas <- numeric(1000)
for (b in 1:1000) {
  x <- rnorm(50)
  y <- 1 + .5*x + rnorm(50)
  betas[b] <- coef(lm(y ~ x))[2]
}
mean(betas)

Mensagens de erro úteis

ler_base <- function(caminho) {
  if (!file.exists(caminho)) {
    stop("Arquivo nao encontrado: ", caminho)
  }
  read.csv(caminho)
}

Falhar explicitamente é melhor que seguir com uma base errada ou vazia.

Pacotes e namespaces

# sandwich::vcovHC(modelo, type="HC1")
# lmtest::coeftest(modelo)

Usar pacote::funcao() pode tornar scripts mais claros quando funções de pacotes diferentes possuem nomes iguais.

sessionInfo e versões

sessionInfo()

Registre a versão do R, sistema operacional e pacotes relevantes em projetos destinados a replicação.

renv

# install.packages("renv")
# renv::init()
# renv::snapshot()
# renv::restore()

O renv cria um arquivo de dependências do projeto e ajuda a reconstruir versões de pacotes.

Script mestre

Uma forma simples de automatizar o fluxo é criar um script que chame os demais na ordem correta.

# source("scripts/01_importacao.R")
# source("scripts/02_limpeza.R")
# source("scripts/03_descritivas.R")
# source("scripts/04_modelos.R")
# source("scripts/05_figuras_tabelas.R")

Teste de sanidade

Inclua verificações simples que parem o projeto quando uma condição essencial falha.

stopifnot(nrow(food) == 40)
stopifnot(all(food$income > 0))
stopifnot(all(food$food_exp > 0))

Essas verificações são especialmente úteis quando bases são atualizadas.

Exercícios

  1. Escreva uma função que devolva coeficiente, erro-padrão e R2R^2 de uma regressão simples.

  2. Automatize a estimação de cinco especificações e reúna os coeficientes em um data frame.

  3. Crie verificações com stopifnot() para uma base de sua pesquisa.

  4. Escreva um script mestre que execute um pequeno projeto do início ao fim.

  5. Gere uma figura e uma tabela em arquivos sem copiar nenhum resultado manualmente.

Apêndice I — Próximos passos em econometria aplicada

Este apêndice apresenta extensões que não são desenvolvidas em profundidade no livro. O objetivo é mostrar ao leitor onde as ferramentas introdutórias se conectam a métodos contemporâneos e quais perguntas adicionais surgem.

Regressão descontínua

Desenhos de regressão descontínua exploram regras de tratamento baseadas em um ponto de corte. Se unidades logo abaixo e logo acima do limite são comparáveis, uma descontinuidade no resultado pode identificar um efeito local sob hipóteses de continuidade e ausência de manipulação precisa da variável de ordenamento.

# Estrutura conceitual
# dados$dist <- dados$running - cutoff
# lm(y ~ tratado + dist + tratado:dist,
#    data=subset(dados, abs(dist) <= bandwidth))

A escolha da largura de banda, a forma funcional local e testes de manipulação são partes centrais da análise. Polinômios globais de alta ordem geralmente não são uma solução automática.

Pareamento e escore de propensão

Métodos de matching procuram construir comparações entre unidades tratadas e não tratadas semelhantes em covariáveis observadas. O escore de propensão resume a probabilidade de tratamento condicional às covariáveis.

Esses métodos não resolvem confundimento por variáveis não observadas. Sua validade depende da hipótese de independência condicional e de sobreposição entre grupos.

Controle sintético

Quando uma unidade agregada recebe uma intervenção e poucas unidades comparáveis estão disponíveis, o controle sintético constrói uma combinação ponderada de unidades não tratadas para reproduzir a trajetória pré-intervenção. O foco desloca-se da regressão de muitos indivíduos para a construção transparente de um contrafactual agregado.

Estudos de evento modernos

Em painéis com adoção escalonada, estimadores por coorte e tempo relativo permitem lidar melhor com heterogeneidade dos efeitos. O leitor deve procurar métodos que evitem usar unidades já tratadas como controles inadequados para unidades tratadas posteriormente.

Regressão quantílica

MQO modela a média condicional. Regressão quantílica permite estudar mediana ou outros quantis condicionais. Isso é útil quando o efeito de uma variável difere ao longo da distribuição do resultado.

# library(quantreg)
# rq(y ~ x1 + x2, tau=c(.25,.5,.75), data=dados)

Modelos espaciais

Dados municipais, regionais ou ambientais frequentemente possuem dependência espacial. Unidades vizinhas podem compartilhar choques e resultados. Modelos de defasagem espacial, erro espacial e matrizes de vizinhança exigem hipóteses próprias. Erros agrupados por região não substituem automaticamente um modelo espacial.

Econometria e aprendizado de máquina

Machine learning pode melhorar previsão e seleção flexível de funções, mas previsão e identificação causal continuam sendo objetivos distintos. Métodos como lasso, random forests e boosting podem ser incorporados a desenhos causais, desde que a etapa de aprendizagem seja organizada para preservar inferência, por exemplo com sample splitting e ortogonalização.

Double/debiased machine learning

A ideia central é usar algoritmos flexíveis para estimar componentes auxiliares — como função de resultado e propensão ao tratamento — e combinar essas estimativas em escores ortogonais menos sensíveis a pequenos erros de regularização. É uma extensão natural para leitores interessados em alta dimensionalidade.

Econometria bayesiana

A abordagem bayesiana combina uma distribuição a priori com a verossimilhança para produzir uma distribuição posterior dos parâmetros. Em vez de intervalos de confiança frequentistas, trabalha-se com intervalos de credibilidade e probabilidades posteriores. A interpretação é diferente e exige declarar explicitamente o papel da priori.

Dados de alta frequência e séries financeiras

Modelos ARCH/GARCH são apenas um ponto de entrada. Volatilidade estocástica, modelos multivariados, medidas realizadas e microestrutura de mercado pertencem a uma literatura própria. Quanto maior a frequência, mais importantes se tornam horários, dias sem negociação, sincronização e ruído de mercado.

Modelos de duração

Quando a variável de interesse é o tempo até um evento — desemprego, falência, adoção de tecnologia, término de contrato — modelos de sobrevivência e duração são mais adequados que regressões lineares sobre o tempo observado. Censura aparece novamente, mas com estrutura diferente do Tobit.

Dados hierárquicos

Alunos pertencem a escolas, trabalhadores a firmas, municípios a estados. Modelos multinível tratam explicitamente essa hierarquia por efeitos aleatórios e componentes de variância. Eles são especialmente úteis quando o interesse substantivo envolve variação entre níveis, e não apenas correção dos erros-padrão.

Texto, imagens e novos tipos de dados

Economistas trabalham cada vez mais com textos de decisões, notícias, imagens de satélite, registros administrativos e dados de plataformas. A etapa de construção da variável pode envolver NLP ou visão computacional antes da econometria. A incerteza da mensuração criada por algoritmos também deve ser considerada.

Como escolher o próximo método?

O critério não deve ser novidade. Comece pela pergunta: qual é a unidade? qual é o contrafactual? de onde vem a variação? qual dependência existe? qual parte da distribuição interessa? A técnica surge como resposta a essas características.

Nota metodológica. Métodos sofisticados não compensam uma pergunta mal definida, uma base mal construída ou uma hipótese de identificação indefensável. Complexidade deve ser comprada apenas quando resolve um problema real do desenho.

Roteiro de estudo após este livro

  1. aprofundar álgebra matricial e teoria assintótica;

  2. estudar identificação causal e desenhos quase experimentais;

  3. avançar em séries temporais e previsão;

  4. aprender microeconometria de painel e modelos não lineares;

  5. desenvolver programação reproduzível, versionamento e testes;

  6. replicar artigos publicados antes de construir modelos cada vez mais complexos.

Referências

Angrist, Joshua D., e Jörn-Steffen Pischke. 2009. Mostly Harmless Econometrics: An Empiricist’s Companion. Princeton: Princeton University Press.
Arellano, Manuel. 1987. “Computing Robust Standard Errors for Within-Groups Estimators”. Oxford Bulletin of Economics and Statistics 49 (4): 431–34.
Arellano, Manuel, e Stephen Bond. 1991. “Some Tests of Specification for Panel Data: Monte Carlo Evidence and an Application to Employment Equations”. Review of Economic Studies 58 (2): 277–97.
Baltagi, Badi H. 2021. Econometric Analysis of Panel Data. 6º ed. Cham: Springer.
Bollerslev, Tim. 1986. “Generalized Autoregressive Conditional Heteroskedasticity”. Journal of Econometrics 31 (3): 307–27.
Breusch, T. S., e A. R. Pagan. 1979. “A Simple Test for Heteroscedasticity and Random Coefficient Variation”. Econometrica 47 (5): 1287–94.
Callaway, Brantly, e Pedro H. C. Sant’Anna. 2021. “Difference-in-Differences with Multiple Time Periods”. Journal of Econometrics 225 (2): 200–230.
Cameron, A. Colin, e Douglas L. Miller. 2015. “A Practitioner’s Guide to Cluster-Robust Inference”. Journal of Human Resources 50 (2): 317–72.
Cameron, A. Colin, e Pravin K. Trivedi. 2005. Microeconometrics: Methods and Applications. Cambridge: Cambridge University Press.
Croissant, Yves, e Giovanni Millo. 2008. “Panel Data Econometrics in R: The plm Package”. Journal of Statistical Software 27 (2): 1–43.
Dickey, David A., e Wayne A. Fuller. 1979. “Distribution of the Estimators for Autoregressive Time Series with a Unit Root”. Journal of the American Statistical Association 74 (366a): 427–31.
Efron, Bradley, e Robert J. Tibshirani. 1993. An Introduction to the Bootstrap. New York: Chapman; Hall.
Engle, Robert F. 1982. “Autoregressive Conditional Heteroscedasticity with Estimates of the Variance of United Kingdom Inflation”. Econometrica 50 (4): 987–1007.
Engle, Robert F., e Clive W. J. Granger. 1987. “Co-Integration and Error Correction: Representation, Estimation, and Testing”. Econometrica 55 (2): 251–76.
Goodman-Bacon, Andrew. 2021. “Difference-in-Differences with Variation in Treatment Timing”. Journal of Econometrics 225 (2): 254–77.
Granger, C. W. J. 1969. “Investigating Causal Relations by Econometric Models and Cross-Spectral Methods”. Econometrica 37 (3): 424–38.
Greene, William H. 2018. Econometric Analysis. 8º ed. New York: Pearson.
Hamilton, James D. 1994. Time Series Analysis. Princeton: Princeton University Press.
Hausman, Jerry A. 1978. “Specification Tests in Econometrics”. Econometrica 46 (6): 1251–71.
Hill, R. Carter, William E. Griffiths, e Guay C. Lim. 2018. Principles of Econometrics. 5º ed. Hoboken: Wiley.
Imbens, Guido W., e Joshua D. Angrist. 1994. “Identification and Estimation of Local Average Treatment Effects”. Econometrica 62 (2): 467–75.
Imbens, Guido W., e Donald B. Rubin. 2015. Causal Inference for Statistics, Social, and Biomedical Sciences. Cambridge: Cambridge University Press.
Johansen, Søren. 1988. “Statistical Analysis of Cointegration Vectors”. Journal of Economic Dynamics and Control 12 (2–3): 231–54.
Kleiber, Christian, e Achim Zeileis. 2008. Applied Econometrics with R. New York: Springer.
Loures, Alexandre, e Rodrigo Nobre Fernandez. 2023. Uma introdução ao uso do Gretl. Pelotas: Edição dos autores.
Lütkepohl, Helmut. 2005. New Introduction to Multiple Time Series Analysis. Berlin: Springer.
Mundlak, Yair. 1978. “On the Pooling of Time Series and Cross Section Data”. Econometrica 46 (1): 69–85.
Newey, Whitney K., e Kenneth D. West. 1987. “A Simple, Positive Semi-Definite, Heteroskedasticity and Autocorrelation Consistent Covariance Matrix”. Econometrica 55 (3): 703–8.
Nickell, Stephen. 1981. “Biases in Dynamic Models with Fixed Effects”. Econometrica 49 (6): 1417–26.
Sims, Christopher A. 1980. “Macroeconomics and Reality”. Econometrica 48 (1): 1–48.
Staiger, Douglas, e James H. Stock. 1997. “Instrumental Variables Regression with Weak Instruments”. Econometrica 65 (3): 557–86.
Stock, James H., e Mark W. Watson. 2020. Introduction to Econometrics. 4º ed. Pearson.
Sun, Liyang, e Sarah Abraham. 2021. “Estimating Dynamic Treatment Effects in Event Studies with Heterogeneous Treatment Effects”. Journal of Econometrics 225 (2): 175–99.
Wasserstein, Ronald L., e Nicole A. Lazar. 2016. “The ASA Statement on p-Values: Context, Process, and Purpose”. The American Statistician 70 (2): 129–33.
White, Halbert. 1980. “A Heteroskedasticity-Consistent Covariance Matrix Estimator and a Direct Test for Heteroskedasticity”. Econometrica 48 (4): 817–38.
Wickham, Hadley, Mine Çetinkaya-Rundel, e Garrett Grolemund. 2023. R for Data Science. 2º ed. Sebastopol: O’Reilly Media.
Wooldridge, Jeffrey M. 2020. Introductory Econometrics: A Modern Approach. 7º ed. Boston: Cengage.
Zeileis, Achim. 2004. “Econometric Computing with HC and HAC Covariance Matrix Estimators”. Journal of Statistical Software 11 (10): 1–17.