O SIEMA disponibiliza registros datados e georreferenciados de ocorrências ambientais em todo o território brasileiro, possibilitando a análise de padrões temporais de frequência, gravidade e tipologia desses acidentes. Essas informações são fundamentais para monitorar metas dos Objetivos de Desenvolvimento Sustentável (ODS), em especial as metas 12.4 (gestão de resíduos), 13.1 (resiliência a desastres), 14.1 (redução da poluição marinha) e 15.5 (proteção da biodiversidade) (United Nations, 2015).
Objetivos
Explorar o conjunto de dados
Limpeza, transformação e estruturação em objetos;
Verificação de consistência temporal (lacunas, duplicações, dentre outros).
Descrever a dinâmica temporal
Identificar tendência, sazonalidade e ciclos usando métodos clássicos (stats::decomposeou STL);
Gerar insights para gestão ambiental
Detectar períodos críticos, sazonalidades regionais e anomalias;
Oferecer subsídios para a gestão pública ambiental.
Nota
Relevância
Compreender a evolução temporal dos acidentes ambientais auxilia na formulação de políticas públicas de prevenção, resposta e mitigação de impactos socioambientais.
Justificativa
O registro sistemático e a análise temporal de acidentes ambientais são etapas cruciais para prevenir danos socioambientais, otimizar o uso de recursos públicos e cumprir compromissos internacionais assumidos pelo Brasil. A Instrução Normativa IBAMA nº 15/2014 instituiu o SIEMA justamente para consolidar essas informações (Instituto Brasileiro do Meio Ambiente e dos Recursos Naturais Renováveis, 2014). Entretanto, lacunas de classificação e ausência de dicionário de dados dificultam a extração de indicadores confiáveis.
Nesse sentido, aplicar técnicas de séries temporais em R oferece três benefícios principais:
Identificação de tendências e sazonalidade
Ferramentas clássicas como forecast e fpp2 permitem decompor séries e detectar picos ou períodos críticos, fornecendo subsídios à gestão preventiva (Hyndman; Athanasopoulos, 2018; Hyndman; Khandakar, 2008).
Apoio às políticas públicas
Ao quantificar padrões de frequência e gravidade, os resultados direcionam investimentos em fiscalização e mitigação, alinhando‐se às metas 12.4, 13.1, 14.1 e 15.5 da Agenda 2030 (United Nations, 2015).
Transparência e reprodutibilidade
O uso de pacotes abertos (readr, dplyr, ggplot2, entre outros), além da disponibilização do código no formato Quarto, favorecem auditoria e reutilização por órgãos públicos, pesquisadores e sociedade civil.
Assim, o presente estudo se justifica tanto pela relevância ambiental e econômica dos acidentes investigados quanto pela necessidade de aprimorar a base de evidências que sustenta decisões governamentais voltadas à sustentabilidade.
Implementação do estudo
Ferramentas estatísticas e computacionais
No âmbito metodológico, a implementação e a replicação dos resultados foram conduzidas na versão mais recente do ambiente R(R Core Team, 2024), assegurando reprodutibilidade e transparência. A preparação dos dados foi conduzida com pacotes do ecossistema tidyverse – readr, dplyr, tidyr e ggplot2 – que oferecem uma gramática consistente para importação, transformação e visualização (Wickham; Grolemund, 2019).
Para modelagem utilizamos:
forecast – funções clássicas de suavização exponencial, ARIMA e suas variantes (Hyndman; Khandakar, 2008);
Já a decomposição sazonal foi realizada via STL (Seasonal-Trend Decomposition) (Cleveland et al., 1990), técnica robusta para separar componentes de tendência, sazonalidade e ruído em dados ambientais.
Os resultados gráficos foram produzidos com ggplot2 e convertidos em visualizações interativas via plotly; as tabelas são formatadas com knitr. Para exportação do documento em PDF e captura de widgets em PNG emprega-se webshot2. Todo o código foi executado na versão do ambiente R 4.4.3(R Core Team, 2024).
Mostrar o código R
# principais pacotes utilizadosrequired_pkgs <-c("readr", "dplyr", "stats", "ggplot2", "fpp2","forecast", "ggplot2", "tidyr","plotly", "lubridate","knitr","webshot2")# instalação automática (opcional)for (p in required_pkgs) if (!require(p, character.only =TRUE)) install.packages(p)
Carregando os dados do arquivo CSV
A função read.csv() é uma variação da função read.table() da base do R, já configurada para ler arquivos .csv no formato padrão com separador de vírgula. Contudo, o CSV que estamos utilizando está formatado com a separação em ponto e vírgula.
Apesar do conjunto de dados fornecido não estar atrelado a um dicionário de dados, infere-se que a coluna legado caracteriza registros que foram realizados por meio de um sistema legado ou não. Considerando o exposto, para fins de análise, optou-se pela utilização apenas dos dados do SIEMA, desconsiderando-se, consequentemente, os dados legados.
Tal opção justifica-se pelas insconsistências e lapsos temporais identificados nos dados analisados. O processo de recorte dos dados desejados acontece conforme segue, por meio da função filter.
Uma vez que os dados foram filtrados e os registros de sistema legado foram descartados, optou-se, na sequência, por selecionar apenas os registros que possuem data de ocorrência, considerando que este dado tem caráter temporal e é essencial para uma análise de séries temporais.
Nesse processo, aproveitou-se para formatar os campos de datas com o formato adequado para as análises futuras. Além disso, também identificamos a necessidade de correção de 9 (nove) campos de datas, pois, os anos das datas registradas foram notóriamente digitados incorretamente. Por meio da análise das datas de lançamento dos registros no sistema, datas estas que são registradas automaticamente pelo própróprio sistema, pode-se proceder com a correção.
A partir do recorte de dados supracitado, obtemos a seguinte contagem de acidentes ambientais por dia:
Mostrar o código R
acidentes_por_dia <- dados_siema %>%count(dt_ocorrencia, name ="total_acidentes_por_dia") # conta quantos acidentes por datatotal_acidentes <-sum(acidentes_por_dia$total_acidentes_por_dia)cat("Total absoluto de acidentes: " , total_acidentes, "\n")
Total absoluto de acidentes: 7385
Assim, considerando o total de 13.755 registros de acidentes ambientais planilhados, apenas 7.385 registros foram efetivamente utilizados no presente estudo, o que representa apenas 53,69% dos dados absolutos.
Agrupamentos e análises
Agrupamento de acidentes ambientais por ano
Antes de analisar tendências mensais ou sazonais, é útil obter uma visão panorâmica ano a ano. O agrupamento por ano serve para:
Eliminar variações de curtíssimo prazo, permitindo detectar mudanças estruturais no número de acidentes ambientais registrados;
Comparar períodos de políticas públicas distintas (ex.: antes e depois da IN 15/2014);
Identificar anos atípicos que mereçam investigação mais detalhada.
No bloco de código a seguir:
A coluna dt_registro é convertida para o tipo Date, garantindo que o R reconheça corretamente o campo temporal.
Extrai-se o ano com lubridate::year().
Excluem-se registros anteriores a 2015 (ano > 2014) para focar na fase em que o SIEMA já estava plenamente operacional.
Os dados são agrupados com group_by(ano) e resumidos com summarise(total = n()), produzindo uma tabela com o total de acidentes por ano.
Mostrar o código R
# Converte a coluna dt_registro para Datedados_siema$dt_registro <-as.Date(dados_siema$dt_registro)acidentes_por_ano <- dados_siema %>%mutate(ano =year(dt_registro)) %>%filter(!is.na(ano) & ano >2014) %>%group_by(ano) %>%summarise(total =n()) %>%arrange(ano)
Tabela 1: Total de acidentes ambientais por ano, média e desvio-padrão
Ano
Total de acidentes
2015
493.00
2016
669.00
2017
857.00
2018
1000.00
2019
1187.00
2020
847.00
2021
913.00
2022
963.00
2023
423.00
Média
816.89
Desvio padrão
246.36
Figura 1: Acidentes ambientais por ano (com média e ±1 desvio-padrão)
Discussão do gráfico anual com média e ±1 desvio-padrão
A visualização da Figura 1 tem como base os dados tabulados na Tabela 1, que coloca cada total anual de acidentes ao lado de três referências estatísticas: a média do período (≈ 803 ocorrências) em linha tracejada vermelha e a faixa média ± 1 DP (≈ 566 a 1 041) em linhas pontilhadas cinza. O enquadramento em questão facilita identificar anos “normais” e “atípicos”.
Anos dentro da faixa (2016, 2017, 2018, 2020, 2021, 2022)
A maior parte da série oscila dentro de ±1 desvio-padrão, sugerindo variação considerada “esperada” para o sistema. Embora 2020 marque a queda pandêmica, o valor (847) ainda permanece dentro do intervalo estatístico previsto.
Alta atípica: 2019
O valor observado ultrapassa média + DP, chegando a 1.187 acidentes registrados. Isso reforça a hipótese de um pico extraordinário — possivelmente a combinação de um evento de grande magnitude com intensificação na notificação pelo SIEMA já amadurecido.
Baixas atípicas: 2015 e 2023
Ambos ficam abaixo de média − DP (493 e 423, respectivamente). A contagem de 2015 reflete o primeiro ano completo pós-instituição do SIEMA, quando os fluxos de registro ainda estavam em implantação. Já 2023 provavelmente sofre de base incompleta, pois parte dos registros costuma ser homologada com atraso.
Tendência implícita
O gradativo crescimento 2015 → 2018, seguido do ponto máximo em 2019, indica fase de ampliação do sistema; a queda em 2020 sugere impacto das restrições da COVID-19 ou sub-notificação, com posterior recuperação em 2021-2022.
Em suma, o gráfico confirma que apenas três anos se desviam estatisticamente do comportamento médio, justificando investigações específicas:
(1) 2019 pela alta incomum, (2) 2015 pela fase de adoção do sistema, e (3) 2023 pela provável defasagem de dados. Os demais anos apresentam flutuações compatíveis com a variabilidade normal do processo.
Discussão preliminar dos resultados
O histograma anual evidencia três movimentos distintos ao longo da série:
Fase
Período
Comportamento observável
Possíveis fatores explicativos
Crescimento acentuado
2015-2019
Total sobe de 493 para o pico de 1 187 (+141 %).
Consolidação do SIEMA e maior adesão ao registro; crescimento de atividades de risco.
Recuo brusco
2020
Queda para 847 (-29 % vs. 2019).
Pandemia: redução de atividades econômicas e/ou sub-notificação por restrição operacional.
Oscilação de recuperação
2021-2022
Retomada parcial (913 → 963), ainda abaixo de 2019.
Reativação econômica gradual e retomada da fiscalização.
Queda acentuada (parcial)
2023
423 acidentes – menos da metade de 2022.
Provável base incompleta (registros ainda em processamento).
Agrupamento de acidentes por UF
Inicialmente, a ideia é agruparmos os registros de acidentes ambientais por UF. Nesse agrupamento, precisamos somar o total de acidentes registrados por UF. O código-fonte a seguir realiza tal procedimento de contagem.
Mostrar o código R
acidentes_por_uf <- dados_acidentes %>%group_by(uf) %>%summarise(total_acidentes =n(), .groups ="drop") %>%arrange(desc(total_acidentes)) # opcional: ordena do maior para o menor
Tabela 2: Total de acidentes ambientais por unidade federativa e região
UF
Total de acidentes
Região
MS
216
Centro-Oeste
DF
202
Centro-Oeste
GO
201
Centro-Oeste
MT
139
Centro-Oeste
953
Indefinido
BA
545
Nordeste
SE
228
Nordeste
CE
193
Nordeste
MA
157
Nordeste
RN
153
Nordeste
AL
136
Nordeste
PE
89
Nordeste
PB
49
Nordeste
PI
38
Nordeste
AM
131
Norte
PA
121
Norte
TO
64
Norte
RO
49
Norte
AP
12
Norte
RR
9
Norte
AC
6
Norte
MG
3474
Sudeste
SP
2462
Sudeste
RJ
2123
Sudeste
ES
416
Sudeste
PR
643
Sul
RS
509
Sul
SC
437
Sul
Como no conjunto de dados oficial não há uma coluna destinada para “região”, criamos a coluna regiao e a preenchemos de acordo com os estados (UFs) identificados para cada registro, conforme pode-se visualizar na Tabela 2.
Agrupamento de dados por região
Agora com as regiões adicionadas ao conjunto de dados, procedemos com o agrupamento dos dados por região, para que pudéssemos explorar a geração de gráficos com o conjunto em questão. Para tal, o percentual de acidentes por região foi calculado e o agrupamento foi reordenado.
# Gráfico de pizza com legenda por cor (regiões)ggplot(acidentes_por_regiao, aes(x ="", y = total, fill = regiao)) +geom_col(width =1, color ="white") +coord_polar(theta ="y") +geom_text(aes(label = label), position =position_stack(vjust =0.5), color ="white", size =4) +labs(title ="Distribuição de Acidentes Ambientais por Região", fill ="Região") +theme_minimal() +theme_void() +# remove eixo e fundotheme(legend.position ="right", # legenda visível à direitaplot.title =element_text(hjust =0.5, size =16, face ="bold"))
Gráfico de Barras
Mostrar o código R
# Reordenar fator para refletir a ordem no gráficoacidentes_por_regiao$regiao <-factor(acidentes_por_regiao$regiao, levels = acidentes_por_regiao$regiao)# Criar gráfico de barrasggplot(acidentes_por_regiao, aes(x = regiao, y = percentual, fill = regiao)) +geom_col(width =0.7) +geom_text(aes(label = label), vjust =-0.5, size =3) +labs(title ="Percentual de Acidentes Ambientais por Região",x ="Região",y ="Percentual (%)") +theme_minimal() +theme(legend.position ="none",plot.title =element_text(hjust =0.5, size =16, face ="bold"))
Acidentes Ambientais no Estado de Mato Grosso do Sul
Mostrar o código R
acidentes_ms = dados_siema %>%filter(uf=="MS")
Visão geral anual e sazonal em MS
Antes de detalhar categorias de dano, é importante observar como as ocorrências evoluem ao longo do tempo no Estado de Mato Grosso do Sul (MS), tanto na escala anual quanto na sazonalidade. Os gráficos a seguir explorar tal evolução.
Figura 2: Total de acidentes ambientais por ano – MS
Figura 3: Sazonalidade média mensal de acidentes – MS
Leitura rápida: a Figura 2 mostra a tendência anual, enquanto a Figura 3 destaca meses de maior risco (p. ex., picos recorrentes no outono), fornecendo base para alocação sazonal de recursos.
Perfil dos danos mais frequentes em MS
Conhecer quais tipos de dano predominam no estado nos permite priorizar ações de prevenção e resposta. A seguir, são dispostos os principais tipos de danos ambientes no estado de Mato Grosso do Sul.
Tabela 3: Top 10 tipos de danos ambientais – MS
Tipo de dano
Ocorrências
Solo
23
Sem preenchimento
8
Outro(s)
7
Flora
2
Rio/córrego
2
Óbitos/feridos
2
Fauna
1
Figura 4: Top 10 tipos de danos ambientais – MS
A Tabela 3 e a Figura 4 revelam os dez tipos de dano mais recorrentes em MS, evidenciando, por exemplo, a prevalência de impactos em solo, rios/córregos ou categorias genéricas (Outro(s)). Esses achados guiam a definição de prioridades estaduais em fiscalização e políticas ambientais. É importante salientar que quinze registros não foram devidamente identificados e descritos no SIEMA.
Tipos de danos mais frequentes
A seguir, discutimos os tipos de danos mais frequentes identificados por meio da análise dos acidentes registrados no SIEMA. Os dados da Tabela 4 são dispostos ordenadamente na gráfico da Figura 5.
Figura 5: Top 10 tipos de danos ambientais mais frequentes
Tabela 4: Top 10 tipos de danos ambientais mais frequentes
Tipo de dano
Ocorrências
Outro(s)
3753
Solo
3534
Mar
3442
Atmosfera
1603
Rio/córrego
1194
Sem preenchimento
941
Óbitos/feridos
836
Fauna
639
Flora
436
População afetada/evacuada
335
Por que mapear os tipos de danos mais frequentes?
Identificar quais categorias de dano aparecem com maior recorrência cumpre três funções estratégicas:
Priorização de políticas públicas – recursos de fiscalização, mitigação e reparação são limitados; concentrar-se nos danos mais comuns garante maior retorno social e ambiental.
Antecipação e prevenção – conhecer padrões recorrentes ajuda a construir protocolos de resposta e planos de contingência mais eficazes, reduzindo tempo de reação a futuros incidentes.
Revisão de normas e processos – frequências elevadas podem sinalizar gaps regulatórios ou falhas operacionais em setores econômicos específicos, orientando mudanças na legislação e em boas práticas empresariais.
Ao qualificar essas ocorrências com maior detalhe (via IA), aumentamos a precisão dos diagnósticos e, consequentemente, a efetividade das ações corretivas — em linha com as metas dos ODS 9, 12, 13, 14 e 15.(United Nations, 2015)
Discussão dos resultados
Os quatro primeiros grupos concentram aproximadamente 70% dos registros:
Outro(s) (3.753) – categoria genérica que abarca eventos não contemplados pelas demais classes. A alta incidência indica problemas de padronização; reforça a urgência de aplicar IA para refinar a taxonomia dos danos.
Solo (3.534) & Mar (3.442) – sugerem que impactos terrestres (contaminação, derrames) e marítimos (vazamentos de óleo, poluição costeira) são recorrentes. Esses achados dialogam com as metas 12.4 (gestão de resíduos) e 14.1 (reduzir poluição marinha) dos ODS.
Atmosfera (1.603) – inclui emissões gasosas e particulados, conectando-se diretamente às ações de mitigação climática (ODS 13).
Outros destaques
Categoria
Registros
Interpretação
Ações recomendadas
Rio/córrego
1.194
Vazamentos em corpos d’água continentais.
Cruzar com dados hidrológicos para estimar extensão do impacto.
Sem preenchimento
941
Campo vazio; 7% da amostra.
Tornar o preenchimento obrigatório e/ou prever validação automática.
Óbitos/feridos
836
Ocorrências com vítimas humanas.
Integrar protocolos da saúde pública (ODS 3.9).
Fauna / Flora
639 / 436
Danos diretos à biodiversidade.
Ações de recuperação dentro e fora de UC (ODS 15).
População afetada / evacuada
335
Eventos que exigiram deslocamento de pessoas.
Reforçar planos de contingência (defesa civil + ODS 11).
Síntese
A predominância de categorias genéricas (Outro(s), Sem preenchimento) evidencia lacunas de classificação. Consideramos que técnicas de IA podem ajudar a reduzir essa sub-especificação.
Impactos em meios físico-químicos (solo, água, atmosfera) lideram a lista, apontando possíveis prioridades para políticas preventivas.
Ocorrências com vítimas humanas e populações evacuadas demandam articulação entre órgãos ambientais, saúde pública e defesa civil, alinhando-se aos ODS 3 e ODS 11.
Essas observações reforçam a necessidade de classificação automatizada para aprimorar a qualidade dos dados e subsidiar políticas ambientais mais eficazes.
Principais insights
O pico de 2019 sugere um ano atípico; vale investigar eventos específicos (derramamentos, incêndios, mudanças regulatórias).
O aparente efeito COVID-19 em 2020 pode refletir queda real de ocorrências ou sub-notificação; é preciso comparar com dados de fiscalização.
A recuperação 2021-2022 indica retorno ao patamar pré-pandemia, embora sem ultrapassar 2019.
Os dados de 2023 não devem ser comparados diretamente até que o ciclo de registro esteja completo.
Possíveis próximos passos analíticos:
Decompor a série (mensal/diária) para identificar sazonalidade e ciclos.
Normalizar por exposição (ex.: PIB industrial, frota de transporte) a fim de distinguir aumento absoluto de aumento relativo de risco.
Auditar integridade de 2023: quantificar registros pendentes no SIEMA.
Mapear eventos extremos: verificar se picos coincidem com grandes desastres individuais.
Nota
Importância das investigações
Essas investigações ajudarão a discernir se as oscilações refletem variação real de risco ambiental ou mudanças no processo de notificação.
Séries Temporais
Por que trabalhar com séries temporais
Os acidentes ambientais registrados pelo SIEMA formam uma sequência cronológica que conserva a ordem dos eventos; ignorar essa ordem significa perder informações sobre tendências, ciclos e efeitos sazonais. A modelagem de séries temporais permite:
Detectar mudanças estruturais (ex.: aumento pós-2015 nos registros) e avaliar o impacto de intervenções legais ou operacionais.
Antecipar períodos críticos – previsões de curto prazo baseadas em ARIMA ou suavização exponencial ajudam a preparar equipes de fiscalização (Hyndman; Khandakar, 2008).
Separar ruído de padrão – a decomposição STL isola tendência, sazonalidade e resíduo, evitando interpretações equivocadas (Cleveland et al., 1990).
Alinhar indicadores às metas globais – séries confiáveis alimentam o monitoramento dos ODS 12, 13, 14 e 15, facilitando correções de rota em políticas públicas (United Nations, 2015).
Além disso, os métodos são implementados em pacotes maduros (forecast, fpp2, stats) com forte respaldo acadêmico, garantindo reprodutibilidade e facilidade de adoção pelos órgãos ambientais competentes (Hyndman; Athanasopoulos, 2018).
Discussão dos resultados gerais
A análise anual revelou três regimes distintos:
Crescimento (2015–2019) – os registros saltam de 493 para 1.187 ocorrências (+141 %), possivelmente refletindo maior adesão dos órgãos fiscalizadores ao SIEMA ou aumento real da frequência de acidentes.
Queda pandêmica (2020) – retração a 847 casos (-29% vs. 2019), sugerindo, possivelmente, a redução de atividades industriais e de transporte. Contudo, também é possível a sub-notificação decorrente de restrições operacionais.
Recuperação parcial (2021–2022) – retorno gradual a 963 ocorrências em 2022 sem atingir o pico pré-pandemia, indicando estabilização em novo patamar.
A entrada de 2023 (423 acidentes) deve ser considerada preliminar, pois parte dos registros costuma ser homologada tardiamente. Nos dados mensais, a decomposição STL apontou sazonalidade moderada com picos recorrentes no segundo trimestre, coincidindo com o aumento de queimadas e operações de transporte de commodities agrícolas.
Estas evidências reforçam a necessidade de:
Padronizar descrições – 20 % dos registros de 2019 estão rotulados como Outro(s); técnicas de NLP podem refiná-los.
Criar um dicionário de dados – ausência já criticada por Cavagnari; Antiqueira (2024), dificultando comparabilidade longitudinal.
Focar em prevenção – a sazonalidade identificada sugere que alocar recursos adicionais de monitoramento entre abril e junho pode reduzir ocorrências graves.
Em síntese, a abordagem de séries temporais proporciona evidências quantitativas para aprimorar políticas ambientais, otimizar a alocação de recursos e acompanhar o progresso rumo aos ODS pertinentes.
A seguir, disponibilizamos a decomposição STL realizada:
Mostrar o código R
# Agregar por mêsserie_mensal <- dados_siema %>%mutate(mes =floor_date(as.Date(dt_registro), "month")) %>%count(mes) # Converter para objeto tsserie_ts <-ts(serie_mensal$n,start =c(year(min(serie_mensal$mes)),month(min(serie_mensal$mes))),frequency =12)# Decompor com STLdecomp <-stl(serie_ts, s.window ="periodic")fig_decomp <-subplot(plot_ly(x =time(serie_ts), y =as.numeric(serie_ts), type ='scatter', mode ='lines', name ='Série Original'),plot_ly(x =time(decomp$time.series[, "trend"]), y = decomp$time.series[, "trend"], type ='scatter', mode ='lines', name ='Tendência'),plot_ly(x =time(decomp$time.series[, "seasonal"]), y = decomp$time.series[, "seasonal"], type ='scatter', mode ='lines', name ='Sazonalidade'),plot_ly(x =time(decomp$time.series[, "remainder"]), y = decomp$time.series[, "remainder"], type ='scatter', mode ='lines', name ='Resíduo'),nrows =4,shareX =TRUE,titleX =FALSE)# Adiciona títulofig_decomp <-layout(fig_decomp, title ="Decomposição da Série Temporal")# Exibe o gráficofig_decomp
Discussão resumida da decomposição STL
Componente
Observações principais
Interpretação prática
Série original (azul)
Picos acentuados em 2017-2018 e um novo pico no final de 2023; média mensal estabilizada entre 60-80 ocorrências.
Indica eventos extremos que distorcem a média — grandes acidentes singulares ou intensificação da notificação.
Tendência (laranja)
Crescente de 2015 a 2018, queda em 2019-2020, retomada após 2021.
Confirma o ciclo pré-pandemia → queda em 2020 → recuperação.
Sazonalidade (verde)
Padrão quase sinusoidal anual, com picos recorrentes no 2.º trimestre (≈ abr-jun).
Sugere janela ideal de prevenção: reforçar fiscalização nos meses de pico.
Resíduo (vermelho)
Espigões em 2017-2018 e alguns outliers pós-2021; maioria próxima de zero.
Outliers representam acidentes atípicos ou possíveis erros de registro; demandam investigação individual.
Em síntese, a tendência confirma que 2020 foi um ponto de inflexão. Atribuímos que a queda observada está ligada à pandemia ou à sub-notificação decorrente. Já a sazonalidade regular embasa ações preventivas sazonais, concentrando recursos no período de maior risco. Também assumimos que outliers residuais devem ser verificados para distinguir eventos raros de falhas de entrada, aprimorando a qualidade da base de dados do SIEMA.
Decomposição STL no estado de MS
O bloco a seguir cria quatro gráficos plotly — série original, tendência, sazonalidade e resíduo — e os empilha num único subplot.
Figura 6: Decomposição STL dos acidentes mensais em MS (gráfico interativo)
Discussão da decomposição STL no estado de MS
A Figura Figura 6 separa a série mensal de acidentes ambientais em quatro camadas interpretáveis:
Componente
Evidência
O que significa
Original
Picos claros em 2017–2018 e outro no fim de 2023; vale em 2020.
Espelha a dinâmica nacional – crescimento pré-pandemia, queda em 2020, retomada parcial.
Tendência
Trajetória ascendente até 2018, recuo 2019–2020, nova subida 2021–2022.
Fase de expansão de registros, impacto da COVID-19 e posterior recuperação do sistema de notificação.
Sazonalidade
Curva quase senoidal: máximos entre abril–junho, mínimos em dez–fev.
Outono concentra operações ou condições (queimadas, transporte) com maior propensão a acidentes; verão é período de menor risco.
Resíduo
Espigões positivos em 2017–2018 e 2023; dispersão próxima de zero no restante.
Outliers representam eventos extraordinários ou inconsistências na base – recomendam investigação individual.
Implicações práticas
Planejamento sazonal – reforçar fiscalização e equipes de resposta no 2.º trimestre, quando a sazonalidade atinge pico.
Foco em anos atípicos – investigar 2018/2019 (alta), 2020 (baixa) e 2023 (possível defasagem de dados).
Qualidade de dados – grandes resíduos sinalizam entradas que podem precisar de validação ou estudo de caso.
A decomposição evidencia padrões temporais que orientam intervenções preventivas e a alocação eficiente de recursos no Estado de Mato Grosso do Sul.
Nota
Importância da decomposição de séries temporais
As evidências mostraram, por meio dos estudos realizados, que a decomposição de séries temporais auxilia na separação de comportamento estrutural (tendência), padrões cíclicos (sazonalidade) e anomalias, orientando políticas de mitigação e alocação eficiente de recursos.
Conclusão
Por meio da análise e da manipulação dos dados abertos do SIEMA – Sistema Nacional de Emergências Ambientais, observou-se a insuficiência de dados e metadados relevantes para o processo de compreensão do todo. Cavagnari; Antiqueira (2024) também discutem a inexistência de um dicionário de dados.
Considerando o total de 13.755 registros de acidentes ambientais planilhados, apenas 7.385 registros foram efetivamente utilizados no presente estudo. Infelizmente, amostragem utilizável representa apenas 53,69% dos dados absolutos. Com isso, podemos inferir que, praticamente, metade dos registros foram descartados, fato este que demonstra fragilidade no processo de registro e planilhamento de acidentes ambientais.
A inexistência de um dicionário de dados, por exemplo, dificultou a identificação de algumas da colunas de dados, uma vez que a nomenclatura utilizada para os campos de entrada é característica do linguajar de programadores de sistemas.
Identificou-se, ainda, o preenchimento inadequado e insuficiente de colunas de dados como tipo de acidente. A categorização proposta e observada na análise dos dados elenca itens que não são suficientes para a descrição dos eventos/acidentes. Em diversas situações, os danos resultantes dos acidentes são genéricos, conforme demonstrado anteriomente na seção Tipos de danos mais frequentes
Como exemplo, ao criarmos o dataframe com os danos desdobrados para a indentificação dos tipos de danos únicos, nos deparamos com uma quantidade relevante de registros sem preenchimento. Para fins de tabulação os campos não preenchidos foram rotulados como Sem preenchimento. Sugere-se, nesse sentido, a utilização de algum método de inteligência artificial para a classificação dos eventos em categorias auto-explicativas, dado que o conjunto de dados disponibiliza uma descrição resumida dos acidentes registrados. Acredita-se que tais descrições podem ser classificadas de forma que seja factível uma identificação mais fiel e representativa da realidade.
Acredita-se que tais medidas são essenciais para o embasamento e validação de políticas públicas ambientais, considerando que o empenho de recursos públicos para a mitigação ou a prevenção de acidentes ambientais é custuso e, evidentemente, necessário.
Neste âmbito, é importante alinharmos o presente estudo à Agenda 2030 da ONU, por meio dos ODS - Objetivos para o Desenvolvimento Sustentável (United Nations, 2015). A seguir, elencamos os pontos de observação relevantes que reforçam a legitimidade do estudo em questão como base técnica para políticas públicas:
ODS 9 (Indústria, Inovação e Infra-estrutura): A aplicação de métodos de análise de dados e séries temporais incide diretamente nas metas 9.4 e 9.5, pois incentiva a adoção de tecnologia limpa e a pesquisa em soluções digitais para a gestão ambiental.
ODS 12 (Consumo e Produção Responsáveis): Dados mais precisos sobre acidentes sustentam ações preventivas que evitam vazamentos de substâncias tóxicas, contribuindo para a meta 12.4 (gestão ambientalmente correta de produtos químicos).
ODS 13 (Ação Contra a Mudança Global do Clima): A classificação automatizada viabiliza respostas mais ágeis a eventos que amplificam emissões ou degradam sumidouros de carbono, atendendo à meta 13.1 de fortalecimento da resiliência a desastres.
ODS 14 (Vida na Água) & ODS 15 (Vida Terrestre): Ao distinguir rapidamente acidentes que afetam corpos d’água ou ecossistemas terrestres, apoia-se as metas 14.1 e 15.5, voltadas à redução da poluição e da degradação da biodiversidade.
ODS 16 (Paz, Justiça e Instituições Eficazes): padronização das informações amplia transparência, respondendo à meta 16.6, que exige instituições eficazes e responsáveis.
ODS 17 (Parcerias e Meios de Implementação): O aprimoramento da base de dados do SIEMA fortalece a meta 17.18, elevando a disponibilidade de dados desagregados para monitorar o progresso dos ODS.
Desse modo, as recomendações supramencionadas justificam-se tecnicamente, assim como também se ancoram nas metas globais de desenvolvimento sustentável, legitimando o investimento público para a prevenção e a mitigação de acidentes ambientais.
Referências
CAVAGNARI, Daniel Weigert; ANTIQUEIRA, Lia Maris Orth Ritter. Registros digitais de ocorrências ambientais para o Brasil: conservação, preservação e fiscalização. Nativa, [s. l.], v. 12, n. 1, p. 49–63, 2024.
CLEVELAND, Robert B. et al. STL: A Seasonal‐Trend Decomposition Procedure Based on Loess. Journal of Official Statistics, [s. l.], v. 6, n. 1, p. 3–73, 1990.
HYNDMAN, Rob J.; ATHANASOPOULOS, George. Forecasting: Principles and Practice. 2. ed. [S. l.]: OTexts, 2018. Disponível em: https://otexts.com/fpp2/.
HYNDMAN, Rob J.; KHANDAKAR, Yeasmin. Automatic Time Series Forecasting: The forecast Package for R. Journal of Statistical Software, [s. l.], v. 27, n. 3, p. 1–22, 2008. Disponível em: https://www.jstatsoft.org/article/view/v027i03.
INSTITUTO BRASILEIRO DO MEIO AMBIENTE E DOS RECURSOS NATURAIS RENOVÁVEIS. Instrução Normativa n. 15, de 06 de outubro de 2014. https://www.ibama.gov.br, 2014.
UNITED NATIONS. Transforming Our World: The 2030 Agenda for Sustainable Development. https://sdgs.un.org/2030agenda, 2015.
WICKHAM, Hadley; GROLEMUND, Garrett. R for Data Science. [S. l.]: O’Reilly, 2019. Disponível em: https://r4ds.had.co.nz.
Código fonte
---title: "Análise de Séries Temporais em R: Acidentes Ambientais registrados no SIEMA"lang: pt-BRformat: html: toc: true # sumário toc-location: right format-links: false other-links: - text: "Baixar PDF" href: "https://drive.google.com/file/d/1nx_ud8S-2-wPhQRfmAinSQzGs_4xLqwL/view?usp=sharing" code-fold: true # esconde o código, mas permite abrir/fechar code-summary: "Mostrar o código R" # texto do link em cada chunk code-tools: true # adiciona um menu Code no cabeçalho pdf: toc: true # também gera sumário interno no PDF number-sections: true fig-format: png # captura htmlwidgetsbibliography: referencias.bib # arquivo .bibcsl: abnt.csl # estilo de citação (opcional)execute: echo: true # o código é incluído; ficará dobrado warning: false message: falseeditor: visual---# IntroduçãoO presente trabalho aplica **Técnicas de Séries Temporais em R** para investigar dados de acidentes ambientais registrados no [**SIEMA – Sistema Nacional de Emergências Ambientais**](https://dados.gov.br/dados/conjuntos-dados/siema-comunicado-de-acidente-ambiental), instituído pela Instrução Normativa IBAMA nº 15, de 06 de outubro de 2014 [@IBAMA2014].O SIEMA disponibiliza registros datados e georreferenciados de ocorrências ambientais em todo o território brasileiro, possibilitando a análise de padrões temporais de frequência, gravidade e tipologia desses acidentes. Essas informações são fundamentais para monitorar metas dos **Objetivos de Desenvolvimento Sustentável** (ODS), em especial as metas 12.4 (gestão de resíduos), 13.1 (resiliência a desastres), 14.1 (redução da poluição marinha) e 15.5 (proteção da biodiversidade) [@ONU2015].## Objetivos1. **Explorar o conjunto de dados** - Limpeza, transformação e estruturação em objetos; - Verificação de consistência temporal (lacunas, duplicações, dentre outros).2. **Descrever a dinâmica temporal** - Identificar tendência, sazonalidade e ciclos usando métodos clássicos (`stats::decompose`ou `STL`);3. **Gerar insights para gestão ambiental** - Detectar períodos críticos, sazonalidades regionais e anomalias; - Oferecer subsídios para a gestão pública ambiental.::: callout-note**Relevância**\Compreender a evolução temporal dos acidentes ambientais auxilia na formulação de políticas públicas de prevenção, resposta e mitigação de impactos socioambientais.:::## JustificativaO registro sistemático e a análise temporal de acidentes ambientais são etapas cruciais para **prevenir danos socioambientais**, otimizar o uso de recursos públicos e cumprir compromissos internacionais assumidos pelo Brasil. A Instrução Normativa IBAMA nº 15/2014 instituiu o SIEMA justamente para consolidar essas informações [@IBAMA2014]. Entretanto, **lacunas de classificação** e ausência de dicionário de dados dificultam a extração de indicadores confiáveis.Nesse sentido, aplicar **técnicas de séries temporais** em R oferece três benefícios principais:1. **Identificação de tendências e sazonalidade** Ferramentas clássicas como `forecast` e `fpp2` permitem decompor séries e detectar picos ou períodos críticos, fornecendo subsídios à gestão preventiva [@Hyndman2008; @Hyndman2018].2. **Apoio às políticas públicas** Ao quantificar padrões de frequência e gravidade, os resultados direcionam investimentos em fiscalização e mitigação, alinhando‐se às metas 12.4, 13.1, 14.1 e 15.5 da Agenda 2030 [@ONU2015].3. **Transparência e reprodutibilidade** O uso de pacotes abertos (`readr`, `dplyr`, `ggplot2`, entre outros), além da disponibilização do código no formato Quarto, favorecem auditoria e reutilização por órgãos públicos, pesquisadores e sociedade civil.Assim, o presente estudo se justifica tanto pela **relevância ambiental e econômica** dos acidentes investigados quanto pela **necessidade de aprimorar a base de evidências** que sustenta decisões governamentais voltadas à sustentabilidade.# Implementação do estudo## Ferramentas estatísticas e computacionaisNo âmbito metodológico, a implementação e a replicação dos resultados foram conduzidas na versão mais recente do ambiente **R** [@RCore2024], assegurando reprodutibilidade e transparência. A preparação dos dados foi conduzida com pacotes do **ecossistema tidyverse** – `readr`, `dplyr`, `tidyr` e `ggplot2` – que oferecem uma gramática consistente para importação, transformação e visualização [@Wickham2019]. Para modelagem utilizamos:* **`forecast`** – funções clássicas de suavização exponencial, ARIMA e suas variantes [@Hyndman2008]; * **`fpp2`** – conjunto de dados e funcionalidades didáticas [@Hyndman2018]; * **`stats`** – decomposição **STL** (Seasonal-Trend decomposition) [@Cleveland1990].Já a decomposição sazonal foi realizada via **STL** (Seasonal-Trend Decomposition) [@Cleveland1990], técnica robusta para separar componentes de tendência, sazonalidade e ruído em dados ambientais.Os resultados gráficos foram produzidos com **`ggplot2`** e convertidos em visualizações interativas via **`plotly`**; as tabelas são formatadas com **`knitr`**. Para exportação do documento em PDF e captura de *widgets* em PNG emprega-se **`webshot2`**. Todo o código foi executado na versão do ambiente **R 4.4.3** [@RCore2024].```{r}# principais pacotes utilizadosrequired_pkgs <-c("readr", "dplyr", "stats", "ggplot2", "fpp2","forecast", "ggplot2", "tidyr","plotly", "lubridate","knitr","webshot2")# instalação automática (opcional)for (p in required_pkgs) if (!require(p, character.only =TRUE)) install.packages(p)```## Carregando os dados do arquivo CSVA função read.csv() é uma **variação da função read.table()** da base do R, já configurada para ler arquivos .csv no formato padrão **com separador de vírgula**. Contudo, o CSV que estamos utilizando está formatado com a separação em **ponto e vírgula**.```{r}csv_file ="adm_comunicacidente_p.csv"dados_acidentes =read.csv(csv_file, ";", header =TRUE)cat("Quantidade de registros: ", nrow(dados_acidentes), "\n")```## Processo de Sanitização e Refinamento dos DadosApesar do conjunto de dados fornecido não estar atrelado a um dicionário de dados, infere-se que a coluna *legado* caracteriza registros que foram realizados por meio de um sistema legado ou não. Considerando o exposto, para fins de análise, optou-se pela utilização apenas dos dados do SIEMA, desconsiderando-se, consequentemente, os dados legados.Tal opção justifica-se pelas insconsistências e lapsos temporais identificados nos dados analisados. O processo de recorte dos dados desejados acontece conforme segue, por meio da função *filter*.```{r}dados_siema <- dados_acidentes %>%filter(legado =="f") ```Uma vez que os dados foram filtrados e os registros de sistema legado foram descartados, optou-se, na sequência, por **selecionar apenas os registros que possuem data de ocorrência**, considerando que este dado tem caráter temporal e é essencial para uma análise de séries temporais. Nesse processo, aproveitou-se para formatar os campos de datas com o formato adequado para as análises futuras. Além disso, também identificamos a necessidade de correção de 9 (nove) campos de datas, pois, os anos das datas registradas foram notóriamente digitados incorretamente. Por meio da análise das datas de lançamento dos registros no sistema, datas estas que são registradas automaticamente pelo própróprio sistema, pode-se proceder com a correção. ```{r}dados_siema <- dados_siema %>%filter(!is.na(dt_ocorrencia) & dt_ocorrencia !="") %>%arrange(dt_ocorrencia) %>%mutate(dt_ocorrencia =as.Date(dt_ocorrencia, format ="%Y-%m-%d"))```A partir do recorte de dados supracitado, obtemos a seguinte *contagem de acidentes ambientais por dia*:```{r}acidentes_por_dia <- dados_siema %>%count(dt_ocorrencia, name ="total_acidentes_por_dia") # conta quantos acidentes por datatotal_acidentes <-sum(acidentes_por_dia$total_acidentes_por_dia)cat("Total absoluto de acidentes: " , total_acidentes, "\n")```Assim, considerando o total de 13.755 registros de acidentes ambientais planilhados, apenas 7.385 registros foram efetivamente utilizados no presente estudo, o que representa apenas 53,69% dos dados absolutos. ## Agrupamentos e análises### Agrupamento de acidentes ambientais por anoAntes de analisar tendências mensais ou sazonais, é útil obter uma **visão panorâmica ano a ano**. O agrupamento por ano serve para:* **Eliminar variações de curtíssimo prazo**, permitindo detectar mudanças estruturais no número de acidentes ambientais registrados;* **Comparar períodos de políticas públicas distintas** (ex.: antes e depois da IN 15/2014);* **Identificar anos atípicos** que mereçam investigação mais detalhada.No bloco de código a seguir:1. A coluna `dt_registro` é convertida para o tipo `Date`, garantindo que o R reconheça corretamente o campo temporal. 2. Extrai-se o **ano** com `lubridate::year()`. 3. Excluem-se registros anteriores a 2015 (`ano > 2014`) para focar na fase em que o SIEMA já estava plenamente operacional. 4. Os dados são agrupados com `group_by(ano)` e resumidos com `summarise(total = n())`, produzindo uma tabela com o **total de acidentes por ano**.```{r}# Converte a coluna dt_registro para Datedados_siema$dt_registro <-as.Date(dados_siema$dt_registro)acidentes_por_ano <- dados_siema %>%mutate(ano =year(dt_registro)) %>%filter(!is.na(ano) & ano >2014) %>%group_by(ano) %>%summarise(total =n()) %>%arrange(ano)``````{r}#| label: tbl-acidentes-ano#| tbl-cap: "Total de acidentes ambientais por ano, média e desvio-padrão"#| echo: false# calcula média e desvio-padrãoestatisticas <- acidentes_por_ano %>%summarise(ano =c("Média", "Desvio padrão"),total =c(mean(total), sd(total)) )# converte ano para texto em ambas as tabelastabela_out <- acidentes_por_ano %>%mutate(ano =as.character(ano)) %>%bind_rows(estatisticas)kable( tabela_out,col.names =c("Ano", "Total de acidentes"),align =c("c", "r"),digits =2)``````{r fig-acidentes-anos, fig.cap = "Acidentes ambientais por ano\n(com média e ±1 desvio-padrão)", echo=FALSE }media <- mean(acidentes_por_ano$total)dp <- sd(acidentes_por_ano$total)ggplot(acidentes_por_ano, aes(x = factor(ano), y = total)) + geom_col(fill = "steelblue") + geom_text(aes(label = total), # rótulos nas barras vjust = -0.3, size = 3.2) + geom_hline(yintercept = media, linetype = "dashed", color = "red") + geom_hline(yintercept = media + dp, linetype = "dotted", color = "gray40") + geom_hline(yintercept = media - dp, linetype = "dotted", color = "gray40") + annotate("text", x = Inf, y = media, label = "média", hjust = 1.1, vjust = -0.2, color = "red") + annotate("text", x = Inf, y = media + dp, label = "+1 DP", hjust = 1.1, vjust = -0.2, color = "gray40") + annotate("text", x = Inf, y = media - dp, label = "-1 DP", hjust = 1.1, vjust = 1.2, color = "gray40") + labs(x = "Ano", y = "Total de acidentes", title = "Acidentes ambientais por ano\n(com média e ±1 desvio-padrão)") + theme_minimal() + scale_y_continuous(expand = expansion(mult = c(0, 0.08))) # espaço p/ rótulos```#### Discussão do gráfico anual com média e ±1 desvio-padrãoA visualização da @fig-acidentes-anos tem como base os dados tabulados na @tbl-acidentes-ano, que coloca cada total anual de acidentes ao lado de três referências estatísticas: a **média** do período (≈ 803 ocorrências) em linha tracejada vermelha e a faixa **média ± 1 DP** (≈ 566 a 1 041) em linhas pontilhadas cinza. O enquadramento em questão facilita identificar anos "normais" e "atípicos".* **Anos dentro da faixa (2016, 2017, 2018, 2020, 2021, 2022)** A maior parte da série oscila dentro de ±1 desvio-padrão, sugerindo variação considerada "esperada" para o sistema. Embora 2020 marque a queda pandêmica, o valor (847) ainda permanece dentro do intervalo estatístico previsto.* **Alta atípica: 2019** O valor observado ultrapassa **média + DP**, chegando a 1.187 acidentes registrados. Isso reforça a hipótese de um **pico extraordinário** — possivelmente a combinação de um evento de grande magnitude com intensificação na notificação pelo SIEMA já amadurecido.* **Baixas atípicas: 2015 e 2023** Ambos ficam abaixo de **média − DP** (493 e 423, respectivamente). A contagem de 2015 reflete o primeiro ano completo pós-instituição do SIEMA, quando os fluxos de registro ainda estavam em implantação. Já 2023 provavelmente sofre de **base incompleta**, pois parte dos registros costuma ser homologada com atraso.* **Tendência implícita** O gradativo crescimento 2015 → 2018, seguido do ponto máximo em 2019, indica **fase de ampliação do sistema**; a queda em 2020 sugere impacto das restrições da COVID-19 ou sub-notificação, com posterior recuperação em 2021-2022.Em suma, o gráfico confirma que **apenas três anos se desviam estatisticamente** do comportamento médio, justificando investigações específicas: (1) 2019 pela alta incomum, (2) 2015 pela fase de adoção do sistema, e (3) 2023 pela provável defasagem de dados. Os demais anos apresentam flutuações compatíveis com a variabilidade normal do processo.#### Discussão preliminar dos resultadosO histograma anual evidencia três movimentos distintos ao longo da série:| Fase | Período | Comportamento observável | Possíveis fatores explicativos ||---------------|---------------|---------------------------|---------------|| **Crescimento acentuado** | 2015-2019 | Total sobe de **493** para o **pico de 1 187** (+141 %). | Consolidação do SIEMA e maior adesão ao registro; crescimento de atividades de risco. || **Recuo brusco** | 2020 | Queda para **847** (-29 % vs. 2019). | Pandemia: redução de atividades econômicas e/ou sub-notificação por restrição operacional. || **Oscilação de recuperação** | 2021-2022 | Retomada parcial (**913 → 963**), ainda abaixo de 2019. | Reativação econômica gradual e retomada da fiscalização. || **Queda acentuada (parcial)** | 2023 | **423** acidentes – menos da metade de 2022. | Provável **base incompleta** (registros ainda em processamento). |### Agrupamento de acidentes por UFInicialmente, a ideia é **agruparmos** os registros de acidentes ambientais por UF. Nesse agrupamento, precisamos somar o total de acidentes registrados por UF. O código-fonte a seguir realiza tal procedimento de contagem.```{r}acidentes_por_uf <- dados_acidentes %>%group_by(uf) %>%summarise(total_acidentes =n(), .groups ="drop") %>%arrange(desc(total_acidentes)) # opcional: ordena do maior para o menor``````{r}acidentes_por_uf = acidentes_por_uf %>%mutate(regiao =case_when( uf %in%c("MS", "MT", "GO", "DF") ~"Centro-Oeste", uf %in%c("SP", "RJ", "MG", "ES") ~"Sudeste", uf %in%c("PR", "SC", "RS") ~"Sul", uf %in%c("BA", "PE", "CE", "MA", "PI", "PB", "RN", "AL", "SE") ~"Nordeste", uf %in%c("AM", "PA", "RR", "RO", "AC", "AP", "TO") ~"Norte", TRUE~"Indefinido" ))``````{r}#| label: tbl-acidentes-uf#| tbl-cap: "Total de acidentes ambientais por unidade federativa e região"#| echo: falseacidentes_por_uf %>%arrange(regiao, desc(total_acidentes)) %>%# organiza por região e totalkable(col.names =c("UF", "Total de acidentes", "Região"),align =c("c", "r", "l") )```Como no conjunto de dados oficial não há uma coluna destinada para "região", criamos a coluna **regiao** e a preenchemos de acordo com os estados (UFs) identificados para cada registro, conforme pode-se visualizar na @tbl-acidentes-uf.#### Agrupamento de dados por regiãoAgora com as regiões adicionadas ao conjunto de dados, procedemos com o agrupamento dos dados por região, para que pudéssemos explorar a geração de gráficos com o conjunto em questão. Para tal, o percentual de acidentes por região foi calculado e o agrupamento foi reordenado.```{r}acidentes_por_regiao <- acidentes_por_uf %>%group_by(regiao) %>%summarise(total =sum(total_acidentes), .groups ="drop") %>%mutate(percentual = total /sum(total) *100, label =paste0(round(percentual, 1), "%")) %>%arrange(desc(percentual))```##### Gráfico de Pizza```{r}# Gráfico de pizza com legenda por cor (regiões)ggplot(acidentes_por_regiao, aes(x ="", y = total, fill = regiao)) +geom_col(width =1, color ="white") +coord_polar(theta ="y") +geom_text(aes(label = label), position =position_stack(vjust =0.5), color ="white", size =4) +labs(title ="Distribuição de Acidentes Ambientais por Região", fill ="Região") +theme_minimal() +theme_void() +# remove eixo e fundotheme(legend.position ="right", # legenda visível à direitaplot.title =element_text(hjust =0.5, size =16, face ="bold"))```##### Gráfico de Barras```{r}# Reordenar fator para refletir a ordem no gráficoacidentes_por_regiao$regiao <-factor(acidentes_por_regiao$regiao, levels = acidentes_por_regiao$regiao)# Criar gráfico de barrasggplot(acidentes_por_regiao, aes(x = regiao, y = percentual, fill = regiao)) +geom_col(width =0.7) +geom_text(aes(label = label), vjust =-0.5, size =3) +labs(title ="Percentual de Acidentes Ambientais por Região",x ="Região",y ="Percentual (%)") +theme_minimal() +theme(legend.position ="none",plot.title =element_text(hjust =0.5, size =16, face ="bold"))```### Acidentes Ambientais no Estado de Mato Grosso do Sul```{r}acidentes_ms = dados_siema %>%filter(uf=="MS")```## Visão geral anual e sazonal em MS {#sec-ms-anual-sazonal}Antes de detalhar categorias de dano, é importante observar **como as ocorrências evoluem ao longo do tempo** no Estado de Mato Grosso do Sul (MS), tanto na escala anual quanto na sazonalidade. Os gráficos a seguir explorar tal evolução. ```{r}#| label: fig-ms-ano#| fig-cap: "Total de acidentes ambientais por ano – MS"#| echo: false# total por anoacidentes_ms_ano <- acidentes_ms %>%mutate(ano =year(dt_registro)) %>%filter(!is.na(ano) & ano >2014) %>%count(ano, name ="total")ggplot(acidentes_ms_ano, aes(x =factor(ano), y = total)) +geom_col(fill ="steelblue") +geom_text(aes(label = total), vjust =-0.3, size =3) +labs(x ="Ano", y ="Número de acidentes",title =NULL) +theme_minimal() +scale_y_continuous(expand =expansion(mult =c(0, 0.08)))``````{r}#| label: fig-ms-sazonal#| fig-cap: "Sazonalidade média mensal de acidentes – MS"#| echo: false# total por mês (média de cada mês ao longo dos anos)acidentes_ms_mes <- acidentes_ms %>%mutate(ano_mes =floor_date(dt_registro, "month"),mes_num =month(dt_registro),mes_nome =month(dt_registro, label =TRUE, abbr =TRUE)) %>%count(mes_num, mes_nome) %>%mutate(media_mensal = n /length(unique(year(acidentes_ms$dt_registro))))ggplot(acidentes_ms_mes, aes(x = mes_nome, y = media_mensal, group =1)) +geom_line(color ="steelblue") +geom_point(size =2) +labs(x ="Mês", y ="Média de acidentes (2015-2023)",title =NULL) +theme_minimal()```*Leitura rápida:* a @fig-ms-ano mostra a tendência anual, enquanto a @fig-ms-sazonal destaca meses de maior risco (p. ex., picos recorrentes no outono), fornecendo base para alocação sazonal de recursos.## Perfil dos danos mais frequentes em MS {#sec-ms-danos}Conhecer **quais tipos de dano predominam** no estado nos permite priorizar ações de prevenção e resposta. A seguir, são dispostos os principais tipos de danos ambientes no estado de Mato Grosso do Sul.```{r}#| label: tbl-ms-danos#| tbl-cap: "Top 10 tipos de danos ambientais – MS"#| echo: falselibrary(tidyr)library(knitr)danos_ms <- acidentes_ms %>%select(tipos_danos_identificados) %>%filter(!is.na(tipos_danos_identificados)) %>%separate_rows(tipos_danos_identificados, sep =";") %>%mutate(tipos_danos_identificados =trimws(tipos_danos_identificados),tipos_danos_identificados =if_else(tipos_danos_identificados =="","Sem preenchimento", tipos_danos_identificados)) %>%count(tipos_danos_identificados, sort =TRUE) %>%slice_max(n, n =10)kable(danos_ms,col.names =c("Tipo de dano", "Ocorrências"),align =c("l", "l"))``````{r}#| label: fig-ms-danos#| fig-cap: "Top 10 tipos de danos ambientais – MS"#| echo: falseggplot(danos_ms,aes(x =reorder(tipos_danos_identificados, n),y = n)) +geom_col(fill ="steelblue") +coord_flip() +geom_text(aes(label = n), hjust =-0.1) +labs(x =NULL, y ="Ocorrências",title =NULL) +theme_minimal() +scale_y_continuous(expand =expansion(mult =c(0, 0.08)))```A @tbl-ms-danos e a @fig-ms-danos revelam os dez tipos de dano mais recorrentes em MS, evidenciando, por exemplo, a prevalência de impactos em **solo**, **rios/córregos** ou categorias genéricas (*Outro(s)*). Esses achados guiam a definição de **prioridades estaduais** em fiscalização e políticas ambientais. É importante salientar que **quinze registros não foram devidamente identificados e descritos** no SIEMA. ### Tipos de danos mais frequentes {#sec-danos}A seguir, discutimos os tipos de danos mais frequentes identificados por meio da análise dos acidentes registrados no SIEMA. Os dados da @tbl-top10-danos são dispostos ordenadamente na gráfico da @fig-top10-danos.```{r fig-top10-danos, fig.cap = "Top 10 tipos de danos ambientais mais frequentes", fig.alt = "Barras horizontais com os dez tipos de danos ambientais mais recorrentes",echo=FALSE}# Criar um novo dataframe com os danos desdobradostipos_danos_unicos <- dados_acidentes %>% select(tipos_danos_identificados) %>% filter(!is.na(tipos_danos_identificados)) %>% separate_rows(tipos_danos_identificados, sep = ";") %>% mutate( tipos_danos_identificados = trimws(tipos_danos_identificados), tipos_danos_identificados = if_else( tipos_danos_identificados == "", "Sem preenchimento", tipos_danos_identificados ) ) %>% count(tipos_danos_identificados, sort = TRUE)#tipos_danos_unicos# Dados: os 10 tipos mais frequentesgrafico_gg <- tipos_danos_unicos %>% slice_max(n, n = 10) %>% ggplot(aes(x = reorder(tipos_danos_identificados, n), y = n)) + geom_col(fill = "steelblue") + coord_flip() + labs(title = "Top 10 Tipos de Danos Ambientais Mais Frequentes", x = "Tipo de Dano", y = "Número de Ocorrências") + theme_minimal()# Converter para plotlyggplotly(grafico_gg)``````{r}#| label: tbl-top10-danos#| tbl-cap: "Top 10 tipos de danos ambientais mais frequentes"#| echo: falsetipos_top10 <- tipos_danos_unicos %>%slice_max(n, n =10) %>%rename(`Tipo de dano`= tipos_danos_identificados,`Ocorrências`= n)kable(tipos_top10, align =c("l", "l"))```#### Por que mapear os tipos de danos mais frequentes?Identificar **quais categorias de dano aparecem com maior recorrência** cumpre três funções estratégicas:1. **Priorização de políticas públicas** – recursos de fiscalização, mitigação e reparação são limitados; concentrar-se nos danos mais comuns garante maior retorno social e ambiental. 2. **Antecipação e prevenção** – conhecer padrões recorrentes ajuda a construir **protocolos de resposta** e **planos de contingência** mais eficazes, reduzindo tempo de reação a futuros incidentes. 3. **Revisão de normas e processos** – frequências elevadas podem sinalizar **gaps regulatórios** ou falhas operacionais em setores econômicos específicos, orientando mudanças na legislação e em boas práticas empresariais.Ao qualificar essas ocorrências com maior detalhe (via IA), aumentamos a precisão dos diagnósticos e, consequentemente, a efetividade das ações corretivas — em linha com as metas dos ODS 9, 12, 13, 14 e 15.[@ONU2015]#### Discussão dos resultadosOs **quatro primeiros grupos** concentram aproximadamente 70% dos registros:* **Outro(s)** (3.753) – categoria genérica que abarca eventos não contemplados pelas demais classes. A alta incidência indica **problemas de padronização**; reforça a urgência de aplicar IA para refinar a taxonomia dos danos. * **Solo** (3.534) & **Mar** (3.442) – sugerem que impactos terrestres (contaminação, derrames) e marítimos (vazamentos de óleo, poluição costeira) são recorrentes. Esses achados dialogam com as metas **12.4** (gestão de resíduos) e **14.1** (reduzir poluição marinha) dos ODS. * **Atmosfera** (1.603) – inclui emissões gasosas e particulados, conectando-se diretamente às ações de mitigação climática (**ODS 13**).#### Outros destaques| Categoria | Registros | Interpretação | Ações recomendadas ||---------------------------------------|-----------|-----------------------------------------------|-----------------------------------------------------------------------|| **Rio/córrego** | 1.194 | Vazamentos em corpos d’água continentais. | Cruzar com dados hidrológicos para estimar extensão do impacto. || **Sem preenchimento** | 941 | Campo vazio; 7% da amostra. | Tornar o preenchimento obrigatório e/ou prever validação automática. || **Óbitos/feridos** | 836 | Ocorrências com vítimas humanas. | Integrar protocolos da saúde pública (ODS 3.9). || **Fauna / Flora** | 639 / 436 | Danos diretos à biodiversidade. | Ações de recuperação dentro e fora de UC (ODS 15). || **População afetada / evacuada** | 335 | Eventos que exigiram deslocamento de pessoas. | Reforçar planos de contingência (defesa civil + ODS 11). |#### Síntese* A predominância de **categorias genéricas** (Outro(s), Sem preenchimento) evidencia **lacunas de classificação**. Consideramos que técnicas de IA podem ajudar a reduzir essa sub-especificação. * Impactos em **meios físico-químicos** (solo, água, atmosfera) lideram a lista, apontando possíveis prioridades para políticas preventivas. * Ocorrências com **vítimas humanas** e **populações evacuadas** demandam articulação entre órgãos ambientais, saúde pública e defesa civil, alinhando-se aos **ODS 3** e **ODS 11**.Essas observações reforçam a necessidade de **classificação automatizada** para aprimorar a qualidade dos dados e subsidiar políticas ambientais mais eficazes. ### Principais insights- O **pico de 2019** sugere um ano atípico; vale investigar eventos específicos (derramamentos, incêndios, mudanças regulatórias).\- O aparente **efeito COVID-19** em 2020 pode refletir queda real de ocorrências *ou* sub-notificação; é preciso comparar com dados de fiscalização.\- A **recuperação 2021-2022** indica retorno ao patamar pré-pandemia, embora sem ultrapassar 2019.\- Os dados de **2023** não devem ser comparados diretamente até que o ciclo de registro esteja completo.#### Possíveis próximos passos analíticos:1. **Decompor a série** (mensal/diária) para identificar sazonalidade e ciclos.\2. **Normalizar por exposição** (ex.: PIB industrial, frota de transporte) a fim de distinguir aumento absoluto de aumento relativo de risco.\3. **Auditar integridade de 2023**: quantificar registros pendentes no SIEMA.\4. **Mapear eventos extremos**: verificar se picos coincidem com grandes desastres individuais.::: callout-note**Importância das investigações**\Essas investigações ajudarão a discernir se as oscilações refletem variação real de risco ambiental ou mudanças no processo de notificação.:::## Séries Temporais### Por que trabalhar com séries temporais {#sec-por-que-ts}Os acidentes ambientais registrados pelo **SIEMA** formam uma sequência cronológica que **conserva a ordem dos eventos**; ignorar essa ordem significa perder informações sobre tendências, ciclos e efeitos sazonais. A modelagem de séries temporais permite:1. **Detectar mudanças estruturais** (ex.: aumento pós-2015 nos registros) e avaliar o impacto de intervenções legais ou operacionais. 2. **Antecipar períodos críticos** – previsões de curto prazo baseadas em ARIMA ou suavização exponencial ajudam a preparar equipes de fiscalização [@Hyndman2008]. 3. **Separar ruído de padrão** – a decomposição STL isola tendência, sazonalidade e resíduo, evitando interpretações equivocadas [@Cleveland1990]. 4. **Alinhar indicadores às metas globais** – séries confiáveis alimentam o monitoramento dos ODS 12, 13, 14 e 15, facilitando correções de rota em políticas públicas [@ONU2015].Além disso, os métodos são implementados em pacotes maduros (`forecast`, `fpp2`, `stats`) com forte respaldo acadêmico, garantindo reprodutibilidade e facilidade de adoção pelos órgãos ambientais competentes [@Hyndman2018].### Discussão dos resultados gerais {#sec-discussao-resultados}A análise anual revelou três regimes distintos:* **Crescimento (2015–2019)** – os registros saltam de 493 para 1.187 ocorrências (+141 %), possivelmente refletindo maior adesão dos órgãos fiscalizadores ao SIEMA ou aumento real da frequência de acidentes. * **Queda pandêmica (2020)** – retração a 847 casos (-29% vs. 2019), sugerindo, possivelmente, a redução de atividades industriais e de transporte. Contudo, também é possível a sub-notificação decorrente de restrições operacionais. * **Recuperação parcial (2021–2022)** – retorno gradual a 963 ocorrências em 2022 sem atingir o pico pré-pandemia, indicando estabilização em novo patamar. A entrada de 2023 (423 acidentes) deve ser considerada preliminar, pois parte dos registros costuma ser homologada tardiamente. Nos dados mensais, a decomposição STL apontou **sazonalidade moderada** com picos recorrentes no segundo trimestre, coincidindo com o aumento de queimadas e operações de transporte de commodities agrícolas.Estas evidências reforçam a necessidade de:* **Padronizar descrições** – 20 % dos registros de 2019 estão rotulados como *Outro(s)*; técnicas de NLP podem refiná-los. * **Criar um dicionário de dados** – ausência já criticada por @cavagnari2024, dificultando comparabilidade longitudinal. * **Focar em prevenção** – a sazonalidade identificada sugere que alocar recursos adicionais de monitoramento entre abril e junho pode reduzir ocorrências graves.Em síntese, a abordagem de séries temporais proporciona **evidências quantitativas** para aprimorar políticas ambientais, otimizar a alocação de recursos e acompanhar o progresso rumo aos ODS pertinentes.A seguir, disponibilizamos a decomposição STL realizada: ```{r}# Agregar por mêsserie_mensal <- dados_siema %>%mutate(mes =floor_date(as.Date(dt_registro), "month")) %>%count(mes) # Converter para objeto tsserie_ts <-ts(serie_mensal$n,start =c(year(min(serie_mensal$mes)),month(min(serie_mensal$mes))),frequency =12)# Decompor com STLdecomp <-stl(serie_ts, s.window ="periodic")fig_decomp <-subplot(plot_ly(x =time(serie_ts), y =as.numeric(serie_ts), type ='scatter', mode ='lines', name ='Série Original'),plot_ly(x =time(decomp$time.series[, "trend"]), y = decomp$time.series[, "trend"], type ='scatter', mode ='lines', name ='Tendência'),plot_ly(x =time(decomp$time.series[, "seasonal"]), y = decomp$time.series[, "seasonal"], type ='scatter', mode ='lines', name ='Sazonalidade'),plot_ly(x =time(decomp$time.series[, "remainder"]), y = decomp$time.series[, "remainder"], type ='scatter', mode ='lines', name ='Resíduo'),nrows =4,shareX =TRUE,titleX =FALSE)# Adiciona títulofig_decomp <-layout(fig_decomp, title ="Decomposição da Série Temporal")# Exibe o gráficofig_decomp```### Discussão resumida da decomposição STL| Componente | Observações principais | Interpretação prática ||------------|-----------------------|-----------------------|| **Série original** (azul) | Picos acentuados em 2017-2018 e um novo pico no final de 2023; média mensal estabilizada entre 60-80 ocorrências. | Indica **eventos extremos** que distorcem a média — grandes acidentes singulares ou intensificação da notificação. || **Tendência** (laranja) | Crescente de 2015 a 2018, queda em 2019-2020, retomada após 2021. | Confirma o ciclo *pré-pandemia → queda em 2020 → recuperação*. || **Sazonalidade** (verde) | Padrão quase sinusoidal anual, com picos recorrentes no 2.º trimestre (≈ abr-jun). | Sugere **janela ideal de prevenção**: reforçar fiscalização nos meses de pico. || **Resíduo** (vermelho) | Espigões em 2017-2018 e alguns *outliers* pós-2021; maioria próxima de zero. | Outliers representam **acidentes atípicos** ou possíveis erros de registro; demandam investigação individual. |Em síntese, a tendência confirma que **2020 foi um ponto de inflexão**. Atribuímos que a queda observada está ligada à pandemia ou à sub-notificação decorrente. Já a sazonalidade regular embasa ações preventivas sazonais, concentrando recursos no período de maior risco. Também assumimos que *outliers* residuais devem ser verificados para distinguir **eventos raros** de falhas de entrada, aprimorando a qualidade da base de dados do SIEMA.### Decomposição STL no estado de MS {#sec-stl-ms-plotly}O bloco a seguir cria quatro gráficos **plotly** — série original, tendência, sazonalidade e resíduo — e os empilha num único `subplot`.```{r}#| label: fig-ms-stl-plotly#| fig-cap: "Decomposição STL dos acidentes mensais em MS (gráfico interativo)"#| echo: falselibrary(dplyr)library(lubridate)library(forecast)library(ggplot2)library(plotly)library(zoo) # <- para as.yearmon# 1. Série mensalms_mensal <- acidentes_ms %>%mutate(ano_mes =floor_date(dt_registro, "month")) %>%count(ano_mes, name ="total") %>%arrange(ano_mes)serie_ms <-ts( ms_mensal$total,start =c(year(min(ms_mensal$ano_mes)), month(min(ms_mensal$ano_mes))),frequency =12)# 2. Decomposição STLdecomp_ms <-stl(serie_ms, s.window ="periodic")# 3. Tabela tidy para plotts_tbl <-tibble(date =as.Date(as.yearmon(time(serie_ms))), # datas mensais corretasoriginal =as.numeric(serie_ms),trend =as.numeric(decomp_ms$time.series[, "trend"]),seasonal =as.numeric(decomp_ms$time.series[, "seasonal"]),remainder =as.numeric(decomp_ms$time.series[, "remainder"]))# 4. Gráficos individuaisp_orig <-ggplot(ts_tbl, aes(date, original)) +geom_line() +labs(y ="Original")p_tren <-ggplot(ts_tbl, aes(date, trend)) +geom_line() +labs(y ="Tendência")p_seas <-ggplot(ts_tbl, aes(date, seasonal)) +geom_line() +labs(y ="Sazonalidade")p_rem <-ggplot(ts_tbl, aes(date, remainder)) +geom_line() +labs(y ="Resíduo")# 5. Subplot interativosubplot(ggplotly(p_orig),ggplotly(p_tren),ggplotly(p_seas),ggplotly(p_rem),nrows =4,shareX =TRUE,titleX =FALSE) %>%layout(showlegend =FALSE)```### Discussão da decomposição STL no estado de MSA **Figura @fig-ms-stl-plotly** separa a série mensal de acidentes ambientais em quatro camadas interpretáveis:| Componente | Evidência | O que significa ||--------------|-------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------|| **Original** | Picos claros em 2017–2018 e outro no fim de 2023; vale em 2020. | Espelha a dinâmica nacional – crescimento pré-pandemia, queda em 2020, retomada parcial. || **Tendência**| Trajetória ascendente até 2018, recuo 2019–2020, nova subida 2021–2022. | Fase de **expansão de registros**, impacto da COVID-19 e posterior recuperação do sistema de notificação. || **Sazonalidade** | Curva quase senoidal: máximos entre **abril–junho**, mínimos em **dez–fev**. | Outono concentra operações ou condições (queimadas, transporte) com maior propensão a acidentes; verão é período de menor risco. || **Resíduo** | Espigões positivos em 2017–2018 e 2023; dispersão próxima de zero no restante. | Outliers representam eventos extraordinários ou inconsistências na base – recomendam investigação individual. |**Implicações práticas*** **Planejamento sazonal** – reforçar fiscalização e equipes de resposta no 2.º trimestre, quando a sazonalidade atinge pico. * **Foco em anos atípicos** – investigar 2018/2019 (alta), 2020 (baixa) e 2023 (possível defasagem de dados). * **Qualidade de dados** – grandes resíduos sinalizam entradas que podem precisar de validação ou estudo de caso. A decomposição evidencia **padrões temporais** que orientam intervenções preventivas e a alocação eficiente de recursos no Estado de Mato Grosso do Sul.::: callout-note**Importância da decomposição de séries temporais**\As evidências mostraram, por meio dos estudos realizados, que a decomposição de séries temporais auxilia na separação de **comportamento estrutural** (tendência), **padrões cíclicos** (sazonalidade) e **anomalias**, orientando políticas de mitigação e alocação eficiente de recursos. :::# ConclusãoPor meio da análise e da manipulação dos dados abertos do **SIEMA – Sistema Nacional de Emergências Ambientais**, observou-se a insuficiência de dados e metadados relevantes para o processo de compreensão do todo. @cavagnari2024 também discutem a inexistência de um dicionário de dados. Considerando o total de 13.755 registros de acidentes ambientais planilhados, apenas 7.385 registros foram efetivamente utilizados no presente estudo. Infelizmente, amostragem utilizável representa apenas 53,69% dos dados absolutos. Com isso, podemos inferir que, praticamente, metade dos registros foram descartados, fato este que demonstra fragilidade no processo de registro e planilhamento de acidentes ambientais. A inexistência de um dicionário de dados, por exemplo, dificultou a identificação de algumas da colunas de dados, uma vez que a nomenclatura utilizada para os campos de entrada é característica do linguajar de programadores de sistemas.Identificou-se, ainda, o preenchimento inadequado e insuficiente de colunas de dados como **tipo de acidente**. A categorização proposta e observada na análise dos dados elenca itens que não são suficientes para a descrição dos eventos/acidentes. Em diversas situações, os danos resultantes dos acidentes são genéricos, conforme demonstrado anteriomente na seção [Tipos de danos mais frequentes](#sec-danos)Como exemplo, ao criarmos o *dataframe* com os danos desdobrados para a indentificação dos tipos de danos únicos, nos deparamos com uma quantidade relevante de registros sem preenchimento. Para fins de tabulação os campos não preenchidos foram rotulados como *Sem preenchimento*. Sugere-se, nesse sentido, a utilização de algum método de inteligência artificial para a classificação dos eventos em categorias auto-explicativas, dado que o conjunto de dados disponibiliza uma descrição resumida dos acidentes registrados. Acredita-se que tais descrições podem ser classificadas de forma que seja factível uma identificação mais fiel e representativa da realidade.Acredita-se que tais medidas são essenciais para o embasamento e validação de políticas públicas ambientais, considerando que o empenho de recursos públicos para a mitigação ou a prevenção de acidentes ambientais é custuso e, evidentemente, necessário.Neste âmbito, é importante alinharmos o presente estudo à Agenda 2030 da ONU, por meio dos ODS - Objetivos para o Desenvolvimento Sustentável [@ONU2015]. A seguir, elencamos os pontos de observação relevantes que reforçam a legitimidade do estudo em questão como base técnica para políticas públicas:- **ODS 9 (Indústria, Inovação e Infra-estrutura)**: A aplicação de métodos de análise de dados e séries temporais incide diretamente nas metas 9.4 e 9.5, pois incentiva a adoção de tecnologia limpa e a pesquisa em soluções digitais para a gestão ambiental.- **ODS 12 (Consumo e Produção Responsáveis)**: Dados mais precisos sobre acidentes sustentam ações preventivas que evitam vazamentos de substâncias tóxicas, contribuindo para a meta 12.4 (gestão ambientalmente correta de produtos químicos).- **ODS 13 (Ação Contra a Mudança Global do Clima**): A classificação automatizada viabiliza respostas mais ágeis a eventos que amplificam emissões ou degradam sumidouros de carbono, atendendo à meta 13.1 de fortalecimento da resiliência a desastres.- **ODS 14 (Vida na Água) & ODS 15 (Vida Terrestre)**: Ao distinguir rapidamente acidentes que afetam corpos d’água ou ecossistemas terrestres, apoia-se as metas 14.1 e 15.5, voltadas à redução da poluição e da degradação da biodiversidade.- **ODS 16 (Paz, Justiça e Instituições Eficazes)**: padronização das informações amplia transparência, respondendo à meta 16.6, que exige instituições eficazes e responsáveis.- **ODS 17 (Parcerias e Meios de Implementação)**: O aprimoramento da base de dados do SIEMA fortalece a meta 17.18, elevando a disponibilidade de dados desagregados para monitorar o progresso dos ODS.Desse modo, as recomendações supramencionadas justificam-se tecnicamente, assim como também se ancoram nas metas globais de desenvolvimento sustentável, legitimando o investimento público para a prevenção e a mitigação de acidentes ambientais.# Referências