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.csvusaremos:
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 sobre :
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:
formular a pergunta econômica;
definir a unidade de observação e as variáveis;
importar e validar os dados;
realizar análise descritiva e gráfica;
especificar e estimar o modelo;
executar diagnósticos e análises de robustez;
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
Importe
andy.csve identifique o número de observações e variáveis.Calcule média, desvio-padrão, mínimo e máximo de
sales,priceeadvert.Verifique se há valores ausentes em
cps5_small.csv.Explique por que um caminho absoluto prejudica a reprodutibilidade de um projeto.
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^2A 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
usar
setwd()com caminhos absolutos que só funcionam em um computador;sobrescrever a base bruta durante a limpeza;
recodificar valores sem registrar a regra;
criar variáveis depois de observar os resultados e apresentar a decisão como se fosse prévia;
copiar resultados manualmente para tabelas;
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:
em que food_exp representa a despesa semanal com
alimentação, income é a renda semanal medida em centenas de
dólares,
reúne os fatores não observados que afetam a despesa e
e
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.
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:
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
com erros-padrão de aproximadamente e , respectivamente. O coeficiente de determinação é e o erro-padrão da regressão é aproximadamente .
Interpretação econômica. Como a renda é medida em centenas de dólares, o coeficiente 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 ,
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_mediaO valor é aproximadamente . 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 ; 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 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
Reestime o modelo usando
lm()e confirme os coeficientes apresentados no texto.Calcule manualmente o valor previsto quando
income=25e compare compredict().Calcule a elasticidade nas rendas 10, 20 e 30. A elasticidade permanece constante? Explique.
Extraia a matriz de variância-covariância e confirme os erros-padrão.
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 , os resíduos são Minimizar a soma dos quadrados dos resíduos produz A fórmula mostra que a inclinação depende da covariação entre e relativamente à variação de . Se 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
e
valor-.
Em seguida aparecem o erro-padrão residual,
,
ajustado e o teste
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 e . Para interpretar como estimador de um efeito causal médio, é necessária uma condição de exogeneidade que, de forma simplificada, pode ser escrita como Essa condição afirma que, dado , 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 é
A elasticidade nesse ponto é
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
tratar o intercepto como economicamente relevante mesmo quando está fora da amostra;
interpretar associação como causalidade;
ignorar unidades de medida;
afirmar que mede a importância causal do regressor;
extrapolar previsões para valores de muito distantes dos observados.
Exercícios adicionais
Mostre algebricamente por que a reta de MQO passa pelo ponto .
Reestime o modelo depois de medir a renda em dólares. Explique a mudança no coeficiente.
Calcule a previsão e a elasticidade para
income=15, 20, 25 e 30.Compare a média dos resíduos com zero e explique por que a igualdade depende da presença do intercepto.
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 , um intervalo de confiança bilateral de nível é construído como
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 também pode ser obtido diretamente:
df <- df.residual(m_food)
tc <- qt(0.975, df = df)
tcPara 38 graus de liberdade, o valor é aproximadamente .
Teste de uma hipótese simples
Suponha que se queira testar
A estatística é
b2 <- coef(m_food)["income"]
se2 <- summary(m_food)$coefficients["income", "Std. Error"]
t_calculado <- b2 / se2
t_calculadoO valor é aproximadamente . Para obter o valor- unilateral:
p_unilateral <- 1 - pt(t_calculado, df = df)
p_unilateralComo o valor- é muito pequeno, a hipótese nula é rejeitada nos níveis usuais de significância.
Nota metodológica. Rejeitar 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 , 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%, será rejeitada se 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 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 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
Construa intervalos de confiança de 90%, 95% e 99% para o coeficiente de renda.
Teste contra uma alternativa bilateral.
Teste contra . Compare os valores-.
Mostre numericamente a equivalência entre o teste bilateral de 5% e o intervalo de confiança de 95%.
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 . À medida que os graus de liberdade crescem, a distribuição 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- é a probabilidade, calculada sob , 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 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- 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 , variância do erro e magnitude de , 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
Calcule manualmente um intervalo de 99% para o coeficiente de renda e confirme com
confint().Simule o poder para , , e , mantendo o restante fixo.
Explique por que aumentar pode tornar estatisticamente significativo um efeito economicamente irrelevante.
Gere 100 hipóteses nulas verdadeiras em simulação e conte quantos valores- ficam abaixo de 0,05.
Compare ajustes de Bonferroni e Benjamini–Hochberg em um vetor de valores-.
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 é
em que é a soma dos quadrados dos resíduos e é 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 / SQTO resultado é . 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. 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 , 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:
No modelo linear-log de gastos com alimentação:
m_linlog <- lm(food_exp ~ log(income), data = food)
summary(m_linlog)A estimativa é aproximadamente
Como , 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
por cento em
para coeficientes pequenos. Para maior precisão, usa-se
.
No modelo log-log:
m_loglog <- lm(log(food_exp) ~ log(income), data = food)
summary(m_loglog)Nesse caso, é diretamente uma elasticidade.
Resíduos como instrumento de diagnóstico
Os resíduos são
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)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
Compare e ajustado dos modelos linear, linear-log, log-linear e log-log.
Para cada especificação, interprete economicamente o coeficiente de renda.
Produza gráficos de resíduos e discuta qual forma funcional parece mais adequada.
Execute o teste RESET para as quatro especificações.
Identifique observações influentes pelo critério 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 não pode ser simplesmente exponenciada e interpretada sempre como . Pela desigualdade de Jensen, Uma correção comum sob normalidade do erro é multiplicar pela correção de viés . 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) * smearObservaçõ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
Divida a base em treino e teste cinco vezes e compare a variação do RMSE.
Compare MAE e RMSE para os modelos linear e linear-log.
Identifique as três observações com maior distância de Cook.
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.
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 é
A interpretação de é condicional: ele mede a variação na média de associada a uma unidade adicional de , 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:
andy <- read.csv("dados/andy.csv")
m_andy <- lm(sales ~ price + advert, data = andy)
summary(m_andy)A equação estimada é aproximadamente
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 é aproximadamente e o ajustado, .
Somas de quadrados e variância residual
anova(m_andy)
sigma(m_andy)
summary(m_andy)$r.squared
summary(m_andy)$adj.r.squaredA estimativa da variância do erro é
em que inclui o intercepto. No exemplo, .
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:
m_andy_q <- lm(
sales ~ price + advert + I(advert^2),
data = andy
)
summary(m_andy_q)As estimativas são aproximadamente e . O sinal negativo do termo quadrático produz concavidade.
Efeitos marginais
No modelo quadrático,
Para advert = 1:
b <- coef(m_andy_q)
ef_advert_1 <- b["advert"] + 2 * b["I(advert^2)"] * 1
ef_advert_1O efeito é aproximadamente 6,62. O efeito marginal depende do ponto em que é avaliado, portanto não faz sentido interpretar isoladamente 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:
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
é
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
Reestime o modelo de vendas sem
advert. Compare o coeficiente de preço.Calcule o ponto de máximo da função quadrática de publicidade, .
Construa um intervalo de confiança para o efeito marginal da publicidade em
advert=1usando o método delta oumarginaleffects.No modelo salarial, calcule o retorno da escolaridade para 0, 10, 20 e 30 anos de experiência.
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 que não é explicada linearmente pelos outros regressores. Essa intuição é formalizada pelo teorema de Frisch–Waugh–Lovell.
Teorema de Frisch–Waugh–Lovell
Considere explicado por e . Para obter o coeficiente de , podemos: regressar em e guardar os resíduos; regressar em e guardar os resíduos; por fim, regressar os resíduos de nos resíduos de .
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 o efeito marginal é . Se , o ponto de máximo estimado ocorre em É essencial verificar se 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 o efeito marginal de é Assim, não faz sentido interpretar isoladamente sem dizer a qual valor de 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
Demonstre numericamente o FWL para o coeficiente de publicidade.
Padronize preço e publicidade e compare os coeficientes padronizados.
Estime um modelo com
advert2e calcule o efeito marginal da publicidade em diferentes níveis.Estime uma interação entre preço e publicidade e represente graficamente duas retas para níveis baixos e altos de publicidade.
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 é adequado para uma única restrição. Quando queremos testar várias simultaneamente, usamos um teste . No modelo quadrático de publicidade:
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 e valor-. 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:
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
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
;
ao omitir we, ele sobe para cerca de
.
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 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.squaredPara 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 é
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
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:
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
Reproduza o teste conjunto dos termos de publicidade por
anova(). Depois, repita o teste com a função do pacotecar.Teste se a soma das elasticidades do modelo de cerveja é igual a zero.
Compare o erro-padrão de
henos modelos com e sem variáveis artificiais irrelevantes.Calcule VIFs para a função de produção de arroz e discuta sua interpretação.
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 mas estimemos uma regressão de apenas em . O viés assintótico associado à omissão de depende de duas relações: o efeito de sobre e a associação entre e . Intuitivamente, Portanto, uma variável omitida precisa ser relevante para 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 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 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
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.
Mostre, por simulação, que incluir um regressor irrelevante aumenta a variância do coeficiente de interesse em média.
Compare AIC e BIC em três especificações aninhadas.
Crie uma variável quase colinear com
pricee observe o efeito nos erros-padrão.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
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:
m_utown_int <- lm(
price ~ sqft + age + utown + pool + fplace + sqft:utown,
data = utown
)
summary(m_utown_int)As estimativas centrais são aproximadamente: e . Assim, o efeito marginal do tamanho é fora da área universitária e próximo à universidade.
b <- coef(m_utown_int)
c(
fora = b["sqft"],
perto = b["sqft"] + b["sqft:utown"]
)Modelo de probabilidade linear
Quando
é 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
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:
O parâmetro é 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 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
Estime o prêmio de localização universitária sem e com a interação
sqft:utown.No MPL da escolha de Coca-Cola, identifique previsões fora do intervalo .
Compare a média de
totalscoreentre turmas pequenas e regulares.Calcule manualmente a diferença em diferenças usando as quatro médias de
ftepor estado e período e compare com .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 categorias, um modelo com intercepto inclui tipicamente 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 é uma dummy e contínua, então mede a diferença de intercepto quando e mede a diferença de inclinação entre os grupos. Se não tem interpretação econômica, centralizar em um valor relevante pode tornar 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, A regressão equivalente é em que é 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ósnã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
Reparametrize um modelo de dummies mudando a categoria de referência e confirme que os valores ajustados não mudam.
Centralize uma variável contínua antes de interagir com uma dummy e interprete o novo intercepto diferencial.
Construa manualmente o estimador DiD com quatro médias e compare com a regressão.
Simule um caso com pré-tendências divergentes e mostre como DiD pode atribuir ao tratamento uma diferença que já estava emergindo.
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,
Com heterocedasticidade,
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 , enquanto o HC1 é próximo de 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 , com valor- próximo de , 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,
então ponderar por 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
Compare os erros-padrão convencional, HC0, HC1, HC2 e HC3.
Execute os testes de Breusch–Pagan e White e compare suas conclusões.
Reestime as especificações linear-log e log-linear do capítulo anterior com HC1.
Explique por que heterocedasticidade não implica, por si só, viés no coeficiente de MQO.
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 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 A parte central, , é 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
Compare erros-padrão clássicos, HC1 e HC3 no modelo de alimentos.
Simule dados com variância do erro proporcional a e compare cobertura de intervalos clássicos e robustos.
Explique por que WLS exige mais estrutura que erros robustos.
Crie grupos artificiais com choque comum e mostre que HC e cluster podem produzir inferência diferente.
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")O gráfico sugere forte tendência. Regressões em níveis entre duas séries com tendência podem produzir elevado e estatísticas aparentemente significativas mesmo sem relação econômica verdadeira.
Primeiras diferenças
A primeira diferença é
dgdp <- diff(gdp_ts)
plot(dgdp)Diferenciar remove uma raiz unitária em muitos processos integrados de ordem um, , 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 alto e estatística 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
A hipótese nula do teste ADF é , 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
,
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 e são cointegradas, uma representação de correção de erro pode ser escrita como
em que 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 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 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
Construa gráficos de
br,ffre suas primeiras diferenças.Execute ADF com e sem tendência e discuta a sensibilidade da conclusão.
Reproduza a regressão espúria em níveis e em primeiras diferenças.
Estime uma relação de cointegração entre
breffre examine os resíduos.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 mede a associação linear entre e . 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 Se , o processo é estacionário e choques desaparecem gradualmente. Se , temos uma raiz unitária e os choques têm efeito permanente sobre o nível.
Para , a média de longo prazo é
Regressão espúria por simulação
Duas caminhadas aleatórias independentes podem produzir elevado e estatísticas 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 e são , mas existe tal que é 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 é Para estabilidade, espera-se frequentemente : desvios positivos do equilíbrio no período anterior geram ajuste para baixo em .
Exercícios adicionais
Simule AR(1) com , , e . Compare os gráficos.
Gere duas caminhadas aleatórias independentes e repita a regressão espúria 500 vezes. Conte quantas vezes o coeficiente parece significativo a 5%.
Compare ACF de uma série em nível e em primeira diferença.
Discuta o papel do intercepto e da tendência em um teste ADF.
Estime uma relação de longo prazo entre duas séries 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:
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
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
Use
VARselect()para comparar ordens de defasagem emfred5.csv.Estime um VAR e teste autocorrelação residual.
Teste causalidade de Granger nas duas direções.
Execute o teste de Johansen para
usaeauscom diferentes escolhas de .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 Granger-causa significa que defasagens de ajudam a prever 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
Estime um VAR com duas ordens de defasagem diferentes e compare AIC, BIC e resíduos.
Inverta a ordem de duas variáveis e compare IRFs ortogonalizadas.
Explique a diferença entre um teste de Granger e uma afirmação causal estrutural.
Calcule FEVD para horizontes 1, 4, 8 e 12.
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 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), com e . 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: O parâmetro mede reação a novas informações e captura persistência. Quando 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
Explique por que preços de ativos e retornos têm propriedades temporais diferentes.
Simule um ARCH(1) e mostre o agrupamento de volatilidade.
Interprete e em um GARCH(1,1).
Discuta o significado de próximo de 1.
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 ao longo de períodos . Uma especificação básica é
em que representa heterogeneidade individual invariável no tempo. O problema central é decidir como tratar 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 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:
O termo 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
m_fd <- plm(
lwage ~ exper + I(exper^2),
data = pnls,
model = "fd"
)
summary(m_fd)Com , within e primeira diferença são equivalentes para uma inclinação única sob a mesma especificação. Para , 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,
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
Confirme que o painel possui 716 indivíduos e cinco períodos.
Compare pooled OLS, FE e RE para uma especificação comum.
Explique por que
educpode desaparecer em um modelo within se for invariável ao longo do painel.Compare erros-padrão convencionais e clusterizados por indivíduo.
Discuta por que um teste de Hausman não substitui uma justificativa econômica para a correlação entre e .
O que efeitos fixos realmente removem
O modelo permite que seja correlacionado com . A transformação within subtrai as médias temporais de cada unidade: 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 . 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 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 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 não é uma extensão inocente.
Exercícios adicionais
Calcule manualmente as médias por unidade e reproduza a transformação within para um painel pequeno.
Compare pooled OLS e FE e explique por que diferenças nos coeficientes podem sinalizar heterogeneidade omitida.
Separe a variância total de um regressor em componentes within e between.
Estime uma especificação de Mundlak e interprete as médias individuais.
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
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
.
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,
m_probit <- glm(
auto ~ dtime,
family = binomial(link = "probit"),
data = transport
)
summary(m_probit)A inclinação estimada do índice é próxima de . Esse coeficiente não é diretamente uma mudança em probabilidade. O efeito marginal é
library(marginaleffects)
avg_slopes(m_probit)
slopes(m_probit, newdata = data.frame(dtime = 2))Logit
No logit,
m_logit <- glm(
auto ~ dtime,
family = binomial(link = "logit"),
data = transport
)
summary(m_logit)
avg_slopes(m_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
:
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
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
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 ; 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
Compare MPL, probit e logit para
transport.csvem termos de probabilidades previstas.Calcule o efeito marginal médio de
prationo modelo de escolha de Coca-Cola.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.
Estime o multinomial logit com controles adicionais e obtenha probabilidades previstas para diferentes notas.
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, em que é a normal acumulada no probit e a logística no logit. Como é 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, onde é 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 e costuma ser mais natural que a derivada.
Odds ratio no logit
No logit, é a razão multiplicativa das odds para uma unidade adicional em . 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
Compare probabilidades previstas de logit e probit para as mesmas observações.
Calcule efeitos marginais médios e efeitos na média dos regressores. Explique a diferença.
Converta um coeficiente logit em odds ratio e mostre por que isso não é uma variação percentual da probabilidade.
Avalie sensibilidade de uma matriz de classificação a limiares 0,3, 0,5 e 0,7.
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 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 precisa cumprir duas ideias. A primeira é relevância: A segunda é exogeneidade/exclusão: 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 , instrumento e controles , o primeiro estágio é A forma reduzida relaciona o resultado ao instrumento: 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 sobre .
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 pode ainda ser fraco. O problema de instrumentos fracos não é apenas “erro-padrão grande”: aproximações usuais de 2SLS e testes 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 é 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
Liste quatro fontes de endogeneidade e dê um exemplo econômico de cada uma.
Escreva primeiro estágio e forma reduzida para um modelo com um instrumento e dois controles.
Explique por que relevância pode ser testada com dados, mas exclusão não pode ser provada apenas por correlação.
Simule um instrumento forte e um fraco e compare a distribuição de estimativas 2SLS.
Discuta por que adicionar muitos instrumentos fracos pode piorar o problema.
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:
O preço e a quantidade 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:
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:
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 , 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:
regressar o preço endógeno sobre todos os instrumentos e controles exógenos;
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
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:
relevância: estar relacionado com o regressor endógeno condicionalmente aos demais controles;
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 é 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
Estime as duas equações de forma reduzida e confirme os sinais.
Compare MQO e 2SLS na equação de demanda. Por que diferem?
Examine o primeiro estágio do preço.
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.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, O estimador 2SLS pode ser escrito como
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 explicada pelos instrumentos. Se instrumentos são fracos, a imprecisão pode ser extrema.
Exercícios adicionais
Escreva as equações estrutural e reduzida do exemplo de trufas.
Reproduza manualmente o primeiro estágio e compare valores ajustados com os usados por
ivreg().Explique por que os erros-padrão do segundo estágio manual com
lm()estão errados.Discuta uma variável que poderia deslocar oferta sem deslocar demanda e uma que poderia deslocar demanda sem deslocar oferta.
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 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
Portanto,
Essa ligação exponencial é importante: um modelo em que 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.
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 para idade, para sexo feminino e para seguro público.
Razões de incidência
Como
é 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 é .
Equidispersão e superdispersão
A distribuição de Poisson satisfaz
Na amostra de consultas médicas, a média de docvis é
aproximadamente
,
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 .
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
Quando , 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
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
Estime o Poisson e interprete para
public.Compare média e variância de
docvise execute o teste de dispersão.Estime a binomial negativa e compare AIC com o Poisson.
Compare erros-padrão Poisson convencionais e robustos.
Explique por que superdispersão não é sinônimo de excesso de zeros.
Probabilidades no modelo de Poisson
A função de probabilidade é com . 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 representa exposição, um modelo de taxa pode escrever onde 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
Calcule IRRs e intervalos de confiança do Poisson e da binomial negativa.
Crie uma variável de exposição simulada e estime um modelo com offset.
Compare valores previstos de Poisson e NB para observações com alta contagem.
Explique a diferença conceitual entre excesso de zeros, superdispersão e censura.
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 é
1. Defina a pergunta antes do estimador
Uma pergunta como “qual é o efeito de sobre ?” 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:
definição;
unidade de medida;
fonte;
frequência temporal;
regras de construção;
tratamento de valores ausentes e extremos.
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.RO 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-.
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
A pergunta está claramente definida?
A unidade de observação está explícita?
As unidades das variáveis estão corretas?
O número de observações da regressão é o esperado?
Valores ausentes alteraram a amostra entre modelos?
A especificação é motivada antes dos resultados?
Os erros-padrão refletem a estrutura de dependência dos dados?
A interpretação distingue associação, previsão e causalidade?
As análises de robustez relevantes foram reportadas, inclusive as desfavoráveis?
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:
motivação e hipótese;
descrição da base e dicionário de variáveis;
duas figuras descritivas;
especificação econométrica;
tabela principal;
um diagnóstico relevante;
pelo menos duas análises de robustez justificadas;
interpretação econômica das magnitudes;
limitações e condições necessárias para uma interpretação causal;
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.mdDados 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
O projeto roda a partir de uma sessão limpa?
Todos os caminhos são relativos à raiz do projeto?
O README informa ordem de execução?
Existe distinção entre dados brutos e processados?
Sementes aleatórias estão fixadas quando necessário?
Tabelas e figuras são geradas por código?
A versão do R e dos principais pacotes foi registrada?
As restrições de acesso ou licença dos dados estão documentadas?
O script principal falha de forma informativa se faltar uma dependência?
Outra pessoa consegue reproduzir os resultados sem intervenção manual?
Exercícios adicionais
Reorganize um trabalho antigo seu segundo a estrutura de pastas apresentada.
Construa um README que permita a um colega reproduzir uma tabela e uma figura.
Escolha um resultado empírico e liste cinco ameaças à validade e uma verificação de robustez para cada uma.
Gere automaticamente uma tabela LaTeX a partir de dois objetos de regressão.
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 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.
| 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 não é substantivamente diferente de outro com . 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
A variável dependente está explicitamente identificada?
A unidade dos coeficientes está clara?
O número de observações está reportado?
A amostra muda entre colunas? Se sim, isso está explicado?
Erros-padrão robustos ou agrupados estão descritos?
Efeitos fixos estão indicados?
As notas permitem entender a especificação sem reler toda a metodologia?
O texto interpreta magnitudes, não apenas valores-?
Exercícios
Pegue uma tabela de regressão antiga e reescreva suas notas para torná-la autossuficiente.
Produza um gráfico de coeficientes para três especificações.
Reescreva cinco frases causais como associações e discuta quando a linguagem causal seria defensável.
Compare uma tabela com estrelas e uma sem estrelas, mas com intervalos de confiança.
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
em que algumas colunas de são endógenas. Seja a matriz de instrumentos, contendo instrumentos excluídos e regressoras exógenas. A matriz de projeção sobre o espaço gerado por é
O estimador de mínimos quadrados em dois estágios pode ser escrito diretamente como
Essa expressão é útil porque revela o que o primeiro estágio faz: substitui a variação potencialmente endógena de por sua projeção linear em .
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
.
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:
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 . 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
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 e . 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
,
com estatística
para o único instrumento excluído. A estimativa OLS do retorno à
educação é aproximadamente
,
enquanto a estimativa 2SLS exatamente identificada fica em torno de
,
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
- Reproduza a estimativa matricial de 2SLS para Mroz sem construir explicitamente a matriz , usando produtos cruzados.
- Compare erros-padrão homocedásticos e HC1 no modelo IV.
- Reestime Mroz usando apenas
motheduce depois apenasfatheduc. Discuta precisão e interpretação. - No exemplo de Card, inclua também
nearc2e avalie como mudam o primeiro estágio e a estimativa 2SLS. - 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
com
A transformação within remove , mas preserva a correlação entre e . 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 . Depois da transformação,
O estimador FE-IV é
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
.
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
,
e sua estatística
é 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
.
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
- Mostre algebricamente que a transformação within aplicada a uma variável invariável no tempo produz zero.
- Reestime o exemplo
airfaresem dummies de ano. Explique o que muda na identificação. - 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. - Obtenha erros-padrão agrupados por rota e compare com a matriz convencional.
- 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
A transformação within elimina , mas permanece correlacionado com . Com pequeno, o viés não desaparece rapidamente quando cresce.
Primeiras diferenças
Diferenciando,
O problema continua porque
Sob ausência de correlação serial apropriada em , níveis suficientemente defasados de podem instrumentar a variável dependente defasada em diferenças:
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 como instrumento de .
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 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 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 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
e
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
- Mostre por que pode ser ortogonal a sob ausência de autocorrelação serial em .
- Reestime
m_ab1usando apenaslag(lwage, 2:3)como instrumentos e compare. - Aumente deliberadamente a faixa de defasagens e registre quantos instrumentos são produzidos.
- Explique a diferença entre rejeitar AR(1) e AR(2) no teste de Arellano–Bond.
- 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 ,
A contribuição individual para a verossimilhança é
e a log-verossimilhança é
No probit, ; no logit, .
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 + kidsge6O 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 a , 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
para educ,
para exper e
para kidslt6.
Probit estimado
manualmente com optim()
Construímos a matriz
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,
quando
é 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,
library(marginaleffects)
avg_slopes(m_probit)Na auditoria, o efeito marginal médio de educ no probit
é aproximadamente
,
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- de McFadden pode ser calculado por
1 - as.numeric(logLik(m_probit)) /
as.numeric(logLik(m_probit0))A reprodução independente fornece aproximadamente . 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
- Reescreva a log-verossimilhança do probit usando
dbinom()e probabilidades previstas. - Compare
optim()com diferentes valores iniciais. - Verifique numericamente que
solve(opt_probit$hessian)reproduz aproximadamentevcov(m_probit). - Calcule efeitos marginais no valor médio dos regressores e compare com efeitos marginais médios.
- Mostre por que pseudo- não possui a mesma interpretação do 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
e
,
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
para lhinc e
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,
a estimação de um parâmetro para cada indivíduo gera o problema de parâmetros incidentais quando é pequeno. Diferentemente do logit, não há uma transformação condicional simples que elimine 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:
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
,
enquanto mean_lhinc fica próximo de
.
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
pglmpara 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 altera causalmente a chance de participar em . Esses mecanismos são diferentes.
Um modelo dinâmico binário,
exige hipóteses adicionais sobre condições iniciais e distribuição de . 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
- Compare erros-padrão usuais e agrupados no pooled probit.
- Calcule a proporção de indivíduos que nunca mudam
lfpe discuta sua contribuição para FE-logit. - Reestime o modelo de Mundlak adicionando médias individuais de outras covariáveis que variam no tempo.
- Compare o sinal e a magnitude de
kidsno pooled probit, LPM-FE e especificação Mundlak. - Explique por que um probit com milhares de dummies individuais e 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, Para uma variável contínua com densidade , A esperança é uma propriedade da distribuição, não necessariamente um valor observado na amostra.
Variância e desvio-padrão
O desvio-padrão é a raiz da variância e retorna à unidade original da variável.
Covariância e correlação
A correlação normaliza a covariância: Correlação zero não implica independência em geral.
Esperança condicional
A função é central para regressão. Ela descreve a média de entre unidades com determinado valor de . O modelo linear aproxima essa função por uma reta ou hiperplano.
Lei das expectativas iteradas
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 , 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 tem caudas mais pesadas que a normal para poucos graus de liberdade.
Qui-quadrado e F
Distribuições e 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 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 com .
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 . Entre estimadores comparáveis, maior eficiência significa menor variância sob um conjunto de hipóteses.
Exercícios
Gere 1.000 observações normais e compare média/variância amostrais com os parâmetros usados.
Mostre por simulação que correlação zero não garante independência construindo com simétrico.
Ilustre a lei dos grandes números com uma distribuição uniforme.
Repita a ilustração do TCL para amostras de tamanho 5, 30 e 100.
Obtenha valores críticos de normal, , e 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 é onde é , é , é e é .
Estimador MQO
Minimizamos As condições de primeira ordem são portanto desde que 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 Então A matriz projeta no espaço gerado pelas colunas de .
Matriz annihilator
e os resíduos são Como , os resíduos são ortogonais às colunas de .
Variância de MQO
Sob homocedasticidade, A estimativa usual substitui por
Heterocedasticidade em notação matricial
Se então Essa fórmula é a origem dos estimadores robustos tipo sanduíche.
FWL matricial
Se , o coeficiente de pode ser obtido regressando em . O teorema mostra por que regressão múltipla usa a parte residualizada de cada regressor.
2SLS em matrizes
Com instrumentos , e A expressão deixa claro que 2SLS substitui a variação total de por sua projeção no espaço dos instrumentos.
Exercícios
Reproduza uma regressão múltipla com operações matriciais.
Verifique numericamente que é aproximadamente zero.
Mostre que .
Mostre que .
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
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 . 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 Estime o modelo com e sem . Como afeta e é correlacionado com , a regressão curta atribui parte do efeito de a .
Instrumentos fracos
Simule com diferentes valores de . À medida que 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
Estude o viés e a variância de MQO para , 50 e 500.
Compare cobertura de intervalos clássicos e robustos sob heterocedasticidade.
Simule variável omitida com correlação positiva e negativa.
Mostre a deterioração de 2SLS quando o primeiro estágio enfraquece.
Compare intervalo bootstrap percentil com o intervalo 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 . No modelo a nova inclinação é . 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 , calcule O valor- 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 e 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 , uma unidade adicional em dobra as odds. Se a probabilidade inicial é 0,2, as odds são . Dobrando para 0,5, a nova probabilidade é , não 0,4.
Contagem: interpretação de IRR
Se , a IRR é . Mantidos os demais regressores, uma unidade adicional em 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
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.Compare modelos linear, linear-log e log-log. Escolha um e justifique sem usar apenas .
Simule 1.000 amostras de uma regressão simples e estime cobertura dos intervalos.
Crie heterocedasticidade artificial e compare erros clássicos, HC1 e HC3.
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
Desenhe um DAG simples para uma relação entre educação e salário com habilidade não observada. Discuta controles possíveis.
Construa um DiD 2x2 simulado e recupere o efeito por quatro médias e por regressão.
Simule uma violação de tendências paralelas.
Crie um instrumento válido em dados simulados e compare OLS e 2SLS.
Enfraqueça progressivamente o primeiro estágio e registre erro-padrão e distribuição do estimador IV.
Bloco III: séries temporais
Simule AR(1) para quatro valores de e compare persistência.
Gere duas caminhadas aleatórias independentes e documente regressão espúria.
Estime ADF com diferentes componentes determinísticos e explique por que os resultados mudam.
Construa um VAR bivariado simulado, estime IRF e inverta a ordem de Cholesky.
Simule um GARCH(1,1) e examine o agrupamento de volatilidade.
Bloco IV: painel e respostas não lineares
Use
nls_panel.csvpara comparar pooled, FE e RE.Calcule erros agrupados por indivíduo e compare com erros convencionais.
Use
transport.csvpara estimar LPM, logit e probit.Compare probabilidades previstas e efeitos marginais.
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
Escreva uma função que devolva coeficiente, erro-padrão e de uma regressão simples.
Automatize a estimação de cinco especificações e reúna os coeficientes em um data frame.
Crie verificações com
stopifnot()para uma base de sua pesquisa.Escreva um script mestre que execute um pequeno projeto do início ao fim.
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
aprofundar álgebra matricial e teoria assintótica;
estudar identificação causal e desenhos quase experimentais;
avançar em séries temporais e previsão;
aprender microeconometria de painel e modelos não lineares;
desenvolver programação reproduzível, versionamento e testes;
replicar artigos publicados antes de construir modelos cada vez mais complexos.