Análise exploratória espacial de contagem de casos de dengue no estado de São Paulo

UIVS - Unidade de Inteligência em Vigilância em Saúde

Autor

Caio Sain Vallio

Data de Publicação

21 de fevereiro de 2025

“The first law of geography: Everything is related to everything else, but near things are more related than distant things.” Waldo R. Tobler (Tobler 1970)

1 Introdução

1.1 Revisão

Revisão sobre o Método de Correlação Espacial com o Índice de Moran

O Índice de Moran (Moran’s I) é uma técnica estatística amplamente utilizada para medir a autocorrelação espacial, ou seja, a dependência espacial entre valores de uma variável em diferentes localizações geográficas. Esse método permite identificar se valores semelhantes tendem a se agrupar (clusters), se estão dispersos ou distribuídos aleatoriamente no espaço.


1.2 Tipos de Análise

1.2.1 Moran Global:

Avalia a autocorrelação espacial em todo o conjunto de dados. Exemplo: Verificar se chuvas no Brasil seguem um padrão regional.

  • Estatística de Resumo Geral: O I de Moran Global fornece um valor de resumo para toda a área de estudo, indicando se o padrão de uma variável é agrupado, disperso ou aleatório no geral.
  • Suposição de Estacionariedade: Ele assume que o processo espacial é homogêneo em toda a região.
  • Interpretação: Um valor positivo sugere agrupamento geral (valores semelhantes estão próximos uns dos outros), um valor negativo indica dispersão (valores diferentes são adjacentes) e um valor próximo de zero implica um padrão espacial aleatório.
  • Aplicação: É útil para uma avaliação inicial entender a estrutura espacial geral dos dados.

1.2.2 Moran Local:

Local Indicators of Spatial Association (LISA) - Identifica hotspots (clusters HH ou LL) e coldspots (HL ou LH) em sub-regiões. Útil para mapear áreas críticas, como poluição ou desenvolvimento socioeconômico.

  • Medidas Desagregadas: O I de Moran Local calcula uma estatística separada para cada unidade espacial. Isso permite que você identifique “pontos críticos” (áreas com valores altos cercadas por valores altos) e “pontos frios” (áreas com valores baixos cercadas por valores baixos), bem como outliers espaciais.
  • Detecção de heterogeneidade: Não assume homogeneidade e pode revelar variações locais na autocorrelação espacial que podem ser mascaradas em uma análise global.
  • Interpretação: Os valores locais podem ser mapeados para identificar locais específicos onde o agrupamento ou dispersão espacial é estatisticamente significativo.
  • Aplicação: É especialmente útil para direcionar intervenções ou investigações adicionais em áreas específicas que se desviam do padrão global.


1.3 Teoria

O Índice de Moran é um coeficiente de correlação que compara uma variável em uma região com seus vizinhos espaciais. Sua fórmula geral é:

\[ I = \frac{n}{S_0} \cdot \frac{\sum_{i=1}^n \sum_{j=1}^n w_{ij}(x_i - \bar{x})(x_j - \bar{x})}{\sum_{i=1}^n (x_i - \bar{x})^2} \]

Onde:
- \(n\): Número de regiões analisadas.
- \(w_{ij}\): Elemento da matriz de pesos espaciais que define a relação de vizinhança entre as regiões \(i\) e \(j\).
- \(x_i\): Valor da variável na região \(i\).
- \(\bar{x}\): Média da variável em todas as regiões.
- \(S_0\): Soma de todos os elementos da matriz \(w_{ij}\) (normalização).

\[ S_0 = \sum_{i=1}^n \sum_{j=1}^n w_{ij} \]


1.4 Cálculo do Índice de Moran Global

1.4.1 Definição da Vizinhança:

A matriz de pesos espaciais (\(W\)) é construída com base em critérios de proximidade, como:

  • Contiguidade: Regiões que compartilham fronteiras (Rook ou Queen).
  • Distância: Regiões dentro de um raio pré-definido.
  • K-vizinhos mais próximos: Seleção das \(K\)regiões mais próximas.

Exemplo de Rook: \[ W = \begin{bmatrix} 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 \\ 0 & 1 & X & 1 & 0 \\ 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 \end{bmatrix} \]

Exemplo de Queen:

\[ W = \begin{bmatrix} 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 1 & 1 & 0 \\ 0 & 1 & X & 1 & 0 \\ 0 & 1 & 1 & 1 & 0 \\ 0 & 0 & 0 & 0 & 0 \end{bmatrix} \]


1.4.2 Normalização da Matriz \(W\):

Os pesos podem ser padronizados por linha para evitar viés em regiões com muitos vizinhos (ex.: soma dos pesos igual a 1 para cada linha).


1.4.3 Cálculo do Lag Espacial:

Para cada região, calcula-se o lag (\(\text{lag}_i\)), que representa a média ponderada dos valores da variável nos vizinhos. Por exemplo:

\[ \text{lag}_i = \sum_{j=1}^n w_{ij} x_j \]


1.4.4 Regressão Linear e Interpretação:

O I de Moran corresponde à inclinação da reta de regressão entre a variável original (\(x\)) e o lag (\(\text{lag}\)). Valores próximos de 1 indicam autocorrelação positiva (clusters de altos ou baixos valores), 0 sugere aleatoriedade, e -1 aponta dissimilaridade (valores opostos entre vizinhos).


1.4.5 Teste de Hipóteses e Significância:

Para validar a autocorrelação, realiza-se um teste estatístico:

  • Hipótese Nula (\(H_0\)): Os valores estão distribuídos aleatoriamente no espaço.
  • Valor Esperado: \(E(I) = -\frac{1}{n-1}\).
  • Variância (\(\sigma^2\)): Calculada com base na matriz \(W\)e na distribuição dos dados.
  • Escore Z: \(Z = \frac{I - E(I)}{\sqrt{\sigma^2}}\)

Um valor-p associado ao Z-score determina a significância (ex.: \(p < 0.05\) rejeita \(H_0\)).


1.5 Cálculo do Índice de Moran Local

A estatística I de Moran Local é uma medida da diferença entre uma dada observação (i) e a média multiplicada pela soma das diferenças de seus vizinhos (j) e a média (veja abaixo). A diferença entre i e a média também é dividida pelo desvio padrão de i (ou seja, uma medida de quanto os valores em locais vizinhos variam da média). Quando os atributos de i e j estão acima (ou seja, ponto quente) ou abaixo (ou seja, ponto frio) da média, isso significa que a autocorrelação espacial positiva está presente no local i (ou seja, agrupamento espacial). Outliers espaciais ocorrem onde o atributo em i está acima da média e os atributos de j são maiores que a média, vice-versa.

