#LIBRARY

#FUNCOES ESTAO AK

dataini='2003-01-01';  datafim= '2023-10-01'
#FAZENDO FUNCAO PARA CALCULAR A TAXA LINEAR E A GEOMETRICA
linear_rate <- function(x) {
  lm_fit <- lm(value ~ as.numeric(ref.date), data = x)
  coef(lm_fit)[2] * 100 # Multiplicando por 100 para obter a taxa percentual
}


compounded_rate <- function(x) {
  n <- nrow(x)
  start_value <- x$value[1]
  end_value <- x$value[n]
  compounded_rate <- (end_value / start_value) ^ (1/n) - 1
  compounded_rate * 100 # Multiplicando por 100 para obter a taxa percentual
}

Pegando os dados

IPCA <- GetBCBData::gbcbd_get_series(
  id = 433,
  first.date = dataini,
  last.date = datafim
)
## 
## Fetching id = 433 [433] from BCB-SGS with cache 
##   Found 250 observations
gqtest(IPCA$value~1)
## 
##  Goldfeld-Quandt test
## 
## data:  IPCA$value ~ 1
## GQ = 1.753, df1 = 124, df2 = 124, p-value = 0.0009708
## alternative hypothesis: variance increases from segment 1 to 2
adf.test(IPCA$value)
## Warning in adf.test(IPCA$value): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  IPCA$value
## Dickey-Fuller = -5.1457, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
IPCA$valuePosi <- IPCA$value + abs((min(IPCA$value))-1)
ggtsdisplay(IPCA$value)

ID=433 dados em var. mensal% e coletados entre os periodos de dataini=‘2003-01-01’; datafim= ‘2023-10-01’

No teste de PACF so vemos o primeiro lag com valores fora da area de significancia entao vamos setar a ordem de P =1 No teste de ACF vemos 4 valores fora da area de significancia sendo o primeiro muito maior que os outros entao vamos testar alguns valores diferentes para o Q Por fim como o teste de ddickey deu um valor de P muito baixo indicando estacionariedade o D vai ser = 0

fazendo primeiro modelo usando o auto.arima para ver o que ele sugere

#FAZENDO TESTES E PA 
modelo_treino <- ts(IPCA$value[1:100]) # Amostra treino
modelo_teste <- ts(IPCA$value[101:250]) # Amostra para confirmação
modelo.auto <- auto.arima(modelo_treino, stepwise = FALSE) # Criação do modelo
modelo.auto
## Series: modelo_treino 
## ARIMA(1,0,0) with non-zero mean 
## 
## Coefficients:
##          ar1    mean
##       0.8321  0.5752
## s.e.  0.0786  0.1391
## 
## sigma^2 = 0.05405:  log likelihood = 4.42
## AIC=-2.83   AICc=-2.58   BIC=4.98
accuracy(modelo.auto$fitted, modelo_treino)
##                   ME      RMSE       MAE  MPE MAPE        ACF1 Theil's U
## Test set -0.02139823 0.2301558 0.1739536 -Inf  Inf -0.08234675         0
previsao.auto <- forecast(modelo.auto, h = 24)
previsao.auto
##     Point Forecast      Lo 80    Hi 80       Lo 95    Hi 95
## 101      0.7372823 0.43933129 1.035233  0.28160554 1.192959
## 102      0.7100588 0.32245334 1.097664  0.11726742 1.302850
## 103      0.6874067 0.24832596 1.126487  0.01589066 1.358923
## 104      0.6685585 0.19712020 1.139997 -0.05244416 1.389561
## 105      0.6528754 0.16027801 1.145473 -0.10048729 1.406238
## 106      0.6398258 0.13309636 1.146555 -0.13515003 1.414802
## 107      0.6289677 0.11268039 1.145255 -0.16062558 1.418561
## 108      0.6199328 0.09713060 1.142735 -0.17962418 1.419490
## 109      0.6124152 0.08514948 1.139681 -0.19396812 1.418798
## 110      0.6061599 0.07582595 1.136494 -0.20491589 1.417236
## 111      0.6009551 0.06850716 1.133403 -0.21335374 1.415264
## 112      0.5966243 0.06271765 1.130531 -0.21991543 1.413164
## 113      0.5930207 0.05810649 1.127935 -0.22505998 1.411101
## 114      0.5900223 0.05441156 1.125633 -0.22912361 1.409168
## 115      0.5875273 0.05143495 1.123620 -0.23235521 1.407410
## 116      0.5854514 0.04902574 1.121877 -0.23494083 1.405844
## 117      0.5837240 0.04706779 1.120380 -0.23702086 1.404469
## 118      0.5822867 0.04547090 1.119103 -0.23870223 1.403276
## 119      0.5810908 0.04416449 1.118017 -0.24006711 1.402249
## 120      0.5800957 0.04309292 1.117098 -0.24117917 1.401371
## 121      0.5792677 0.04221198 1.116323 -0.24208814 1.400623
## 122      0.5785787 0.04148637 1.115671 -0.24283315 1.399991
## 123      0.5780054 0.04088773 1.115123 -0.24344522 1.399456
## 124      0.5775284 0.04039316 1.114664 -0.24394908 1.399006
autoplot(previsao.auto, predict.colour = "red") + labs(x = "Observacoes", y = "IPCA", 
                                                  title = "Previsao usando o forecast") +
  theme_test() + scale_x_continuous(breaks = seq(0,250,15)) +
  scale_y_continuous(breaks = seq(100, 600, 50)) + geom_vline(xintercept = 100, lty = "dashed")
