1) Introdução

O Rio de Janeiro, uma metrópole com rica história e cultura, enfrenta um desafio persistente: a criminalidade. A violência, em suas diversas formas, tem impactado significativamente a vida dos cariocas e a imagem da cidade no cenário nacional e internacional. Diante dessa problemática, a presente pesquisa propõe uma análise estatística da criminalidade no estado do Rio de Janeiro, com foco no ano de 2018.

Os dados foram fornecidos pelo Instituto de Segurança Pública que, com mais de 20 anos de existência, conta com grande conhecimento acumulado no desenvolvimento de metodologias de análise de dados relativos à Segurança Pública. Sua missão é produzir informações e disseminar pesquisas e análises com vistas a influenciar e subsidiar a implementação de políticas públicas de segurança e assegurar a participação social na construção dessas políticas.

2) Objetivo:

Este trabalho propõe uma pesquisa estatística sobre a criminalidade no Rio de Janeiro e suas regiões (Capital, Interior, Baixada Fluminense e Grande Niterói), utilizando os dados do Instituto de Segurança Pública. O objetivo é analisar as tendências da criminalidade no ano de 2018, e avaliar a eficácia das políticas públicas de segurança, comparando os resultados entre as regiões.

3) Metodologia:

Para analisarmos as informações da base de dados, foi utilizado o RStudio, que é um ambiente de software livre para computação estatística e gráficos. O primeiro passo, antes de começar as análises, foi necessário selecionar e carregar a base de dados para o ambiente do RStudio. A fonte selecionada é uma base de dados do site Kaggle.com, que foi fornecida pelo Instituto de Segurança Pública e desenvolvida por Daniel Esteves, atualizada em 2019. Esta contém 26.217 linhas (observações) e 63 colunas (variáveis), abordando em torno de 50 crimes (como roubos, furtos, homicídios, estupros, tráfico de drogas, entre outros), ocorridos nos municípios e regiões do Rio de Janeiro, entre os anos de 2003 a 2019. Porém, para fins desta pesquisa, foram analisadas somente as variáveis, no ano de 2018: indicador de letalidade, registro de ocorrências, homicídio doloso, lesão corporal e total de roubos.

#Carregando a base: 
library(readr)
BaseDP <- read_delim("C:/Users/marco/Downloads/archive (3)/BaseDPEvolucaoMensalCisp.csv", delim = ";", 
                     escape_double = FALSE, trim_ws = TRUE)
## Rows: 26217 Columns: 63
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ";"
## chr  (3): mes_ano, munic, Regiao
## dbl (60): CISP, mes, vano, AISP, RISP, mcirc, hom_doloso, lesao_corp_morte, ...
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
#Consertando os erros: 
BaseDP$munic=iconv(BaseDP$munic, "latin1", "UTF-8")
BaseDP$Regiao=iconv(BaseDP$Regiao, "latin1", "UTF-8")

#Baixando dplyr: 
library(dplyr)
## 
## Attaching package: 'dplyr'
## 
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## 
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
#Isolando a base de 2018:
BaseDP2018 = BaseDP %>% filter(vano=='2018')


NOMES = names(BaseDP2018)

library(kableExtra)
## 
## Attaching package: 'kableExtra'
## 
## The following object is masked from 'package:dplyr':
## 
##     group_rows
#DICIONARIO = data.frame(NOMES,SIGNIFICADO = c('Centro de seguranca','mes','Ano de #registro','MES E ANO' ,rep(NA,59)))

DICIONARIO = data.frame(NOMES = c('indicador_letalidade',   'registro_ocorrencias','hom_doloso','total_roubos','lesao_corp_dolosa','Regiao'),
SIGNIFICADO = c('Indicador de Letaliade','Registro de Ocorrências','Homicídio Doloso','Total de Roubos','Lesão corporal Dolosa','Regiões'))

kable(DICIONARIO, row.names = FALSE)
NOMES SIGNIFICADO
indicador_letalidade Indicador de Letaliade
registro_ocorrencias Registro de Ocorrências
hom_doloso Homicídio Doloso
total_roubos Total de Roubos
lesao_corp_dolosa Lesão corporal Dolosa
Regiao Regiões

Na tabela abaixo, podemos observar a base de dados.

