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

Criando Tabelas com o Python: mostrando o poder da linguagem sobre o Excel

Nos dias atuais, pessoas que trabalham com dados estão constantemente confrontados com um dilema: criar uma tabela não tão genial no Excel ou manter em um formato ainda pior, como um dataframe, mas mantendo a flexibilidade de obtenção dos dados. Podemos resolver esse grande problema, unindo a flexibilidade e beleza ao usar a biblioteca great_tables do Python.

Análise do Censo Demográfico com o R

Como podemos analisar dados do Censo Demográfico para produzir pesquisas e implementar políticas públicas? Mostramos nesta postagem o resultado de uma breve análise dos dados preliminares do Censo Demográfico de 2022 usando o R.

Deploy de modelos com Python + Shinylive + GitHub gastando ZERO reais

Colocar modelos em produção pode ser um grande desafio. Lidar com custos monetários, infraestrutura operacional e complexidades de códigos e ferramentas pode acabar matando potenciais projetos. Uma solução que elimina todos estes obstáculos é a recém lançada Shinylive. Neste artigo mostramos um exemplo com um modelo de previsão para o preço do petróleo Brent.

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.