Aula Prática - Variáveis Instrumentais

1 Introdução

Nesta aula prática, replicaremos os principais resultados do Capítulo 12 de Stock e Watson (2020), que trata de Regressão por Variáveis Instrumentais (VI). A aplicação empírica central explora a seguinte pergunta: qual é a elasticidade-preço da demanda por cigarros nos Estados Unidos?

Estimar essa elasticidade é uma questão de política pública relevante: se a elasticidade for alta, um aumento de impostos reduz substancialmente o consumo; se for baixa, o mesmo aumento arrecada mais receita, mas pouco altera o comportamento dos fumantes.

O desafio econométrico é que preço e quantidade são determinados simultaneamente pelo mercado — preço e quantidade são endógenos. Isso significa que uma simples regressão de MQO de \(\ln(Q)\) sobre \(\ln(P)\) não estima consistentemente a elasticidade da demanda. A solução é encontrar uma variável instrumental (VI): uma variável que afeta o preço sem afetar diretamente a demanda — ou seja, que desloca a curva de oferta sem afetar a curva de demanda.

2 Pacotes e Dados

Os pacotes utilizados nesta aula são:

library(AER)             # pacote com dados do livro
library(tidyverse)       # manipulação e visualização de dados
library(fixest)          # estimação por MQO, MQ2E (TSLS) e outros
library(modelsummary)    # tabelas de comparação de modelos
library(gt)              # tabelas com qualidade de publicação
library(gtExtras)        # temas adicionais para gt
library(sandwich)        # erros-padrão robustos
library(lmtest)          # testes com erros-padrão robustos
library(car)             # testes de hipóteses (linearHypothesis)

A base de dados CigarettesSW está disponível no pacote AER. Ela contém dados anuais de 48 estados contíguos dos EUA para os anos de 1985 e 1995.1

1 Os dados são descritos no Apêndice 12.1 do livro. A base originalmente possui 96 observações (48 estados × 2 anos).

data("CigarettesSW", package = "AER")
glimpse(CigarettesSW)
Rows: 96
Columns: 9
$ state      <fct> AL, AR, AZ, CA, CO, CT, DE, FL, GA, IA, ID, IL, IN, KS, KY,…
$ year       <fct> 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985,…
$ cpi        <dbl> 1.076, 1.076, 1.076, 1.076, 1.076, 1.076, 1.076, 1.076, 1.0…
$ population <dbl> 3973000, 2327000, 3184000, 26444000, 3209000, 3201000, 6180…
$ packs      <dbl> 116.4863, 128.5346, 104.5226, 100.3630, 112.9635, 109.2784,…
$ income     <dbl> 46014968, 26210736, 43956936, 447102816, 49466672, 60063368…
$ tax        <dbl> 32.50000, 37.00000, 31.00000, 26.00000, 31.00000, 42.00000,…
$ price      <dbl> 102.18167, 101.47500, 108.57875, 107.83734, 94.26666, 128.0…
$ taxs       <dbl> 33.34834, 37.00000, 36.17042, 32.10400, 31.00000, 51.48333,…

2.1 Dicionário de variáveis originais

Variável Descrição
state Estado (sigla)
year Ano (1985 ou 1995)
cpi Índice de preços ao consumidor (CPI)
population População do estado
packs Pacotes de cigarros vendidos per capita
income Renda pessoal total do estado (nominal)
tax Impostos estaduais + federais por pacote (em centavos)
price Preço médio por pacote, incluindo todos os impostos (em centavos)
taxs Impostos totais + imposto geral sobre vendas (sales tax) por pacote

3 Preparação dos Dados

Construímos as variáveis de interesse seguindo o Apêndice 12.1 do livro. O preço real é deflacionado pelo CPI; a renda é calculada em termos per capita e também deflacionada. Os instrumentos são construídos como a componente de imposto geral sobre vendas (SalesTax) e o imposto de excise total (CigTax), ambos em termos reais.

cigs <- CigarettesSW |>
  mutate(
    rprice   = price / cpi,                        # preço real por pacote
    rincome  = income / (population * cpi),        # renda real per capita
    salestax = (taxs - tax) / cpi,                 # imposto geral s/ vendas (real)
    cigtax   = tax / cpi                           # imposto de excise total (real)
  )