#Carregando a biblioteca para tabela:
library(kableExtra)
#Execução e manipulação da tabela:
#kable(BaseDP2018, row.names = FALSE)%>%
#  kable_styling( full_width = T,bootstrap_options = c("striped", "hover", "condensed", #"responsive"),  position = "center", fixed_thead = T) %>%
#  scroll_box(width = "900px", height="600px")

As variáveis de interesse que serão utilizadas no estudo desta base de dados são:

  • indicadores_letalidade (Indicadores Estratégicos: Letalidade Violenta)
  • registro_ocorrencias (Recorde de ocorrências)
  • hom_doloso (Homicídio doloso)
  • lesao_corp_dolosa (Lesão corporal injusta)
  • total_roubos (Roubos totais)

Primeiramente, foi criado uma base de dados isolando o ano de 2018 (o qual foi analisado). Após isto, foram elaborados os gráficos do tipo Boxplot entre a variável qualitativa Região e as variáveis quantitativas Indicadores de Letalidade, Registro de Ocorrências, Homicídio Doloso, Lesão Corporal Dolosa e Total de Roubos. Em seguida, foram executados os testes de hipóteses com cada variável para fins conclusivos. Para a análise das hipóteses, foram utilizados: Teste de Shapiro, Teste de Kruscall-Wallis, Teste de Wilcoxon e Medianas. Ao fim dessas etapas, foram elaborados gráficos do tipo Geobr, que permitem a elaboração de mapas do Brasil utilizando as variáveis Municípios e as quantitativas de interesse do estudo, para facilitar a visualização dos dados apresentados.

3.1) Teste de Hipóteses:

Foram executados testes de hipóteses para avaliar como a variável Região interfere e se associa com as variáveis Indicadores de Letalidade, Registro de Ocorrências, Homicídio Doloso, Lesão Corporal Dolosa e Total de Roubos. Adotou-se alpha=0,05 para todos os testes realizados. Dessa forma, a regra de decisão foi definida como:

Se p-value ≤ alpha, rejeita H0.

Se p-value > alpha, não rejeita H0.

O primeiro teste de hipóteses realizado com as variáveis teve como objetivo a verificação do pressuposto de normalidade, por meio do teste de Shapiro Wilk, o qual parte do pressuposto de que as observações são independentes e apresenta as seguintes hipóteses:

H0:os dados seguem uma distribuição normal.

H1:os dados não seguem uma distribuição normal.

Após a verificação do pressuposto de normalidade, executou-se, para os dados que não seguem distribuição normal, o teste de Kruskal-Wallis com as hipóteses:

H0: os grupos têm distribuições de populações iguais.

H1: os grupos não têm distribuições de populações iguais.

E, em seguida, executou-se o teste de Comparações Múltiplas de Wilcoxon. Após isto, executou-se as medianas para cada variável.

4) Análises e conclusões:

Antes de começarmos as análises, vale ressaltar que estudamos a violência no Estado do Rio de Janeiro, produzindo gráficos com números absolutos, e testes de hipóteses com números relativos. Os gráficos se referem a quantidade, sendo importante destacar que a Capital terá maior número de incidência de crimes devido a sua maior concentração de população.

Foram analisadas duas variáveis, qualitativa e quantitativa, e elaborados gráficos Boxplot para visualização da associação entre os dados.

1° Análise: Região e Indicador de Letalidade.

# Construção do gráfico boxplot:
boxplot(BaseDP2018$indicador_letalidade ~ BaseDP2018$Regiao, main="Boxplot 1 - Indicador de Letalidade por Região", col=c("violet"), xlab= "Região", ylab="Indicador de Letalidade")

A partir do gráfico, podemos observar que a Baixada Fluminense, Capital e Interior possuem outliers, ou seja, há municípios destas regiões que possuem taxa de incidência de letalidade muito superior ao restante. De acordo com o gráfico, podemos observar, analisando as medianas, que a Baixada e Grande Niterói possuem comportamento parecido, enquanto o Interior se distancia do panorama apresentado pelas regiões. Além disso, há uma maior dispersão de dados na Baixada, e menor no Interior.

Realizando os testes de hipóteses:

  • Foi executado o teste de Shapiro Wilk com as variáveis Região e Indicador de Letalidade.