\[ I_i = \frac{(x_i - \bar{x})}{S_{i}^{2}} \sum_{j=1}^{n} w_{ij}(x_j - \bar{x}) \]

Onde:

  • \(I_i\) é o valor do I de Moran Local para o polígono i.
  • \(x_i\) é o valor da variável para o polígono i.
  • \(\bar{x}\) é a média da variável.
  • \(S_{i}^{2}\) é a variância da variável para o polígono i.
  • \(w_{ij}\) é o peso para o polígono j.

Com isso é possivel identificar clusters de altos e baixos valores, bem como outliers espaciais.

A interpretação dos resultados do Índice de Moran Local pode ser auxiliada por um diagrama de dispersão (Moran Scatterplot), onde os pontos são distribuídos em quatro quadrantes, que representam diferentes configurações de associação espacial:

  • Quadrante High-High (Alto-Alto): Neste quadrante, o valor da observação \(x_i\) está acima da média (\(x_i - \bar{x} > 0\)) e a média ponderada dos valores dos vizinhos também está acima da média (\(\sum_j w_{ij}(x_j - \bar{x}) > 0\)). Isso indica que o local \(i\) está inserido em um grupo de áreas com valores altos, formando um “ponto quente” ou cluster de alto risco.

  • Quadrante Low-Low (Baixo-Baixo): Aqui, o valor da observação \(x_i\) está abaixo da média (\(x_i - \bar{x} < 0\)) e a média ponderada dos valores dos vizinhos também é inferior à média (\(\sum_j w_{ij}(x_j - \bar{x}) < 0\)). Essa configuração revela um agrupamento de áreas com valores baixos, indicando um “ponto frio” ou cluster de baixo risco.

  • Quadrante High-Low (Alto-Baixo): Neste caso, a observação \(x_i\) apresenta um valor acima da média (\(x_i - \bar{x} > 0\)), mas a média ponderada dos seus vizinhos é inferior à média (\(\sum_j w_{ij}(x_j - \bar{x}) < 0\)). Esse padrão caracteriza um outlier espacial, sugerindo que a área \(i\) tem um valor elevado isolado em meio a áreas com valores baixos.

  • Quadrante Low-High (Baixo-Alto): Aqui, a observação \(x_i\) apresenta um valor abaixo da média (\(x_i - \bar{x} < 0\)), enquanto seus vizinhos possuem valores acima da média (\(\sum_j w_{ij}(x_j - \bar{x}) > 0\)). Esse padrão também representa um outlier espacial, onde o local \(i\) está isolado com um valor baixo em meio a áreas com valores elevados.

Essa divisão dos quadrantes é fundamental para a análise espacial, pois permite não apenas detectar a presença de autocorrelação global, mas também localizar áreas específicas com padrões anômalos ou de forte associação (seja positiva ou negativa). Assim, os resultados obtidos a partir do Índice de Moran Local podem guiar intervenções direcionadas e a implementação de políticas públicas, ao indicar onde estão concentrados os “pontos quentes” ou “pontos frios”, bem como identificar possíveis áreas de descontinuidade ou de transição na distribuição espacial dos fenômenos estudados.


1.5.1 Método de Empirical Bayes Local

O Estimador Empirical Bayes Local é uma técnica estatística que combina informações locais e espaciais para suavizar taxas de incidência em áreas com pequenas populações ou baixas contagens. Este método resolve o problema de instabilidade em taxas brutas de municípios pequenos, onde poucos casos podem criar flutuações artificiais.

A ideia é reduzir o “ruído” estatístico em municípios com populações pequenas, onde uma única ocorrência pode inflacionar artificialmente as taxas (ex.: 1 caso em 100 habitantes = 1%, mas 2 casos em 200 habitantes = 1%). O método “empresta” informação de áreas próximas para criar estimativas mais estáveis e confiáveis.

A fórmula geral do estimador para uma região \(i\) é:

\[ \hat{\theta}_i^{EB} = w_i \cdot \hat{\theta}_i + (1 - w_i) \cdot \hat{\theta}_{\text{vizinhos}} \]

Onde:
- \(w_i\) é um peso que depende da variância local (quanto maior a população, maior o peso nos dados observados)
- \(\hat{\theta}_i\) é a taxa observada na região \(i\)
- \(\hat{\theta}_{\text{vizinhos}}\) é a taxa média dos vizinhos

Vantagens:
1. Reduz ruído estatístico em municípios pequenos
2. Incorpora padrões espaciais regionais (Tobler’s First Law)
3. Mantém interpretabilidade das taxas


2 Prática

2.1 Bibliotecas

library(tidyverse) # Manipulação de dados
library(geobr) # Leitura de dados do IBGE
library(sf) # Manipulação de dados espaciais
library(tmap) # Visualização de dados espaciais
library(spdep) # Análise espacial

2.2 Carregar dados

# Carregar dados
load("../dengue.RData")

# Limpar dados
df_final <- df_final %>%
  mutate(
    POP = as.numeric(pop_total),
    DRS_NOME = `17DRS_NOME_2022`
  ) %>%
  mutate(epi_week = epiweek(data_iniSE)) %>%
  filter(epi_week != 53) %>%
  mutate(select_week = paste0(
    if_else(nchar(epi_week) == 1,
            paste0("0", as.character(epi_week)),
            as.character(epi_week)
    ), " ",
    if_else(epi_week == 1, year(data_iniSE) + 1,
            year(data_iniSE)
    )
  )) %>%
  filter(data_iniSE < max(data_iniSE))

# Carregar dados espaciais
municipios_sp <- geobr::read_municipality(code_muni = "SP", 
                                          year = 2022) %>%
  mutate(code_muni = str_sub(code_muni, 1, 6)) %>%
  sf::st_transform(4326)

# Dados da última semana
se_5_2025 <- df_final %>%
  filter(data_iniSE == max(data_iniSE) - weeks(1)) %>%
  group_by(ID_MN_RESI, COD_7_mun, MUNICIPIO) %>%
  summarise(casos = sum(casos, na.rm = TRUE),
            casos_est = sum(casos_est, na.rm = TRUE),
            p_inc100k = sum(casos)/sum(POP)*100000,
            est_inc100k = sum(casos_est)/sum(POP)*100000,
            pop = sum(POP)) %>%
  ungroup()


# Agregar dados espaciais
se_5_2025 <- se_5_2025 %>% 
  left_join(municipios_sp %>% select(code_muni, geom), 
            by = c("ID_MN_RESI" = "code_muni")) %>%
  st_as_sf()

2.3 Visualizar dados

Dados de incidência de dengue por município em São Paulo na quinta semana epidemiológica de 2025. A incidência foi ajustada para o atraso de notificação, entre a data de início dos sintomas e a data de notificação com a aplicação de um modelo de nowcasting.

