O objetivo do trabalho é aplicar conceitos sobre Modelos Autorregressivos Integrados de Médias Móveis (ARIMA) ou Modelos Sazonais Autorregressivos Integrados de Médias Móveis (SARIMA).

Para tanto, usamos a série temporal ITUB3 e com ela seguimos o seguinte processo para o modelo ARIMA:

  1. Visualizar os dados e identificar observações fora do padrão (outliers) e eliminá-los.
  2. Se necessário, transformar os dados para estabilizar a variância (logaritmo dos dados, por exemplo)
  3. Testar se os dados são estacionários. Caso tenha raiz unitária é preciso diferenciar os dados até se tornarem estacionários
  4. Examinar as funções de autocorrelação parcial (FAC) e autocorrelação parcial (FACP) para determinar as ordens máximas \(P\) e \(Q\) para os componentes AR e MA da série estacionária (diferenciada)
  5. Estimar todas as combinações para \(P\) e \(Q\).
  6. Escolher o modelo com menor AIC
  7. Examinar se os resíduos se comportam como ruído branco. Caso contrário, retornar ao passo 3 ou 4.
  8. Uma vez que os resíduos são ruído branco, obter as previsões.

Antes de tudo, é necessário instalar os pacotes que contêm as funções necessárias para o desenvolvimento do estudo.

O primeiro passo foi puxar a série da base de dados do yahoo finance usando a função getSymbols do pacote quantmod.

itau=quantmod::getSymbols("ITUB3.SA", src = "yahoo", auto.assign = FALSE, from = '2016-01-01', to = '2018-05-01')
<U+393C><U+3E31>getSymbols<U+393C><U+3E32> currently uses auto.assign=TRUE by default, but will
use auto.assign=FALSE in 0.5-0. You will still be able to use
<U+393C><U+3E31>loadSymbols<U+393C><U+3E32> to automatically load data. getOption("getSymbols.env")
and getOption("getSymbols.auto.assign") will still be checked for
alternate defaults.

This message is shown once per session and may be disabled by setting 
options("getSymbols.warning4.0"=FALSE). See ?getSymbols for details.


WARNING: There have been significant changes to Yahoo Finance data.
Please see the Warning section of <U+393C><U+3E31>?getSymbols.yahoo<U+393C><U+3E32> for details.

This message is shown once per session and may be disabled by setting
options("getSymbols.yahoo.warning"=FALSE).

A série temporal, contudo, não apresentava estacionariedade e, portanto, foi necessário transformar os dados para seu formato logaritmico. Isso foi feito por meio da função Return.calculate do pacote PerformanceAnalytics, que aplicou o logaritmo nos valores de fechamento da série. Logo na sequência, foi aplicado o teste ADF para verificar estacionariedade.

daily_return= PerformanceAnalytics::Return.calculate(itau$ITUB3.SA.Close, method = "log")
dygraphs::dygraph(daily_return, main = "Retorno Diário da ITUB3.SA") %>% dyRangeSelector()

unitRoot = fUnitRoots::adfTest(daily_return,lags=2, type=c("nc"))
the condition has length > 1 and only the first element will be usedp-value smaller than printed p-value
print(unitRoot)

Title:
 Augmented Dickey-Fuller Test

Test Results:
  PARAMETER:
    Lag Order: 2
  STATISTIC:
    Dickey-Fuller: -15.1009
  P VALUE:
    0.01 

Description:
 Sun Jun 17 19:11:07 2018 by user: Telmo Diniz

A partir daí foi feito o cálculo das funções de Autocorrelação (FAC) e Autocorrelação Parcial (FACP) para determinar o número de defasagens estatisticamente relevantes da série que impactam em seu valor presente. Para isso foram usadas as funções acf e pacf.

acf_daily_Return = stats::acf(daily_return, na.action = na.pass, plot = FALSE, lag.max = 15)
plot(acf_daily_Return, main = "", ylab = "", xlab = "Defasagem")
title("Função de Autocorrelação (FAC)", adj = 0.5, line = 1)