shapiro.test(BaseDP2018$indicador_letalidade)
## 
##  Shapiro-Wilk normality test
## 
## data:  BaseDP2018$indicador_letalidade
## W = 0.75033, p-value < 2.2e-16
  • Observamos, de acordo com o shapiro.test, que não há uma distribuição normal. Com isso, iremos efetuar o teste de Kruscal-Wallis, já que a variável possui mais de 3 categorias.
kruskal.test(BaseDP2018$indicador_letalidade ~ BaseDP2018$Regiao)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  BaseDP2018$indicador_letalidade by BaseDP2018$Regiao
## Kruskal-Wallis chi-squared = 385.09, df = 3, p-value < 2.2e-16
  • Analisando este teste, observamos que rejeita a hipótese nula (H0). Logo, será necessário efetuar o teste de Wilcoxon.
pairwise.wilcox.test(BaseDP2018$indicador_letalidade, BaseDP2018$Regiao)
## 
##  Pairwise comparisons using Wilcoxon rank sum test with continuity correction 
## 
## data:  BaseDP2018$indicador_letalidade and BaseDP2018$Regiao 
## 
##                Baixada Fluminense Capital Grande Niterói
## Capital        < 2e-16            -       -             
## Grande Niterói 0.0011             3.8e-07 -             
## Interior       < 2e-16            < 2e-16 < 2e-16       
## 
## P value adjustment method: holm
  • De acordo com este teste, foi observado uma diferença significativa entre as regiões.

  • Analisaremos a mediana:

BaseDP2018 %>% group_by(Regiao) %>% summarise(mediana=median(indicador_letalidade))
## # A tibble: 4 × 2
##   Regiao             mediana
##   <chr>                <dbl>
## 1 Baixada Fluminense       8
## 2 Capital                  3
## 3 Grande Niterói           5
## 4 Interior                 1
  • A Baixada Fluminense possui uma mediana maior (8) e,Interior, a menor (1). A diferença das medianas da Baixada e Grande Niterói é de 3, e entre Interior e Capital é 2.

2° Análise: Região e Registro de Ocorrências.

#Construção do gráfico boxplot:
boxplot(BaseDP2018$registro_ocorrencias ~ BaseDP2018$Regiao, main="Boxplot 2 - Registro de ocorrencia por Região", col=c("pink"), xlab= "Região", ylab="registro de ocorrência")

Com a análise exploratória do gráfico, podemos observar que a Baixada Fluminense, Capital e Interior possuem outliers, ou seja, há municípios destas regiões que possuem taxa de incidência de registro de ocorrência muito superior ao restante. O gráfico nos mostra que a Capital e Grande Niterói possuem comportamento parecido. Além disso, a Baixada apresenta maior dispersão de dados e mediana abaixo dos anteriores, enquanto o Interior possui dispersão e mediana menores, comparado aos outros.

Realizando os testes de hipóteses:

  • Foi executado o teste de Shapiro Wilk com as variáveis Região e Registro de Ocorrências.
shapiro.test(BaseDP2018$registro_ocorrencias)
## 
##  Shapiro-Wilk normality test
## 
## data:  BaseDP2018$registro_ocorrencias
## W = 0.87904, p-value < 2.2e-16
  • Observamos, de acordo com o shapiro.test, que não há uma distribuição normal. Com isso, iremos efetuar o teste de Kruscal-Wallis, já que a variável possui mais de 3 categorias.
kruskal.test(BaseDP2018$registro_ocorrencias~BaseDP2018$Regiao)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  BaseDP2018$registro_ocorrencias by BaseDP2018$Regiao
## Kruskal-Wallis chi-squared = 799.69, df = 3, p-value < 2.2e-16
  • Analisando este teste, observamos que rejeita a hipótese nula (H0). Logo, será necessário efetuar o teste de Wilcoxon.
pairwise.wilcox.test(BaseDP2018$registro_ocorrencias, BaseDP2018$Regiao)
## 
##  Pairwise comparisons using Wilcoxon rank sum test with continuity correction 
## 
## data:  BaseDP2018$registro_ocorrencias and BaseDP2018$Regiao 
## 
##                Baixada Fluminense Capital Grande Niterói
## Capital        1.8e-05            -       -             
## Grande Niterói 0.013              0.044   -             
## Interior       < 2e-16            < 2e-16 < 2e-16       
## 
## P value adjustment method: holm
  • De acordo com este teste, foi observado uma diferença significativa entre as regiões.

  • Analisaremos a mediana:

BaseDP2018 %>% group_by(Regiao) %>% summarise(mediana=median(registro_ocorrencias))
## # A tibble: 4 × 2
##   Regiao             mediana
##   <chr>                <dbl>
## 1 Baixada Fluminense    470.
## 2 Capital               678 
## 3 Grande Niterói        602.
## 4 Interior              112
  • Analisando as medianas, podemos ver que a mediana da Capital é maior do que o restante, tendo diferença significativa em comparação com Grande Niterói. Em seguida, temos Baixada e Interior (possuindo uma grande diferença das demais).

3° Análise: Região e Homicídio Doloso.

#Construção do gráfico boxplot:
boxplot(BaseDP2018$hom_doloso ~ BaseDP2018$Regiao, main="Boxplot 3 - Homicídio Doloso por Região", col=c("blue"), xlab= "Região", ylab="Homicídio Doloso")

Os dados do gráfico evidenciam que todas as regiões apresentam outliers. Além disso, pode-se observar que a Baixada Fluminense possui uma maior dispersão de dados e uma mediana maior dentre os outros, porém, próxima a de Grande Niterói. A Capital possui mediana maior que o Interior e menor que Grande Niterói. Vale destacar também que o Interior possui uma dispersão de dados mais enxutada.

Realizando os testes de hipóteses:

  • Foi executado o teste de Shapiro Wilk com as variáveis Região e Homicídio Doloso.
shapiro.test(BaseDP2018$hom_doloso)
## 
##  Shapiro-Wilk normality test
## 
## data:  BaseDP2018$hom_doloso
## W = 0.74499, p-value < 2.2e-16
  • Observamos, de acordo com o shapiro.test, que não há uma distribuição normal. Com isso, iremos efetuar o teste de Kruscal Wallis, já que a variável possui mais de 3 categorias.
kruskal.test(BaseDP2018$hom_doloso~BaseDP2018$Regiao)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  BaseDP2018$hom_doloso by BaseDP2018$Regiao
## Kruskal-Wallis chi-squared = 288.17, df = 3, p-value < 2.2e-16
  • Analisando este teste, observamos que rejeita a hipótese nula (H0). Logo, será necessário efetuar o teste de Wilcoxon.
pairwise.wilcox.test(BaseDP2018$hom_doloso, BaseDP2018$Regiao)
## 
##  Pairwise comparisons using Wilcoxon rank sum test with continuity correction 
## 
## data:  BaseDP2018$hom_doloso and BaseDP2018$Regiao 
## 
##                Baixada Fluminense Capital Grande Niterói
## Capital        < 2e-16            -       -             
## Grande Niterói 6.0e-05            1.1e-05 -             
## Interior       < 2e-16            7.0e-13 9.5e-16       
## 
## P value adjustment method: holm
  • De acordo com este teste, foi observado uma diferença significativa entre as regiões.

  • Analisaremos a mediana:

BaseDP2018 %>% group_by(Regiao) %>% summarise(mediana=median(hom_doloso))
## # A tibble: 4 × 2
##   Regiao             mediana
##   <chr>                <dbl>
## 1 Baixada Fluminense       5
## 2 Capital                  2
## 3 Grande Niterói           4
## 4 Interior                 1
  • Analisando as medianas, concluímos que, mesmo com uma diferença de apenas um homicídio na mediana entre Baixada e Grande Niterói, e Capital e Interior, pelo teste aplicado, podemos afirmar que todas as regiões apresentam uma distribuição diferente e significativa, com a Baixada tendo uma posição superior nesta análise.

4° Análise: Região e Lesão Corporal.

#Construção do gráfico boxplot: 
boxplot(BaseDP2018$lesao_corp_dolosa ~ BaseDP2018$Regiao, main="Boxplot 4 - Lesão Corporal Dolosa por Região", col=c("orange"), xlab= "Região", ylab="Lesão Corporal Dolosa")