Como o objetivo é estimar a elasticidade de longo prazo da demanda, o livro utiliza diferenças de 10 anos (1995 − 1985) para cada estado. Essa abordagem elimina fatores fixos no tempo que variam entre estados (como tradições culturais de fumo), controlando para potenciais variáveis omitidas.2

2 Essa estratégia é análoga à regressão em diferenças com \(T=2\) períodos discutida no Capítulo 10. A diferença de 10 anos captura o efeito de longo prazo porque cigarros são aditivos: no curto prazo, consumidores respondem pouco a variações de preço, mas no longo prazo a resposta é maior.

# Reformatar para wide e calcular diferenças
cigs_diff <- cigs |>
  select(state, year, packs, rprice, rincome, salestax, cigtax) |>
  group_by(state) |> 
  # 
  # pivot_wider(
  #   names_from  = year,
  #   values_from = c(packs, rprice, rincome, salestax, cigtax)
  # ) |>
  mutate(
    # Variáveis em log-diferença (variações percentuais aprox.)
    d_ln_packs   = log(packs) - lag(log(packs)),
    d_ln_rprice  = log(rprice)  - lag(log(rprice)),
    d_ln_rincome = log(rincome) - lag(log(rincome)),
    # Instrumentos: diferença nos impostos (em nível real)
    d_salestax   = salestax - lag(salestax),
    d_cigtax     = cigtax   - lag(cigtax)
  )

glimpse(cigs_diff)
Rows: 96
Columns: 12
Groups: state [48]
$ state        <fct> AL, AR, AZ, CA, CO, CT, DE, FL, GA, IA, ID, IL, IN, KS, K…
$ year         <fct> 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 1985, 198…
$ packs        <dbl> 116.4863, 128.5346, 104.5226, 100.3630, 112.9635, 109.278…
$ rprice       <dbl> 94.96438, 94.30762, 100.90962, 100.22058, 87.60842, 118.9…
$ rincome      <dbl> 10.763866, 10.468165, 12.830456, 15.713321, 14.326190, 17…
$ salestax     <dbl> 0.7884121, 0.0000000, 4.8052211, 5.6728627, 0.0000000, 8.…
$ cigtax       <dbl> 30.20447, 34.38662, 28.81041, 24.16357, 28.81041, 39.0334…
$ d_ln_packs   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ d_ln_rprice  <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ d_ln_rincome <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ d_salestax   <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…
$ d_cigtax     <dbl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, N…

4 Análise Exploratória

4.1 O problema da causalidade simultânea

A Figura 1 mostra o diagrama de dispersão entre \(\Delta \ln(P^{cigarros})\) e \(\Delta \ln(Q^{cigarros})\) para os 48 estados. Intuitivamente, esperaríamos uma relação negativa: estados com maiores aumentos de preço deveriam ter maiores quedas no consumo. A linha de MQO mostra justamente isso — mas o estimador de MQO não é consistente aqui.

cigs_diff |>
  ggplot(aes(x = d_ln_rprice, y = d_ln_packs)) +
  geom_point(color = "#1565C0", alpha = 0.7, size = 2) +
  geom_smooth(method = "lm", se = TRUE, color = "#C62828", linewidth = 0.9) +
  labs(
    x        = "Δ ln(preço real)",
    y        = "Δ ln(consumo per capita)",
    title    = "Variação no Preço Real e no Consumo de Cigarros",
    subtitle = "Diferenças de 10 anos (1995 − 1985) — 48 estados dos EUA"
  ) +
  theme_minimal(base_size = 13)
Figura 1: Variação do preço real e do consumo de cigarros entre 1985 e 1995

Por que MQO não funciona aqui? Quando a demanda por cigarros aumenta (por exemplo, em estados onde fumar é mais aceito culturalmente), os produtores respondem com preços mais altos. Isso significa que o preço \(P_i\) é correlacionado com o erro \(u_i\) da equação de demanda — viola a hipótese de exogeneidade do MQO. O estimador de MQO captura uma mistura das elasticidades de demanda e oferta, não apenas a elasticidade da demanda.

