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

Frameworks para criar AI Agents

Neste post, vamos dar o primeiro passo rumo à construção de Agentes de IA mais sofisticados, capazes de tomar decisões, interagir com ferramentas externas e lidar com tarefas complexas. Para isso, precisamos entender o papel dos frameworks agenticos (ou agentic frameworks) e como eles podem facilitar esse processo. Aqui introduzimos dois frameworks populares de desenvolvimento de Agentes de IA.

Construindo RAG para Análise do COPOM com SmolAgents

Este exercício demonstra, passo a passo, como aplicar o conceito de Retrieval-Augmented Generation (RAG) com agentes inteligentes na análise de documentos econômicos. Utilizando a biblioteca SmolAgents, desenvolvemos um agente capaz de interpretar e responder a perguntas sobre as atas do COPOM com base em buscas semânticas.

Como criar um Agente de IA?

Unindo conhecimentos sobre Tools, LLMs e Vector Stores, agora é hora de integrar diferentes conceitos e aprender a construir um Agente de IA completo. Neste post, nosso objetivo será criar um Agente capaz de responder perguntas sobre o cenário macroeconômico brasileiro, utilizando dados de expectativas de mercado do Boletim Focus do Banco Central do Brasil (BCB) e o framework LangChain no Python.

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.