Replicação: A redução da maioridade penal diminui a violência? Evidências de um estudo comparado

Autor

Artur Damião

Data de Publicação

15 de dezembro de 2025

1 Introdução

O artigo de Lins, Figueiredo Filho, e Silva (2016) tem como objetivo investigar a possível associação entre a diminuição da maioridade penal e os níveis de violência em perspectiva comparada. Para tanto, os autores utilizaram de análise espacial, correlação de Pearson e de modelos de regressão linear de mínimos quadrados ordinários (MQO).

Em termos de avanço do artigo original, propomos a interpretação das variáveis de controle, checagem dos pressupostos do modelo, a análise do erro padrão robusto e a estimação por modelos de Regressão Robusta com M-estimador de Huber.

Ambientação

Importando os pacotes necessários.

pacman::p_load(
  tidyverse,
  janitor,
  stargazer,
  rio,
  data.table,
  lmtest,
  sandwich,
  performance,
  knitr,
  modelsummary,
  broom,
  MASS
)

Dados

Lendo a base de dados direto do Github:

link <- "https://github.com/mgaldino/lab-regressao-aula/blob/main/trabalho%20final/4Lins_2016/maioridade.tab?raw=true"

df <- readRDS("../dados/maioridade-replicacao.rds")

Transformando as variáveis:

df <- df %>% 
  janitor::clean_names() %>% 
  dplyr::mutate(
    acr_cipriani = ifelse(acr_cipriani == 999, NA, acr_cipriani)
    )

2 Hipóteses

O objetivo dos autores é testar a hipótese de que quanto menor a maioridade penal, menor o nível de violência. A Equação 1 apresenta o modelo estimado:

\[ Y = \alpha + \beta_1X_1 + \beta_2X_2 + \beta_3X_3 + \beta_4X_4 + \epsilon \tag{1}\]

Onde,

\(Y\): Taxa de Homicídio por 100 mil habitantes (homi_rate_unodc)

\(X_1\): Idade de Maioridade Penal ou Responsabilidade Criminal (acm_hazel, acm_gv, acr_hazel ou acr_cipriani)

\(X_2\): Índice de Desenvolvimento Humano (idh)

\(X_3\): Índice Gini (ginmar_solt)

\(X_4\): Desemprego de longo termo (desemprego_longo)

Criando os modelos

modelo_acm_hazel <- lm(homi_rate_unodc ~ acm_hazel + idh + desemprego_longo + ginmar_solt,
                       data = df)

modelo_acm_gv <- lm(homi_rate_unodc ~ acm_gv + idh + desemprego_longo + ginmar_solt,
                       data = df)

modelo_acr_hazel <- lm(homi_rate_unodc ~ acr_hazel + idh + desemprego_longo + ginmar_solt,
                       data = df)

modelo_acr_cipriani <- lm(homi_rate_unodc ~ acr_cipriani + idh + desemprego_longo + ginmar_solt,
                       data = df)

Apresentando os modelos na Tabela 1:

Tabela 1: Resultados das Regressões Lineares
stargazer::stargazer(modelo_acm_hazel, modelo_acm_gv, modelo_acr_hazel, modelo_acr_cipriani,
                     type = "html",
                     header = FALSE,
                     dep.var.labels = c("Taxa de Homícidio (100 mil hab.)"),
                     covariate.labels = c("ACM Hazel", "ACM GV", "ACR Hazel","ACR Cipriani", "IDH", "Desemprego Longo", "Índice de Gini")
                     )