4.2 Relação dos instrumentos com o preço

A Figura 2 mostra a correlação entre os dois instrumentos e a variação no preço real. Um instrumento válido precisa ser relevante (correlacionado com o preço) e exógeno (não correlacionado com o erro da demanda).

p1 <- cigs_diff |>
  ggplot(aes(x = d_salestax, y = d_ln_rprice)) +
  geom_point(color = "#1B5E20", alpha = 0.7, size = 2) +
  geom_smooth(method = "lm", se = FALSE, color = "#C62828", linewidth = 0.9) +
  labs(
    x     = "Δ imposto s/ vendas (SalesTax, real)",
    y     = "Δ ln(preço real)",
    title = "Instrumento 1: SalesTax"
  ) +
  theme_minimal(base_size = 12)

p2 <- cigs_diff |>
  ggplot(aes(x = d_cigtax, y = d_ln_rprice)) +
  geom_point(color = "#1B5E20", alpha = 0.7, size = 2) +
  geom_smooth(method = "lm", se = FALSE, color = "#C62828", linewidth = 0.9) +
  labs(
    x     = "Δ imposto de excise (CigTax, real)",
    y     = "Δ ln(preço real)",
    title = "Instrumento 2: CigTax"
  ) +
  theme_minimal(base_size = 12)

library(patchwork)
p1 + p2
Figura 2: Correlação entre os instrumentos e a variação no preço real

Ambos os instrumentos mostram correlação positiva com o preço — estados com maiores aumentos de impostos tiveram maiores aumentos de preço. Isso é consistente com a condição de relevância do instrumento.

5 Variáveis Instrumentais e MQ2E

5.1 Conceito

Quando o regressor \(X_i\) é correlacionado com o erro \(u_i\), uma variável instrumental \(Z_i\) permite isolar a parte de \(X_i\) que é exógena. Um instrumento válido deve satisfazer duas condições:

  1. Relevância: \(\text{corr}(Z_i, X_i) \neq 0\) — o instrumento deve ser correlacionado com o regressor endógeno.
  2. Exogeneidade: \(\text{corr}(Z_i, u_i) = 0\) — o instrumento não deve ser correlacionado com o erro da equação de interesse.

No nosso caso, os impostos sobre cigarros afetam o preço (relevância), e variam principalmente por razões políticas e fiscais alheias à demanda por cigarros (exogeneidade — ao menos como hipótese de trabalho).

5.2 Estimador de Mínimos Quadrados em Dois Estágios (MQ2E / TSLS)

O MQ2E (ou TSLS, do inglês Two-Stage Least Squares) é o estimador mais comum de VI e funciona em dois passos:

Primeiro estágio: Regride o regressor endógeno \(X_i\) sobre o(s) instrumento(s) e as variáveis exógenas incluídas: \[X_i = \pi_0 + \pi_1 Z_i + \pi_2 W_i + v_i\]

Segundo estágio: Substitui \(X_i\) pelo seu valor ajustado \(\hat{X}_i\) do primeiro estágio e regride \(Y_i\) sobre \(\hat{X}_i\) e \(W_i\): \[Y_i = \beta_0 + \beta_1 \hat{X}_i + \beta_2 W_i + u_i\]

O valor ajustado \(\hat{X}_i\) contém apenas a parte de \(X_i\) explicada pelo instrumento — que, se o instrumento for exógeno, é a parte não correlacionada com \(u_i\). O estimador resultante é consistente.

Em termos formais, com um único regressor e instrumento, o estimador TSLS tem a forma: \[\hat{\beta}_1^{TSLS} = \frac{s_{ZY}}{s_{ZX}} \xrightarrow{p} \frac{\text{cov}(Z_i, Y_i)}{\text{cov}(Z_i, X_i)} = \beta_1\]

Na prática, utilizamos o pacote fixest com a função feols(). A sintaxe para VI é:

feols(Y ~ W | X ~ Z, data = dados, vcov = "hetero")

onde W são os controles exógenos, X é o regressor endógeno e Z é o instrumento.

6 Estimação em Corte Transversal (1995)

Antes de usar o painel de diferenças, examinamos o corte transversal de 1995. Isso reproduz os resultados da Seção 12.1 e permite comparar MQO com MQ2E.

cigs95 <- cigs |>
  filter(year == "1995") |>
  mutate(
    ln_packs   = log(packs),
    ln_rprice  = log(rprice),
    ln_rincome = log(rincome)
  )

6.1 Primeiro estágio (1995)

O primeiro estágio regride o log do preço real sobre o imposto de vendas (salestax). Isso verifica se o instrumento é de fato correlacionado com o preço.

primeiro_estagio_95 <- lm(ln_rprice ~ salestax, data = cigs95)

coeftest(primeiro_estagio_95, vcov = vcovHC(primeiro_estagio_95, "HC1"))

t test of coefficients:

             Estimate Std. Error  t value  Pr(>|t|)    
(Intercept) 4.6165463  0.0289177 159.6444 < 2.2e-16 ***
salestax    0.0307289  0.0048354   6.3549 8.489e-08 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

O coeficiente de salestax é positivo e altamente significativo (0,031, EP = 0,005), e o \(R^2\) do primeiro estágio é de 47.1%. Isso reproduz a Equação (12.9) do livro: estados com alíquota de imposto sobre vendas maior cobram preços mais altos por maços de cigarros.

6.2 MQO vs. MQ2E (1995)

Comparamos o estimador de MQO (inconsistente) com o MQ2E (consistente):

ols_95 <- feols(ln_packs ~ ln_rprice, data = cigs95, vcov = "hetero")

iv_95_sem_renda <- feols(ln_packs ~ 1 | ln_rprice ~ salestax,
                         data = cigs95, vcov = "hetero")

iv_95_com_renda <- feols(ln_packs ~ ln_rincome | ln_rprice ~ salestax,
                         data = cigs95, vcov = "hetero")
modelsummary(
  list(
    "MQO"              = ols_95,
    "MQ2E (s/ renda)" = iv_95_sem_renda,
    "MQ2E (c/ renda)" = iv_95_com_renda
  ),
  fmt      = 3,
  stars    = c("*" = 0.05, "**" = 0.01),
  coef_map = c(
    "ln_rprice"        = "ln(preço real)",
    "fit_ln_rprice"    = "ln(preço real)",
    "ln_rincome"       = "ln(renda real p.c.)",
    "(Intercept)"      = "Constante"
  ),
  gof_map  = list(list(raw = "nobs", clean = "Observações", fmt = 0)),
  notes    = "Erros-padrão robustos (HC). * p < 0,05; ** p < 0,01. Instrumento: SalesTax.",
  output   = "gt"
) |>
  tab_header(
    title    = md("**Elasticidade da Demanda por Cigarros — Corte Transversal 1995**"),
    subtitle = md("Variável dependente: ln(pacotes vendidos *per capita*)")
  ) |>
  tab_style(
    style     = cell_text(weight = "bold"),
    locations = cells_column_labels()
  ) |>
  opt_stylize(style = 6, color = "gray") |>
  tab_options(table.font.size = px(13))
Tabela 1: MQO e MQ2E — Corte Transversal 1995
Elasticidade da Demanda por Cigarros — Corte Transversal 1995
Variável dependente: ln(pacotes vendidos per capita)
MQO MQ2E (s/ renda) MQ2E (c/ renda)
ln(preço real) -1.213** -1.084** -1.143**
(0.195) (0.319) (0.372)
ln(renda real p.c.) 0.215
(0.312)
Constante 10.339** 9.720** 9.431**
(0.935) (1.528) (1.259)
Observações 48 48 48
* p < 0.05, ** p < 0.01
Erros-padrão robustos (HC). * p < 0,05; ** p < 0,01. Instrumento: SalesTax.

