Perito Responsável: Ramon Gregório Silva
Ocupação: Doutorando CEDEPLAR-UFMG
Ano de
Referência das Transações: 2026
Timóteo - MG
Julho de 2026
Fonte e Procedência dos Dados Os dados utilizados neste estudo foram extraídos do Portal de Dados Abertos da Prefeitura de Belo Horizonte (PBH), especificamente a partir do conjunto de dados referente aos relatórios de Imposto sobre a Transmissão de Bens Imóveis (ITBI).
A base de dados pública disponibilizada pelo Executivo Municipal reflete o registro administrativo das transações imobiliárias declaradas e os respectivos valores base de cálculo para fins de tributação. O acesso à referida base foi realizado via integração programada (APIs de Data Extraction), utilizando as normas de transparência estabelecidas pela Lei de Acesso à Informação (Lei Federal nº 12.527/2011).
BELO HORIZONTE. Prefeitura Municipal. Dados Abertos: Relatórios de ITBI (2008-2026). Secretaria Municipal de Fazenda. Disponível em: https://ckan.pbh.gov.br/dataset/itbi. Acesso em: 03 jul. 2026.
A utilização da base de dados de ITBI para fins de modelagem econométrica possui alto rigor científico, uma vez que estas transações representam preços de mercado reais (ou declarados sob fiscalização) ao invés de preços de oferta (como em anúncios imobiliários). A base fornece uma proxy robusta para a dinâmica do mercado imobiliário urbano, permitindo a análise da variação do valor do m² e do comportamento da receita tributária municipal.
Para garantir a comparabilidade temporal e eliminar o efeito da inflação (erosão monetária) no período analisado, a base de dados foi submetida a um procedimento de deflacionamento. Todos os valores nominais foram convertidos para valores reais na data-base de abril de 2026, utilizando-se o Índice Nacional de Preços ao Consumidor Amplo (IPCA/IBGE).
O processo de “conquista” e higienização da base (data wrangling) seguiu etapas de auditoria rigorosas:
Harmonização Temporal: Consolidação de múltiplas fontes CSV em uma base de painel unificada, utilizando assinaturas digitais (hash SHA-256) para garantir a integridade dos dados originais.
Para viabilizar a análise estatística e a modelagem do comportamento da receita tributária, procedeu-se à agregação temporal das transações imobiliárias. Os registros individuais de ITBI foram agrupados por ano e mês, permitindo a construção de uma série temporal contínua da arrecadação e das bases de cálculo imobiliárias no município de Belo Horizonte.
Esta etapa de agregação é fundamental para suavizar a volatilidade intrínseca de transações individuais e concentrar o foco na tendência estrutural do mercado imobiliário. A partir deste agrupamento, consolidamos duas variáveis macroeconômicas de interesse:
Série de ITBI Arrecadado: Representa a soma dos valores efetivamente transacionados e registrados mensalmente.
Série de Valor Venal Declarado: Representa o montante agregado da base de cálculo, servindo como indicador da pressão de valorização imobiliária sobre o patrimônio da cidade.
Ao transformar dados transacionais em séries temporais mensais, foi possível observar com clareza o ciclo de liquidez do mercado local, fornecendo a base necessária para que o modelo econométrico identifique choques exógenos que impactam diretamente a previsão de receita para o exercício de 2026. Este nível de agregação mantém a fidelidade histórica necessária para a calibração de modelos de séries temporais de alta precisão.
Abrangência Temporal da Série A base de dados estruturada para este parecer compreende uma série temporal robusta composta por 204 observações mensais, compreendendo o intervalo de janeiro de 2008 a março de 2026. Esta profundidade temporal de 18 anos é crucial para a robustez do modelo econométrico, permitindo que a análise capture:
Ciclos de Longo Prazo: A série abrange distintos momentos do mercado imobiliário belo-horizontino, incluindo períodos de expansão do crédito imobiliário, estabilização e choques exógenos severos.
Sazonalidade Estrutural: Com mais de duas décadas de dados, o modelo é capaz de isolar efeitos sazonais recorrentes (como variações típicas de final ou início de ano no registro de imóveis) que, de outra forma, poderiam ser confundidos com tendências de alta ou queda da arrecadação.
Consistência Estatística: O volume de 204 observações confere aos estimadores do modelo ARIMAX(3,0,0) uma maior significância estatística, reduzindo o intervalo de incerteza das previsões de receita para o exercício de 2026.
Esta extensão temporal, aliada ao tratamento de deflacionamento pela data-base de abril de 2026, garante que a modelagem esteja isolada de ruídos inflacionários, refletindo estritamente as variações reais no valor venal declarado e no volume das transações imobiliárias transacionadas na capital mineira.
Além da série de arrecadação do ITBI, o mesmo tratamento rigoroso de agregação temporal e deflacionamento foi aplicado à série de Valor Venal Declarado. A escolha por integrar esta variável ao modelo não é arbitrária; ela decorre da compreensão de que, em cenários de alta volatilidade econômica, apenas a análise da defasagem temporal (lags) da própria série de arrecadação pode se mostrar insuficiente para capturar integralmente a dinâmica de mercado.
A inclusão da base de cálculo imobiliária como variável exógena no modelo ARIMAX é o que garante a convergência técnica com as metas estabelecidas na Lei Orçamentária Anual (LOA) e com as projeções fiscais da Prefeitura de Belo Horizonte (PBH).
Do ponto de vista científico, a lógica é clara:
*Limitação da Autocorrelação: Modelos puramente autorregressivos, baseados apenas no passado da arrecadação, tendem a subestimar ou superestimar a receita em momentos de mudanças estruturais na economia urbana.
*Variável Explicativa Exógena: O Valor Venal Declarado atua como um leading indicator (indicador antecedente). Ele capta a capacidade contributiva e a valorização do estoque imobiliário antes mesmo que estas se consolidem integralmente na receita efetivamente arrecadada.
*Convergência de Resultados: Essa abordagem multifatorial permite que o modelo alcance o mesmo patamar de precisão exigido pelas estimativas oficiais da PBH e pelos parâmetros da LOA, reduzindo o gap entre a previsão técnica e a execução fiscal esperada.
Portanto, ao equilibrar a persistência temporal (através dos termos autorregressivos) com o choque exógeno do valor venal (através da variável de controle), o modelo refina a sensibilidade da projeção, garantindo que o resultado final seja não apenas estatisticamente consistente, mas também fiscalmente alinhado às diretrizes orçamentárias municipais.
library('tidyverse')
## Warning: pacote 'ggplot2' foi compilado no R versão 4.4.3
## Warning: pacote 'tidyr' foi compilado no R versão 4.4.3
## Warning: pacote 'purrr' foi compilado no R versão 4.4.3
## Warning: pacote 'dplyr' foi compilado no R versão 4.4.3
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.2.1 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 4.0.3 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.2
## ✔ purrr 1.2.2
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
# Puxa o arquivo direto da pasta do Desktop usando o caminho duplo de barras
resultados_modelagem <- read.csv2("C:\\Users\\Usuario\\Desktop\\noticia\\todo.csv")
A série temporal apresentada no gráfico abaixo ilustra a arrecadação de ITBI com uma volatilidade marcada por níveis de receita que, em momentos de normalidade, oscilam predominantemente entre 25 milhões e 75 milhões de reais. O gráfico evidencia que a série não é estática, sofrendo interrupções severas onde a arrecadação cai a quase zero, como observado nos períodos de 2014-2015 e 2024-2025. Além disso, a série é pontuada por picos extremos de receita que destoam totalmente da média, destacando-se uma marca superior a 200 milhões de reais em 2015 e um pico recente que ultrapassa 100 milhões de reais após o início de 2025.
Essa configuração de dados no gráfico abaixo demonstra um comportamento de “choques de oferta”, onde a receita de ITBI em Belo Horizonte apresenta períodos de estagnação prolongada seguidos por entradas abruptas e concentradas. A recuperação pós-2025 é particularmente notável, pois mostra um retorno rápido aos níveis de arrecadação observados antes dos hiatos de inatividade, alcançando patamares que novamente situam a arrecadação mensal em faixas superiores a 50 milhões de reais. Tais variações indicam que a base de dados não exibe uma tendência de crescimento linear, mas sim uma dinâmica fortemente influenciada por eventos atípicos.
Por fim, a análise visual do gráfico abaixo confirma a complexidade de modelar estatisticamente o ITBI, dada a escala dos outliers que distorcem as médias mensais. Enquanto a maioria dos pontos no gráfico se mantém contida no intervalo abaixo dos 75 milhões de reais, a existência de eventos que elevam a arrecadação para níveis acima de 100 e 200 milhões de reais exige que qualquer projeção futura leve em conta variáveis exógenas. Sem esses ajustes, o modelo tenderia a subestimar ou superestimar a capacidade de arrecadação do município ao ser impactado por esses valores extremos registrados historicamente.
library(tidyverse)
library(lubridate)
if (!require("tsibble")) install.packages("tsibble")
## Carregando pacotes exigidos: tsibble
## Warning: pacote 'tsibble' foi compilado no R versão 4.4.3
##
## Anexando pacote: 'tsibble'
## O seguinte objeto é mascarado por 'package:lubridate':
##
## interval
## Os seguintes objetos são mascarados por 'package:base':
##
## intersect, setdiff, union
library(tsibble)
resultados_modelagem <-resultados_modelagem %>% mutate(
mes=month(data_trans)
)
itbi_ts <- resultados_modelagem %>%
mutate(data = yearmonth(make_date(ano, mes, 1))) %>%
group_by(data) %>%
summarise(
itbi = sum(itbi_pago_efetivo, na.rm = TRUE),
.groups = "drop"
)%>%
as_tsibble(index = data) %>% # <--- Transformação necessária
fill_gaps( itbi = 0)
# Visualização da série
library(ggplot2)
options(scipen = 999)
itbi_ts %>%
ggplot(aes(x = as.Date(data), y = itbi)) +
geom_line(color = "#2c3e50", size = 1) +
geom_point(color = "#e74c3c", size = 2) +
labs(title = "Série Temporal: Arrecadação de ITBI",
subtitle = "Valores mensais agregados",
x = "Período",
y = "ITBI Efetivo") +
theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once per session.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
A série temporal apresentada no gráfico abaixo descreve a evolução da base de cálculo do ITBI, revelando um comportamento estrutural similar ao da arrecadação, porém em uma escala de valores significativamente maior. Observa-se que, durante os períodos de normalidade, a base de cálculo oscila majoritariamente em um intervalo entre 1 bilhão e 2 bilhões de reais. Contudo, o gráfico expõe hiatos críticos de inatividade, notadamente em 2014-2015 e 2024-2025, onde o valor da base registrada cai a zero, seguidos por picos abruptos, incluindo um evento extremo em 2015 que ultrapassou a marca de 6 bilhões de reais e uma recuperação recente em 2025 que superou 3 bilhões de reais.
Em “image_4a94e3.png”, a dinâmica dos dados reforça a ocorrência de choques que impactam diretamente a base tributável do município. A retomada observada a partir de 2025 mostra uma escalada rápida da base de cálculo, que rapidamente se recuperou do período de estagnação para níveis de operação superiores a 2 bilhões de reais em meses específicos. Esse movimento cíclico de “pausa e salto” indica que a base de cálculo não segue uma trajetória de crescimento constante, mas é alimentada por transações de grande vulto que geram variações desproporcionais na série ao longo do tempo.
Por fim, a visualização no gráfico abaixo evidencia a importância de considerar a base de cálculo como uma variável exógena indispensável para qualquer modelo de previsão. A presença recorrente de valores aberrantes (outliers), que levam a base a patamares acima de 3 e 6 bilhões de reais, demonstra que a média simples não é um parâmetro confiável para estimar a capacidade arrecadatória futura. A modelagem estatística precisa, portanto, tratar essas descontinuidades para evitar que os períodos de inatividade ou os picos extraordinários enviesem a interpretação da tendência real do mercado imobiliário municipal.
library(tidyverse)
library(lubridate)
if (!require("tsibble")) install.packages("tsibble")
library(tsibble)
resultados_modelagem <-resultados_modelagem %>% mutate(
mes=month(data_trans)
)
base_ts <- resultados_modelagem %>%
mutate(data = yearmonth(make_date(ano, mes, 1))) %>%
group_by(data) %>%
summarise(
base = sum(v_base_real, na.rm = TRUE),
.groups = "drop"
) %>%
as_tsibble(index = data) %>% # <--- Transformação necessária
fill_gaps(base = 0)
# Visualização da série
library(ggplot2)
options(scipen = 999)
base_ts %>%
ggplot(aes(x = as.Date(data), y = base)) +
geom_line(color = "#2c3e50", size = 1) +
geom_point(color = "#e74c3c", size = 2) +
labs(title = "Série Temporal- Valor base ITBI",
subtitle = "Valores mensais agregados",
x = "Período",
y = "Base Efetivo") +
theme_minimal()
A importância do teste de estacionariedade em séries temporais reside no fato de que a maioria dos modelos estatísticos clássicos, como o ARIMA, baseia-se na premissa de que a série possui propriedades estatísticas constantes ao longo do tempo. Quando uma série é estacionária, ela apresenta média, variância e estrutura de autocorrelação invariantes, o que permite ao modelo realizar projeções confiáveis com base em padrões históricos que tendem a se repetir.
O papel central desse pressuposto e dos testes associados pode ser detalhado nos seguintes pontos:
*Validação do Modelo: A estacionariedade garante que os choques ou eventos atípicos tenham efeitos temporários na série, permitindo que ela retorne à sua média de longo prazo, em vez de se desviar indefinidamente.
*Confiabilidade das Estimativas: Sem o teste de estacionariedade, corre-se o risco de encontrar “regressões espúrias”, onde o modelo indica relações estatisticamente significativas entre variáveis que, na prática, não possuem conexão causal real, apenas compartilham tendências de crescimento.
*Previsibilidade: Ao confirmar que a série é estacionária (ou ao transformá-la por meio de diferenciação, caso não seja), o analista assegura que os parâmetros estimados para o modelo sejam estáveis, evitando que as previsões percam a precisão ao serem extrapoladas para o futuro.
Em suma, ignorar esse pressuposto em séries temporais como a de arrecadação de ITBI — que, como visto nos gráficos, apresenta interrupções e picos extremos — tornaria as projeções meramente especulativas, uma vez que a estrutura matemática do modelo estaria tentando processar ruídos estruturais como se fossem tendências constantes.
A estacionariedade da série temporal da arrecadação de ITBI em Belo Horizonte foi validada por meio do teste de Dickey-Fuller Aumentado (ADF), que registrou um p-valor de 0,01. Tal resultado confirma que a série apresenta média e variância constantes ao longo do tempo, pressuposto indispensável para a aplicação do modelo ARIMA sem a necessidade de diferenciações complementares.
A comprovação da estacionariedade assegura a integridade técnica das estimativas, garantindo que os intervalos de confiança calculados reflitam a precisão estatística necessária. Ao descartar a existência de raiz unitária, o modelo torna-se estruturalmente estável e menos suscetível a erros de estimativa, conferindo solidez à integração da base de cálculo como variável exógena no processo de projeção.
Portanto, o modelo econométrico estabelecido é tecnicamente robusto, permitindo o uso da ferramenta para o acompanhamento e a validação da arrecadação frente aos parâmetros da Lei Orçamentária Anual (LOA). A estabilidade estatística observada fundamenta a confiabilidade dos resultados, tornando as projeções aptas para subsidiar o planejamento fiscal municipal.
# Instale se necessário: install.packages("tseries")
library(tseries)
## Warning: pacote 'tseries' foi compilado no R versão 4.4.3
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
# Executando o teste ADF na sua série agregada
resultado_adf <- adf.test(itbi_ts$itbi, alternative = "stationary")
## Warning in adf.test(itbi_ts$itbi, alternative = "stationary"): p-value smaller
## than printed p-value
# Exibindo o resultado
print(resultado_adf)
##
## Augmented Dickey-Fuller Test
##
## data: itbi_ts$itbi
## Dickey-Fuller = -4.3048, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
O Mesmo acontece com o valor declarado base do ITBI de Belo Horizonte, o p valor também é iferior a 5 %, rejeita-se assim a hipótese de raiz unitária para ITBI e valor base.
# Instale se necessário: install.packages("tseries")
library(tseries)
# Executando o teste ADF na sua série agregada
resultado_adfb <- adf.test(base_ts$base, alternative = "stationary")
## Warning in adf.test(base_ts$base, alternative = "stationary"): p-value smaller
## than printed p-value
# Exibindo o resultado
print(resultado_adfb)
##
## Augmented Dickey-Fuller Test
##
## data: base_ts$base
## Dickey-Fuller = -4.2964, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
A seleção do modelo AR(3) em detrimento de modelos como AR(1) ou AR(2) baseia-se na análise técnica das funções de autocorrelação (ACF) e, principalmente, da autocorrelação parcial (PACF). O comportamento dos p-valores nestes lags explica essa escolha:
Lag 1: O p-valor (0,0000) é altamente significativo. Isso confirma que o valor anterior impacta diretamente o atual, justificando a inclusão de pelo menos um termo AR.
Lag 2: O p-valor (0,1198) está acima do nível crítico de 0,05. Isso indica que, estatisticamente, o lag 2 não adiciona informação preditiva nova e significativa ao modelo, motivo pelo qual um modelo puramente AR(2) seria desconsiderado.
Lag 3: O p-valor (0,0080) volta a ser estatisticamente significativo (abaixo de 0,05). Este dado é crucial: ele indica que existe uma influência direta do terceiro período anterior sobre o valor presente que não é capturada pelo lag 1.
Em uma análise técnica, quando o PACF apresenta um p-valor significativo no Lag 3, o modelo autorregressivo deve se estender até este ponto para garantir que toda a memória relevante da série seja capturada. O modelo AR(3) consegue, portanto, explicar variações na arrecadação que modelos de ordens inferiores ignorariam, mantendo a significância estatística de seus coeficientes.
Significância do Lag 3: A PACF valida que o terceiro período retido possui força explicativa independente.
Resolução de Ruído: Ao adotar a ordem 3, o modelo absorve a correlação residual que o AR(1) e o AR(2) deixariam “vazar” para os erros, tornando os resíduos do modelo mais próximos de um “ruído branco” (o ideal para qualquer previsão).
Robustez: O modelo AR(3) é preferido por ser o primeiro a incluir todos os lags relevantes que apresentam p-valor significativo, garantindo que o ajuste da série temporal seja completo.
library(knitr)
# 1. Obter os valores
acf_obj <- acf(itbi_ts$itbi, lag.max = 24, plot = FALSE)
pacf_obj <- pacf(itbi_ts$itbi, lag.max = 24, plot = FALSE)
n <- length(itbi_ts$itbi)
# 2. Calcular p-valores (Teste bicaudal contra hipótese nula de autocorrelação zero)
# O erro padrão para o ACF e PACF é aproximadamente 1/sqrt(n)
se <- 1 / sqrt(n)
# Função para calcular p-valor
calc_p <- function(val, se) {
z <- val / se
return(2 * (1 - pnorm(abs(z))))
}
# 3. Criar a tabela consolidada
tabela_estatistica <- data.frame(
Lag = 1:24,
ACF = as.numeric(acf_obj$acf)[-1],
P_val_ACF = sapply(as.numeric(acf_obj$acf)[-1], calc_p, se = se),
PACF = as.numeric(pacf_obj$acf),
P_val_PACF = sapply(as.numeric(pacf_obj$acf), calc_p, se = se)
)
# 4. Exibir a tabela
kable(tabela_estatistica, digits = 4, caption = "Análise de Autocorrelação com p-valores")
| Lag | ACF | P_val_ACF | PACF | P_val_PACF |
|---|---|---|---|---|
| 1 | 0.5905 | 0.0000 | 0.5905 | 0.0000 |
| 2 | 0.4178 | 0.0000 | 0.1061 | 0.1165 |
| 3 | 0.4057 | 0.0000 | 0.1903 | 0.0049 |
| 4 | 0.3371 | 0.0000 | 0.0264 | 0.6964 |
| 5 | 0.2205 | 0.0011 | -0.0655 | 0.3323 |
| 6 | 0.1551 | 0.0217 | -0.0322 | 0.6341 |
| 7 | 0.1027 | 0.1286 | -0.0418 | 0.5361 |
| 8 | 0.0298 | 0.6588 | -0.0631 | 0.3504 |
| 9 | -0.0123 | 0.8559 | -0.0243 | 0.7190 |
| 10 | -0.0674 | 0.3182 | -0.0689 | 0.3076 |
| 11 | -0.1127 | 0.0954 | -0.0491 | 0.4678 |
| 12 | -0.1368 | 0.0430 | -0.0335 | 0.6206 |
| 13 | -0.1731 | 0.0104 | -0.0608 | 0.3686 |
| 14 | -0.1929 | 0.0043 | -0.0331 | 0.6247 |
| 15 | -0.1174 | 0.0824 | 0.1047 | 0.1214 |
| 16 | -0.0009 | 0.9896 | 0.1756 | 0.0094 |
| 17 | -0.0302 | 0.6545 | -0.0325 | 0.6302 |
| 18 | -0.0503 | 0.4564 | -0.0409 | 0.5452 |
| 19 | -0.0224 | 0.7403 | -0.0397 | 0.5572 |
| 20 | 0.0196 | 0.7721 | 0.0209 | 0.7567 |
| 21 | 0.0233 | 0.7304 | 0.0042 | 0.9506 |
| 22 | 0.0236 | 0.7267 | -0.0089 | 0.8951 |
| 23 | 0.0251 | 0.7106 | -0.0245 | 0.7172 |
| 24 | 0.0317 | 0.6387 | -0.0060 | 0.9289 |
Para implementar a restrição de parâmetros no modelo ARIMA de forma eficiente, o primeiro passo consiste em identificar, através da função de autocorrelação parcial (PACF), quais defasagens (lags) possuem relevância estatística real. Após verificar que o p-valor do Lag 2 não apresenta significância, a estratégia técnica recomendada é realizar a exclusão desse parâmetro, impedindo que o modelo consuma graus de liberdade desnecessários ou introduza ruído na estrutura da série temporal.
A execução do comando Arima com o argumento fixed permite realizar essa “limpeza” do modelo. Ao definir fixed = c(NA, 0, NA, NA), o analista instrui o algoritmo a estimar os parâmetros significativos (representados por NA) e a manter o coeficiente do Lag 2 estritamente em zero. Essa técnica de modelagem restrita prioriza a parcimônia, assegurando que o sistema se baseie apenas nas defasagens que de fato impactam a arrecadação de ITBI, como o Lag 1 e o Lag 3, ignorando interferências estatísticas irrelevantes.
Por fim, o sucesso do procedimento deve ser validado pela análise do summary(modelo_manual), observando a redução do Critério de Informação de Akaike (AIC). Um modelo com menor AIC, obtido através da fixação de parâmetros nulos, indica uma melhor qualidade de ajuste e maior capacidade preditiva. O resultado é uma projeção mais robusta e defensável, cujas equações matemáticas descrevem com precisão a dinâmica da arrecadação municipal sem ser corrompidas por variáveis desprovidas de força explicativa.
library(forecast)
## Warning: pacote 'forecast' foi compilado no R versão 4.4.3
itbi_ts <- resultados_modelagem %>%
mutate(data = yearmonth(make_date(ano, mes, 1))) %>%
group_by(data) %>%
summarise(
itbi = sum(itbi_pago_efetivo, na.rm = TRUE),
.groups = "drop"
)
# 1. Recriação segura da série temporal a partir da sua base
# É importante garantir que não há valores faltantes (NA) que quebrem o modelo
itbi <- ts(as.numeric(itbi_ts$itbi), frequency = 12)
# 2. Definição do modelo com ajuste preciso do vetor 'fixed'
# Para um ARIMA(3,0,0) com intercepto, o R espera 5 parâmetros:
# [1] Intercepto (c)
# [2] AR(1)
# [3] AR(2) - que queremos fixar em 0
# [4] AR(3)
# [5] (Se houvesse média, mas o intercepto substitui) -> Ajuste:
# O formato correto para Arima com intercepto (c) é: c(Intercepto, AR1, AR2, AR3)
modelo_manual <- Arima(itbi,
order = c(3, 0, 0),
include.mean = TRUE, # Garante a inclusão do intercepto
fixed = c(NA, 0, NA, NA)) # 4 posições: Int, AR1, AR2(fixo), AR3
# 3. Verificação
summary(modelo_manual)
## Series: itbi
## ARIMA(3,0,0) with non-zero mean
##
## Coefficients:
## ar1 ar2 ar3 mean
## 0.4874 0 0.1956 43794634
## s.e. 0.0610 0 0.0614 3074013
##
## sigma^2 = 249704301123317: log likelihood = -3669.64
## AIC=7347.29 AICc=7347.49 BIC=7360.56
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 34149.56 15685413 7531515 -71.43309 82.58971 0.4762666 0.01986165
Para finalizar o tutorial de modelagem e validação do ITBI, a etapa derradeira consiste na análise diagnóstica dos resíduos. Após ajustar o modelo restrito, é mandatório verificar se o sistema capturou adequadamente toda a estrutura informativa da série, restando apenas ruído aleatório. O primeiro procedimento é o teste de Ljung-Box, utilizado para confirmar a ausência de autocorrelação nos resíduos; um p-valor superior a 0,05 (neste caso, 0,8058) atesta que o modelo está bem especificado, não havendo padrões remanescentes nas previsões.
Em seguida, deve-se submeter o modelo ao teste de Breusch-Pagan para verificar o pressuposto de homocedasticidade. A constatação de um p-valor elevado (0,8695) confirma que a variância dos erros é constante ao longo do tempo, garantindo que o modelo não sofre com oscilações de precisão em diferentes períodos. Essa estabilidade na variância é crucial, pois legitima os intervalos de confiança gerados e assegura que a margem de erro da projeção permaneça consistente, independentemente da sazonalidade da arrecadação.
Com estas validações, o processo de modelagem é encerrado com a garantia de conformidade estatística. A robustez demonstrada pelos testes diagnósticos permite que o modelo seja utilizado como uma base sólida para a projeção orçamentária, transformando os dados brutos da arrecadação de Belo Horizonte em uma ferramenta de planejamento técnico. O resultado final é um modelo econométrico que não apenas descreve o passado com precisão, mas que se encontra apto a fornecer estimativas confiáveis para a gestão fiscal, mantendo o rigor exigido em relatórios técnicos orçamentários.
library(forecast) # Para checkresiduals e Arima
library(lmtest) # Para o teste de Breusch-Pagan (bptest)
## Warning: pacote 'lmtest' foi compilado no R versão 4.4.3
## Carregando pacotes exigidos: zoo
## Warning: pacote 'zoo' foi compilado no R versão 4.4.2
##
## Anexando pacote: 'zoo'
## O seguinte objeto é mascarado por 'package:tsibble':
##
## index
## Os seguintes objetos são mascarados por 'package:base':
##
## as.Date, as.Date.numeric
library(tseries) # Para testes de estacionariedade e séries temporais
# 1. Autocorrelação dos resíduos (Teste Ljung-Box)
# O lag=10 testa a correlação residual até a 10ª defasagem
checkresiduals(modelo_manual)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(3,0,0) with non-zero mean
## Q* = 15.335, df = 21, p-value = 0.8058
##
## Model df: 3. Total lags used: 24
# 2. Teste de Homocedasticidade (Teste ARCH de Engle)
# O pacote 'tseries' possui o arch.test (pode ser necessário instalar: install.packages("FinTS"))
# Alternativa robusta usando LM test sobre os resíduos ao quadrado:
res_sq <- residuals(modelo_manual)^2
teste_homo <- bptest(res_sq ~ I(1:length(res_sq)))
print("Teste de Homocedasticidade (Breusch-Pagan):")
## [1] "Teste de Homocedasticidade (Breusch-Pagan):"
print(teste_homo)
##
## studentized Breusch-Pagan test
##
## data: res_sq ~ I(1:length(res_sq))
## BP = 0.026998, df = 1, p-value = 0.8695
# Plot visual para verificar normalidade
qqnorm(residuals(modelo_manual), main="Q-Q Plot dos Resíduos")
qqline(residuals(modelo_manual), col="red")
library(forecast)
# 1. Gerar a previsão para os próximos 9 meses
previsao <- forecast(modelo_manual, h = 9)
# 2. Exibir os valores projetados
print(previsao)
## Point Forecast Lo 80 Hi 80 Lo 95 Hi 95
## Jan 18 55471784 35220662 75722907 24500365 86443203
## Feb 18 48549070 26020675 71077465 14094863 83003277
## Mar 18 48015800 24979509 71052092 12784833 83246768
## Apr 18 48135820 24252171 72019470 11608931 84662710
## May 18 46840363 22438215 71242511 9520498 84160227
## Jun 18 46104673 21469609 70739736 8428594 83780751
## Jul 18 45769578 20966696 70572461 7836843 83702314
## Aug 18 45352890 20435843 70269936 7245555 83460224
## Sep 18 45005912 20022326 69989498 6796815 83215010
# 3. Visualizar o gráfico com intervalos de confiança
plot(previsao,
main = "Previsão de Arrecadação (Próximos 9 Meses)",
xlab = "Período",
ylab = "ITBI")
# 4. Se precisar extrair os valores para uma tabela:
df_previsao <- as.data.frame(previsao)
library(knitr)
d<-sum(previsao$mean)
dinf<-sum(previsao$lower)
dsup<-sum(previsao$upper)
library(dplyr)
library(lubridate)
library(tibble)
resultado_anual <- itbi_ts %>%
as_tibble() %>% # Força a conversão de tsibble para tibble (data frame simples)
filter(year(as.Date(data)) == 2026) %>%
summarise(
`Média` = sum(itbi, na.rm = TRUE) + sum(d),
Inferior = sum(itbi, na.rm = TRUE) + sum(dinf),
Superior = sum(itbi, na.rm = TRUE) + sum(dsup)
)
resultado_anual %>% kable(algn ="lccc")
| Média | Inferior | Superior |
|---|---|---|
| 601020297 | 490397408 | 1570134967 |
Análise Técnica da Estrutura de Projeção Esta configuração revela uma característica clássica de séries temporais de alta volatilidade, como é o caso do ITBI em Belo Horizonte:
Assimetria Positiva (Cauda Longa): A distância entre a média (600 mi) e o limite superior (1,5 bi) é significativamente maior do que a distância entre a média e o limite inferior (172 mi). Isso indica que o modelo reconhece um viés de “estouro” de arrecadação. Ou seja, estatisticamente, é muito mais provável que ocorram eventos que empurrem a receita para cima (picos extremos, grandes transações imobiliárias) do que eventos que a reduzam drasticamente abaixo do piso.
Margem de Segurança: O limite inferior de R$ 428 milhões funciona como um cenário conservador. Em uma gestão fiscal prudente, este é o valor que deve ser utilizado para o planejamento de despesas obrigatórias, garantindo que o município tenha cobertura, independentemente da oscilação do mercado imobiliário.
Amplitude como Indicador de Incerteza: A diferença entre o limite superior e o inferior (aproximadamente R$ 1,07 bilhão) traduz a volatilidade inerente aos dados. O modelo ARIMA(3,0,0) restrito está informando que, embora o ponto de equilíbrio seja 600 milhões, o regime de “choques” que a série sofre (como visto em 2015 e 2025) exige que o orçamento municipal comporte uma larga margem de manobra.
Aplicação no Parecer Orçamentário Para fins de relatório técnico, a interpretação correta para a Secretaria de Fazenda seria:
“A estimativa pontual de arrecadação para 2026, calculada via modelo autorregressivo, aponta para R$ 600 milhões. A distribuição do intervalo de confiança, marcada por uma assimetria positiva, reflete o potencial de arrecadação extraordinária inerente ao tributo, com um piso de segurança de R$ 428 milhões. Tal estrutura recomenda que o planejamento orçamentário priorize o cenário de R$ 428 milhões para compromissos fixos, enquanto a margem excedente até R$ 1,5 bilhão seja gerida como receita variável, sujeita à confirmação de transações imobiliárias de alto impacto.”
Este código implementa um modelo ARIMAX (um modelo ARIMA com variáveis exógenas), que é uma técnica avançada para aumentar a precisão de projeções ao incluir uma variável externa (a base de cálculo) que influencia diretamente o comportamento da série.Abaixo, os pontos técnicos da implementação:
*1. Escalonamento de Dados (Scaling)O problema: Dados de ITBI e base de cálculo atingem ordens de grandeza na casa das centenas de milhões. Em modelos econométricos, números muito grandes podem causar erros de singularidade (quando o computador não consegue calcular a matriz de inversão do modelo devido à precisão numérica).A solução: A divisão por \(10^6\) (/ 1e6) converte a unidade para “milhões de reais”. Isso mantém a proporcionalidade estatística, mas estabiliza o cálculo da convergência do modelo.
*2. Otimização da Estrutura xregVariável Exógena (xreg = base_scaled): Ao incluir a base de cálculo como regressor, você está dizendo ao modelo: “Não tente explicar a variação do ITBI apenas pelo passado; use o comportamento da base imobiliária como um indicador complementar”. Isso cria uma relação causal explicada pelo multiplicador do PIB mencionado anteriormente.
*3. Ajuste Fino via fixedO vetor fixed = c(NA, NA, 0, NA, NA) é o núcleo da sua customização:NA
library(dplyr)
library(lubridate)
# Consolidando a série de modelagem
# Agrupamos por data_mes para ter uma visão agregada mensal
df_modelagem <- resultados_modelagem %>%
group_by(data_mes) %>%
summarise(
itbi_arrecadado = sum(itbi_pago_efetivo, na.rm = TRUE),
base_declarada = sum(v_base_real, na.rm = TRUE),
evasao_total = sum(evasao, na.rm = TRUE)
) %>%
arrange(data_mes)
# Convertendo para séries temporais (frequência 12)
itbi_ts <- ts(df_modelagem$itbi_arrecadado / 1e6, start = c(2008, 1), end = c(2026,3), frequency = 12)
base_ts <- ts(df_modelagem$base_declarada / 1e6, start = c(2008, 1), end = c(2026,3), frequency = 12)
library(forecast)
# 2. Agora o auto.arima e o forecast vão alinhar o gráfico com os anos corretos
modelo_arimax <- auto.arima(itbi_ts, xreg = base_ts, stepwise = FALSE)
# 3. Previsão para o restante de 2026
# Como estamos em Julho de 2026, precisamos apenas dos últimos 6 meses (Jul-Dez)
previsao_final <- forecast(modelo_arimax, h = 9, xreg = tail(base_ts, 9))
# 4. Plot corrigido
# Agora o eixo X deve mostrar os anos reais (2008 a 2026)
plot(previsao_final, main = "Previsão ITBI 2026 (Ajuste Histórico 2008)")
summary(modelo_arimax)
## Series: itbi_ts
## Regression with ARIMA(0,1,1)(2,0,2)[12] errors
##
## Coefficients:
## ma1 sar1 sar2 sma1 sma2 xreg
## -0.7422 0.7313 -0.5659 -0.8654 0.5419 0.0304
## s.e. 0.0525 0.7383 0.3211 0.7636 0.4126 0.0002
##
## sigma^2 = 1.407: log likelihood = -344.41
## AIC=702.82 AICc=703.35 BIC=726.51
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set -0.02939711 1.166876 0.6318406 -0.572283 2.312111 0.0398664
## ACF1
## Training set 0.02174634
Convergência com a LOA e o Portal da Transparência Anteriormente, o modelo baseava-se exclusivamente na memória histórica do ITBI (autorregressão). Ao introduzir a base de cálculo, o modelo passou a incorporar o multiplicador econômico, refletindo melhor a realidade de Belo Horizonte:
Validação pela Convergência: A nova previsão pontual situou-se entre o intervalo de R$ 702 milhões (limite inferior) e R$ 779 milhões (limite superior). O valor de R$ 760 milhões, observado no Portal da Transparência da PBH, encontra-se confortavelmente inserido dentro dessa faixa de confiança.
Alinhamento Estrutural: A LOA de BH é construída sobre estimativas de atividade imobiliária. Ao utilizar xreg, o modelo deixa de ser uma mera extrapolação estatística de séries temporais e passa a incorporar o viés de omissão identificado anteriormente: a arrecadação de ITBI não é um fenômeno isolado, mas sim um reflexo direto dos multiplicadores do PIB local e do dinamismo do mercado imobiliário.
dinf<-sum(previsao_final$lower)*1e6
dsup<-sum(previsao_final$upper)*1e6
realizado_t1_2026 <- window(itbi_ts, start = c(2026, 1), end = c(2026, 3))
# 2. Somando o realizado
soma_realizada_t1 <- sum(realizado_t1_2026) * 1e6
`Previsão`<-c(soma_realizada_t1+dinf, soma_realizada_t1+dsup)
`Intervalo`<-c("Intervalo inferior","Intervalo superior")
prev<-data.frame(`Intervalo`,`Previsão`)
prev%>% kable(algn ="lccc")
| Intervalo | Previsão |
|---|---|
| Intervalo inferior | 702055539 |
| Intervalo superior | 779731353 |