pacf_daily_return = stats::pacf(daily_return, na.action = na.pass, plot = FALSE, lag.max = 15)
plot(pacf_daily_return, main = "", ylab = "", xlab = "Defasagem")
title("Função de Autocorrelação Parcial (FACP) dos Retornos", adj = 0.5, line = 1)

Como podemos ver nos gráficos, a FACP apresenta uma defasagem estatisticamente relevante, o que sugere uma ordem P de no máximo 1 e a FAC não apresenta defasagens relevantes, o que sugere uma ordem Q igual a 1.

A partir daí, é necessário calcular a Verossimilhança e AIC de todas as combinações de modelos com ordens P menores ou iguais a 1 e ordens Q menores ou iguais a 1 e escolher o modelo que apresentar o menor valor de AIC.

pars = expand.grid(ar = 0:1, diff = 0, ma = 0:1)
pars = pars[-1,]
modelo = list()
for (i in 1:nrow(pars)) {
  tryCatch({
    modelo[[i]] = arima(daily_return, order = unlist(pars[i, 1:3]), method = "ML", transform.pars = FALSE)},
    error = function(e) NULL)
}
log_verossimilhanca = list()
for (i in 1:length(modelo)) {
  log_verossimilhanca[[i]] = modelo[[i]]$loglik
}
aicarma = list()
for (i in 1:length(modelo)) {
  aicarma[[i]] = modelo[[i]]$aic
}
especificacao = paste0("ARMA",pars$ar,pars$diff,pars$ma)
quant_paramentros = pars$ar+pars$ma
tamanho_amostra = rep(length(daily_return), length(modelo))
resultado = data.frame(especificacao,ln_verossimilhanca = unlist(log_verossimilhanca),quant_paramentros,tamanho_amostra, aic = unlist(aicarma))
knitr::kable(resultado[], format = "pandoc", digits = c(0,2,0,0,2), align = 'c')


 especificacao    ln_verossimilhanca    quant_paramentros    tamanho_amostra      aic    
---------------  --------------------  -------------------  -----------------  ----------
    ARMA100            1549.13                  1                  585          -3092.26 
    ARMA001            1549.31                  1                  585          -3092.61 
    ARMA101            1550.44                  2                  585          -3092.87 

A partir da tabela podemos concluir que o melhor modelo é um ARIMA (1,0,0), lembrando que diferimos a série itau uma vez para daily_return, o que significa que o modelo correto é um ARIMA (1,1,0). Agora é preciso verificar o comportamento do ruído do modelo, de forma a garantir que seja um ruído branco.

Por fim, foi usada a função autoplot do pacote ggplot2 para plottar a previsão do modelo para o próximo período.

autoplot(forecast(modelo[[1]], h=4), main = "Previsão do modelo ARIMA(1,1,0)")