Leitura dos resultados: O estimador de MQO produz elasticidade de −1,21, enquanto o MQ2E com instrumento SalesTax (sem controle de renda) fornece −1,08. Com a inclusão da renda, o MQ2E retorna −1,14 (Equação 12.15 do livro). Embora as estimativas sejam próximas aqui, o MQO é inconsistente: o Teste de Wu-Hausman não rejeita endogeneidade neste corte transversal, mas a teoria econômica sustenta que causalidade simultânea está presente.

7 Estimação com Dados em Painel — Diferenças de 10 Anos

7.1 Estratégia de identificação

O painel de diferenças elimina fatores fixos entre estados. Os instrumentos são as variações de 10 anos nos impostos:

  • \(\Delta SalesTax_i = SalesTax_{i,1995} - SalesTax_{i,1985}\): variação no imposto geral sobre vendas
  • \(\Delta CigTax_i = CigTax_{i,1995} - CigTax_{i,1985}\): variação no imposto de excise total sobre cigarros

Esses impostos variam entre estados principalmente por decisões de política fiscal não relacionadas à demanda por cigarros, tornando-os candidatos plausíveis a instrumentos exógenos.

7.2 Primeiro estágio e diagnóstico de instrumento fraco

Antes do MQ2E, estimamos o primeiro estágio manualmente para obter o F-estatístico do primeiro estágio, que é o teste padrão para instrumentos fracos (Key Concept 12.5 do livro).

Regra prática: Um F-estatístico do primeiro estágio abaixo de 10 indica instrumento fraco. Com instrumentos fracos, o MQ2E é viesado em amostras finitas e os intervalos de confiança são não confiáveis.

fs_sales <- lm(d_ln_rprice ~ d_salestax + d_ln_rincome, data = cigs_diff)
fs_cig   <- lm(d_ln_rprice ~ d_cigtax   + d_ln_rincome, data = cigs_diff)
fs_ambos <- lm(d_ln_rprice ~ d_salestax + d_cigtax + d_ln_rincome, data = cigs_diff)

# F-estatístico robusto (HC1) — procedimento do livro
f_sales <- linearHypothesis(fs_sales, "d_salestax = 0",
                            vcov = vcovHC(fs_sales, "HC1"))[2, "F"]
f_cig   <- linearHypothesis(fs_cig,   "d_cigtax = 0",
                            vcov = vcovHC(fs_cig,   "HC1"))[2, "F"]
f_ambos <- linearHypothesis(fs_ambos, c("d_salestax = 0", "d_cigtax = 0"),
                            vcov = vcovHC(fs_ambos, "HC1"))[2, "F"]

modelsummary(
  list(
    "Instrumento: SalesTax"  = fs_sales,
    "Instrumento: CigTax"    = fs_cig,
    "Ambos os instrumentos"  = fs_ambos
  ),
  fmt      = 3,
  vcov     = ~ state,
  stars    = c("*" = 0.05, "**" = 0.01),
  coef_map = c(
    "d_salestax"   = "Δ SalesTax",
    "d_cigtax"     = "Δ CigTax",
    "d_ln_rincome" = "Δ ln(renda real p.c.)",
    "(Intercept)"  = "Constante"
  ),
  add_rows = tribble(
    ~term,                         ~`Instrumento: SalesTax`, ~`Instrumento: CigTax`, ~`Ambos os instrumentos`,
    "F-estat. 1º estágio (HC1)",   as.character(round(f_sales, 1)),
                                   as.character(round(f_cig,   1)),
                                   as.character(round(f_ambos, 1))
  ),
  gof_map  = list(list(raw = "nobs", clean = "Observações", fmt = 0)),
  notes    = "Variável dependente: Δ ln(preço real). Erros-padrão robustos (HC1). * p < 0,05; ** p < 0,01.",
  output   = "gt"
) |>
  tab_header(
    title    = md("**Primeiro Estágio — MQ2E**"),
    subtitle = md("Diferenças de 10 anos (1995 − 1985) — 48 estados")
  ) |>
  # tab_style(
  #   style     = cell_text(weight = "bold"),
  #   locations = cells_column_labels()
  # ) |>
  # tab_style(
  #   style     = cell_fill(color = "#EBF5FB"),
  #   locations = cells_body(rows = term == "F-estat. 1º estágio (HC1)")
  # ) |>
  opt_stylize(style = 6, color = "gray") |>
  tab_options(table.font.size = px(13))
Tabela 2: Primeiro Estágio — Variação no Log do Preço Real
Primeiro Estágio — MQ2E
Diferenças de 10 anos (1995 − 1985) — 48 estados
Instrumento: SalesTax Instrumento: CigTax Ambos os instrumentos
Δ SalesTax 0.025** 0.013**
(0.004) (0.003)
Δ CigTax 0.010** 0.008**
(0.001) (0.001)
Δ ln(renda real p.c.) -0.224 0.029 -0.029
(0.219) (0.131) (0.124)
Constante 0.184** 0.155** 0.144**
(0.030) (0.020) (0.018)
Observações 48 48 48
F-estat. 1º estágio (HC1) 33.7 107.2 88.6
* p < 0.05, ** p < 0.01
Variável dependente: Δ ln(preço real). Erros-padrão robustos (HC1). * p < 0,05; ** p < 0,01.

Os três F-estatísticos (33,7; 107,2; 88,6) estão bem acima de 10, confirmando que os instrumentos não são fracos. O imposto de excise (CigTax) é o instrumento individualmente mais forte — faz sentido, pois é um imposto diretamente sobre cigarros e varia mais entre estados.

8 Replicando a Tabela 12.1

Estimamos três especificações por MQ2E, correspondendo às três colunas da Tabela 12.1 do livro. O modelo de interesse é:

\[\Delta \ln(Q_i^{cig}) = \beta_0 + \beta_1 \Delta \ln(P_i^{cig}) + \beta_2 \Delta \ln(Inc_i) + u_i\]

onde \(\Delta \ln(P_i^{cig})\) é endógeno e instrumentado pelos impostos.

# Coluna (1): SalesTax como instrumento
MQ2E_1 <- feols(d_ln_packs ~ d_ln_rincome | d_ln_rprice ~ d_salestax,
                 data = cigs_diff, vcov = "hetero")

# Coluna (2): CigTax como instrumento
MQ2E_2 <- feols(d_ln_packs ~ d_ln_rincome | d_ln_rprice ~ d_cigtax,
                 data = cigs_diff, vcov = "hetero")

# Coluna (3): Ambos os instrumentos (sobreidentificado)
MQ2E_3 <- feols(d_ln_packs ~ d_ln_rincome | d_ln_rprice ~ d_salestax + d_cigtax,
                 data = cigs_diff, vcov = "hetero")
# Estatísticas adicionais para a tabela
j_stat  <- round(fitstat(MQ2E_3, "sargan")[[1]][[1]], 2)
j_pval  <- round(fitstat(MQ2E_3, "sargan")[[1]][[3]], 3)

modelsummary(
  list(
    "(1) SalesTax"    = MQ2E_1,
    "(2) CigTax"      = MQ2E_2,
    "(3) Ambos"       = MQ2E_3
  ),
  fmt      = 2,
  stars    = c("*" = 0.05, "**" = 0.01),
  coef_map = c(
    "fit_d_ln_rprice" = "Δ ln(preço real)",
    "d_ln_rincome"    = "Δ ln(renda real p.c.)",
    "(Intercept)"     = "Constante"
  ),
  add_rows = tribble(
    ~term,                            ~`(1) SalesTax`, ~`(2) CigTax`, ~`(3) Ambos`,
    "Instrumento(s)",                 "SalesTax",      "CigTax",      "SalesTax + CigTax",
    "F-estat. 1º estágio (HC1)",      "33,7",          "107,2",       "88,6",
    "Teste J (p-valor)",              "—",             "—",           paste0(j_stat, " (", j_pval, ")")
  ),
  gof_map  = list(list(raw = "nobs", clean = "Observações", fmt = 0)),
  notes    = "Erros-padrão robustos (HC) entre parênteses. * p < 0,05; ** p < 0,01. Variável dependente: Δ ln(pacotes vendidos per capita). Diferenças de 10 anos (1995 − 1985), 48 estados.",
  output   = "gt"
) |>
  tab_header(
    title    = md("**Tabela 12.1 — Estimativas MQ2E da Demanda por Cigarros**"),
    subtitle = md("Variável dependente: Δ ln(*Q*) = Δ ln(pacotes vendidos *per capita*)")
  ) |>
  # tab_style(
  #   style     = cell_text(weight = "bold"),
  #   locations = cells_column_labels()
  # ) |>
  # tab_style(
  #   style     = cell_fill(color = "#EBF5FB"),
  #   locations = cells_body(rows = term == "Δ ln(preço real)")
  # ) |>
  opt_stylize(style = 6, color = "gray") |>
  tab_options(table.font.size = px(13))
