Análise estatística espacial no R

Trabalhos aplicado em economia regional e urbana dependem muito de dados com referência a locais medidos como pontos em espaço, o que gera consequências importantes na análise estatística. Isso acontece pois há dependência espacial entre as observações e pois há heterogeneidade nas relações que estamos modelando. Modelos que levam em conta esses fatores entram no campo de estatística/econometria espacial.

Nessa área é muito comum a utilização de softwares especializados, como o GeoDa. Entretanto, vamos mostrar que é possível realizar esse tipo de operação no R. No post de hoje iremos apresentar como fazer a estimação do Índice de Moran, que permite fazer a clusterização de observações no espaço. Na semana que vem mostraremos como estimar modelos de econometria espacial. Para isso, utilizaremos o pacote spdep.

library(tidyverse)
library(geobr)
library(sidrar)
library(spdep) 

Para esse exemplo, iremos usar dados de PIB por microrregião, obtidos pelo pacote sidrar. Veja que estamos centralizando a variável em 0. Então, utilizamos o pacote geobr para fazer o download do mapa e o unimos com os dados.

 

#Dados de PIB
pib = get_sidra(5938,
variable = 37, 
geo = "MicroRegion")</pre>
#Dados de população
pop= get_sidra(202,
variable = 93,
geo = "MicroRegion") %>%
filter(`Sexo (Código)` == 0 & `Situação do domicílio (Código)` == 0)

#Juntando e criando a variável de pib per capita
df <- left_join(pib, pop, by = "Microrregião Geográfica (Código)") %>%
mutate(pibpc = (Valor.x/Valor.y) - mean(Valor.x/Valor.y)) #centralizar no 0

#
mapa_micro = read_micro_region()
mapa_micro$code_micro = as.character(mapa_micro$code_micro)

merged = dplyr::left_join(mapa_micro, df, by = c("code_micro" = "Microrregião Geográfica (Código)"))

 

Para estimar os modelos da área de econometria espacial é preciso construir a chamada matriz de vizinhança. Essa matriz tem dimensão n x X, sendo n o número de unidades geográficas. No caso deste exemplo, ela mostra quais microrregiões tem vizinhança com quais. Assim, para aquelas em que há vizinhança, há um valor 1. Para todas as outras, 0.

Em sequência é preciso transforma-la em uma matriz de pesos. Uma microrregião com mais vizinhos tem menor peso para cada um deles. Já uma unidade geográfica que tenha apenas 1 vizinho terá peso 1 para este. Assim, utilizamos essa matriz de peso para estimar o chamado I de Moran, que indica o grau de associação espacial da variável que estamos analisando.


nb <- poly2nb(merged, queen=TRUE)
lw <- nb2listw(nb, style="W", zero.policy=TRUE)

moran <- localmoran(merged$pibpc, lw)

ggplot(merged) +
geom_point(aes(x = pibpc, y =lag_pibpc)) +
theme_minimal() +
xlab("Pib per capita") +
ylab("Pib per capita medio dos vizinhos")

Com isso, separamos as observações com relação estatística significante em quatro grupos a depender se elas estão acima ou abaixo da média de renda e se seus vizinhos estão a baixo e acima da média.

merged$moransig <- moran[,5] #p valor
merged$lag_pibpc<- lag.listw(lw, merged$pibpc)</pre>
merged <- merged %>%
mutate(quadrante = case_when(pibpc >= 0 & lag_pibpc >= 0 & moransig < 0.05~"Alto-Alto",
pibpc <= 0 & lag_pibpc <= 0 & moransig < 0.05~"Baixo-Baixo",
pibpc >= 0 & lag_pibpc <= 0 & moransig < 0.05~"Alto-Baixo",
pibpc <= 0 & lag_pibpc >= 0 & moransig < 0.05~"Baixo-Alto"))
<pre>

Assim, podemos plotar o mapa dos clusters que estimamos. Veja que apenas dois tipos de clusters estão representados. Isso significa que não há microrregiões ricas com vizinhos pobres ou pobres com vizinhos ricos.


ggplot(merged) +
geom_sf(aes(fill = quadrante), color=NA) +
scale_fill_manual(values = c("blue", "red"), na.value = "lightgrey") +
theme_minimal()


Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Criando um Simples Assistente de Pesquisa com LangGraph

O exercício utiliza o LangGraph para criar personas fictícias de analistas econômicos, entrevistá-las com um especialista fictício e, a partir dessas interações, gerar relatórios técnicos usando LLMs, buscas na web e execução paralela.

Construindo Corrective RAG (CRAG) com LangGraph

Este post explica o conceito de Agentic CRAG (Corrective Retrieval-Augmented Generation) e sua aplicação na análise das atas do COPOM. Mostramos como combinar recuperação de informações, avaliação de relevância, correção de consultas e busca externa em um fluxo estruturado com LangGraph.

Criando Personas de Analistas com LangGraph

Este post apresenta um estudo de caso sobre a criação de um assistente de pesquisa com o LangGraph, integrando o conceito de human-in-the-loop. O sistema gera personas de analistas a partir de um tema, recebe feedback humano e ajusta as respostas de forma iterativa, garantindo resultados mais precisos e personalizados.

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.