setwd("C:/Users/USER/OneDrive/UFMT")
require(forecast) #pacote para analise de series temporais
require(snpar) #pacote para fazer teste de tendencia
source("Series/funcoes auxiliares.R") #funcoes auxiliares
require(tidyverse)
require(highcharter) #pacote para gráfico
Série temporal referente à produção de soja em toneladas no estado de Mato Grosso, no anos de 1988 a 2020.
Fonte: IBGE
# Dados producao de soja em toneladas no estado de Mato Grosso
dados <- xlsx::read.xlsx("C:/Users/USER/OneDrive/UFMT/SERIES/Dados_Soja.xlsx",1)
DT:: datatable(dados)
Dados convertidos em série temporal:
#Converter em serie temporal
y1 <- ts(dados$producao,start=1988,frequency=1) #Frequecia anual
y1
## Time Series:
## Start = 1988
## End = 2020
## Frequency = 1
## [1] 2694718 3795435 3064715 2738410 3642743 4118726 5319793 5491426
## [9] 5032921 6060882 7228052 7473028 8774470 9533286 11684885 12965983
## [17] 14517912 17761444 15594221 15275087 17802976 17962819 18787783 20800544
## [25] 21841292 23416774 26495884 27850954 26277303 30479870 31608562 32242463
## [33] 35070044
hchart(dados,type = "line", hcaes(x = Ano, y = producao),
color = "green", name = "Toneladas") %>%
hc_title(text = "Produção de Soja em Mato Grosso") %>%
hc_yAxis(title = list(text = "Produção (em toneladas)"))
Gráfico da Funcao de autocorrelacao e autocorrelacao parcial:
##Funcao de autocorrelacao e autocorrelacao parcial
par(mfrow=c(1,2))
acf(y1, main = "FAC")
pacf(y1, main = "FACP")
par(mfrow=c(1,1))
Pelo gráfico da série temporal e os gráficos de da função de autocorrelação parcial, a série aparenta ter tendência.
gma(y1,k=8)
## correlacao valor-p
## cor -0.127 0.8387
Com p-valor > 0.05, não rejeita-se a hipótese de variância constante. Ou seja, não é necessária a transformação da série.
Teste de Cox-Stuart
cs.test(y1)
##
## Exact Cox-Stuart trend test
##
## data: y1
## S = 0, p-value = 3.052e-05
## alternative hypothesis: data have a monotonic trend
p-valor < 0,01.
Dado o p-valor, a série possui tendência.
Método de regressão
n <- length(y1)
t <- seq(1,n,1)
model <- lm(y1 ~ t)
summary(model)
##
## Call:
## lm(formula = y1 ~ t)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2720837 -1635136 -667641 1737043 4064982
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -2299044 732235 -3.14 0.0037 **
## t 1014748 37579 27.00 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 2056000 on 31 degrees of freedom
## Multiple R-squared: 0.9592, Adjusted R-squared: 0.9579
## F-statistic: 729.2 on 1 and 31 DF, p-value: < 2.2e-16
e <- residuals(model) %>%
as.ts()
cs.test(e)
##
## Exact Cox-Stuart trend test
##
## data: e
## S = 8, p-value = 0.8036
## alternative hypothesis: data have a monotonic trend
p-valor > 0.05
Foi possível remover a tendência pelo método de regressão.
Método da Diferença
yd1 <- diff(y1,1)
cs.test(yd1)
##
## Exact Cox-Stuart trend test
##
## data: yd1
## S = 6, p-value = 0.4545
## alternative hypothesis: data have a monotonic trend
p-valor > 0.05
Foi possível remover a tendência com 1 diferença.
par(mfrow=c(1,2))
plot(e, main = "Método Regressão")
plot(yd1, main = "Método Diferença")
par(mfrow=c(1,1))
Teste Fisher
#Periodograma
P <- periodograma(yd1)
plot(P,type="l", main = "Periodograma")
#Teste
Fisher.test(P)
## g valor-p periodo
## 0.30978 0.06145 3.2
Dado p-valor > 0.05. A série não possui sazonalidade.
Conclusão: A Série possui tendência, mas não possui sazonalidade.
Funcao de autocorrelacao e autocorrelacao parcial
##Funcao de autocorrelacao e autocorrelacao parcial
par(mfrow=c(1,2))
acf(yd1, main = "FAC")
pacf(yd1, main = "FACP")
par(mfrow=c(1,1))
##Ajuste do modelo
seh=HoltWinters(y1,gamma=FALSE)
seh
## Holt-Winters exponential smoothing with trend and without seasonal component.
##
## Call:
## HoltWinters(x = y1, gamma = FALSE)
##
## Smoothing parameters:
## alpha: 0.7872417
## beta : 0
## gamma: FALSE
##
## Coefficients:
## [,1]
## a 34718246
## b 1100717
#Valores ajustados
#fitted(seh)
##Plotar o valores ajustados
plot(seh, ylab = "Produção(t)", main = "Observado vs Ajustado", xlab = "Ano")
Predição para o período de 5 anos:
#Predicao
p=predict(seh, 5, prediction.interval = TRUE)
p
## Time Series:
## Start = 2021
## End = 2025
## Frequency = 1
## fit upr lwr
## 2021 35818963 38448451 33189475
## 2022 36919680 40266213 33573147
## 2023 38020397 41955414 34085380
## 2024 39121114 43567397 34674831
## 2025 40221831 45126371 35317292
plot(seh, p, xlab = "Ano", ylab = "Produção(t)", main = "Modelo SEH - Previsão")
Modelo Arima(1,1,1)
m <- Arima(y1, order = c(1,1,1))
m
## Series: y1
## ARIMA(1,1,1)
##
## Coefficients:
## ar1 ma1
## 0.9930 -0.9099
## s.e. 0.0161 0.0906
##
## sigma^2 estimated as 2.004e+12: log likelihood=-498.27
## AIC=1002.54 AICc=1003.4 BIC=1006.94
summary.arima(m)
## estimativa erro padrão estatistica t valorp
## ar1 0.9930070 0.01611723 61.61153 0
## ma1 -0.9098836 0.09059367 -10.04357 0
Predição para o período de 5 anos:
prev <- forecast(m, h=5, level = 95)
prev
## Point Forecast Lo 95 Hi 95
## 2021 36282890 33507812 39057968
## 2022 37487255 33395825 41578685
## 2023 38683197 33466676 43899719
## 2024 39870777 33608856 46132697
## 2025 41050051 33781620 48318482
plot(prev, main = "ARIMA(1,1,1) - Previsão")
##Diagnostico do modelo
tsdiag(m)