tmap::tm_shape(se_5_2025) +
  tmap::tm_fill(col = "est_inc100k", 
                title = "Incidência por 100k hab.",
                style = "equal", n = 6, 
                palette = "Greens") +
  tmap::tm_legend(outside = TRUE, text.size = .6) +
  tmap::tm_layout(frame = FALSE) 

2.4 Cálculo do I de Moran Global

2.4.1 Definir poligonos vizinhos

O primeiro passo em uma análise de Moran I requer que seja definido os polígonos “vizinhos”. Isso pode se referir a polígonos contíguos, polígonos dentro de uma certa distância, ou pode ser de natureza não espacial e definido por “vizinhos” sociais, políticos ou culturais.

Aqui, adotaremos uma definição de vizinho contíguo. Aceitaremos quaisquer polígonos contíguos que compartilhem pelo menos um vértice; este é o caso da “rainha” (se alguém escolher adotar a analogia do xadrez) e é parametrizado como queen = TRUE na chamada da função poly2nb. Se exigissemos que apenas arestas fossem compartilhadas entre polígonos, então definiríamos queen = FALSE (a analogia da torre). Este método define os vizinhos de uma determinada área (áreas mais próximas) distribuindo um peso de um para as áreas que estão no caminho das quais uma rainha pode tomar em um tabuleiro de xadrez.

nb <- spdep::poly2nb(se_5_2025, queen = T, snap = 1)
nb
Neighbour list object:
Number of regions: 645 
Number of nonzero links: 3630 
Percentage nonzero weights: 0.8725437 
Average number of links: 5.627907 
1 region with no links:
233
2 disjoint connected subgraphs
# Definindo vizinhança usando o caso da rainha:
# Esta função constrói uma lista de vizinhos baseada em regiões com fronteiras contíguas
# (ou seja, compartilhando um ou mais pontos de fronteira)
se_5_2025.nb <- spdep::poly2nb(se_5_2025, queen = T)

# Define uma grade de rede
se_5_2025.net <- spdep::nb2lines(
  se_5_2025.nb, 
  coords = sf::st_coordinates(sf::st_centroid(se_5_2025)))

# Converte se_5_2025.net para um objeto sf
se_5_2025.net <- sf::st_as_sf(se_5_2025.net)

# Aplica o sistema de coordenadas
sf::st_crs(se_5_2025.net) <- sf::st_crs(se_5_2025)

# Este mapa mostrará os vizinhos aos quais cada polígono está conectado
# Ele utiliza o centroide dos polígonos como nós.
# As linhas mostram as conexões com outros polígonos.
tmap::tm_shape(se_5_2025) + tmap::tm_borders(col = "lightgrey") +
  tmap::tm_shape(se_5_2025.net) + tmap::tm_lines(col = "red") +
  tmap::tm_layout(frame = FALSE) 

Para cada polígono em nosso objeto de forma, nb lista todos os polígonos vizinhos. Por exemplo, para ver os vizinhos (pelo número) para o polígono do município de São Paulo no nosso objeto de forma:

nb[563]
[[1]]
 [1]  65 102 104 153 168 169 181 213 253 255 265 297 321 331 388 445 529 535 545