De acordo com o gráfico, observamos que todas as regiões possuem outliers. Além disso, a Baixada possui uma maior dispersão e maior mediana que os demais, porém, apresenta comportamento similar à Capital e Grande Niterói. Já o Interior, se distancia do cenário, possuindo uma mediana abaixo do panorama.

Realizando os testes de hipóteses:

  • Foi executado o teste de Shapiro Wilk com as variáveis Região e Lesão Corporal Dolosa.
shapiro.test(BaseDP2018$lesao_corp_dolosa)
## 
##  Shapiro-Wilk normality test
## 
## data:  BaseDP2018$lesao_corp_dolosa
## W = 0.81279, p-value < 2.2e-16
  • Observamos, de acordo com o shapiro.test, que não há uma distribuição normal. Com isso, iremos efetuar o teste de Kruscal-Wallis, já que a variável possui mais de 3 categorias.
kruskal.test(BaseDP2018$lesao_corp_dolosa~BaseDP2018$Regiao)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  BaseDP2018$lesao_corp_dolosa by BaseDP2018$Regiao
## Kruskal-Wallis chi-squared = 455.91, df = 3, p-value < 2.2e-16
  • Analisando este teste, observamos que rejeita a hipótese nula (H0). Logo, será necessário efetuar o teste de Wilcoxon.
pairwise.wilcox.test(BaseDP2018$lesao_corp_dolosa, BaseDP2018$Regiao)
## 
##  Pairwise comparisons using Wilcoxon rank sum test with continuity correction 
## 
## data:  BaseDP2018$lesao_corp_dolosa and BaseDP2018$Regiao 
## 
##                Baixada Fluminense Capital Grande Niterói
## Capital        1.3e-08            -       -             
## Grande Niterói 0.0013             0.0441  -             
## Interior       < 2e-16            < 2e-16 < 2e-16       
## 
## P value adjustment method: holm
  • De acordo com este teste, foi observado uma diferença significativa entre as regiões. Porém, a análise prévia do gráfico não se verificou, visto que todas possuem comportamento diferente.

  • Analisaremos a mediana:

BaseDP2018 %>% group_by(Regiao) %>% summarise(mediana=median(lesao_corp_dolosa))
## # A tibble: 4 × 2
##   Regiao             mediana
##   <chr>                <dbl>
## 1 Baixada Fluminense    51.5
## 2 Capital               38  
## 3 Grande Niterói        42  
## 4 Interior              14
  • Analisando as medianas, podemos observar um ranking na qual a Baixada fica em destaque com maior mediana dentre as demais, seguido de Grande Niterói, Capital e Interior (possuindo mediana muito baixa, comparado com o restante).

5° Análise: Região e Total de Roubos.

#Construção do gráfico boxplot:
boxplot(BaseDP2018$total_roubos ~ BaseDP2018$Regiao, main="Boxplot 5 - Total de Roubos por Região", col=c("darkcyan"), xlab= "Região", ylab="Total de Roubos")

O gráfico nos mostra a presença de outliers na Baixada, Capital e Interior. Além disso, podemos observar que a Baixada, Grande Niterói e Capital possuem comportamento parecido. Grande Niterói tem a maior dispersão de dados, e Interior se encontra bem distante do cenário apresentado.

Realizando os testes de hipóteses:

  • Foi executado o teste de Shapiro Wilk com as variáveis Região e Total de Roubos.
shapiro.test(BaseDP2018$total_roubos)
## 
##  Shapiro-Wilk normality test
## 
## data:  BaseDP2018$total_roubos
## W = 0.76186, p-value < 2.2e-16
  • Observamos, de acordo com o shapiro.test, que não há uma distribuição normal. Com isso, iremos efetuar o teste de Kruscal-Wallis, já que a variável possui mais de 3 categorias.
kruskal.test(BaseDP2018$total_roubos~BaseDP2018$Regiao)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  BaseDP2018$total_roubos by BaseDP2018$Regiao
## Kruskal-Wallis chi-squared = 1019.7, df = 3, p-value < 2.2e-16
  • Analisando este teste, observamos que rejeita a hipótese nula (H0). Logo, será necessário efetuar o teste de Wilcoxon.
pairwise.wilcox.test(BaseDP2018$total_roubos, BaseDP2018$Regiao)
## 
##  Pairwise comparisons using Wilcoxon rank sum test with continuity correction 
## 
## data:  BaseDP2018$total_roubos and BaseDP2018$Regiao 
## 
##                Baixada Fluminense Capital Grande Niterói
## Capital        0.266              -       -             
## Grande Niterói 0.011              0.266   -             
## Interior       <2e-16             <2e-16  <2e-16        
## 
## P value adjustment method: holm
  • De acordo com este teste, verificamos que a Capital tem comportamento similar à Baixada e Grande Niterói. Além disso, observa-se que Grande Niterói é diferente da Baixada e que o Interior é diferente do restante.

  • Analisaremos a mediana:

BaseDP2018 %>% group_by(Regiao) %>% summarise(mediana=median(total_roubos))
## # A tibble: 4 × 2
##   Regiao             mediana
##   <chr>                <dbl>
## 1 Baixada Fluminense     201
## 2 Capital                205
## 3 Grande Niterói         210
## 4 Interior                 4
  • Analisando as medianas, podemos observar que Grande Niterói está no topo do ranking, seguido de Capital, Baixada e por último, com valor discrepante dos demais, temos o Interior.

Mapas do Geobr:

O pacote Geobr permite a elaboração de mapas. A ferramenta facilita a visualização e interpretação de dados. Nos mapas que serão apresentados abaixo estão representadas os municípios do Estado do Rio de Janeiro de acordo com cada crime analisado em questão, além de proporcionar seus valores. Vale ressaltar que, nos gráficos acima, a Baixada Fluminense apresenta, no geral, uma maior dispersão de dados, porém, nos mapas abaixo, teremos a Capital como destaque. Isto ocorre, pois, quando levamos em consideração a Região da Baixada, nesta está englobada todos os seus municípios, e nos mapas abaixo, para uma visualização mais detalhada, foi considerado cada um separadamente.

O 1° mapa elaborado foi o indicador de letalidade por região, como podemos observar abaixo.

#Carregando o pacote Geobr e abrindo a biblioteca:
#install.packages("geobr")
library(geobr)
## Loading required namespace: sf
#Carregando o pacote Sf:
#install.packages("sf")

#Gerando mapa: 
mapa_RJ <- read_municipality(code_muni=33, year=2018) 
## Using year/date 2018
## Downloading: 10 kB     Downloading: 10 kB     Downloading: 10 kB     Downloading: 10 kB     Downloading: 26 kB     Downloading: 26 kB     Downloading: 34 kB     Downloading: 34 kB     Downloading: 42 kB     Downloading: 42 kB     Downloading: 67 kB     Downloading: 67 kB     Downloading: 91 kB     Downloading: 91 kB     Downloading: 130 kB     Downloading: 130 kB     Downloading: 160 kB     Downloading: 160 kB     Downloading: 160 kB     Downloading: 160 kB     Downloading: 250 kB     Downloading: 250 kB     Downloading: 250 kB     Downloading: 250 kB     Downloading: 270 kB     Downloading: 270 kB     Downloading: 280 kB     Downloading: 280 kB     Downloading: 280 kB     Downloading: 280 kB
# plot(mapa_RJ)
             
banco_para_mapa = BaseDP2018 %>% group_by(munic,mcirc) %>% summarise(total=sum(indicador_letalidade))
## `summarise()` has grouped output by 'munic'. You can override using the
## `.groups` argument.
banco_para_mapa = banco_para_mapa %>% rename(code_muni=mcirc)

mapa_RJ2 = mapa_RJ %>% left_join(banco_para_mapa)
## Joining with `by = join_by(code_muni)`
#Carregando o pacote Leaflet:
#install.packages("leaflet")

library(leaflet)

#leaflet(data = mapa_RJ2) %>% addPolygons()

reds = colorNumeric("Purples", domain = mapa_RJ2$total)
mapa <- leaflet(data = mapa_RJ2) %>% addPolygons(weight = 0.1, fillColor =  ~reds(total),color = "blue",
                                                 ,fillOpacity = 0.9,
                                                 smoothFactor = 0.5,
                                                 popup = paste0("Municipio :  ",
                                                                mapa_RJ2$name_muni,
                                                                " Qtd indicador letal:",
                                                                mapa_RJ2$total)) |>
  addProviderTiles("Esri.WorldImagery")
