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
“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
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.
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.
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:
[[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
[1] "SAO PAULO"
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.
Para ver o peso dos vizinhos do polígono do Município de São Paulo, digite:
[[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
oumoran.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).
[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")
A inclinação da linha é o coeficiente I de Moran. Você pode extrair seu valor do objeto modelo M1
da seguinte forma:
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
.
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
.
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.
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
:
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.
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.
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.
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.
Os vizinhos do polígono 563 recebem cada um um peso de 0,05555556.
[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.
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).
Em seguida, executaremos a análise local de Moran I usando a função localmoran_perm
.
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 MCi
object.
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 localE.Ii
: esperança da estatística moran local; paralocalmoran_perm
as médias das amostras de permutação
Var.Ii
: variância da estatística moran local; paralocalmoran_perm
os desvios padrão das amostras de permutação
Z.Ii
: desvio padrão da estatística moran local; paralocalmoran_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 usandopnorm()
; paralocalmoran_perm
usando desvios padrão baseados nas médias e desvios padrão das amostras de permutação
Pr(z != E(Ii)) Sim
: Paralocalmoran_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
: paralocalmoran_perm
, o output dee1071::skewness()
para as amostras de permutação sob os desvios padrão
Kurtosis
: paralocalmoran_perm
, o output dee1071::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
.
A função localmoran_perm
gera dois tipos diferentes de valores p:
- 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.
- Abordagem Conservadora: Considera ambas as direções de autocorrelação (positiva e negativa).
- 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.
- Foco Direcional: Prioriza clusters específicos (High-High ou Low-Low).
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:
- Áreas com taxa suavizada acima do percentil 95 (5% mais altas)
- Á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.