Dependent variable:
Taxa de Homícidio (100 mil hab.)
(1) (2) (3) (4)
ACM Hazel -0.365*
(0.197)
ACM GV -0.224
(1.310)
ACR Hazel -0.271*
(0.139)
ACR Cipriani -0.048
(0.093)
IDH -13.778** -28.974*** -28.575*** -29.454***
(5.689) (7.718) (7.243) (7.648)
Desemprego Longo -0.025 -0.103*** -0.086** -0.102***
(0.028) (0.033) (0.032) (0.033)
Índice de Gini 0.025 -0.012 -0.010 -0.009
(0.053) (0.074) (0.069) (0.073)
Constant 19.743*** 33.800 32.400*** 30.529***
(6.325) (24.764) (7.445) (7.854)
Observations 29 37 37 37
R2 0.364 0.382 0.447 0.387
Adjusted R2 0.258 0.305 0.378 0.310
Residual Std. Error 1.563 (df = 24) 2.501 (df = 32) 2.365 (df = 32) 2.492 (df = 32)
F Statistic 3.439** (df = 4; 24) 4.947*** (df = 4; 32) 6.476*** (df = 4; 32) 5.042*** (df = 4; 32)
Note: p<0.1; p<0.05; p<0.01

3 Interpretação dos coeficientes da regressão

Mantendo todas as variáveis constantes iguais à zero (teoricamente), os modelos (valor de \(\alpha\))indicariam uma taxa de 19.74 (Modelo 1), 33.80 (Modelo 2), 32.40 (Modelo 3) e 30.52 (Modelo 4) homicídios para cada grupo de 100 mil habitantes.

Os coeficientes negativos da Redução da Maioridade Penal (ACM) ou Responsabilização Criminal (ACR) indicam que quanto maior a idade penal, menor a taxa de homicídios. Dessa forma, rejeitamos a \(H_1\) que \(\text{menor maioridade = menor violência}\). Os modelos 2 (acm_gv) e 4 (acr_cipriani) não apresentam significância estatística, ao passo que os modelos 1 (acm_hazel) e 3 (acr_hazel) apresentam significância a um nível de 10% (\(p < 0.1\)). É um nível de significância fraco. A partir desses dados, não é possível afirmar que a redução da maioridade penal ou responsabilidade criminal diminui as taxas de homícidio.

O Índice de Desenvolvimento Humano, ao contrário, apresenta grande significância estatística (\(p<0.05\) e \(p<0.01\)), sendo a variável que mais explica a redução na taxa de homicídios. No primeiro modelo, a cada um ponto em que o IDH aumenta, reduz-se 13,788 pontos na taxa de homicídio; no segundo modelo, a cada aumento de um ponto no IDH, a taxa de homícidio reduz 28,974 ponto - redução semelhante para os modelos três (28,575 pontos) e quatro (29,454 pontos).

O Desemprengo Longo também apresenta sinal negativo nos coeficientes, sugerindo que um maior grau de desemprego a longo prazo está associado a uma menor taxa de homicídios. Esse resultado, contraintuitivo, pode ser causado pelas características da nossa amostra (nosso \(n\) varia entre 29 ou 37) ou colinearidade com outras variáveis (especificamente o IDH).

Por fim, o Índice de Gini não apresentou nenhum valor significativo, sugerindo que a desigualdade não explica a variação da taxa de homicídio. Provavelmente isso se dá pelo \(n\) pequeno. Ao interpretamos o \(R^2\), vemos que nosso modelo explica, em média, 0.395% da variação nas taxas de homicídio. Ou seja, mais da metade da violência é causada por fatores que não estão em nossa equação.

4 Checagem dos modelos

Nesta seção, avaliamos se os modelos atendem aos pressupostos da regressão linear:

  1. Linearidade
  2. Colinearidade (VIF)
  3. Homocedasticidade
  4. Normalidade dos resíduos

Como vamos repetir a mesma função para plotagem de modelo usando base::plot, criei uma função para que todos os modelos tenham o mesmo padrão:

plotar_modelo <- function(..., which = 1) {
  # 1. Modelos a serem plotados
  lista_modelos <- list(...)
  
  # 2. Loop para plotar modelos com as configurações limpas
  for (modelo in lista_modelos){
    plot(modelo,
         which = which,
         main = "",
         caption = "",
         sub.caption = "")
  }
}

4.1 Linearidade dos Resíduos

O pressuposto da linearidade avalia se a realação entre os preditores e a variável resposta é, em média, linear. Supõe-se que \(\mathbb{E}[\epsilon | X] = 0\) (a média condicional dos erros é zero, logo, o preditor e o erro não estão correlacionados).