## Warning: sf layer has inconsistent datum (+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs).
## Need '+proj=longlat +datum=WGS84'
mapa

O mapa nos mostra uma cor mais forte no município do Rio de Janeiro, ou seja, a Capital. Isso significa uma maior concentração dos índices de indicador de letalidade. As cores vão ficando mais claras conforme os números dos índices diminuem. Em cinza, temos os municípios que não apresentaram informações (NA). Além de mostrar a concentração em cada município, o mapa nos proporciona os valores desta variável em cada parte do Estado do Rio de Janeiro.

O 2° mapa elaborado foi o registro de ocorrências por região, como podemos observar abaixo.

#Gerando mapa: 
mapa_RJ <- read_municipality(code_muni=33, year=2018) 
## Using year/date 2018
# plot(mapa_RJ)
             
banco_para_mapa = BaseDP2018 %>% group_by(munic,mcirc) %>% summarise(total=sum(registro_ocorrencias))
## `summarise()` has grouped output by 'munic'. You can override using the
## `.groups` argument.
banco_para_mapa = banco_para_mapa %>% rename(code_muni=mcirc)

mapa_RJ2 = mapa_RJ %>% left_join(banco_para_mapa)
## Joining with `by = join_by(code_muni)`
#Carregando o pacote Leaflet:
#install.packages("leaflet")

library(leaflet)
mapa_RJ <- read_municipality(code_muni=33, year=2018) 
## Using year/date 2018
# plot(mapa_RJ)
             
banco_para_mapa = BaseDP2018 %>% group_by(munic,mcirc) %>% summarise(total=sum(registro_ocorrencias))
## `summarise()` has grouped output by 'munic'. You can override using the
## `.groups` argument.
banco_para_mapa = banco_para_mapa %>% rename(code_muni=mcirc)

mapa_RJ2 = mapa_RJ %>% left_join(banco_para_mapa)
## Joining with `by = join_by(code_muni)`
# leaflet(data = mapa_RJ2) %>% addPolygons()

reds = colorNumeric("PiYG", domain = mapa_RJ2$total)
mapa <- leaflet(data = mapa_RJ2) %>% addPolygons(weight = 0.1, fillColor =  ~reds(total),color = "blue",
                                                 ,fillOpacity = 0.9,
                                                 smoothFactor = 0.5,
                                                 popup = paste0("Municipio :  ",
                                                                mapa_RJ2$name_muni,
                                                                " Qtd registro ocor.:",
                                                                mapa_RJ2$total)) |>
  addProviderTiles("Esri.WorldImagery")
## Warning: sf layer has inconsistent datum (+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs).
## Need '+proj=longlat +datum=WGS84'
mapa

O mapa nos mostra a cor verde no município do Rio de Janeiro, ou seja, a Capital. Isso significa uma maior concentração dos índices de registro de ocorrências. Os outros tons de rosa vão variando conforme os números dos índices diminuem. Em cinza, temos os municípios que não apresentaram informações (NA). Além de mostrar a concentração em cada município, o mapa nos proporciona os valores desta variável em cada parte do Estado do Rio de Janeiro, tendo a Capital em destaque e com número discrepante de 375.027.

O 3° mapa elaborado foi o de homicídio doloso por região, como podemos observar abaixo.

#Gerando mapa:
mapa_RJ <- read_municipality(code_muni=33, year=2018) 
## Using year/date 2018
#plot(mapa_RJ)
             
banco_para_mapa = BaseDP2018 %>% group_by(munic,mcirc) %>% summarise(total=sum(hom_doloso))
## `summarise()` has grouped output by 'munic'. You can override using the
## `.groups` argument.
banco_para_mapa = banco_para_mapa %>% rename(code_muni=mcirc)

mapa_RJ2 = mapa_RJ %>% left_join(banco_para_mapa)
## Joining with `by = join_by(code_muni)`
#Carregando o pacote Leaflet:
#install.packages("leaflet")

library(leaflet)
#leaflet(data = mapa_RJ2) %>% addPolygons()