## Scale for x is already present.
## Adding another scale for x, which will replace the existing scale.

accuracy(modelo_teste, as.numeric(previsao.auto$mean))
##                 ME      RMSE       MAE      MPE     MAPE
## Test set 0.1440692 0.2521591 0.1925739 22.17879 30.52871

SEGUNDO MODELO

#FAZENDO TESTES E PA 

modelo.2 <- arima(modelo_teste, order = c(1,0,1)) # Criação do modelo
modelo.2
## 
## Call:
## arima(x = modelo_teste, order = c(1, 0, 1))
## 
## Coefficients:
##          ar1      ma1  intercept
##       0.6172  -0.0586     0.4731
## s.e.  0.1080   0.1366     0.0606
## 
## sigma^2 estimated as 0.09296:  log likelihood = -34.88,  aic = 77.75
previsao.2 <- forecast(modelo.2, h = 24)
previsao.2
##     Point Forecast        Lo 80     Hi 80      Lo 95     Hi 95
## 151      0.3354147 -0.055321992 0.7261514 -0.2621655 0.9329949
## 152      0.3881319 -0.059438013 0.8357019 -0.2963672 1.0726311
## 153      0.4206700 -0.046736825 0.8880767 -0.2941670 1.1355069
## 154      0.4407530 -0.033992797 0.9154988 -0.2853080 1.1668141
## 155      0.4531486 -0.024363367 0.9306606 -0.2771429 1.1834402
## 156      0.4607994 -0.017762165 0.9393610 -0.2710974 1.1926962
## 157      0.4655216 -0.013439203 0.9444825 -0.2669858 1.1980290
## 158      0.4684363 -0.010676579 0.9475491 -0.2643036 1.2011761
## 159      0.4702352 -0.008935512 0.9494060 -0.2625932 1.2030636
## 160      0.4713456 -0.007847214 0.9505384 -0.2615166 1.2042077
## 161      0.4720309 -0.007170286 0.9512321 -0.2608441 1.2049059
## 162      0.4724539 -0.006750489 0.9516583 -0.2604260 1.2053338
## 163      0.4727150 -0.006490627 0.9519206 -0.2601668 1.2055967
## 164      0.4728761 -0.006329947 0.9520822 -0.2600063 1.2057586
## 165      0.4729756 -0.006230663 0.9521819 -0.2599071 1.2058583
## 166      0.4730370 -0.006169341 0.9522433 -0.2598458 1.2059198
## 167      0.4730749 -0.006131476 0.9522812 -0.2598080 1.2059577
## 168      0.4730983 -0.006108099 0.9523046 -0.2597846 1.2059811
## 169      0.4731127 -0.006093668 0.9523191 -0.2597702 1.2059956
## 170      0.4731216 -0.006084760 0.9523280 -0.2597613 1.2060045
## 171      0.4731271 -0.006079262 0.9523335 -0.2597558 1.2060100
## 172      0.4731305 -0.006075868 0.9523369 -0.2597524 1.2060134
## 173      0.4731326 -0.006073773 0.9523390 -0.2597503 1.2060155
## 174      0.4731339 -0.006072480 0.9523403 -0.2597490 1.2060168
#autoplot(previsao.2, predict.colour = "red") + labs(x = "Observacoes", y = "IPCA", 
#                                                  title = "Previsao usando o forecast") #+
#  theme_test() + scale_x_continuous(breaks = seq(0,250,15)) +
#  scale_y_continuous(breaks = seq(100, 600, 50)) + geom_vline(xintercept = 100, lty = #"dashed")

Como as observacoes acabam em outubro de 2023 a 3 observacao ~e o valor em janeiro de 2024 e o 4 o de fevereiro

TERCEIRO

#FAZENDO TESTES E PA 

modelo.3 <- arima(modelo_teste, order = c(1,0,2)) # Criação do modelo
modelo.3
## 
## Call:
## arima(x = modelo_teste, order = c(1, 0, 2))
## 
## Coefficients:
##          ar1      ma1     ma2  intercept
##       0.6081  -0.0514  0.0116     0.4732
## s.e.  0.1420   0.1554  0.1127     0.0604
## 
## sigma^2 estimated as 0.09295:  log likelihood = -34.87,  aic = 79.74
previsao.3 <- forecast(modelo.3, h = 24)
previsao.3
##     Point Forecast        Lo 80     Hi 80      Lo 95    Hi 95
## 151      0.3361313 -0.054591221 0.7268539 -0.2614273 0.933690
## 152      0.3886381 -0.058549572 0.8358259 -0.2952765 1.072553
## 153      0.4217980 -0.045839269 0.8894353 -0.2933915 1.136988
## 154      0.4419614 -0.033014097 0.9169369 -0.2844509 1.168374
## 155      0.4542220 -0.023438155 0.9318822 -0.2762962 1.184740
## 156      0.4616773 -0.016971721 0.9403263 -0.2703532 1.193708
## 157      0.4662106 -0.012803528 0.9452247 -0.2663783 1.198799
## 158      0.4689671 -0.010181914 0.9481162 -0.2638281 1.201762
## 159      0.4706433 -0.008555636 0.9498422 -0.2622282 1.203515
## 160      0.4716625 -0.007554865 0.9508799 -0.2612372 1.204562
## 161      0.4722823 -0.006941936 0.9515064 -0.2606279 1.205192
## 162      0.4726591 -0.006567610 0.9518858 -0.2602549 1.205573
## 163      0.4728882 -0.006339395 0.9521159 -0.2600272 1.205804
## 164      0.4730276 -0.006200403 0.9522556 -0.2598884 1.205944
## 165      0.4731123 -0.006115804 0.9523404 -0.2598038 1.206028
## 166      0.4731638 -0.006064333 0.9523920 -0.2597524 1.206080
## 167      0.4731952 -0.006033023 0.9524233 -0.2597211 1.206111
## 168      0.4732142 -0.006013981 0.9524424 -0.2597021 1.206130
## 169      0.4732258 -0.006002401 0.9524540 -0.2596905 1.206142
## 170      0.4732328 -0.005995358 0.9524610 -0.2596834 1.206149
## 171      0.4732371 -0.005991076 0.9524653 -0.2596792 1.206153
## 172      0.4732397 -0.005988472 0.9524679 -0.2596766 1.206156
## 173      0.4732413 -0.005986888 0.9524695 -0.2596750 1.206158
## 174      0.4732423 -0.005985926 0.9524704 -0.2596740 1.206159
#autoplot(previsao.3, predict.colour = "red") + labs(x = "Observacoes", y = "IPCA", 
#                                                  title = "Previsao usando o forecast") #+
#  theme_test() + scale_x_continuous(breaks = seq(0,250,15)) +
#  scale_y_continuous(breaks = seq(100, 600, 50)) + geom_vline(xintercept = 100, lty = #"dashed")

