Trabalho de Conclusão de Curso
Jonatha Azevedo da Costa
Orientador: Prof. Dr. Jony Arrais
Imagine a situação de um economista obter dados pra uma análise de previsão para dados temporais de algum cenário econômico.
Dados
Atualizados
Poucos recursos computacionais e financeiros disponíveis
Meios para realizar a previsão
Diferentes fontes
Linguagem de programação livre
Brazilian Economic Time Series
Com alguma metodologia bem definida
Pacotes | Metadados | Extação | Exportração | Análise |
---|---|---|---|---|
rbcb | OK | OK | X | X |
ecoseries | X | OK | X | X |
ribge | X | OK | X | X |
BETS | OK | OK | OK | OK |
O BETS não está sozinho no que diz respeito a obtenção de dados de forma integrada ao R , existem os pacotes: rbcb , ecoseries e o ribge .
O BETS é um pacote para o R , que fornece de maneira descomplicada , milhares de dados de diferentes fontes. Para utilizar, basta rodar o seguinte comando:
Para usar, basta:
install.packages("BETS")
require(BETS)
Imagem: Alguns centros de informações disponíveis.
BETSsources()
The sources available at BETS, to date, are:
> Banco Central, IBGE, Sidra, FGV
Apresentar minha participação no desenvolvimento do pacote BETS
Como é criado um pacote para o R
Processo de criação do pacote BETS
Algumas das funcionalidades do BETS
Forma de aplicação
Criação de pacotes para o R
Séries temporais
Box & Jenkins
Criação de pacotes no R
Vignettes
data
R
man
inst
src
LICENSE
DESCRIPTION
NAMESPACE
PKG
Tutoriais de uso
Arquivos de dados
Códigos dos algoritmos
Documentação
Arquivos em gerais
Códigos compilados
Condições de uso
Informações gerais
Referenciamento nominal das funções
Criação de pacotes no R
Um exemplo de criação de um pacote para o R
function.R
Parte de documentação
#' Media
#' @param x um vetor de numeros
#' @return um valor numerico
#' @importFrom Base message
#' @export
#'
#' @examples
#' x = c(1,2,3,4,5,6)
#' media(x)
Parte do código
media <- function(x){
if(!is.vector(x))stop("O parametro precisa
ser um vetor")
message('Done!')
return(sum(x,na.rm = T) / length(x))
}
NAMESPACE
export(pkg,medida)
import(base,message)
Description
R
MAN
pacote.zip
No BETS ....
Função que se conecta no banco de dados
connection = function(){
key <- readRDS(paste0(system.file(package="BETS"),"/key.rds"))
dat <- readBin(paste0(system.file(package="BETS"),"/credentials.txt"),"raw",n=1000)
aes <- AES(key,mode="ECB")
raw <- aes$decrypt(dat, raw=TRUE)
txt <- rawToChar(raw[raw>0])
credentials <- read.csv(text=txt, stringsAsFactors = F)
rm(key)
conn = tryCatch({
dbConnect(MySQL(),db=credentials$bd,user=credentials$login,
password=as.character(credentials$password),
host=credentials$host,
port=credentials$port)
}, error = function(e){
return(NULL)
})
return(conn)
}
Séries temporais
Série temporal: Coleção de observações feitas sequencialmente ao longo do tempo.
(1)
Box & Jenkins
A metodologia de Box & jenkins, consiste num processo de 5 passos:
Motivação/Contexto
Quero fazer uma análise dos dados da Produção Física Industrial do Brasil.
Desejo realizar previsões (forecasting) dos dados para meses a frente!
A pesquisa Industrial Mensal da Produção Física - Brasil tem como objetivos:
Servir como medida da evolução de curto prazo do valor adicionado da indústria, dado um determinado período de referência;
Refletir rapidamente a trajetória da atividade fabril no curto prazo;
Importante dado de insumo para o PIB (Produto Interno Bruto).
Preliminares e Identificação
metadados_pim = BETS::sidraSearch(description = 'Producao fisica',view = F)
View(metadados_pim)
data <- BETS::sidraGet(x = c(3653), from = c("200201"), to = c("201710"),
territory = "brazil",variable = 3135, sections = c(129316), cl = 544)
data <- ts(data$serie_3653$Valor,start = c(2002,01),frequency = 12)
Identificando e obtendo os dados
Imagem: Gráfico da produção física industrial
Algumas características observadas:
Teste para Estacionariedade
Def: uma série se diz estacionária se e somente se:
, para todo
, para todo
, é uma função de
(2)
Imagem: Gráfico mensal da produção física industrial
Utilizando o teste ADF (Augmented Dickey Fuller)
Implementado de um forma diferente pelo BETS:
df = BETS::ur_test(y = diff(data), type = "drift",
lags = 11, selectlags = "BIC", level = "1pct")
df$results
statistic | crit.val | rej.H0 | |
---|---|---|---|
tau2 | -3.565171 | -3.46 | yes |
phil1 | 6.363551 | 6.52 | yes |
df = BETS::ur_test(y = diff(data),
type = "drift", lags = 11,
selectlags = "BIC", level = "1pct")
df$results
statistic | crit.val | rej.H0 | |
---|---|---|---|
tau2 | -2.743174 | -3.46 | no |
phil1 | 3.772285 | 6.52 | yes |
Imagem: Gráfico da autocorrelação
FAC
FAC P
BETS::corrgram(diff(data), lag.max = 36,
type = "normal", style="normal")
BETS::corrgram(diff(data), lag.max = 36,
type = "partial", style="normal")
SARIMA(3,2,2)(1,1,1)[12]
Imagem: Gráfico da autocorrelação dos dados diferenciados
Imagem: Gráfico da autocorrelação parcial dos dados diferenciados
Estimação
modelo = Arima(data,order= c(3,2,2),seasonal = c(1,1,1))
Series: data
ARIMA(3,1,2)(0,1,1)[12]
Coefficients:
ar1 ar2 ar3 ma1 ma2 sma1
-1.5022 -1.3937 -0.3404 1.1901 0.9999 -0.8152
s.e. 0.0775 0.0884 0.0764 0.0262 0.0264 0.0678
sigma^2 estimated as 7.41: log likelihood=-451.77
AIC=917.55 AICc=918.18 BIC=940.05
# Teste t com os coeficientes estimados
# Nivel de significancia de 1%
BETS::t_test(modelo, alpha = 0.01)
Coeffs Std.Errors t Crit.Values Rej.H0
ar1 -0.5923042 0.19130484 3.096127 2.602376 TRUE
ar2 -0.1927980 0.12575791 1.533089 2.602376 FALSE
ar3 0.2551995 0.09151118 2.788725 2.602376 TRUE
ma1 -0.7913874 0.19428788 4.073272 2.602376 TRUE
ma2 -0.2082854 0.19275454 1.080573 2.602376 FALSE
sar1 0.1397710 0.10747793 1.300462 2.602376 FALSE
sma1 -0.8954013 0.11062226 8.094224 2.602376 TRUE
SARIMA(3,1,2)(0,1,1)[12]
Testes de Diagnóstico
x = (modelo$residuals - mean(modelo$residuals))/sd(modelo$residuals)
round(x)
dummy <- BETS::dummy(start = c(2002,01),end = c(2018,04),month =12 ,
year = 2008 ,frequency = 12)
Imagem: Gráfico dos resíduos do modelo
Imagem: Gráfico dos resíduos do modelo com a v.a. dummy
Utilizando o teste de Ljung-Box
boxt = Box.test(resid(modelo2), type = "Ljung-Box",lag = 11)
Box-Ljung test
data: resid(modelo2)
X-squared = 3.0492, df = 11, p-value = 0.9901
Imagem: Gráfico da autocorrelação dos resíduos do modelo com a dummy
Previsão
Previsão mês a mês, ou seja 1 passo, sucessivamente, a frente de janeiro até a outubro de 2017;
Previsão, 9 passos a frente, de uma vez só.
Jan - Out/17
Jan/2002 - Dez/2016
Amostra
Previsão
Imagem: Gráfico das previsões
Conclusão e Resultados
Imagem: Número de download dos pacotes ao longo do tempo
O que será construído a seguir, é: