library(plm)
library(sandwich)
library(lmtest)
library(stargazer)
library(ggplot2)
suppressMessages(library(dplyr))
theme_set(theme_minimal(base_size = 11) +
theme(panel.grid.minor = element_blank(),
legend.position = "bottom",
legend.title = element_blank()))
az <- "#1f4e79"; vm <- "#b3261e"; vd <- "#2e7d32"; cz <- "grey45"Mais armas, menos crime?
Dados em painel e efeitos fixos — painel Guns, 51 estados americanos, 1977–1999
Laboratório da Aula 9 de Econometria (MPEF/FGV-EPGE, Prof. Marcelo Mello). Par do laboratório sobre os cintos de segurança — mesma técnica, caso diferente. Acompanha o capítulo 10 da apostila da disciplina e roda também no Google Colab. ← Voltar às Notas de Econometria
1 Objetivo
Este notebook acompanha o capítulo de dados em painel das notas de aula, aplicando a regressão com dados em painel ao conjunto Guns — o painel usado no debate sobre leis de porte de arma do tipo shall-issue (“mais armas, menos crime”, na formulação de John Lott).
A pergunta empírica é direta: leis que facilitam o porte de arma reduzem a criminalidade? A pergunta econométrica é mais interessante, e é a do capítulo: quanto da correlação bruta entre lei e crime sobrevive quando controlamos por tudo aquilo que é fixo em cada estado e por tudo aquilo que é comum a cada ano?
A resposta, antecipada: quase nada.
2 Importação e estrutura dos dados
O arquivo está na pasta da aula, um nível acima deste notebook.
url <- paste0("https://raw.githubusercontent.com/vincentarelbundock/",
"Rdatasets/master/csv/AER/Guns.csv")
bruto <- read.csv(url)
# harmoniza os nomes com os do arquivo da disciplina (Guns.xls)
guns <- bruto |>
transmute(
stateid = state,
year = year,
vio = violent,
mur = murder,
rob = robbery,
shall = as.integer(law == "yes"),
incarc_rate = prisoners,
density = density,
avginc = income / 1000,
pop = population,
pb1064 = afam,
pw1064 = cauc,
pm1029 = male
)
dim(guns)[1] 1173 13
names(guns) [1] "stateid" "year" "vio" "mur" "rob"
[6] "shall" "incarc_rate" "density" "avginc" "pop"
[11] "pb1064" "pw1064" "pm1029"
O dicionário das variáveis, conforme a documentação que acompanha os dados:
| Variável | Descrição |
|---|---|
stateid |
Identificador do estado (1–56, com lacunas) |
year |
Ano (77 a 99, isto é, 1977–1999) |
vio |
Taxa de crimes violentos por 100.000 habitantes |
mur |
Taxa de homicídios por 100.000 habitantes |
rob |
Taxa de roubos por 100.000 habitantes |
shall |
1 se o estado tinha lei shall-issue em vigor no ano; 0 caso contrário |
incarc_rate |
Encarcerados por 100.000 habitantes no ano anterior |
density |
Habitantes por milha quadrada |
avginc |
Renda pessoal per capita, em milhares de dólares |
pop |
População, em milhões |
pb1064 |
% da população negra entre 10 e 64 anos |
pw1064 |
% da população branca entre 10 e 64 anos |
pm1029 |
% da população masculina entre 10 e 29 anos |
Vamos verificar a estrutura de painel — o número de unidades, o comprimento da série temporal e o balanceamento:
n_estados <- length(unique(guns$stateid))
T_anos <- length(unique(guns$year))
c(unidades = n_estados,
periodos = T_anos,
observacoes = nrow(guns),
n_x_T = n_estados * T_anos,
balanceado = all(table(guns$stateid) == T_anos)) unidades periodos observacoes n_x_T balanceado
51 23 1173 1173 1
São 51 unidades (os 50 estados mais o Distrito de Columbia) observadas em 23 anos (1977–1999), num painel balanceado de \(51 \times 23 = 1173\) observações. É exatamente a estrutura que o Gretl reporta: Incluídas 51 unidades de corte transversal, comprimento da série temporal = 23.
2.1 Preparação das variáveis
Seguindo a prática da literatura, trabalhamos com o logaritmo das taxas de criminalidade. Isso tem duas vantagens: as taxas são estritamente positivas e assimétricas à direita, e os coeficientes passam a ser lidos como variações percentuais aproximadas (o modelo log-lin do capítulo de não-linearidades das notas).
guns <- guns |>
mutate(
l_vio = log(vio),
l_mur = log(mur),
l_rob = log(rob),
ano = year,
)
# declara a estrutura de painel: indice de unidade e de tempo
pguns <- pdata.frame(guns, index = c("stateid", "year"))
pdim(pguns)Balanced Panel: n = 51, T = 23, N = 1173
3 Análise exploratória
Antes de qualquer regressão, vale olhar os dados.
3.1 Quantos estados adotaram a lei, e quando?
adocao <- guns |>
group_by(ano) |>
summarise(estados_com_lei = sum(shall), .groups = "drop")
ggplot(adocao, aes(ano, estados_com_lei)) +
geom_line(color = az, linewidth = 0.9) +
geom_point(color = az, size = 1.8) +
labs(x = NULL, y = "Nº de estados com lei shall-issue em vigor")O gráfico mostra o fato que torna o painel informativo: a adoção é escalonada no tempo. Em 1977 pouquíssimos estados tinham a lei; ao fim dos anos 1990, cerca de metade a tinha. É essa variação dentro de cada estado ao longo do tempo que o estimador de efeitos fixos explora — e sem ela, como vimos na seção “O que não se pode estimar” das notas, não haveria nada a estimar.
3.2 A trajetória da criminalidade
media_ano <- guns |>
group_by(ano) |>
summarise(vio = mean(vio), mur = mean(mur), .groups = "drop")
ggplot(media_ano, aes(ano)) +
geom_line(aes(y = vio / max(vio), color = "Crimes violentos"), linewidth = 0.9) +
geom_line(aes(y = mur / max(mur), color = "Homicídios"), linewidth = 0.9) +
scale_color_manual(values = c("Crimes violentos" = az, "Homicídios" = vm)) +
labs(x = NULL, y = "Índice (máximo = 1)")Aqui está a razão de ser dos efeitos fixos de tempo. A criminalidade nos EUA sobe até o início dos anos 1990 e despenca em seguida — em toda parte, inclusive onde não se aprovou lei alguma. Qualquer análise que ignore essa tendência comum vai atribuir à lei uma queda que teria ocorrido de todo modo.
3.3 A comparação ingênua
guns |>
group_by(shall = factor(shall, labels = c("Sem lei", "Com lei"))) |>
summarise(
n = n(),
vio_media = mean(vio),
mur_media = mean(mur),
densidade = mean(density),
renda = mean(avginc),
.groups = "drop"
)| shall | n | vio_media | mur_media | densidade | renda |
|---|---|---|---|---|---|
| Sem lei | 888 | 542.2377 | 8.429392 | 0.4384738 | 13.72485 |
| Com lei | 285 | 381.0509 | 5.283860 | 0.0827231 | 13.72462 |
Estados-ano com lei têm, em média, menos crimes violentos que os sem lei. Mas note as duas últimas colunas: eles também têm densidade populacional muito menor e renda diferente. Estamos comparando estados rurais do Oeste com estados urbanos do Nordeste — e a densidade é justamente o tipo de fator que a Tabela 1 mostra ser fixo no estado e correlacionado tanto com o crime quanto com a propensão a aprovar a lei.
É o viés de variável omitida discutido no capítulo de regressão múltipla das notas, em sua forma mais clássica.
4 Modelo 1 — MQO agrupado (pooled)
Começamos pela especificação que ignora a estrutura de painel, tratando as 1173 observações como se fossem um corte transversal.
m1 <- lm(l_vio ~ shall, data = guns)
m2 <- lm(l_vio ~ shall + incarc_rate + density + avginc + pop + pb1064 + pw1064 + pm1029,
data = guns)stargazer(m1, m2,
type = "html",
title = "Modelo 1 — MQO agrupado (pooled OLS)",
dep.var.labels = "log(taxa de crimes violentos)",
covariate.labels = c("shall (lei em vigor)", "Taxa de encarceramento",
"Densidade", "Renda média", "População",
"% negros 10-64", "% brancos 10-64", "% homens 10-29"),
omit.stat = c("f", "ser"),
digits = 4,
notes = "Erros-padrão convencionais. Sem controle pela estrutura de painel.",
notes.align = "l"
)| Dependent variable: | ||
| log(taxa de crimes violentos) | ||
| (1) | (2) | |
| shall (lei em vigor) | -0.4430*** | -0.3684*** |
| (0.0420) | (0.0326) | |
| Taxa de encarceramento | 0.0016*** | |
| (0.0001) | ||
| Densidade | 0.0267** | |
| (0.0132) | ||
| Renda média | 0.0012 | |
| (0.0078) | ||
| População | 0.0427*** | |
| (0.0026) | ||
| % negros 10-64 | 0.0809*** | |
| (0.0167) | ||
| % brancos 10-64 | 0.0312*** | |
| (0.0084) | ||
| % homens 10-29 | 0.0089 | |
| (0.0108) | ||
| Constant | 6.1349*** | 2.9817*** |
| (0.0207) | (0.5434) | |
| Observations | 1,173 | 1,173 |
| R2 | 0.0866 | 0.5643 |
| Adjusted R2 | 0.0859 | 0.5613 |
| Note: | p<0.1; p<0.05; p<0.01 | |
| Erros-padrão convencionais. Sem controle pela estrutura de painel. | ||
Sem controles, o coeficiente de shall é de cerca de \(-0{,}44\): estados-ano com lei teriam crimes violentos 44% menores (em log). Seria um efeito espetacular — e é exatamente o número que alimentou a tese de Lott.
Com os controles observáveis, ele cai para perto de \(-0{,}37\). Mas ambos são suspeitos pela razão já identificada: a comparação é entre estados diferentes.
5 Modelo 2 — Efeitos fixos de estado
Agora aplicamos a transformação within da seção de efeitos fixos das notas, que elimina tudo o que é constante dentro de cada estado — observado ou não.
m3 <- plm(l_vio ~ shall, data = pguns, model = "within")
m4 <- plm(l_vio ~ shall + incarc_rate + density + avginc + pop + pb1064 + pw1064 + pm1029,
data = pguns, model = "within")
c(sem_controles = coef(m3)[["shall"]],
com_controles = coef(m4)[["shall"]])sem_controles com_controles
0.11366288 -0.04614148
O coeficiente troca de sinal: de \(-0{,}44\) no MQO agrupado para \(+0{,}11\) com efeitos fixos de estado. Toda a associação negativa vinha da comparação entre estados — isto é, do \(Z_i\) não observado do modelo — e desaparece quando cada estado é comparado consigo mesmo ao longo do tempo.
5.1 Verificando a equivalência com LSDV
As notas afirmam, na seção de efeitos fixos, que a transformação within e o método das \(n-1\) binárias produzem estimativas idênticas. Vale conferir:
lsdv <- lm(l_vio ~ shall + factor(stateid), data = guns)
c(within = coef(m3)[["shall"]],
lsdv = coef(lsdv)[["shall"]],
diferenca = coef(m3)[["shall"]] - coef(lsdv)[["shall"]]) within lsdv diferenca
1.136629e-01 1.136629e-01 -7.077672e-16
Coincidem até a precisão de máquina, como a álgebra previa — com a diferença de que o LSDV estimou 50 coeficientes de binárias que ninguém vai olhar.
6 Modelo 3 — Efeitos fixos de estado e de tempo
Acrescentamos agora os efeitos fixos de tempo, conforme a equação de efeitos fixos de duas vias, absorvendo a tendência nacional que vimos no gráfico da trajetória.
m5 <- plm(l_vio ~ shall, data = pguns, model = "within", effect = "twoways")
m6 <- plm(l_vio ~ shall + incarc_rate + density + avginc + pop + pb1064 + pw1064 + pm1029,
data = pguns, model = "within", effect = "twoways")
c(sem_controles = coef(m5)[["shall"]],
com_controles = coef(m6)[["shall"]])sem_controles com_controles
0.001884977 -0.027993606
O coeficiente vai praticamente a zero. A trajetória completa, que é a lição do capítulo em quatro números:
data.frame(
especificacao = c("MQO agrupado", "EF estado", "EF estado + tempo",
"EF estado + tempo + controles"),
shall = c(coef(m1)[["shall"]], coef(m3)[["shall"]],
coef(m5)[["shall"]], coef(m6)[["shall"]])
) |>
mutate(shall = round(shall, 4))| especificacao | shall |
|---|---|
| MQO agrupado | -0.4430 |
| EF estado | 0.1137 |
| EF estado + tempo | 0.0019 |
| EF estado + tempo + controles | -0.0280 |
7 Erros-padrão clusterizados
Como discutido na seção sobre hipóteses de MQO em painel das notas, a fórmula robusta usual é inconsistente em painel: ela pressupõe independência entre todas as observações, mas as observações de um mesmo estado não são independentes. O remédio é o erro-padrão clusterizado por unidade.
ep_conv <- sqrt(diag(vcov(m6)))[["shall"]]
ep_clus <- sqrt(diag(vcovHC(m6, type = "HC1", cluster = "group")))[["shall"]]
c(convencional = ep_conv,
clusterizado = ep_clus,
razao = ep_clus / ep_conv)convencional clusterizado razao
0.01715784 0.03993274 2.32737627
O erro-padrão clusterizado é substancialmente maior. Quem reportasse o convencional estaria trabalhando com uma estatística \(t\) inflada pelo mesmo fator — e correria risco sério de rejeitar hipóteses nulas verdadeiras.
8 Tabela principal — a progressão completa
Reunimos as especificações numa única tabela, com erros-padrão clusterizados por estado em todas as colunas. É assim que o resultado deve ser apresentado.
# extrai os erros-padrao clusterizados de cada modelo, na ordem dos coeficientes
ep_cluster <- function(modelo) {
sqrt(diag(vcovHC(modelo, type = "HC1", cluster = "group")))
}
se_list <- list(
sqrt(diag(vcovHC(m1, type = "HC1"))), # pooled: robusto simples
ep_cluster(m3), ep_cluster(m4),
ep_cluster(m5), ep_cluster(m6)
)stargazer(m1, m3, m4, m5, m6,
type = "html",
se = se_list,
title = "Leis shall-issue e crimes violentos: a progressão das especificações",
dep.var.labels = "log(taxa de crimes violentos)",
column.labels = c("Pooled", "EF estado", "EF estado", "EF 2 vias", "EF 2 vias"),
covariate.labels = c("shall (lei em vigor)", "Taxa de encarceramento",
"Densidade", "Renda média", "População",
"% negros 10-64", "% brancos 10-64", "% homens 10-29"),
add.lines = list(
c("Efeitos fixos de estado", "Não", "Sim", "Sim", "Sim", "Sim"),
c("Efeitos fixos de tempo", "Não", "Não", "Não", "Sim", "Sim"),
c("Controles demográficos", "Não", "Não", "Sim", "Não", "Sim")
),
omit.stat = c("f", "ser", "adj.rsq"),
digits = 4,
notes = "Erros-padrão clusterizados por estado, exceto col. (1) — robustos.",
notes.align = "l"
)| Dependent variable: | |||||
| log(taxa de crimes violentos) | |||||
| OLS | panel | ||||
| linear | |||||
| Pooled | EF estado | EF estado | EF 2 vias | EF 2 vias | |
| (1) | (2) | (3) | (4) | (5) | |
| shall (lei em vigor) | -0.4430*** | 0.1137*** | -0.0461 | 0.0019 | -0.0280 |
| (0.0475) | (0.0357) | (0.0414) | (0.0395) | (0.0399) | |
| Taxa de encarceramento | -0.0001 | 0.0001 | |||
| (0.0002) | (0.0002) | ||||
| Densidade | -0.1723 | -0.0916 | |||
| (0.1363) | (0.1215) | ||||
| Renda média | -0.0092 | 0.0010 | |||
| (0.0128) | (0.0162) | ||||
| População | 0.0115 | -0.0048 | |||
| (0.0141) | (0.0149) | ||||
| % negros 10-64 | 0.1043*** | 0.0292 | |||
| (0.0324) | (0.0486) | ||||
| % brancos 10-64 | 0.0409*** | 0.0093 | |||
| (0.0133) | (0.0233) | ||||
| % homens 10-29 | -0.0503** | 0.0733 | |||
| (0.0205) | (0.0515) | ||||
| Constant | 6.1349*** | ||||
| (0.0193) | |||||
| Efeitos fixos de estado | Não | Sim | Sim | Sim | Sim |
| Efeitos fixos de tempo | Não | Não | Não | Sim | Sim |
| Controles demográficos | Não | Não | Sim | Não | Sim |
| Observations | 1,173 | 1,173 | 1,173 | 1,173 | 1,173 |
| R2 | 0.0866 | 0.0387 | 0.2178 | 0.00001 | 0.0564 |
| Note: | p<0.1; p<0.05; p<0.01 | ||||
| Erros-padrão clusterizados por estado, exceto col. (1) — robustos. | |||||
8.1 Leitura da tabela
A coluna (1) é a evidência que a tese “mais armas, menos crime” invoca: um efeito grande e altamente significante. As colunas (2) a (5) a desmontam progressivamente:
- Ao controlar pelo estado (col. 2–3), o coeficiente troca de sinal. O que parecia efeito da lei era, na verdade, diferença permanente entre estados que adotam e estados que não adotam a lei.
- Ao controlar também pelo ano (col. 4–5), o coeficiente colapsa para perto de zero e deixa de ser distinguível de zero. O que restava era a queda nacional da criminalidade nos anos 1990, comum a todos os estados.
A conclusão é a que a literatura acadêmica consolidou (Ayres e Donohue, 2003, contra Lott): o painel não sustenta a tese de que leis de porte reduzem a criminalidade.
9 Replicando a saída do Gretl
A especificação que aparece na tela do Gretl usa um subconjunto de controles — density, avginc, pm1029, incarc_rate — com efeitos fixos de estado e dummies de tempo (dt_2 a dt_23), com erros-padrão agrupados por unidade.
m_gretl <- plm(l_vio ~ shall + density + avginc + pm1029 + incarc_rate + factor(year),
data = pguns, model = "within")
ct <- coeftest(m_gretl, vcov = vcovHC(m_gretl, type = "HC1", cluster = "group"))
round(ct[c("shall", "density", "avginc", "pm1029", "incarc_rate"), ], 7) Estimate Std. Error t value Pr(>|t|)
shall -0.0271992 0.0416623 -0.6528495 0.5139903
density -0.0944334 0.1291543 -0.7311674 0.4648334
avginc -0.0003979 0.0150624 -0.0264142 0.9789318
pm1029 0.0859734 0.0319298 2.6925786 0.0071984
incarc_rate 0.0000291 0.0002328 0.1249625 0.9005762
Os coeficientes reproduzem a saída do Gretl dígito a dígito: shall \(= -0{,}0271992\), density \(= -0{,}0944334\), avginc \(= -0{,}0003979\), pm1029 \(= 0{,}0859734\).
O Gretl reporta erro-padrão \(0{,}0420773\); obtemos aqui \(0{,}0416623\). A diferença está no fator de correção de amostra finita do estimador clusterizado: o Gretl usa \(\frac{n}{n-1}\cdot\frac{N-1}{N-k}\), enquanto vcovHC(type = "HC1") aplica um ajuste ligeiramente distinto. A conclusão substantiva é idêntica — \(t \approx -0{,}65\), valor-\(p\) em torno de \(0{,}52\), longe de qualquer nível convencional de significância.
# replicando o ajuste de amostra finita do Gretl
G <- length(unique(index(pguns)$stateid))
N <- nobs(m_gretl)
K <- length(coef(m_gretl))
V <- vcovHC(m_gretl, type = "HC0", cluster = "group")
aj <- (G / (G - 1)) * ((N - 1) / (N - K))
c(gretl_reportado = 0.0420773,
replicado = sqrt(diag(aj * V))[["shall"]])gretl_reportado replicado
0.04207730 0.04205895
10 Robustez: outras medidas de criminalidade
A conclusão depende de olharmos crimes violentos? Repetimos a especificação de duas vias com homicídios e roubos.
m_vio <- plm(l_vio ~ shall + incarc_rate + density + avginc + pop + pb1064 + pw1064 + pm1029,
data = pguns, model = "within", effect = "twoways")
m_mur <- plm(l_mur ~ shall + incarc_rate + density + avginc + pop + pb1064 + pw1064 + pm1029,
data = pguns, model = "within", effect = "twoways")
m_rob <- plm(l_rob ~ shall + incarc_rate + density + avginc + pop + pb1064 + pw1064 + pm1029,
data = pguns, model = "within", effect = "twoways")stargazer(m_vio, m_mur, m_rob,
type = "html",
se = list(ep_cluster(m_vio), ep_cluster(m_mur), ep_cluster(m_rob)),
title = "Robustez — três medidas de criminalidade, efeitos fixos de duas vias",
dep.var.labels = c("log(violentos)", "log(homicídios)", "log(roubos)"),
covariate.labels = c("shall (lei em vigor)", "Taxa de encarceramento",
"Densidade", "Renda média", "População",
"% negros 10-64", "% brancos 10-64", "% homens 10-29"),
add.lines = list(
c("EF de estado e de tempo", "Sim", "Sim", "Sim")
),
omit.stat = c("f", "ser", "adj.rsq"),
digits = 4,
notes = "Erros-padrão clusterizados por estado.",
notes.align = "l"
)| Dependent variable: | |||
| log(violentos) | log(homicídios) | log(roubos) | |
| (1) | (2) | (3) | |
| shall (lei em vigor) | -0.0280 | -0.0150 | 0.0268 |
| (0.0399) | (0.0375) | (0.0512) | |
| Taxa de encarceramento | 0.0001 | -0.0001 | 0.00003 |
| (0.0002) | (0.0004) | (0.0003) | |
| Densidade | -0.0916 | -0.5443* | -0.0447 |
| (0.1215) | (0.3131) | (0.1944) | |
| Renda média | 0.0010 | 0.0566*** | 0.0144 |
| (0.0162) | (0.0162) | (0.0243) | |
| População | -0.0048 | -0.0321 | 0.00002 |
| (0.0149) | (0.0206) | (0.0254) | |
| % negros 10-64 | 0.0292 | 0.0220 | 0.0141 |
| (0.0486) | (0.0744) | (0.0824) | |
| % brancos 10-64 | 0.0093 | -0.0005 | -0.0128 |
| (0.0233) | (0.0197) | (0.0321) | |
| % homens 10-29 | 0.0733 | 0.0692* | 0.1046 |
| (0.0515) | (0.0410) | (0.0716) | |
| EF de estado e de tempo | Sim | Sim | Sim |
| Observations | 1,173 | 1,173 | 1,173 |
| R2 | 0.0564 | 0.1156 | 0.0491 |
| Note: | p<0.1; p<0.05; p<0.01 | ||
| Erros-padrão clusterizados por estado. | |||
Em nenhuma das três medidas o coeficiente de shall é significante e negativo com efeitos fixos de duas vias. A conclusão é robusta à escolha da variável dependente.
11 Testes de especificação
11.1 Os efeitos fixos são conjuntamente significantes?
# F de significancia conjunta dos efeitos individuais
pFtest(m4, plm(l_vio ~ shall + incarc_rate + density + avginc + pop +
pb1064 + pw1064 + pm1029, data = pguns, model = "pooling"))
F test for individual effects
data: l_vio ~ shall + incarc_rate + density + avginc + pop + pb1064 + ...
F = 142.57, df1 = 50, df2 = 1114, p-value < 2.2e-16
alternative hypothesis: significant effects
Rejeita-se com folga a nula de que os efeitos de estado são todos iguais: o MQO agrupado é inadequado, como a análise sugeria.
11.2 Efeitos fixos ou efeitos aleatórios? O teste de Hausman
m_re <- plm(l_vio ~ shall + incarc_rate + density + avginc + pop + pb1064 + pw1064 + pm1029,
data = pguns, model = "random")
phtest(m4, m_re)
Hausman Test
data: l_vio ~ shall + incarc_rate + density + avginc + pop + pb1064 + ...
chisq = 31.859, df = 8, p-value = 9.872e-05
alternative hypothesis: one model is inconsistent
O teste de Hausman compara o estimador de efeitos fixos (consistente sempre) com o de efeitos aleatórios (eficiente apenas se \(\Cov(\alpha_i, X_{it}) = 0\)). A rejeição indica que o efeito individual é correlacionado com os regressores — exatamente o que esperávamos, já que a propensão a aprovar a lei se relaciona com características permanentes do estado. Efeitos fixos é a especificação correta.
12 Conclusão
O exercício ilustra, com dados reais, a mensagem central do capítulo de dados em painel das notas:
- A correlação bruta entre leis shall-issue e criminalidade é forte e negativa (\(\approx -0{,}44\)), mas é espúria — reflete diferenças permanentes entre estados.
- Efeitos fixos de estado eliminam essas diferenças e invertem o sinal do coeficiente.
- Efeitos fixos de tempo eliminam a tendência nacional e levam o coeficiente a praticamente zero.
- Erros-padrão clusterizados por estado, obrigatórios aqui, são cerca de duas vezes e meia os convencionais.
O que não se pode concluir: que as leis não têm efeito algum. O painel elimina variáveis omitidas constantes no tempo, mas nada faz contra as que variam dentro do estado — a epidemia de crack, mudanças no policiamento, alterações simultâneas em outras leis. E a hipótese de exogeneidade estrita é discutível: legisladores plausivelmente reagem à criminalidade ao decidir aprovar a lei, o que é precisamente o feedback que a hipótese proíbe.
O resultado honesto é o do capítulo de validade das notas: a evidência a favor da tese “mais armas, menos crime” não sobrevive a controles elementares, e a identificação do efeito causal exigiria uma estratégia que o painel, sozinho, não oferece.
13 Referências
- Ayres, I. e Donohue, J. J. (2003). “Shooting Down the More Guns, Less Crime Hypothesis”. Stanford Law Review, 55(4), 1193–1312.
- Lott, J. R. e Mustard, D. B. (1997). “Crime, Deterrence, and Right-to-Carry Concealed Handguns”. Journal of Legal Studies, 26(1), 1–68.
- Stock, J. H. e Watson, M. W. (2020). Introduction to Econometrics. 4ª ed. Pearson. Capítulo 10.