reds = colorNumeric("GnBu", domain = mapa_RJ2$total)
mapa <- leaflet(data = mapa_RJ2) %>% addPolygons(weight = 0.1, fillColor =  ~reds(total),color = "blue",
                                                 ,fillOpacity = 0.9,
                                                 smoothFactor = 0.5,
                                                 popup = paste0("Municipio :  ",
                                                                mapa_RJ2$name_muni,
                                                                " Qtd hom doloso.:",
                                                                mapa_RJ2$total)) |>
  addProviderTiles("Esri.WorldImagery")
## Warning: sf layer has inconsistent datum (+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs).
## Need '+proj=longlat +datum=WGS84'
mapa

O 4° mapa elaborado foi Lesão Corporal Dolosa por Região.

#Construção do mapa:
#leaflet(data = mapa_RJ2) %>% addPolygons()

reds = colorNumeric("Oranges", domain = mapa_RJ2$total)
mapa <- leaflet(data = mapa_RJ2) %>% addPolygons(weight = 0.1, fillColor =  ~reds(total),color = "blue",
                                                 ,fillOpacity = 0.9,
                                                 smoothFactor = 0.5,
                                                 popup = paste0("Municipio :  ",
                                                                mapa_RJ2$name_muni,
                                                                " Qtd lesao corp dol.:",
                                                                mapa_RJ2$total)) |>
  addProviderTiles("Esri.WorldImagery")
## Warning: sf layer has inconsistent datum (+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs).
## Need '+proj=longlat +datum=WGS84'
mapa

O mapa nos mostra uma maior concentração de lesão corporal dolosa na Capital. As outras cores vão variando conforme os índices diminuem. Em cinza, temos os municípios que não apresentaram informações (NA)

O 5° mapa elaborada foi Total de Roubos por Região.

#Construção do mapa:
#leaflet(data = mapa_RJ2) %>% addPolygons()

reds = colorNumeric("Greens", domain = mapa_RJ2$total)
mapa <- leaflet(data = mapa_RJ2) %>% addPolygons(weight = 0.1, fillColor =  ~reds(total),color = "blue",
                                                 ,fillOpacity = 0.9,
                                                 smoothFactor = 0.5,
                                                 popup = paste0("Municipio :  ",
                                                                mapa_RJ2$name_muni,
                                                                " Qtd de roubos.:",
                                                                mapa_RJ2$total)) |>
  addProviderTiles("Esri.WorldImagery")
## Warning: sf layer has inconsistent datum (+proj=longlat +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +no_defs).
## Need '+proj=longlat +datum=WGS84'
mapa

O mapa nos mostra uma cor verde forte na Capital, ou seja, maior concentração de roubos. Em cinza, temos os municípios que não apresentaram informações (NA).

Com a análise dos mapas, concluímos que o município do Rio de Janeiro, ou seja, a Capital, acaba se sobressaindo dentre os demais municípios. Como mencionado, para as análises dos gráficos do Boxplot, foi observado um agrupamento de munícipios, como exemplo da Baixada Fluminense. Os mapas nos proporcionam uma análise mais detalhada.

5) Conclusão:

A análise estatística da criminalidade no estado do Rio de Janeiro, com foco no ano de 2018, revelou um cenário complexo e heterogêneo entre as diferentes regiões. A Baixada Fluminense se destacou como a região com os maiores índices de homicídios e lesões corporais dolosas, evidenciando a necessidade de ações urgentes e específicas para enfrentar essa problemática. A Capital, por sua vez, apresentou os maiores registros de ocorrência, refletindo a concentração populacional e a complexidade urbana. Em contrapartida, o interior do estado demonstrou índices de criminalidade significativamente menores.

6) Recomendações:

De acordo com nossa análise, concluímos que, em 2018, teve-se um cenário complexo e heterogêneo entre as diferentes regiões do Estado do Rio de Janeiro. Recomendamos que o Estado busque aumentar o número de policiais nas áreas mais vulneráveis da Baixada Fluminense e na Capital, com foco em policiamento de proximidade e inteligência. Além disso, é fundamental fortalecer a rede de assistência social, com programas de transferência de renda, inclusão social e atendimento a famílias em situação de vulnerabilidade. É importante, também, promover políticas para melhorar o acesso e qualidade do ensino nas áreas mais afetadas.