Tabela 3: MQ2E da Demanda por Cigarros — Painel de 48 Estados (1985–1995)
Tabela 12.1 — Estimativas MQ2E da Demanda por Cigarros
Variável dependente: Δ ln(Q) = Δ ln(pacotes vendidos per capita)
(1) SalesTax (2) CigTax (3) Ambos
Δ ln(preço real) -0.94** -1.34** -1.20**
(0.21) (0.23) (0.20)
Δ ln(renda real p.c.) 0.53 0.43 0.46
(0.34) (0.30) (0.31)
Constante -0.12 -0.02 -0.05
(0.07) (0.07) (0.06)
Observações 48 48 48
Instrumento(s) SalesTax CigTax SalesTax + CigTax
F-estat. 1º estágio (HC1) 33,7 107,2 88,6
Teste J (p-valor) 4.84 (1)
* p < 0.05, ** p < 0.01
Erros-padrão robustos (HC) entre parênteses. * p < 0,05; ** p < 0,01. Variável dependente: Δ ln(pacotes vendidos per capita). Diferenças de 10 anos (1995 − 1985), 48 estados.

8.1 Interpretação dos coeficientes

Elasticidade-preço da demanda: O coeficiente de \(\Delta \ln(P)\) é a elasticidade de longo prazo da demanda por cigarros.

  • Coluna (1), instrumento SalesTax: elasticidade = −0,94
  • Coluna (2), instrumento CigTax: elasticidade = −1,34
  • Coluna (3), ambos os instrumentos: elasticidade = −1,20

Em todos os casos, a demanda por cigarros é elástica no longo prazo (\(|\beta_1| > 1\)): um aumento de preço de 1% reduz o consumo em mais de 1%. Isso pode surpreender dado o caráter aditivo do produto, mas lembre-se que estamos medindo a resposta de longo prazo — dez anos são tempo suficiente para mudanças de comportamento.

Elasticidade-renda: O coeficiente da renda é positivo em todas as especificações (cigarros são um bem normal), mas não é estatisticamente significativo ao nível de 5%.

9 Verificação da Validade dos Instrumentos

9.1 Condição 1 — Relevância

A relevância é verificada pelo F-estatístico do primeiro estágio (Key Concept 12.5):

Instrumento F-estat. 1º estágio Conclusão
SalesTax 33,7 Não fraco (F > 10) ✓
CigTax 107,2 Não fraco (F > 10) ✓
Ambos 88,6 Não fraco (F > 10) ✓

9.2 Condição 2 — Exogeneidade e Teste J

A exogeneidade não pode ser testada diretamente quando o modelo é exatamente identificado (colunas 1 e 2). Quando há mais instrumentos do que variáveis endógenas (sobreidentificação), como na coluna (3), podemos aplicar o Teste J de restrições sobreidentificadoras (Key Concept 12.6).

Ideia do teste: Se ambos os instrumentos são exógenos, as estimativas de MQ2E usando cada instrumento individualmente devem ser próximas. Se forem muito diferentes, pelo menos um instrumento viola a exogeneidade.

# Estatistica J automaticamente via fitstat()
fitstat(MQ2E_3, "sargan")
Sargan: stat = 4.8380, p = 0.027838, on 1 DoF.

O Teste J retorna estatística de 4.84 com p-valor de 1, rejeitando a hipótese nula de que ambos os instrumentos são exógenos ao nível de 5% (valor crítico \(\chi^2_1 = 3,84\)).