os dois modelos que chegaram mais perto do valor em janeiro de 2024 foram os modelos 2(1,0,1)e 3(1,0,2) eu escolho o modelo (1,0,1) por causa da interpretacao do ACF e PCF sua estimativa para o mes de fevereiro foi 0.44.

MAIS DADOS

dataini='2003-01-01';  datafim= '2024-01-01'
IPCAF <- GetBCBData::gbcbd_get_series(
  id = 433,
  first.date = dataini,
  last.date = datafim
)
## 
## Fetching id = 433 [433] from BCB-SGS with cache 
##   Found 253 observations
modelo_testeN <- ts(IPCA$value[0:253])
modeloN <- arima(modelo_testeN, order = c(1,0,1)) # Criação do modelo
modeloN
## 
## Call:
## arima(x = modelo_testeN, order = c(1, 0, 1))
## 
## Coefficients:
##          ar1     ma1  intercept
##       0.6375  0.0163     0.4893
## s.e.  0.0815  0.0992     0.0495
## 
## sigma^2 estimated as 0.07885:  log likelihood = -37.48,  aic = 82.96
previsaoN <- forecast(modeloN, h = 24)
previsaoN
##     Point Forecast        Lo 80     Hi 80      Lo 95    Hi 95
## 254      0.4476915 -0.017569058 0.9129520 -0.2638631 1.159246
## 255      0.4627702 -0.006463789 0.9320041 -0.2548612 1.180402
## 256      0.4723821  0.001543149 0.9432210 -0.2477039 1.192468
## 257      0.4785092  0.007019672 0.9499988 -0.2425718 1.199590
## 258      0.4824150  0.010661309 0.9541687 -0.2390700 1.203900
## 259      0.4849047  0.013043758 0.9567657 -0.2367443 1.206554
## 260      0.4864918  0.014587255 0.9583964 -0.2352239 1.208208
## 261      0.4875035  0.015581234 0.9594258 -0.2342393 1.209246
## 262      0.4881484  0.016218940 0.9600779 -0.2336054 1.209902
## 263      0.4885595  0.016627110 0.9604919 -0.2331988 1.210318
## 264      0.4888215  0.016887974 0.9607551 -0.2329386 1.210582
## 265      0.4889886  0.017054537 0.9609226 -0.2327723 1.210749
## 266      0.4890951  0.017160825 0.9610293 -0.2326661 1.210856
## 267      0.4891630  0.017228623 0.9610973 -0.2325983 1.210924
## 268      0.4892062  0.017271860 0.9611406 -0.2325551 1.210968
## 269      0.4892338  0.017299428 0.9611682 -0.2325275 1.210995
## 270      0.4892514  0.017317005 0.9611858 -0.2325100 1.211013
## 271      0.4892626  0.017328211 0.9611970 -0.2324988 1.211024
## 272      0.4892697  0.017335354 0.9612041 -0.2324916 1.211031
## 273      0.4892743  0.017339908 0.9612087 -0.2324871 1.211036
## 274      0.4892772  0.017342811 0.9612116 -0.2324842 1.211039
## 275      0.4892790  0.017344662 0.9612134 -0.2324823 1.211040
## 276      0.4892802  0.017345841 0.9612146 -0.2324811 1.211042
## 277      0.4892810  0.017346593 0.9612154 -0.2324804 1.211042

Para deixar o modelo com todos os dados atualizados refiz o modelo usando (1,0,1) novamente mas com os dados ate janeiro de 2024 nao teve mudancas siginificativas no resultado, a previsa de fevereiro continua 0.44.