Nesta seção, está uma análise básica da estrutura dos dados
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.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
library(lubridate)
library(naniar)
# Carregar os dados
data_portugal <- read.csv("inflacao_portugal.csv", header = TRUE)
data_alemanha <- read.csv("inflacao_alemanha.csv", header = TRUE)
# Visualizar as primeiras linhas de ambos os datasets
head(data_portugal)
## DATE TIME.PERIOD HICP...Overall.index...ICP.M.PT.N.000000.4.ANR.
## 1 1996-01-31 1996Jan 2.5
## 2 1996-02-29 1996Feb 2.5
## 3 1996-03-31 1996Mar 2.3
## 4 1996-04-30 1996Apr 2.6
## 5 1996-05-31 1996May 3.1
## 6 1996-06-30 1996Jun 3.4
head(data_alemanha)
## DATE TIME.PERIOD HICP...Overall.index..ICP.A.DE.N.000000.4.AVR.
## 1 1986-12-31 1986 -0.6
## 2 1987-12-31 1987 -0.1
## 3 1988-12-31 1988 0.9
## 4 1989-12-31 1989 2.6
## 5 1990-12-31 1990 2.7
## 6 1991-12-31 1991 3.6
Número de observações e variáveis nos datasets:
Portugal:
DATE: Representa a data associada a cada observação do índice HICP, no formato YYYY-MM-DD. TIME.PERIOD: Um campo textual descrevendo o período de tempo no formato YYYYMon. HICP…Overall.index…ICP.M.PT.N.000000.4.ANR.: Valores mensais do índice HICP.
Alemanha:
DATE: Representa a data associada a cada observação do índice HICP. TIME.PERIOD: Período de tempo no formato textual YYYYMon. HICP…Overall.index…ICP.M.DE.N.000000.4.ANR.: Valores mensais do índice HICP.
#2. Estrutura e Pré-processamento dos Dados Aqui, ajustaremos os nomes das colunas e verificaremos os dados de ambos os países.
# Renomear colunas para facilitar a manipulação
data_portugal <- data_portugal %>%
rename(
Date = "DATE",
Period = "TIME.PERIOD",
HICP_Index = "HICP...Overall.index...ICP.M.PT.N.000000.4.ANR."
)
data_alemanha <- data_alemanha %>%
rename(
Date = "DATE",
Period = "TIME.PERIOD",
HICP_Index = "HICP...Overall.index..ICP.A.DE.N.000000.4.AVR."
)
# Converter colunas de data
data_portugal$Date <- as.Date(data_portugal$Date, format = "%Y-%m-%d")
data_alemanha$Date <- as.Date(data_alemanha$Date, format = "%Y-%m-%d")
# Verificar estrutura final
str(data_portugal)
## 'data.frame': 346 obs. of 3 variables:
## $ Date : Date, format: "1996-01-31" "1996-02-29" ...
## $ Period : chr "1996Jan" "1996Feb" "1996Mar" "1996Apr" ...
## $ HICP_Index: num 2.5 2.5 2.3 2.6 3.1 3.4 3.6 3.5 3.3 2.8 ...
str(data_alemanha)
## 'data.frame': 38 obs. of 3 variables:
## $ Date : Date, format: "1986-12-31" "1987-12-31" ...
## $ Period : int 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 ...
## $ HICP_Index: num -0.6 -0.1 0.9 2.6 2.7 3.6 3.8 3.2 2.2 0.2 ...
# Resumo estatístico para Portugal
summary(data_portugal$HICP_Index)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -1.800 0.800 2.200 2.211 3.100 10.600
# Resumo estatístico para Alemanha
summary(data_alemanha$HICP_Index)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -0.600 0.725 1.650 1.866 2.450 8.700
# Gráfico para Portugal
ggplot(data_portugal, aes(x = Date, y = HICP_Index)) +
geom_line(color = "blue") +
labs(
title = "Evolução do Índice HICP - Portugal",
x = "Data",
y = "Índice HICP"
) +
theme_minimal()
# Gráfico para Alemanha
ggplot(data_alemanha, aes(x = Date, y = HICP_Index)) +
geom_line(color = "red") +
labs(
title = "Evolução do Índice HICP - Alemanha",
x = "Data",
y = "Índice HICP"
) +
theme_minimal()
O HICP da Alemanha foi estável até 2020, com oscilações moderadas. A partir de 2020, houve um aumento acentuado, atingindo o pico em 2022, refletindo impactos como a pandemia e inflação global. Comparado a Portugal, a Alemanha foi mais estável, mas também sofreu forte aumento recente.
O Índice HICP em Portugal mostra maior volatilidade em comparação à Alemanha, com quedas acentuadas após 2010 e um pico significativo em 2022, provavelmente devido a eventos globais como a pandemia e inflação. A trajetória é marcada por instabilidade em períodos de crise.
# Dados omissos para Portugal
sum(is.na(data_portugal$HICP_Index))
## [1] 0
vis_miss(data_portugal)
# Dados omissos para Alemanha
sum(is.na(data_alemanha$HICP_Index))
## [1] 0
vis_miss(data_alemanha)
Nesta seção, preparamos os dados para análise.
# Carregar bibliotecas
library(tidyverse)
library(forecast)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(tseries)
# Carregar os dados
data_portugal <- read.csv("inflacao_portugal.csv", header = TRUE)
data_alemanha <- read.csv("inflacao_alemanha.csv", header = TRUE)
# Renomear colunas para facilitar a manipulação
data_portugal <- data_portugal %>%
rename(
Date = "DATE",
Period = "TIME.PERIOD",
HICP_Index = "HICP...Overall.index...ICP.M.PT.N.000000.4.ANR."
)
data_alemanha <- data_alemanha %>%
rename(
Date = "DATE",
Period = "TIME.PERIOD",
HICP_Index = "HICP...Overall.index..ICP.A.DE.N.000000.4.AVR."
)
# Converter colunas de data
data_portugal$Date <- as.Date(data_portugal$Date, format = "%Y-%m-%d")
data_alemanha$Date <- as.Date(data_alemanha$Date, format = "%Y-%m-%d")
# Criar séries temporais
ts_portugal <- ts(data_portugal$HICP_Index, start = c(1996, 1), frequency = 12)
ts_alemanha <- ts(data_alemanha$HICP_Index, start = c(1996, 1), frequency = 12)
# Plotar as séries
par(mfrow = c(2, 1))
plot(ts_portugal, main = "Série Temporal do Índice HICP - Portugal", xlab = "Ano", ylab = "HICP Index")
plot(ts_alemanha, main = "Série Temporal do Índice HICP - Alemanha", xlab = "Ano", ylab = "HICP Index")
# Testar estacionariedade com Dickey-Fuller
adf_portugal <- adf.test(ts_portugal)
## Warning in adf.test(ts_portugal): p-value smaller than printed p-value
adf_alemanha <- adf.test(ts_alemanha)
adf_portugal$p.value
## [1] 0.01
adf_alemanha$p.value
## [1] 0.559377
# Aplicar diferenciação, se necessário
diff_ts_portugal <- diff(ts_portugal)
diff_ts_alemanha <- diff(ts_alemanha)
# Testar novamente a estacionariedade
adf.test(diff_ts_portugal)
## Warning in adf.test(diff_ts_portugal): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: diff_ts_portugal
## Dickey-Fuller = -5.0662, Lag order = 7, p-value = 0.01
## alternative hypothesis: stationary
adf.test(diff_ts_alemanha)
##
## Augmented Dickey-Fuller Test
##
## data: diff_ts_alemanha
## Dickey-Fuller = -2.8442, Lag order = 3, p-value = 0.244
## alternative hypothesis: stationary
# Plotar ACF e PACF
par(mfrow = c(2, 2))
acf(diff_ts_portugal, main = "ACF - Portugal (Série Diferenciada)")
pacf(diff_ts_portugal, main = "PACF - Portugal (Série Diferenciada)")
acf(diff_ts_alemanha, main = "ACF - Alemanha (Série Diferenciada)")
pacf(diff_ts_alemanha, main = "PACF - Alemanha (Série Diferenciada)")
Portugal: Série com alta volatilidade, queda após 2010 e pico acentuado em 2022 devido à inflação global.
Alemanha: Série mais estável, com aumento gradual e impacto moderado em 2022. Conclusão: Portugal é mais instável, enquanto a Alemanha demonstra maior resiliência econômica.
Portugal:
ACF: Há correlações significativas nos primeiros atrasos (lags), indicando alguma estrutura na série, mas as correlações se tornam insignificantes rapidamente. PACF: Os primeiros lags apresentam valores significativos, sugerindo que um modelo AR pode capturar a dependência.
ACF: Também apresenta correlações significativas nos primeiros lags, mas menos acentuadas do que em Portugal. PACF: Os primeiros lags são significativos, indicando possível influência de um modelo AR simples.
Usamos o auto.arima para identificar o melhor modelo SARIMA para as séries temporais.
# Ajustar o modelo SARIMA para Portugal
sarima_portugal <- auto.arima(ts_portugal, seasonal = TRUE, stepwise = FALSE, approximation = FALSE)
summary(sarima_portugal)
## Series: ts_portugal
## ARIMA(1,1,1)(0,0,2)[12]
##
## Coefficients:
## ar1 ma1 sma1 sma2
## 0.8656 -0.7755 -0.5198 -0.0981
## s.e. 0.0686 0.0821 0.0576 0.0553
##
## sigma^2 = 0.1718: log likelihood = -186.2
## AIC=382.4 AICc=382.58 BIC=401.62
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE ACF1
## Training set 0.003545116 0.4115085 0.3129786 NaN Inf 0.2021951 -0.005819641
# Ajustar o modelo SARIMA para Alemanha
sarima_alemanha <- auto.arima(ts_alemanha, seasonal = TRUE, stepwise = FALSE, approximation = FALSE)
summary(sarima_alemanha)
## Series: ts_alemanha
## ARIMA(1,0,1) with non-zero mean
##
## Coefficients:
## ar1 ma1 mean
## 0.1634 0.9343 1.8089
## s.e. 0.1769 0.1126 0.4146
##
## sigma^2 = 1.371: log likelihood = -59.54
## AIC=127.07 AICc=128.28 BIC=133.62
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.02834744 1.123675 0.7556357 -36.07958 100.2676 0.4936314
## ACF1
## Training set -0.01090041
# Diagnóstico dos modelos
par(mfrow = c(2, 2))
checkresiduals(sarima_portugal)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(1,1,1)(0,0,2)[12]
## Q* = 45.077, df = 20, p-value = 0.001077
##
## Model df: 4. Total lags used: 24
checkresiduals(sarima_alemanha)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(1,0,1) with non-zero mean
## Q* = 2.4325, df = 6, p-value = 0.8759
##
## Model df: 2. Total lags used: 8
O modelo ARIMA ajustado para Portugal é adequado, pois os resíduos não apresentam padrões, são não correlacionados e possuem uma distribuição aproximadamente normal.
O modelo ARIMA (1,0,1) para a Alemanha é adequado, com resíduos não correlacionados e distribuição aproximadamente normal, indicando bom ajuste.
# Previsões para Portugal
forecast_portugal <- forecast(sarima_portugal, h = 12)
plot(forecast_portugal, main = "Previsão SARIMA - Portugal")
# Previsões para Alemanha
forecast_alemanha <- forecast(sarima_alemanha, h = 12)
plot(forecast_alemanha, main = "Previsão SARIMA - Alemanha")
A previsão do modelo SARIMA para Portugal sugere uma estabilização nos próximos 12 meses, com flutuações moderadas. A banda azul representa o intervalo de confiança, indicando a incerteza nas projeções. O modelo captura bem a dinâmica recente, mantendo a tendência de queda pós-pico de 2022.
O modelo SARIMA prevê estabilidade para os próximos 12 meses, com o índice HICP mantendo-se próximo ao valor atual. A banda azul representa o intervalo de confiança, indicando baixa incerteza nas projeções, o que reforça a confiabilidade do modelo para esta série temporal.
A modelagem SARIMA foi realizada com sucesso para os dados de inflação de Portugal e Alemanha. As séries temporais foram ajustadas, e previsões foram geradas para os próximos 12 meses. Os diagnósticos dos modelos mostram resíduos bem comportados, indicando um bom ajuste.