Isso levanta uma bandeira: as estimativas usando SalesTax (−0,94) e CigTax (−1,34) divergem bastante. O livro argumenta que o caso para a exogeneidade do SalesTax é mais forte — o imposto geral sobre vendas é determinado por considerações fiscais gerais do estado, não pela dinâmica específica do mercado de cigarros. Já o CigTax pode ser influenciado por lobbies da indústria tabagista. Portanto, a estimativa preferida do livro é a da coluna (1): elasticidade de longo prazo ≈ −0,94.

9.3 Visualização: MQO vs. MQ2E

A Figura 3 compara visualmente as estimativas de MQO e das três especificações de MQ2E.

ols_diff <- feols(d_ln_packs ~ d_ln_rprice + d_ln_rincome,
                  data = cigs_diff, vcov = "hetero")

modelos_lista <- list(
  "MQO"           = ols_diff,
  "MQ2E: SalesTax" = MQ2E_1,
  "MQ2E: CigTax"   = MQ2E_2,
  "MQ2E: Ambos"    = MQ2E_3
)

modelplot(
  modelos_lista,
  coef_map = c(
    "d_ln_rprice"     = "Δ ln(preço real) — MQO",
    "fit_d_ln_rprice" = "Δ ln(preço real) — MQ2E"
  ),
  color = c("#C62828", "#1565C0", "#2E7D32", "#6A1B9A")
) +
  geom_vline(xintercept = 0, linetype = "dashed", color = "gray50") +
  labs(
    x     = "Elasticidade estimada (IC 95%)",
    y     = NULL,
    title = "Estimativas da Elasticidade-Preço da Demanda por Cigarros"
  ) +
  theme_minimal(base_size = 12) +
  theme(legend.position = "bottom")
Figura 3: Estimativas da elasticidade-preço: MQO vs. MQ2E

O gráfico ilustra dois padrões importantes: (i) as estimativas de MQ2E são mais negativas do que a de MQO, sugerindo que o MQO subestima (em valor absoluto) a elasticidade; e (ii) os intervalos de confiança do MQ2E são mais largos, refletindo a perda de precisão ao usar apenas a variação exógena nos preços — um custo inevitável da identificação por VI.

10 Atividade

Leia as Seções 12.1 a 12.5 do livro e responda às perguntas abaixo:

  1. Causalidade simultânea: Explique com suas palavras por que o estimador de MQO da elasticidade da demanda por cigarros é inconsistente. Qual é o sentido esperado do viés? (Dica: pense no que acontece com o preço quando a demanda por cigarros sobe inesperadamente em um estado.)

  2. Condições do instrumento: O imposto geral sobre vendas (SalesTax) é um instrumento plausível para o preço dos cigarros?

    1. Argumente em favor da relevância: por que o imposto sobre vendas deveria afetar o preço dos cigarros?
    2. Argumente em favor da exogeneidade: por que o imposto sobre vendas seria não correlacionado com outros fatores que determinam a demanda por cigarros?
    3. Você consegue pensar em algum cenário em que a exogeneidade seria violada?
  3. Interpretação econômica: Com base na coluna (1) da Tabela 12.1, a elasticidade estimada é −0,94. Para reduzir o consumo de cigarros em 20%, quanto o preço precisaria subir? E se a elasticidade fosse −0,5 (mais inelástica)?

  4. Teste J e o dilema dos instrumentos: O Teste J da coluna (3) rejeita a hipótese de que ambos os instrumentos são exógenos (p-valor ≈ 0,026). O livro conclui que SalesTax é o instrumento mais credível e descarta CigTax. Você concorda com esse argumento? Que evidência adicional ajudaria a discriminar qual instrumento é problemático?

  5. Extensão — elasticidade de curto prazo: O livro menciona (p. 454) que a elasticidade estimada com variações de 5 anos (1985–1990) usando SalesTax é −0,79, e com variações de 5 anos (1990–1995) é −0,68. Sem fazer o exercício no R, o que esses resultados sugerem sobre a diferença entre elasticidade de curto e longo prazo da demanda por cigarros?