[20] 546 570 589
# Município do primeiro polígono
se_5_2025$MUNICIPIO[563]
[1] "SAO PAULO"
# Vizinhos do primeiro polígono
se_5_2025[nb[[563]], ]
ID_MN_RESI COD_7_mun MUNICIPIO casos casos_est p_inc100k est_inc100k pop geom
350570 3505708 BARUERI 12 143.0 3.7305081 44.45522 321672 MULTIPOLYGON (((-46.87917 -…
350900 3509007 CAIEIRAS 0 0.0 0.0000000 0.00000 95414 MULTIPOLYGON (((-46.7354 -2…
350920 3509205 CAJAMAR 2 24.0 2.1098827 25.31859 94792 MULTIPOLYGON (((-46.83177 -…
351380 3513801 DIADEMA 20 116.0 5.0991270 29.57494 392224 MULTIPOLYGON (((-46.57865 -…
351500 3515004 EMBU DAS ARTES 2 35.0 0.7982757 13.96983 250540 MULTIPOLYGON (((-46.81424 -…
351510 3515103 EMBU GUACU 1 11.0 1.4930053 16.42306 66979 MULTIPOLYGON (((-46.78241 -…
351570 3515707 FERRAZ DE VASCONCELOS 29 46.0 16.1612109 25.63502 179442 MULTIPOLYGON (((-46.36851 -…
351880 3518800 GUARULHOS 574 736.0 44.3813861 56.90714 1293335 MULTIPOLYGON (((-46.39698 -…
352210 3522109 ITANHAEM 5 27.0 4.3788205 23.64563 114186 MULTIPOLYGON (((-46.70939 -…
352220 3522208 ITAPECERICA DA SERRA 6 27.0 3.7897689 17.05396 158321 MULTIPOLYGON (((-46.79854 -…
352310 3523107 ITAQUAQUECETUBA 17 37.0 4.5698802 9.94621 372001 MULTIPOLYGON (((-46.28149 -…
352620 3526209 JUQUITIBA 0 0.0 0.0000000 0.00000 27189 MULTIPOLYGON (((-47.06171 -…
352850 3528502 MAIRIPORA 2 36.0 2.1156409 38.08154 94534 MULTIPOLYGON (((-46.56825 -…
352940 3529401 MAUA 17 161.5 4.0762889 38.72474 417046 MULTIPOLYGON (((-46.44216 -…
353440 3534401 OSASCO 191 451.5 26.1240523 61.75398 731127 MULTIPOLYGON (((-46.78774 -…
353980 3539806 POA 5 15.0 4.8446796 14.53404 103206 MULTIPOLYGON (((-46.35065 -…
354730 3547304 SANTANA DE PARNAIBA 6 91.0 3.8120652 57.81632 157395 MULTIPOLYGON (((-46.83091 -…
354780 3547809 SANTO ANDRE 18 114.0 2.3911241 15.14379 752784 MULTIPOLYGON (((-46.5184 -2…
354870 3548708 SAO BERNARDO DO CAMPO 14 2084.0 1.7258425 256.90399 811198 MULTIPOLYGON (((-46.62436 -…
354880 3548807 SAO CAETANO DO SUL 0 0.0 0.0000000 0.00000 166398 MULTIPOLYGON (((-46.579 -23…
355100 3551009 SAO VICENTE 2 35.0 0.6086909 10.65209 328574 MULTIPOLYGON (((-46.38864 -…
355280 3552809 TABOAO DA SERRA 3 40.0 1.0927489 14.56999 274537 MULTIPOLYGON (((-46.761 -23…


2.4.2 Atribuir pesos aos vizinhos

Em seguida, precisamos atribuir pesos a cada polígono vizinho. Neste exemplo, cada polígono vizinho receberá peso igual ao calcular os valores médios de contagem de casos entre os vizinhos.

lw <- spdep::nb2listw(nb, style = "W", zero.policy = TRUE)

Para ver o peso dos vizinhos do polígono do Município de São Paulo, digite:

lw$weights[563]
[[1]]
 [1] 0.04545455 0.04545455 0.04545455 0.04545455 0.04545455 0.04545455
 [7] 0.04545455 0.04545455 0.04545455 0.04545455 0.04545455 0.04545455
[13] 0.04545455 0.04545455 0.04545455 0.04545455 0.04545455 0.04545455
[19] 0.04545455 0.04545455 0.04545455 0.04545455

Esses são os pesos pelos quais cada valor de contagem de casos será multiplicado antes de ser somado. Se um polígono tiver 5 vizinhos, cada vizinho terá um peso de 1/5 ou 0,2. Esse peso será usado para calcular os valores médios de vizinhos como em 0,2(vizinho1) + 0,2(vizinho2) + 0,2(vizinho3) + 0,2(vizinho4) + 0,2(vizinho5). Isso é equivalente a somar todos os cinco valores de contagem de casos e depois dividir por 5.


2.4.3 Suavização de Taxas com Empirical Bayes Local

Aplicação da função EBlocal para suavisar a incidência de dengue por município. Essa função é uma implementação do método de Empirical Bayes Local, que combina informações locais e espaciais para suavizar taxas de incidência em áreas com pequenas populações ou baixas contagens.

# Calcular estimativas EB Local
eb_estimates <- spdep::EBlocal(
  ri = se_5_2025$casos_est,  # casos (ri)
  ni = se_5_2025$pop,        # população (ni)
  nb = nb,                   # objeto de vizinhança
  zero.policy = FALSE        # ignorar municípios sem vizinhos
)

# Adicionar taxas suavizadas (por 100k habitantes)
se_5_2025$taxa_suavizada <- eb_estimates$est * 100000

# Preencher NAN com 0
se_5_2025$taxa_suavizada[is.na(se_5_2025$taxa_suavizada)] <- 0

# Mapa comparativo
tm_shape(se_5_2025) +
  tm_fill(col = c("est_inc100k", "taxa_suavizada"),
          style = "equal", n = 6, 
          title = "Incidência por 100k hab.",
          palette = "Greens") +
  tmap::tm_facets(nrow = 1) + 
  tmap::tm_legend(outside = TRUE, text.size = .6) +
  tmap::tm_layout(frame = FALSE) 

Do lado esquerdo, temos a incidência observada e do lado direito, a incidência suavizada.


2.4.4 Cálculo do lag espacial (opcional)

Calcular os valores médios de contagem de casos do vizinho (ponderados)

NOTA: Esta etapa não precisa ser realizada ao executar as funções moran ou moran.test descritas nas próximas etapas. Esta etapa só é necessária se você deseja gerar um gráfico de dispersão entre os valores de contagem de casos e sua contraparte defasada.

Em seguida, faremos o R calcular o valor médio de contagem de casos do vizinho para cada polígono. Esses valores são frequentemente chamados de valores defasados ​​espacialmente (spatially lagged).

# Calcular o lag espacial
inc.lag <- spdep::lag.listw(lw, se_5_2025$taxa_suavizada)
head(inc.lag)
[1] 719.78073 972.12628 502.02324 309.94096 120.37835  26.71115

Você pode plotar a relação entre contagem de casos e sua contraparte espacialmente defasada da seguinte forma. A linha azul ajustada adicionada ao gráfico é o resultado de um modelo de regressão OLS.

M1 <- lm(inc.lag ~ se_5_2025$taxa_suavizada)

plot(inc.lag ~ taxa_suavizada, 
     se_5_2025, pch = 21, asp = 1, las = 1, 
     col = "grey40", bg = "grey80")

abline(M1, col = "blue") 
abline(v = mean(se_5_2025$taxa_suavizada), lty = 3, col = "grey30")
abline(h = mean(se_5_2025$taxa_suavizada), lty = 3, col = "grey30")

spdep::moran.plot(se_5_2025$taxa_suavizada, lw, labels = se_5_2025$MUNICIPIO)

A inclinação da linha é o coeficiente I de Moran. Você pode extrair seu valor do objeto modelo M1 da seguinte forma:

coef(M1)[2]
se_5_2025$taxa_suavizada 
               0.2560076 

Acima é possível observar o coeficiente I de Moran. A inclinação positiva (para cima) sugere que, à medida que o valor da contagem de casos de um polígono aumenta, o mesmo ocorre com os polígonos vizinhos. Se a inclinação fosse negativa (ou seja, inclinada para baixo), isso sugeriria uma relação negativa pela qual valores crescentes em um polígono seriam cercados por polígonos com valores de contagem de casos decrescentes.


2.4.5 Calcular o I de Moran

A estatística I de Moran pode ser calculada usando a função de moran.

I <- spdep::moran(se_5_2025$taxa_suavizada, lw, length(nb), spdep::Szero(lw))[1]
I
$I
[1] 0.2558656

Lembre-se de que o valor I de Moran é a inclinação da linha que melhor se ajusta à relação entre os valores de contagem de casos vizinhos e a contagem de casos de cada polígono no conjunto de dados.


2.4.6 Testar a significância do I de Moran

A hipótese que estamos testando afirma que “os valores de contagem de casos são distribuídos aleatoriamente entre os municípios seguindo um processo completamente aleatório”. Existem dois métodos para testar essa hipótese: um método analítico e um método de Monte Carlo. Exploraremos ambas as abordagens nos exemplos a seguir.

2.4.6.1 Método analítico

Para executar a análise I de Moran usando o método analítico, use a função moran.test.

spdep::moran.test(se_5_2025$taxa_suavizada, lw, alternative = "greater")

    Moran I test under randomisation

data:  se_5_2025$taxa_suavizada  
weights: lw  
n reduced by no-neighbour observations  

Moran I statistic standard deviate = 10.747, p-value < 2.2e-16
alternative hypothesis: greater
sample estimates:
Moran I statistic       Expectation          Variance 
     0.2554688729     -0.0015552100      0.0005719255 

A estatística I de Moran é praticamente o mesmo valor que foi calculado usando a função de moran, como esperado. O valor p é >0,001.

2.4.6.2 Método de Monte Carlo

A abordagem analítica para a análise I de Moran se beneficia por ser rápida. Mas pode ser sensível a polígonos distribuídos irregularmente. Uma abordagem mais segura para teste de hipóteses é executar uma simulação MC usando a função moran.mc(). A função moran.mc recebe um argumento extra n, o número de simulações.

MC <- spdep::moran.mc(se_5_2025$taxa_suavizada, 
                      lw, nsim = 999, 
                      alternative = "greater")

MC

    Monte-Carlo simulation of Moran I

data:  se_5_2025$taxa_suavizada 
weights: lw  
number of simulations + 1: 1000 

statistic = 0.25547, observed rank = 1000, p-value = 0.001
alternative hypothesis: greater

A simulação MC gera um valor p proximo ao valor p da abordagem analítica, 0,001. Isso não é surpreendente, dado que os valores de contagem de casos são fortemente agrupados. Podemos ver os resultados graficamente passando o modelo I de Moran para a função plot:

plot(MC)

A curva mostra a distribuição dos valores de Moran I que poderíamos esperar se as contagens de casos fossem distribuídas aleatoriamente pelos municípios. Observe que nossa estatística observada, I de Moran, cai para a direita da distribuição, sugerindo que os valores de contagem de casos são agrupados (um valor positivo de Moran I sugere agrupamento, enquanto um valor negativo de Moran I sugere dispersão).

Agora, se a estatística de Moran I fosse negativa (sugerindo um padrão disperso), você provavelmente desejaria definir o argumento alternativo como less, dando a você a fração de valores simulados de I mais dispersos do que seu valor observado de I.

Um exercício visual que você pode realizar para avaliar o quão “típico” ou “atípico” seu padrão pode ser em relação a um padrão distribuído aleatoriamente é plotar seu padrão observado ao lado de alguns padrões simulados gerados sob a hipótese nula.

set.seed(131)
se_5_2025$rand1 <- sample(se_5_2025$taxa_suavizada,
                          length(se_5_2025$taxa_suavizada), 
                          replace = FALSE)

se_5_2025$rand2 <- sample(se_5_2025$taxa_suavizada, 
                          length(se_5_2025$taxa_suavizada), 
                          replace = FALSE)

se_5_2025$rand3 <- sample(se_5_2025$taxa_suavizada, 
                          length(se_5_2025$taxa_suavizada), 
                          replace = FALSE)

tmap::tm_shape(se_5_2025) + tmap::tm_fill(
  col = c("p_inc100k", "rand1", "rand2", "rand3"),
  style = "quantile", n = 8, palette = "Greens", 
  legend.show = FALSE
) +
  tmap::tm_facets(nrow = 2) +
  tmap::tm_layout(frame = FALSE)

Você consegue dizer a diferença entre nossa distribuição de contagem de casos observada e aquelas geradas a partir de um processo completamente aleatório? O mapa superior à esquerda é nossa distribuição observada. Os outros três mapas são realizações de um processo completamente aleatório.


2.4.7 I de Moran como uma função de uma banda de distância

Nesta seção, exploraremos a autocorrelação espacial como uma função de bandas de distância.

Em vez de definir vizinhos como polígonos contíguos, definiremos vizinhos com base nas distâncias aos centros dos polígonos. Portanto, precisamos extrair o centro de cada polígono.

xy <- sf::st_centroid(se_5_2025)

O objeto xy armazena todos os 645 pares de valores de coordenadas (ou seja, o mesmo número de pontos que os polígonos).

Em seguida, definiremos o raio de busca para incluir todos os centros de polígonos vizinhos que estão a pelo menos 300 km de distância, mas a menos de 320 km de distância.

s.dist <- spdep::dnearneigh(xy, 300, 320)

A função dnearneigh pega três parâmetros: os valores de coordenadas xy, o raio para o raio interno da banda anular e o raio para a banda anular externa. Em nosso exemplo, o raio anular interno é 300 km, o que implica que todos os centros de polígonos até 300 km não estão incluídos no cálculo do valor defasado.

O polígono 563 tem 18 polígonos como vizinhos ao adotar a definição anular.

s.dist[[563]] %>% length()
[1] 18

Você pode mapear os vizinhos do polígono 563 da seguinte maneira. (O polígono 563 é mostrado com uma cor de preenchimento vermelha).

annulus1 <- se_5_2025[s.dist[[563]], "taxa_suavizada"] 

tmap::tm_shape(se_5_2025) + 
  tmap::tm_borders(col = "grey80") +
  tmap::tm_shape(se_5_2025[563, ]) + 
  tmap::tm_fill(col = "red") +
  tmap::tm_shape(annulus1) + 
  tmap::tm_polygons(style = "equal", border.col = "grey80", 
                    lwd = 0.5, col = "taxa_suavizada", 
                    palette = "Greens") +
  tmap::tm_legend(outside = TRUE, text.size = .8) +
  tmap::tm_layout(frame = FALSE)

Agora que definimos os vizinhos baseados em distância para todos os polígonos, precisamos calcular seus pesos. Adotaremos o mesmo esquema de ponderação usado na definição contígua de vizinhos no exemplo anterior.

lw <- spdep::nb2listw(s.dist, style = "W", zero.policy = T)

Os vizinhos do polígono 563 recebem cada um um peso de 0,05555556.

lw$weights[[563]]
 [1] 0.05555556 0.05555556 0.05555556 0.05555556 0.05555556 0.05555556
 [7] 0.05555556 0.05555556 0.05555556 0.05555556 0.05555556 0.05555556
[13] 0.05555556 0.05555556 0.05555556 0.05555556 0.05555556 0.05555556

Execute a simulação MC.

MC <- spdep::moran.mc(se_5_2025$taxa_suavizada, lw, nsim = 599, zero.policy = T)

plot(MC, main = "", las = 1)

Aqui, estamos observando um resultado estatístico diferente. O coeficiente I de Moran observado está no lado esquerdo da distribuição, sugerindo que os valores de contagem de casos tendem a ser mais diferentes do que semelhantes quando separados por uma distância de 300 km.

Exibindo o valor p e outras estatísticas de resumo.

MC

    Monte-Carlo simulation of Moran I

data:  se_5_2025$taxa_suavizada 
weights: lw  
number of simulations + 1: 600 

statistic = -0.020694, observed rank = 15, p-value = 0.975
alternative hypothesis: greater

Como fomos com o parâmetro alternativo padrão de “maior” na função moran.mc, a saída está nos dando a fração de valores simulados maiores que nosso valor observado — cerca de 95% em nosso exemplo. Dado que nossa estatística observada está no lado esquerdo da distribuição, é melhor relatar o valor p como (1 - 0,95) ou 0,05 com a hipótese alternativa de que os valores são mais diferentes do que o esperado.


2.5 Cálculo do I de Moran Local

Para calcular indicadores locais de autocorrelação espacial (I de Moran Local), podemos usar a função localmoran do pacote spdep. No entanto, essa função adota uma abordagem analítica para calcular o valor p. É melhor adotar uma abordagem de Monte Carlo. Isso pode ser feito usando a função localmoran_perm. Neste exemplo, executaremos 9999 permutações para cada polígono.

Primeiro, retornaremos à nossa definição anterior de vizinho (ou seja, uma de contiguidade).

lw <- spdep::nb2listw(nb, style = "W", zero.policy = TRUE)

Em seguida, executaremos a análise local de Moran I usando a função localmoran_perm.

MCi <- spdep::localmoran_perm(se_5_2025$taxa_suavizada, lw, nsim = 9999)
MCi.df <- as.data.frame(MCi)

O objeto MCi armazena vários parâmetros, incluindo a estatística de Moran local para cada polígono, I, e seu pseudo valor p associado. MCi.df é uma versão dataframe do MCiobject.

head(MCi.df)
Ii E.Ii Var.Ii Z.Ii Pr(z != E(Ii)) Pr(z != E(Ii)) Sim Pr(folded) Sim Skewness Kurtosis
-0.0978013 0.0015621 0.0090497 -1.0445017 0.2962533 0.2582 0.1291 -1.762372 4.531523
1.0972736 -0.0094237 0.2904855 2.0533671 0.0400370 0.0970 0.0485 1.502994 3.090368
-0.0542044 0.0000985 0.0131380 -0.4737607 0.6356706 0.5092 0.2546 -1.277930 2.209124
0.0342118 0.0011487 0.0292303 0.1933866 0.8466562 0.9092 0.4546 -2.055147 5.992528
0.1801048 0.0011532 0.0651631 0.7010269 0.4832863 0.5412 0.2706 -1.945028 5.069397
0.0719064 -0.0003944 0.0028674 1.3501901 0.1769550 0.0094 0.0047 -1.389818 2.654948

Onde:

  • Ii: estatística moran local
  • E.Ii: esperança da estatística moran local; para localmoran_perm as médias das amostras de permutação
  • Var.Ii: variância da estatística moran local; para localmoran_perm os desvios padrão das amostras de permutação
  • Z.Ii: desvio padrão da estatística moran local; para localmoran_perm baseado nas médias e desvios padrão das amostras de permutação
  • Pr(z != E(Ii)): Valor p da estatística moran local usando pnorm(); para localmoran_perm usando desvios padrão baseados nas médias e desvios padrão das amostras de permutação
  • Pr(z != E(Ii)) Sim: Para localmoran_perm, ‘rank()’ e ‘punif()’ do rank da estatística observada para [0, 1] valores p usando ‘alternative=’
  • Pr(folded) Sim: o valor p simulado do intervalo [0, 0.5] classificado
  • Skewness: para localmoran_perm, o output de e1071::skewness() para as amostras de permutação sob os desvios padrão
  • Kurtosis: para localmoran_perm, o output de e1071::kurtosis() para as amostras de permutação sob os desvios padrão

Em seguida, adicionaremos os pseudo valores p ao objeto espacial se_5_2025.

se_5_2025$p_z <- MCi.df$`Pr(z != E(Ii))`
se_5_2025$p_folded <- MCi.df$`Pr(folded) Sim`

A função localmoran_perm gera dois tipos diferentes de valores p:

  1. Teste Bilateral (Pr(z != E(Ii)):
    • Abordagem Conservadora: Considera ambas as direções de autocorrelação (positiva e negativa).
    • Critério Rigoroso: Exige maior desvio da aleatoriedade para classificar significância.
    • Resultado: Identifica menos municípios, mas com maior confiança estatística.
  2. Teste Unilateral “Dobrado” (Pr(folded) Sim):
    • Foco Direcional: Prioriza clusters específicos (High-High ou Low-Low).
    • Maior Sensibilidade: Combina probabilidades das duas caudas da distribuição, ampliando a detecção.
    • Resultado: Identifica mais municípios, porém com risco moderado de falsos positivos.

A principal diferença é que o teste bilateral é mais conservador (valores p maiores) pois considera desvios em ambas as direções, enquanto o teste unilateral “dobrado” é mais sensível para detectar clusters específicos.

Método Municípios Identificados Risco de Falsos Positivos Aplicação Ideal
Bilateral Menos Baixo Priorização rigorosa de áreas críticas
Unilateral Mais Moderado Detecção ampla para monitoramento geral

Podemos gerar um mapa dos pseudo valores p da seguinte forma:

pal1 <- c("#DE2D26", "#FC9272", "#FEE0D2", "grey90")

tmap::tm_shape(se_5_2025) + tmap::tm_fill(
  col = c("p_z", "p_folded"),
  title = c("p-value"),
  breaks = c(0, 0.001, 0.01, 0.05, 0.5),
  style = "fixed", palette = pal1, 
  legend.show = T
) +
  tmap::tm_facets(nrow = 1) + 
  tmap::tm_legend(outside = TRUE, text.size = .6) +
  tmap::tm_layout(frame = FALSE) 

Do lado esquerdo, temos o valor p bilateral (Pr(z != E(Ii))) e do lado direito, o valor p “dobrado” (Pr(folded) Sim).

Em seguida, mapearemos os clusters significativos.

Primeiro, usaremos a função hotspot para identificar clusters “significativos” usando um corte de valor p de 0,05. Como a saída é um fator, uma manipulação de seus níveis é feita para facilitar a atribuição de cores ao gerar o mapa.

# p z
se_5_2025$Ii_z <- spdep::hotspot(MCi, Prname = "Pr(z != E(Ii))", 
                                 cutoff = 0.05, p.adjust = "none")

# Replace NA with ">0.05". This requires that the Ii factor be re-leveled
se_5_2025$Ii_z <- factor(se_5_2025$Ii_z, 
                         levels = c("High-High", 
                                    "Low-Low", 
                                    "Low-High", 
                                    "High-Low", 
                                    ">0.05"))

se_5_2025$Ii_z[is.na(se_5_2025$Ii_z)] <- ">0.05"


# p folded
se_5_2025$Ii_folded <- spdep::hotspot(MCi, Prname = "Pr(folded) Sim", 
                                      cutoff = 0.05, p.adjust = "none")

# Replace NA with ">0.05". This requires that the Ii factor be re-leveled
se_5_2025$Ii_folded <- factor(se_5_2025$Ii_folded, 
                              levels = c("High-High", 
                                         "Low-Low", 
                                         "Low-High", 
                                         "High-Low", 
                                         ">0.05"))

se_5_2025$Ii_folded[is.na(se_5_2025$Ii_folded)] <- ">0.05"

Em seguida, definimos a paleta de cores e então geramos o mapa.

pal2 <- c("#FF0000", "#0000FF", "#a7adf9", "#f4ada8", "#ededed")

tmap::tm_shape(se_5_2025) + tmap::tm_fill(
  col = c("Ii_z", "Ii_folded"),
  title = c("p-value"),
  breaks = c(0, 0.001, 0.01, 0.05, 0.5),
  style = "fixed", palette = pal2, 
  legend.show = T
) +
  tmap::tm_facets(nrow = 1) + 
  tmap::tm_legend(outside = TRUE, text.size = .6) +
  tmap::tm_layout(frame = FALSE) 

Do lado esquerdo, temos os clusters identificados pelo valor p bilateral (Pr(z != E(Ii))) e do lado direito, os clusters identificados pelo valor p “dobrado” (Pr(folded) Sim).


2.5.1 Corrigindo para comparações múltiplas

Corrigindo para comparações múltiplas usando o valor p bilateral Pr(z != E(Ii)):

pva <- function(pv) cbind("none" = pv, 
                          "FDR" = p.adjust(pv, "fdr"), "BY" = p.adjust(pv, "BY"),
                          "Bonferroni" = p.adjust(pv, "bonferroni"))
MCi |> 
  subset(select = "Pr(z != E(Ii))", drop = TRUE) |> 
  pva() -> pvsp
f <- function(x) sum(x < 0.05, na.rm = TRUE)
apply(pvsp, 2, f)
      none        FDR         BY Bonferroni 
        67         24         14         13 

Corrigindo para comparações múltiplas usando o valor p “dobrado” Pr(folded) Sim:

pva <- function(pv) cbind("none" = pv, 
                          "FDR" = p.adjust(pv, "fdr"), "BY" = p.adjust(pv, "BY"),
                          "Bonferroni" = p.adjust(pv, "bonferroni"))
MCi |> 
  subset(select = "Pr(folded) Sim", drop = TRUE) |> 
  pva() -> pvsp
f <- function(x) sum(x < 0.05, na.rm = TRUE)
apply(pvsp, 2, f)
      none        FDR         BY Bonferroni 
       203         34          0          0 

O parâmetro p.adjust na função hotspot pode ser usado para corrigir múltiplos testes. Uma correção popular é a False Discovery Rate (FDR) que pode ser implementada configurando p.adjust para “fdr”. (“holm”, “hochberg”, “hommel”, “bonferroni”, “BH”, “BY”, “fdr”)

se_5_2025$Ii.adj_z <- spdep::hotspot(MCi, Prname = "Pr(z != E(Ii))", 
                                     cutoff = 0.05, p.adjust = "fdr")

# Replace NA with ">0.05". This requires that the Ii factor be re-leveled
se_5_2025$Ii.adj_z <- factor(se_5_2025$Ii.adj_z, 
                             levels = c("High-High", 
                                        "Low-Low", 
                                        "Low-High", 
                                        "High-Low", 
                                        ">0.05 corrected"))

se_5_2025$Ii.adj_z[is.na(se_5_2025$Ii.adj_z)] <- ">0.05 corrected"


se_5_2025$Ii.adj_folded <- spdep::hotspot(MCi, Prname = "Pr(folded) Sim", 
                                          cutoff = 0.05, p.adjust = "fdr")

# Replace NA with ">0.05". This requires that the Ii factor be re-leveled
se_5_2025$Ii.adj_folded <- factor(se_5_2025$Ii.adj_folded, 
                                  levels = c("High-High", 
                                             "Low-Low", 
                                             "Low-High", 
                                             "High-Low", 
                                             ">0.05 corrected"))  

se_5_2025$Ii.adj_folded[is.na(se_5_2025$Ii.adj_folded)] <- ">0.05 corrected"

Agora temos uma implementação mais rigorosa do valor p.

pal2 <- c("#FF0000", "#0000FF", "#a7adf9", "#f4ada8", "#ededed")

tmap::tm_shape(se_5_2025) + tmap::tm_fill(
  col = c("Ii.adj_z", "Ii.adj_folded"),
  title = c("p-value"),
  breaks = c(0, 0.001, 0.01, 0.05, 0.5),
  style = "fixed", palette = pal2, 
  legend.show = T
) +
  tmap::tm_facets(nrow = 1) + 
  tmap::tm_legend(outside = TRUE, text.size = .6) +
  tmap::tm_layout(frame = FALSE) 

Do lado esquerdo, temos os clusters identificados pelo valor p bilateral (Pr(z != E(Ii))) e do lado direito, os clusters identificados pelo valor p “dobrado” (Pr(folded) Sim).


2.5.2 Cluster de alto risco

Para identificar os clusters de alto risco, combinamos dois critérios:

  1. Áreas com taxa suavizada acima do percentil 95 (5% mais altas)
  2. Áreas classificadas como “High-High” na análise LISA (clusters de valores altos)

Isso nos permite identificar as regiões que não só têm altas taxas de incidência, mas também estão cercadas por vizinhos com taxas igualmente elevadas, caracterizando verdadeiros hotspots da doença.

# Identificação de clusters com taxas suavizadas
se_5_2025$cluster_z <- ifelse(
  se_5_2025$taxa_suavizada > quantile(se_5_2025$taxa_suavizada, 0.95) &
    se_5_2025$Ii.adj_z == "High-High",
  "Alto Risco",
  "Outros"
)

se_5_2025$cluster_folded <- ifelse(
  se_5_2025$taxa_suavizada > quantile(se_5_2025$taxa_suavizada, 0.95) &
    se_5_2025$Ii.adj_folded == "High-High",
  "Alto Risco",
  "Outros"
)

tmap::tm_shape(se_5_2025) + tmap::tm_fill(
  col = c("cluster_z", "cluster_folded"),
  title = c("Classificação de risco"),
  palette = c("Alto Risco" = "red", "Outros" = "grey90"), 
  legend.show = T
) +
  tmap::tm_facets(nrow = 1) + 
  tmap::tm_legend(outside = TRUE, text.size = .6) +
  tmap::tm_layout(frame = FALSE) 

Do lado esquerdo, temos os clusters identificados pelo valor p bilateral (Pr(z != E(Ii))) e do lado direito, os clusters identificados pelo valor p “dobrado” (Pr(folded) Sim).

Neste caso, esses são os municípios com taxas suavizadas acima do percentil 95 e que estão classificados como “High-High” na análise LISA.

# Cluster com p value z
se_5_2025 %>% 
  filter(cluster_z == "Alto Risco") %>% 
  select(MUNICIPIO, taxa_suavizada) %>% 
  arrange(desc(taxa_suavizada))
MUNICIPIO taxa_suavizada geom
GASTAO VIDIGAL 1942.834 MULTIPOLYGON (((-50.21381 -…
PROMISSAO 1797.888 MULTIPOLYGON (((-49.86135 -…
LOURDES 1653.885 MULTIPOLYGON (((-50.24453 -…
ZACARIAS 1545.771 MULTIPOLYGON (((-49.98482 -…
# Cluster com p value folded
se_5_2025 %>% 
  filter(cluster_folded == "Alto Risco") %>% 
  select(MUNICIPIO, taxa_suavizada) %>% 
  arrange(desc(taxa_suavizada))
MUNICIPIO taxa_suavizada geom
GASTAO VIDIGAL 1942.834 MULTIPOLYGON (((-50.21381 -…
ZACARIAS 1545.771 MULTIPOLYGON (((-49.98482 -…


3 Interpretação

Interpretação do Gráfico de Autocorrelação Espacial Local (LISA) para Casos de Dengue no Estado de São Paulo

O gráfico gerado representa os clusters e outliers espaciais de casos de dengue no Estado de São Paulo, identificados pelo Índice de Moran Local (LISA), ajustado para comparações múltiplas usando o método FDR (False Discovery Rate).

3.1 Categorias e Cores do Mapa

A variável Ii.adj divide as áreas em cinco categorias, cada uma associada a uma cor específica:

High-High (Vermelho):
- Cluster de Alto-Alto: Áreas com altas taxas de incidência de dengue cercadas por vizinhos com taxas igualmente altas.
- Exemplo: Regiões com surtos ativos de dengue, onde a transmissão está concentrada e pode estar se espalhando rapidamente.
- Ação Recomendada: Intensificar campanhas de prevenção, controle de vetores (mosquitos) e monitoramento ativo de casos.

Low-Low (Azul):
- Cluster de Baixo-Baixo: Áreas com baixas taxas de incidência de dengue cercadas por vizinhos com taxas igualmente baixas.
- Exemplo: Regiões com poucos casos, possivelmente devido a boas práticas de prevenção ou condições ambientais menos favoráveis à proliferação do mosquito.
- Ação Recomendada: Manter ações de vigilância e educação para evitar surtos futuros.

Low-High (Azul Claro):
- Outlier Baixo-Alto: Áreas com baixas taxas de dengue, mas cercadas por vizinhos com taxas altas.
- Exemplo: Uma cidade ou bairro com poucos casos, mas cercado por áreas com surtos ativos.
- Ação Recomendada: Reforçar barreiras sanitárias e monitorar a entrada de casos importados, além de intensificar a prevenção local.

High-Low (Vermelho Claro):
- Outlier Alto-Baixo: Áreas com altas taxas de dengue, mas cercadas por vizinhos com taxas baixas.
- Exemplo: Uma região específica com surto isolado, possivelmente devido a condições locais (ex.: acúmulo de água parada, falta de saneamento).
- Ação Recomendada: Investigar causas locais do surto e implementar medidas corretivas urgentes, como eliminação de criadouros e ações educativas.

>0.05 corrected (Cinza):
- Sem significância estatística: Áreas onde a autocorrelação espacial não é significativa após correção para múltiplas comparações.
- Exemplo: Regiões onde os casos de dengue não seguem um padrão claro de agrupamento ou dispersão.
- Ação Recomendada: Manter ações de vigilância rotineiras, mas sem necessidade de intervenções específicas adicionais.

3.2 Ajuste para Comparações Múltiplas (FDR)

  • O método FDR foi aplicado para evitar falsos positivos, garantindo que os padrões identificados sejam estatisticamente confiáveis.
  • A categoria >0.05 corrected indica áreas onde não há evidência suficiente para afirmar que os casos de dengue estão agrupados ou dispersos de forma significativa.

3.3 Padrões Espaciais Revelados

Clusters (Vermelho/Azul):
- Áreas em vermelho representam zonas críticas com alta transmissão de dengue, que demandam ações urgentes de controle e prevenção.
- Áreas em azul são zonas de baixo risco, onde as estratégias atuais de prevenção podem estar funcionando bem.

Outliers (Cores Claras):
- Áreas em azul claro e vermelho claro representam anomalias espaciais, que podem indicar transições entre zonas de risco ou falhas pontuais na prevenção.

Áreas Cinzas:
- Regiões sem padrão claro, onde a vigilância rotineira deve ser mantida, mas sem necessidade de intervenções específicas.

3.4 Impacto da Suavização Bayesiana

Municípios Pequenos:
- Taxas extremas são ajustadas em direção à média regional.
- Exemplo: Um município com 2 casos em 500 habitantes (taxa bruta 400/100k) pode ser ajustado para 250/100k se vizinhos tiverem taxas menores.

Padrões Espaciais:
- Clusters identificados pelo LISA tornam-se mais coerentes.
- Redução de falsos positivos em áreas com baixa confiabilidade estatística.

Tomada de Decisão:
- Priorização mais precisa de áreas críticas.
- Alocação de recursos baseada em risco real, não em flutuações aleatórias.

3.5 Implicações Práticas

Priorização de Recursos:
- Focar investimentos e ações nas áreas vermelhas (High-High), onde a transmissão está mais ativa e concentrada.
- Manter ações preventivas nas áreas azuis (Low-Low) para evitar futuros surtos.

Intervenções Direcionadas:
- Nas áreas vermelho claro (High-Low), investigar causas locais do surto (ex.: focos de água parada, falta de saneamento) e implementar medidas corretivas.
- Nas áreas azul claro (Low-High), reforçar barreiras sanitárias para evitar a propagação de casos a partir de áreas vizinhas com alta incidência.

Monitoramento e Vigilância:
- Utilizar o mapa para guiar equipes de campo na eliminação de criadouros e na educação da população sobre prevenção.
- Acompanhar a evolução dos clusters e outliers ao longo do tempo para avaliar a eficácia das intervenções.

Comunicação com a População:
- Informar a população sobre os riscos em áreas críticas e engajar a comunidade nas ações de prevenção.
- Destacar áreas de sucesso (Low-Low) como exemplos de boas práticas.

3.6 Conclusão

Este gráfico é uma ferramenta para transformar dados de casos de dengue em insights acionáveis, permitindo que gestores de saúde pública priorizem recursos, direcionem intervenções e monitorem a eficácia das ações de controle. Ao identificar zonas críticas, áreas de baixo risco e anomalias espaciais, o mapa oferece um guia estratégico para combater a dengue de forma eficiente e direcionada.