Análise estatística espacial no R (parte 2)

Semana passada mostramos como estimar a dependência espacial de variáveis no R. Hoje, iremos continuar a falar sobre econometria espacial, apresentando como rodar modelos de regressão que levem em consideração o espaço. Para isso, utilizaremos um exemplo simples em que estimamos a relação  da taxa de homicídios com o PIB per capita.

O argumento mais importante para se estimar modelos de econometria espacial é se a suposição de independência entre as observações não é mais válida. Assim, características de um local podem influenciar nos resultados de outro.


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

library(stargazer)

set.ZeroPolicyOption(TRUE)

Utilizaremos basicamente o mesmo processo de extração de dados do post anterior, com a utilização de microrregiões como unidade geográfica. A diferença será a inclusão da variável de com os dados de taxa de homicídio.

#Dados de PIB
pib = get_sidra(5938,
variable = 37, 
geo = "MicroRegion")
#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

# colocando a taxa de homicídios
tx_homic <- ipeadatar::ipeadata("THOMIC") %>%
filter(uname == "Microregions" &
date == "2018-01-01") %>%
mutate("Microrregião Geográfica (Código)" = as.character(tcode)) %>%
rename(tx_homic = value) %>%
select(tx_homic, "Microrregião Geográfica (Código)" )

df <- left_join(df, tx_homic, by = "Microrregião Geográfica (Código)")

# mapa
mapa_micro = read_micro_region(showProgress = F)
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)"))

 

Também iremos produzir a matriz de vizinhança da mesma forma que antes. Iremos retirar da análise a microrregião de Fernando de Noronha, pois ela não apresenta vizinhos, o que impossibilita a estimação.

nb <- poly2nb(merged, queen=TRUE)
lw <- nb2listw(nb, style="W", zero.policy=TRUE)
df = df  %>%  filter(`Microrregião Geográfica.x` != "Fernando de Noronha - PE")

 

Existem vários modelos que se encaixam nesse arcabouço, mas os dois principais são o Autorregressivo Espacial (SAR) e o de Erros Espaciais (SEM). Ambos são modificações do modelo clássico OLS:

(1)   \begin{equation*} y=X \beta+\epsilon \end{equation*}

O modelo SAR introduz um processo autoregressivo, semelhante ao que ocorre nos modelos de séries temporais:

(2)    \begin{equation*} y=\rho W y+X \beta+\epsilon \end{equation*}

Já o modelo SEM introduz o componente do processo autoregressivo no termo de erro:

(3)    \begin{equation*} \begin{gathered} y=X \beta+\epsilon \\ \epsilon=\lambda W \epsilon+u \end{gathered} \end{equation*}

Para determinar qual dos dois modelos rodar, é preciso estimar o teste do tipo multiplicador de Lagrange para avaliar se o Lambda e o W são diferentes de zero.

ols <- lm(tx_homic ~ pibpc, data = df)

lmLMtests <- lm.LMtests(ols,lw, test=c("RLMerr", "RLMlag"))
lmLMtests

Como em ambos os casos a hipótese nula foi rejeitada, o procedimento padrão é estimar o modelo que tenha retornado a estatística mais significativa. No nosso caso, estimaremos o modelo SAR.

 

sar = lagsarlm(tx_homic ~ pibpc, data = df, lw, zero.policy = TRUE)
stargazer(ols,sar)

Veja que na especificação OLS temos que a há uma relação significativa entre as duas variáveis. Quando há a inclusão do componente espacial, o parâmetro do PIB per capita deixa de ser significativo. Isso mostra que, nesse caso, estimar o modelo OLS pode gerar o chamado viés da variável omitida.

 \begin{table}[!htbp] \centering \caption{} \label{} \begin{tabular}{@{\extracolsep{5pt}}lcc} \\[-1.8ex]\hline \hline \\[-1.8ex] & \multicolumn{2}{c}{\textit{Dependent variable:}} \\ \cline{2-3} \\[-1.8ex] & \multicolumn{2}{c}{tx\_homic} \\ \\[-1.8ex] & \textit{OLS} & \textit{spatial} \\ & \textit{} & \textit{autoregressive} \\ \\[-1.8ex] & (1) & (2)\\ \hline \\[-1.8ex] pibpc & $-$0.128$^{***}$ & $-$0.017 \\ & (0.038) & (0.033) \\ & & \\ Constant & 25.402$^{***}$ & 11.914$^{***}$ \\ & (0.740) & (1.380) \\ & & \\ \hline \\[-1.8ex] Observations & 557 & 557 \\ R$^{2}$ & 0.020 & \\ Adjusted R$^{2}$ & 0.018 & \\ Log Likelihood & & $-$2,322.888 \\ $\sigma^{2}$ & & 230.258 \\ Akaike Inf. Crit. & & 4,653.776 \\ Residual Std. Error & 17.460 (df = 555) & \\ F Statistic & 11.043$^{***}$ (df = 1; 555) & \\ Wald Test & & 126.609$^{***}$ (df = 1) \\ LR Test & & 118.879$^{***}$ (df = 1) \\ \hline \hline \\[-1.8ex] \textit{Note:} & \multicolumn{2}{r}{$^{*}$p$<$0.1; $^{**}$p$<$0.05; $^{***}$p$<$0.01} \\ \end{tabular} \end{table}

 

 

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

O que são SLMs?

Assim como os LLMs, os Small Language Models (SLMs) são Modelos de Linguagem baseados em IA em versões mais compactas, projetados para funcionar com menos recursos computacionais, menor latência e maior privacidade. Neste exercício mostramos como usar estes modelos usando API's ou localmente através do 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.