LS0tDQp0aXRsZTogPGNlbnRlcj4gPGgyPiA8Yj4gVHJhYmFsaG8gRWNvbm9tZXRyaWEgSUkgPC9iPiA8L2gyPiA8L2NlbnRlcj4gDQphdXRob3I6IDxjZW50ZXI+IEFuZHLpIExpYWwsIEpv428gUGVkcm8gRGluaXogZSBKb+NvIFN0b3BhIC0gSUJNRUMvTUcgPC9jZW50ZXI+DQpncmFwaGljczogeWVzDQpsaW5rY29sb3I6IGJsdWUNCm91dHB1dDogDQogIGh0bWxfbm90ZWJvb2s6DQogICAgdGhlbWU6IGNlcnVsZWFuDQogICAgZmlnX2NhcHRpb246IHllcw0KLS0tDQoNCk8gb2JqZXRpdm8gZG8gdHJhYmFsaG8g6SBhcGxpY2FyIGNvbmNlaXRvcyBzb2JyZSBNb2RlbG9zIEF1dG9ycmVncmVzc2l2b3MgSW50ZWdyYWRvcyBkZSBN6WRpYXMgTfN2ZWlzIChBUklNQSkgb3UgTW9kZWxvcyBTYXpvbmFpcyBBdXRvcnJlZ3Jlc3Npdm9zIEludGVncmFkb3MgZGUgTelkaWFzIE3zdmVpcyAoU0FSSU1BKS4NCg0KUGFyYSB0YW50bywgdXNhbW9zIGEgc+lyaWUgdGVtcG9yYWwgSVRVQjMgZSBjb20gZWxhIHNlZ3VpbW9zIG8gc2VndWludGUgcHJvY2Vzc28gcGFyYSBvIG1vZGVsbyBBUklNQToNCg0KDQoxLiBWaXN1YWxpemFyIG9zIGRhZG9zIGUgaWRlbnRpZmljYXIgb2JzZXJ2Yef1ZXMgZm9yYSBkbyBwYWRy428gKCpvdXRsaWVycyopIGUgZWxpbWlu4S1sb3MuDQoyLiBTZSBuZWNlc3PhcmlvLCB0cmFuc2Zvcm1hciBvcyBkYWRvcyBwYXJhIGVzdGFiaWxpemFyIGEgdmFyaeJuY2lhIChsb2dhcml0bW8gZG9zIGRhZG9zLCBwb3IgZXhlbXBsbykNCjMuIFRlc3RhciBzZSBvcyBkYWRvcyBz428gZXN0YWNpb27hcmlvcy4gQ2FzbyB0ZW5oYSByYWl6IHVuaXThcmlhIOkgcHJlY2lzbyBkaWZlcmVuY2lhciBvcyBkYWRvcyBhdOkgc2UgdG9ybmFyZW0gZXN0YWNpb27hcmlvcw0KNC4gRXhhbWluYXIgYXMgZnVu5/VlcyBkZSBhdXRvY29ycmVsYefjbyBwYXJjaWFsIChGQUMpIGUgYXV0b2NvcnJlbGHn428gcGFyY2lhbCAoRkFDUCkgcGFyYSBkZXRlcm1pbmFyIGFzIG9yZGVucyBt4XhpbWFzICRQJCBlICRRJCBwYXJhIG9zIGNvbXBvbmVudGVzIEFSIGUgTUEgZGEgc+lyaWUgZXN0YWNpb27hcmlhIChkaWZlcmVuY2lhZGEpDQo1LiBFc3RpbWFyIHRvZGFzIGFzIGNvbWJpbmHn9WVzIHBhcmEgJFAkIGUgJFEkLiANCjYuIEVzY29saGVyIG8gbW9kZWxvIGNvbSBtZW5vciBBSUMNCjcuIEV4YW1pbmFyIHNlIG9zIHJlc+1kdW9zIHNlIGNvbXBvcnRhbSBjb21vIHJ17WRvIGJyYW5jby4gQ2FzbyBjb250cuFyaW8sIHJldG9ybmFyIGFvIHBhc3NvIDMgb3UgNC4NCjguIFVtYSB2ZXogcXVlIG9zIHJlc+1kdW9zIHPjbyByde1kbyBicmFuY28sIG9idGVyIGFzIHByZXZpc/Vlcy4NCg0KQW50ZXMgZGUgdHVkbywg6SBuZWNlc3PhcmlvIGluc3RhbGFyIG9zIHBhY290ZXMgcXVlIGNvbnTqbSBhcyBmdW7n9WVzIG5lY2Vzc+FyaWFzIHBhcmEgbyBkZXNlbnZvbHZpbWVudG8gZG8gZXN0dWRvLg0KDQpgYGB7cn0NCmluc3RhbGwucGFja2FnZXMoYygidGlkeXF1YW50IiwidGlkeXZlcnNlIiwibWFncml0dHIiLCJoaWdoY2hhcnRlciIsImdncGxvdDIiLCJodG1sdG9vbHMiLCJmVW5pdFJvb3RzIiwiZnBwIikpDQppbnN0YWxsLnBhY2thZ2VzKGMoImR5Z3JhcGhzIiwiaHRtbHRvb2xzIikpDQpzdXBwcmVzc01lc3NhZ2VzKHJlcXVpcmUoUXVhbmRsKSkNCnN1cHByZXNzTWVzc2FnZXMocmVxdWlyZSh0aWR5cXVhbnQpKQ0Kc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKHRpZHl2ZXJzZSkpDQpzdXBwcmVzc01lc3NhZ2VzKHJlcXVpcmUobWFncml0dHIpKQ0Kc3VwcHJlc3NNZXNzYWdlcyhyZXF1aXJlKGhpZ2hjaGFydGVyKSkNCnN1cHByZXNzTWVzc2FnZXMocmVxdWlyZShkeWdyYXBocykpDQpzdXBwcmVzc01lc3NhZ2VzKHJlcXVpcmUoZ2dwbG90MikpDQpzdXBwcmVzc01lc3NhZ2VzKHJlcXVpcmUoaHRtbHRvb2xzKSkNCnN1cHByZXNzTWVzc2FnZXMocmVxdWlyZShmVW5pdFJvb3RzKSkNCnN1cHByZXNzTWVzc2FnZXMocmVxdWlyZShmcHApKQ0KYGBgDQoNCg0KTyBwcmltZWlybyBwYXNzbyBmb2kgcHV4YXIgYSBz6XJpZSBkYSBiYXNlIGRlIGRhZG9zIGRvIHlhaG9vIGZpbmFuY2UgdXNhbmRvIGEgZnVu5+NvIGdldFN5bWJvbHMgZG8gcGFjb3RlIHF1YW50bW9kLg0KDQpgYGB7cn0NCml0YXU9cXVhbnRtb2Q6OmdldFN5bWJvbHMoIklUVUIzLlNBIiwgc3JjID0gInlhaG9vIiwgYXV0by5hc3NpZ24gPSBGQUxTRSwgZnJvbSA9ICcyMDE2LTAxLTAxJywgdG8gPSAnMjAxOC0wNS0wMScpDQpgYGANCg0KQSBz6XJpZSB0ZW1wb3JhbCwgY29udHVkbywgbuNvIGFwcmVzZW50YXZhIGVzdGFjaW9uYXJpZWRhZGUgZSwgcG9ydGFudG8sIGZvaSBuZWNlc3PhcmlvIHRyYW5zZm9ybWFyIG9zIGRhZG9zIHBhcmEgc2V1IGZvcm1hdG8gbG9nYXJpdG1pY28uIElzc28gZm9pIGZlaXRvIHBvciBtZWlvIGRhIGZ1bufjbyBSZXR1cm4uY2FsY3VsYXRlIGRvIHBhY290ZSBQZXJmb3JtYW5jZUFuYWx5dGljcywgcXVlIGFwbGljb3UgbyBsb2dhcml0bW8gbm9zIHZhbG9yZXMgZGUgZmVjaGFtZW50byBkYSBz6XJpZS4gTG9nbyBuYSBzZXF16m5jaWEsIGZvaSBhcGxpY2FkbyBvIHRlc3RlIEFERiBwYXJhIHZlcmlmaWNhciBlc3RhY2lvbmFyaWVkYWRlLg0KDQpgYGB7cn0NCmRhaWx5X3JldHVybj0gUGVyZm9ybWFuY2VBbmFseXRpY3M6OlJldHVybi5jYWxjdWxhdGUoaXRhdSRJVFVCMy5TQS5DbG9zZSwgbWV0aG9kID0gImxvZyIpDQpkeWdyYXBoczo6ZHlncmFwaChkYWlseV9yZXR1cm4sIG1haW4gPSAiUmV0b3JubyBEaeFyaW8gZGEgSVRVQjMuU0EiKSAlPiUgZHlSYW5nZVNlbGVjdG9yKCkNCnVuaXRSb290ID0gZlVuaXRSb290czo6YWRmVGVzdChkYWlseV9yZXR1cm4sbGFncz0yLCB0eXBlPWMoIm5jIikpDQpwcmludCh1bml0Um9vdCkNCmBgYA0KDQpBIHBhcnRpciBkYe0gZm9pIGZlaXRvIG8gY+FsY3VsbyBkYXMgZnVu5/VlcyBkZSBBdXRvY29ycmVsYefjbyAoRkFDKSBlIEF1dG9jb3JyZWxh5+NvIFBhcmNpYWwgKEZBQ1ApIHBhcmEgZGV0ZXJtaW5hciBvIG76bWVybyBkZSBkZWZhc2FnZW5zIGVzdGF0aXN0aWNhbWVudGUgcmVsZXZhbnRlcyBkYSBz6XJpZSBxdWUgaW1wYWN0YW0gZW0gc2V1IHZhbG9yIHByZXNlbnRlLiBQYXJhIGlzc28gZm9yYW0gdXNhZGFzIGFzIGZ1buf1ZXMgYWNmIGUgcGFjZi4NCg0KYGBge3J9DQphY2ZfZGFpbHlfUmV0dXJuID0gc3RhdHM6OmFjZihkYWlseV9yZXR1cm4sIG5hLmFjdGlvbiA9IG5hLnBhc3MsIHBsb3QgPSBGQUxTRSwgbGFnLm1heCA9IDE1KQ0KcGxvdChhY2ZfZGFpbHlfUmV0dXJuLCBtYWluID0gIiIsIHlsYWIgPSAiIiwgeGxhYiA9ICJEZWZhc2FnZW0iKQ0KdGl0bGUoIkZ1bufjbyBkZSBBdXRvY29ycmVsYefjbyAoRkFDKSIsIGFkaiA9IDAuNSwgbGluZSA9IDEpDQpwYWNmX2RhaWx5X3JldHVybiA9IHN0YXRzOjpwYWNmKGRhaWx5X3JldHVybiwgbmEuYWN0aW9uID0gbmEucGFzcywgcGxvdCA9IEZBTFNFLCBsYWcubWF4ID0gMTUpDQpwbG90KHBhY2ZfZGFpbHlfcmV0dXJuLCBtYWluID0gIiIsIHlsYWIgPSAiIiwgeGxhYiA9ICJEZWZhc2FnZW0iKQ0KdGl0bGUoIkZ1bufjbyBkZSBBdXRvY29ycmVsYefjbyBQYXJjaWFsIChGQUNQKSBkb3MgUmV0b3Jub3MiLCBhZGogPSAwLjUsIGxpbmUgPSAxKQ0KYGBgDQoNCkNvbW8gcG9kZW1vcyB2ZXIgbm9zIGdy4WZpY29zLCBhIEZBQ1AgYXByZXNlbnRhIHVtYSBkZWZhc2FnZW0gZXN0YXRpc3RpY2FtZW50ZSByZWxldmFudGUsIG8gcXVlIHN1Z2VyZSB1bWEgb3JkZW0gUCBkZSBubyBt4XhpbW8gMSBlIGEgRkFDIG7jbyBhcHJlc2VudGEgZGVmYXNhZ2VucyByZWxldmFudGVzLCBvIHF1ZSBzdWdlcmUgdW1hIG9yZGVtIFEgaWd1YWwgYSAxLg0KDQpBIHBhcnRpciBkYe0sIOkgbmVjZXNz4XJpbyBjYWxjdWxhciBhIFZlcm9zc2ltaWxoYW7nYSBlIEFJQyBkZSB0b2RhcyBhcyBjb21iaW5h5/VlcyBkZSBtb2RlbG9zIGNvbSBvcmRlbnMgUCBtZW5vcmVzIG91IGlndWFpcyBhIDEgZSBvcmRlbnMgUSBtZW5vcmVzIG91IGlndWFpcyBhIDEgZSBlc2NvbGhlciBvIG1vZGVsbyBxdWUgYXByZXNlbnRhciBvIG1lbm9yIHZhbG9yIGRlIEFJQy4NCg0KYGBge3J9DQpwYXJzID0gZXhwYW5kLmdyaWQoYXIgPSAwOjEsIGRpZmYgPSAwLCBtYSA9IDA6MSkNCnBhcnMgPSBwYXJzWy0xLF0NCm1vZGVsbyA9IGxpc3QoKQ0KZm9yIChpIGluIDE6bnJvdyhwYXJzKSkgew0KICB0cnlDYXRjaCh7DQogICAgbW9kZWxvW1tpXV0gPSBhcmltYShkYWlseV9yZXR1cm4sIG9yZGVyID0gdW5saXN0KHBhcnNbaSwgMTozXSksIG1ldGhvZCA9ICJNTCIsIHRyYW5zZm9ybS5wYXJzID0gRkFMU0UpfSwNCiAgICBlcnJvciA9IGZ1bmN0aW9uKGUpIE5VTEwpDQp9DQpsb2dfdmVyb3NzaW1pbGhhbmNhID0gbGlzdCgpDQpmb3IgKGkgaW4gMTpsZW5ndGgobW9kZWxvKSkgew0KICBsb2dfdmVyb3NzaW1pbGhhbmNhW1tpXV0gPSBtb2RlbG9bW2ldXSRsb2dsaWsNCn0NCmFpY2FybWEgPSBsaXN0KCkNCmZvciAoaSBpbiAxOmxlbmd0aChtb2RlbG8pKSB7DQogIGFpY2FybWFbW2ldXSA9IG1vZGVsb1tbaV1dJGFpYw0KfQ0KZXNwZWNpZmljYWNhbyA9IHBhc3RlMCgiQVJNQSIscGFycyRhcixwYXJzJGRpZmYscGFycyRtYSkNCnF1YW50X3BhcmFtZW50cm9zID0gcGFycyRhcitwYXJzJG1hDQp0YW1hbmhvX2Ftb3N0cmEgPSByZXAobGVuZ3RoKGRhaWx5X3JldHVybiksIGxlbmd0aChtb2RlbG8pKQ0KcmVzdWx0YWRvID0gZGF0YS5mcmFtZShlc3BlY2lmaWNhY2FvLGxuX3Zlcm9zc2ltaWxoYW5jYSA9IHVubGlzdChsb2dfdmVyb3NzaW1pbGhhbmNhKSxxdWFudF9wYXJhbWVudHJvcyx0YW1hbmhvX2Ftb3N0cmEsIGFpYyA9IHVubGlzdChhaWNhcm1hKSkNCmtuaXRyOjprYWJsZShyZXN1bHRhZG9bXSwgZm9ybWF0ID0gInBhbmRvYyIsIGRpZ2l0cyA9IGMoMCwyLDAsMCwyKSwgYWxpZ24gPSAnYycpDQpgYGANCg0KQSBwYXJ0aXIgZGEgdGFiZWxhIHBvZGVtb3MgY29uY2x1aXIgcXVlIG8gbWVsaG9yIG1vZGVsbyDpIHVtIEFSSU1BICgxLDAsMCksIGxlbWJyYW5kbyBxdWUgZGlmZXJpbW9zIGEgc+lyaWUgaXRhdSB1bWEgdmV6IHBhcmEgZGFpbHlfcmV0dXJuLCBvIHF1ZSBzaWduaWZpY2EgcXVlIG8gbW9kZWxvIGNvcnJldG8g6SB1bSBBUklNQSAoMSwxLDApLiBBZ29yYSDpIHByZWNpc28gdmVyaWZpY2FyIG8gY29tcG9ydGFtZW50byBkbyByde1kbyBkbyBtb2RlbG8sIGRlIGZvcm1hIGEgZ2FyYW50aXIgcXVlIHNlamEgdW0gcnXtZG8gYnJhbmNvLg0KDQpgYGB7cn0NCmFjZl9hcm1hMTBfZXN0ID0gc3RhdHM6OmFjZihtb2RlbG9bWzFdXSRyZXNpZHVhbHMsIHBsb3QgPSBUUlVFLCBsYWcubWF4ID0gMTUsIG5hLmFjdGlvbj1uYS5wYXNzLCkNCmBgYA0KDQpQb3IgZmltLCBmb2kgdXNhZGEgYSBmdW7n428gYXV0b3Bsb3QgZG8gcGFjb3RlIGdncGxvdDIgcGFyYSBwbG90dGFyIGEgcHJldmlz428gZG8gbW9kZWxvIHBhcmEgbyBwcvN4aW1vIHBlcu1vZG8uDQoNCmBgYHtyfQ0KYXV0b3Bsb3QoZm9yZWNhc3QobW9kZWxvW1sxXV0sIGg9NCksIG1haW4gPSAiUHJldmlz428gZG8gbW9kZWxvIEFSSU1BKDEsMSwwKSIpDQpgYGANCg==