Figura 1: Checagem da Linearidade (Resíduos X Valores Previstos)
(a) Modelo 1: ACM Hazel
(b) Modelo 2: ACM GV
(c) Modelo 3: ACR Hazel
(d) Modelo 4: ACR Cipriani

Conforme a Figura 1, era esperado que a linha vermelha tivesse um comportamento reto horinzontalmente, ou seja, com a média condicional dos erros iguais a zero. Todos os casos sugerem que não há relação linear entre a variável resposta e os preditores. Ademais, a presença de valores outliers é preocupante.

4.1.1 É possível ajustar a linearidade do modelo?

A não-linearidade prejudica a confiança na interpretação dos estimadores (\(\beta\)) do modelo. A não-linearidade, no nosso caso, pode se dar devido ao tamanho da amostra e a presença de outliers, constatada anteriormente. Para tentar solucionar este problema, aplicaremos o logaritmo natural na variável dependente1. A Tabela 2 sintetiza o resultado:

1 Aplicando o log na taxa de homicídio, assumimos que as variáveis explicativas tem um efeito multiplicativo e não aditivo sobre o crime.

Tabela 2: Regressões com Log Natural
# Modelo com variável transformada

df$log_homicidio <- log(df$homi_rate_unodc)

acm_hazel_log <- lm(log_homicidio ~ acm_hazel + idh 
                           + desemprego_longo + ginmar_solt,
                       data = df)

acm_gv_log <- lm(log_homicidio ~ acm_gv + idh 
                        + desemprego_longo + ginmar_solt,
                       data = df)

acr_hazel_log <- lm(log_homicidio ~ acr_hazel + idh 
                           + desemprego_longo + ginmar_solt,
                       data = df)

acr_cipriani_log <- lm(log_homicidio ~ acr_cipriani + idh 
                              + desemprego_longo + ginmar_solt,
                       data = df)

stargazer(acm_hazel_log, 
          acm_gv_log, 
          acr_hazel_log, 
          acr_cipriani_log,
          header = FALSE,
          type = "html",
          title = "Resultados das Regressões com Log Natural",
          dep.var.labels = c("Log Natural da Taxa de Homícidio (100 mil hab.)"),
          covariate.labels = c("ACM Hazel", "ACM GV", "ACR Hazel","ACR Cipriani", "IDH", "Desemprego Longo", "Índice de Gini")
                     )
Resultados das Regressões com Log Natural
Dependent variable:
Log Natural da Taxa de Homícidio (100 mil hab.)
(1) (2) (3) (4)
ACM Hazel -0.135
(0.080)
ACM GV -0.448
(0.359)
ACR Hazel -0.062
(0.040)
ACR Cipriani -0.035
(0.026)
IDH -6.247** -8.337*** -8.550*** -8.902***
(2.312) (2.116) (2.072) (2.097)
Desemprego Longo -0.009 -0.019** -0.015 -0.018*
(0.011) (0.009) (0.009) (0.009)
Índice de Gini 0.007 -0.004 0.002 0.002
(0.022) (0.020) (0.020) (0.020)
Constant 7.991*** 16.050** 8.617*** 8.557***
(2.570) (6.790) (2.130) (2.153)
Observations 29 37 37 37
R2 0.366 0.384 0.400 0.389
Adjusted R2 0.261 0.307 0.325 0.312
Residual Std. Error 0.635 (df = 24) 0.686 (df = 32) 0.677 (df = 32) 0.683 (df = 32)
F Statistic 3.467** (df = 4; 24) 4.989*** (df = 4; 32) 5.338*** (df = 4; 32) 5.090*** (df = 4; 32)
Note: p<0.1; p<0.05; p<0.01

Em termos de interpretação do modelo ajustado, os dados de ACM Hazel, ACM GV, ACR Hazel e ACR Cipriani não apresentam significância estatística. Ou seja, a \(H_1\) não é aceita. Interpretando as variáveis de controle2, constatamos que o Índice de Gini também não influencia de maneira significativa a taxa de homicídios. O Índice de Desenvolvimento Humano continua significativo: a cada um ponto (um centésimo, já que o IDH varia entre 0 e 1) em que o IDH aumenta, reduz-se a taxa de homícidio em 6.2% (Modelo 1), 8.3% (Modelo 2), 8.5% (Modelo 3) e 8.9% (Modelo 4).

2 Geralmente, as variáveis de controle são utilizadas não para serem interpretadas. Entretanto, realizamos este exercício para fins pedagógicos.

Figura 2: Checagem da Linearidade (Resíduos X Valores Previstos) com Log Natural
(a) Modelo 1: ACM Hazel
(b) Modelo 2: ACM GV
(c) Modelo 3: ACR Hazel
(d) Modelo 4: ACR Cipriani

Agora, com o modelo ajustado, é possível perceber que, diferente dos gráficos 1, a Figura 2 apresenta os valores muito mais próximo da reta. Ou seja, a média condicional dos erros está mais próxima de zero ao transformar a variável dependente em seu logaritimo natural.

Outra modificação possível seria a transformação quadrática da variável IDH. Neste caso, a Equação 2 representaria nosso modelo:

\[ Y = \alpha + \beta_1X_1 + \beta_2X_2 + \beta_3X_3 + \beta_4X_4 + \beta_5{IDH^2} + \epsilon \tag{2}\]

Dessa forma, consideraríamos as relações não lineares entre as variáveis, ajustando um curva parabólica ao invés de uma curva reta.

4.2 Colinearidade (VIF) no Modelo

A Tabela 3 sintetiza os valores de Variation Inflaction Factor, indicando que as variáveis são independentes entre si. Ou seja, elas contribuem de maneira distinta para o modelo. Os valores encontram-se significativamente abaixo do limite crítico de 5. Logo, desconsideramos a colinearidade suspeitada na Seção 3.

Tabela 3: Tabela de Multicolinearidade (VIF)
Variável ACM Hazel (1) ACM GV (2) ACR Hazel (3) ACR Cipriani (4)
Maioridade/Responsabilidade 1.18 1.07 1.09 1.01
IDH 1.22 1.10 1.09 1.09
Desemprego Longo 1.45 1.16 1.25 1.16
Índice de Gini 1.17 1.13 1.08 1.08

4.3 Homocedasticidade

A homocedasticidade pressupõe que os resíduos variem de forma constante ao longo dos valores previstos. Os gráficos da Figura 3 apresentam que os erros não variam igualmente ao longo da reta. Logo, há a presença de heterocedasticidade.

Figura 3: Checagem da Homocedasticidade
(a) Modelo 1: ACM Hazel
(b) Modelo 2: ACM GV
(c) Modelo 3: ACR Hazel
(d) Modelo 4: ACR Cipriani

4.4 Normalidade dos resíduos

O teste de normalidade dos resíduos, apresentado na Figura 4, verifica se os resíduos do modelo seguem uma distribuição normal. Nosso gráfico abaixo indica que há uma assimetria nas pontas, sugerindo que nosso modelo erra mais para cima do que para baixo.

Figura 4: Checagem da Normalidade dos Resíduos (Q-Q Plot)
(a) Modelo 1: ACM Hazel
(b) Modelo 2: ACM GV
(c) Modelo 3: ACR Hazel
(d) Modelo 4: ACR Cipriani

Isso se dá, provavelmente, pelo caráter da amostra. É mais provável que poucos países concentrem taxas de homicídios mais altas, enquanto a maior parte dos países da amostra de Lins, Figueiredo Filho, e Silva (2016) tem taxas baixas ou médias. Como o \(n\) amostral é relativamente pequeno (\(n <40\), para cada país), os poucos casos outliers distorcem a normalidade dos resíduos.

5 Analisando o erro padrão robusto

Para corrigir a heterocedasticidade presente nos modelos, utilizaremos os erros padrão robustos. Especificamente, utilizaremos o \(HC3\), dado o tamanho de nossa amostra. O \(HC3\) é apropriado para amostras pequenas porque ele penaliza os outliers, evitando falsos positivos3. A fórmula para o estimador \(HC3\) é:

3 Parte dessa informação foi dada pelo professor Manoel Galdino. De forma complementar, perguntei ao Gemini por quê usar o \(HC3\) ao invés do \(HC1\) e comparei o resultado dos dois testes nos modelos. No \(HC1\), algumas variáveis (como Índice de Desenvolvimento Humano), continuaram estatisticamente significativas. Com o \(HC3\), nenhuma variável manteve sua significância.

\[ \frac{\hat{u}_i^2} {(1- h_{ii})^2} \]

Leia-se: o quadrado do resíduo da observação \(i\), dividido pelo quadrado do complemento da alavancagem (leverage) dessa mesma observação.4

4 Pedi ajuda para o Gemini sobre como ler essa fórmula. Basicamente: o HC3 pega o erro que o modelo cometeu (\(\hat{u}^2\)) e o “infla” (aumenta) baseado no quanto aquela observação é influente (\(h_{ii}\)). Quanto mais próximo o \(h\) estiver de 1, menor será o denominador e maior será o resultado total (a penalidade).

A Tabela 4 apresenta o erro robusto para o Modelo 1:

Tabela 4: Estimativas do Modelo ACM Hazel com Erros Robustos (HC3)
Variável Estimativa Erro Padrão t p-valor
Constante 19.743 12.328 1.602 0.122
Maioridade (Hazel) -0.365 0.248 -1.470 0.155
IDH -13.778 10.016 -1.376 0.182
Desemprego -0.025 0.021 -1.183 0.248
Gini 0.025 0.061 0.416 0.681

A Tabela 5 apresenta o erro robusto5 para o Modelo 2:

5 Para este caso, utilizamos o \(HC1\), dado que o \(HC3\) é incalculável visto que a observação 86, o valor \(h_{ii}\) é igual a 1 e o resultado é NaN.

Tabela 5: Estimativas do Modelo ACM GV com Erros Robustos (HC1)
Variável Estimativa Erro Padrão t p-valor
Constante 33.800 13.617 2.482 0.018
Maioridade (GV) -0.224 0.254 -0.882 0.384
IDH -28.974 14.079 -2.058 0.048
Desemprego -0.103 0.059 -1.740 0.091
Gini -0.012 0.052 -0.227 0.822

A Tabela 6 apresenta o erro robusto para o Modelo 3:

Tabela 6: Estimativas do Modelo ACR Hazel com Erros Robustos (HC3)
Variável Estimativa Erro Padrão t p-valor
Constante 32.400 20.248 1.600 0.119
Responsabilidade (Hazel) -0.271 0.269 -1.007 0.321
IDH -28.575 17.108 -1.670 0.105
Desemprego -0.086 0.060 -1.443 0.159
Gini -0.010 0.061 -0.159 0.875

A Tabela 7 apresenta o erro robusto para o Modelo 4:

Tabela 7: Estimativas do Modelo ACR Cipriani com Erros Robustos (HC3)
Variável Estimativa Erro Padrão t p-valor
Constante 30.529 18.490 1.651 0.108
Responsabilidade (Cipriani) -0.048 0.102 -0.470 0.642
IDH -29.454 17.640 -1.670 0.105
Desemprego -0.102 0.074 -1.379 0.177
Gini -0.009 0.059 -0.146 0.885

Analisando as tabelas geradas, após a constatação da violação dos pressupostos de homocedasticidade, aplicamos o estimador \(HC3\) para investigar os erros padrão do modelo. As variáveis explicativas do modelo 1, 3 e 4 perderam significância estatística. O IDH, que antes era uma variável que contribuia para explicar o fenômeno da queda das taxas de homicídio, agora não é mais significativo.

Uma exceção analítica foi necessária para o Modelo 2 (ACM GV), no qual a presença de uma observação com alavancagem perfeita inviabilizou matematicamente o cálculo do estimador \(HC3\). Ao adotar-se o estimador HC1, que aplica uma correção menos conservadora, observou-se que o IDH preservou sua significância estatística (\(p = 0,048\)) com um coeficiente de -28,974, enquanto a variável de desemprego de longo prazo apresentou significância marginal (\(p = 0,091\)). Esse resultado sugere que o desenvolvimento humano permanece como o preditor mais resiliente da taxa de homicídios, resistindo a correções moderadas de heterocedasticidade, embora sua significância seja suprimida sob os critérios mais estritos do \(HC3\).

6 Avanços em relação ao trabalho original

Para avançar na interpretação dos resultados, estimamos os modelos de Regressão Robusta com M-estimador de Huber. Nesse modelo de regressão, é possível mitigar a influência dos valores extremos sem recorrer à exclusão amostral. A Tabela 8 apresenta o resultado:

Tabela 8: Regressão Robusta (estimador-M de Huber)
acm_hazel_rob <- rlm(homi_rate_unodc ~ acm_hazel + idh + desemprego_longo + ginmar_solt,
                     data = df,
                     psi = psi.huber)

acm_gv_rob <- rlm(homi_rate_unodc ~ acm_gv + idh 
                        + desemprego_longo + ginmar_solt,
                       data = df,
                      psi = psi.huber)

acr_hazel_rob <- rlm(homi_rate_unodc ~ acr_hazel + idh 
                           + desemprego_longo + ginmar_solt,
                       data = df,
                      psi = psi.huber)

acr_cipriani_rob <- rlm(homi_rate_unodc ~ acr_cipriani + idh 
                              + desemprego_longo + ginmar_solt,
                       data = df,
                      psi = psi.huber)

stargazer(acm_hazel_rob, 
          acm_gv_rob, 
          acr_hazel_rob, 
          acr_cipriani_rob,
          header = FALSE,
          type = "html",
          dep.var.labels = c("Taxa de Homícidio (100 mil hab.)"),
          covariate.labels = c("ACM Hazel", "ACM GV", "ACR Hazel","ACR Cipriani", "IDH", "Desemprego Longo", "Índice de Gini")
                     )
Dependent variable:
Taxa de Homícidio (100 mil hab.)
(1) (2) (3) (4)
ACM Hazel -0.135
(0.096)
ACM GV -0.284
(0.390)
ACR Hazel -0.051
(0.045)
ACR Cipriani -0.015
(0.029)
IDH -9.036*** -10.482*** -10.889*** -10.894***
(2.761) (2.295) (2.367) (2.356)
Desemprego Longo -0.013 -0.023** -0.022** -0.023**
(0.014) (0.010) (0.011) (0.010)
Índice de Gini 0.010 -0.003 0.0003 0.001
(0.026) (0.022) (0.023) (0.022)
Constant 11.456*** 16.068** 11.783*** 11.321***
(3.069) (7.364) (2.433) (2.420)
Observations 29 37 37 37
Residual Std. Error 0.533 (df = 24) 0.594 (df = 32) 0.643 (df = 32) 0.635 (df = 32)
Note: p<0.1; p<0.05; p<0.01

Sob a estimação robusta, o IDH volta a apresentar significância estatística (\(p < 0.01\)) em todas as quatro especificações, apresentando coeficientes elevados (variando entre -9,036 e -10,894). Adicionalmente, a Regressão Robusta identificou uma associação negativa e significativa para o desemprego de longa duração nos Modelos 2, 3 e 4.

Entretanto, o resultado é consitenta para as variaveis independentes principais. Em todas as estratégias de estimação que utilizamos até aqui - OLS, erros padrão robusto (HC) e Regressão Robusta (RLM) - as medidas de alteração na maioridade ou responsabilidade penal não apresentam significância estatística em nenhum dos cenários estimados. Concluímos, então que, controlando-se pelas condições socioeconômicas estruturais, as variações nos marcos legais de imputabilidade penal não exercem impacto perceptível sobre a taxa de homicídios no contexto analisado.

7 Referências

Lins, Rodrigo, Dalson Figueiredo Filho, e Lucas Silva. 2016. «A Redução Da Maioridade Penal Diminui a Violência? Evidências de Um Estudo Comparado». Opinião Pública 22 (1): 118–39. https://doi.org/10.1590/1807-0191201622118.