Prova II - Séries Temporais

Autor

Paulo Manoel da Silva Junior

Prova II - Séries Temporais

Aluno: Paulo Manoel da Silva Junior

Matrícula: 20190041314

Carregando os pacotes

library(gtrendsR)
library(patchwork)
library(RColorBrewer)
library(magrittr)
library(dplyr)
library(gridExtra)
library(ggfortify)
library(fpp2)
library(dygraphs)
library(tseries)
library(forecast)
library(xts)
library(seasonalview)
library(seastests)
library(astsa)
library(fpp)
library(snpar)
library(fma)
library(lmtest)
library(FitAR)
library(deflateBR)
library(sidrar)
library(tidyverse)
library(ggthemes)
library(writexl)
library(rbcb)

Questão 1

  • Apresente o plot da série internet. O que você pode observar sobre os dados que compõem a série (descritiva dos dados). Comente.
internet <- fma::internet
is.ts(internet)
[1] TRUE

Como podemos observar os dados já estão como série temporal.

internet
Time Series:
Start = 1 
End = 100 
Frequency = 1 
  [1]  88  84  85  85  84  85  83  85  88  89  91  99 104 112 126 138 146 151
 [19] 150 148 147 149 143 132 131 139 147 150 148 145 140 134 131 131 129 126
 [37] 126 132 137 140 142 150 159 167 170 171 172 172 174 175 172 172 174 174
 [55] 169 165 156 142 131 121 112 104 102  99  99  95  88  84  84  87  89  88
 [73]  85  86  89  91  91  94 101 110 121 135 145 149 156 165 171 175 177 182
 [91] 193 204 208 210 215 222 228 226 222 220

Estatística Descritiva da série

skimr::skim(internet)
Data summary
Name internet
Number of rows 100
Number of columns 1
_______________________
Column type frequency:
ts 1
________________________
Group variables None

Variable type: ts

skim_variable n_missing complete_rate start end frequency deltat mean sd min max median line_graph
x 0 1 1 100 1 1 137.08 40 83 228 138.5 ⣀⡠⠤⠔⠢⣀⡐⠉

De acordo com a estatística descritiva da série, observamos que o valor mínimo de usuários conectados a um servidor a cada minuto durante um período de 100 minutos é de 83, o valor máximo é 228, a média é 137.08.

Plot da Série

forecast::autoplot(internet)+
  ggplot2::labs(title = "Quantidade de usuários conectados a um servidor a cada minuto durante 100 minutos") +
  ggplot2::xlab("Minuto") + ggplot2::ylab("Quantidade de Usuários")

Resposta: De acordo com o plot da série podemos observar que o comportamento da série, parece evidenciar uma tendência crescente, se fizermos a decomposição, isso ficará mais evidente, podemos observar também que provavelmente existe uma presença de sazonalidade a ser observada na série temporal.

Questão 2

  • Apresente a função de autocorrelação parcial e amostral da série internet. Comente

Autocorrelação Amostral

forecast::Acf(internet,main = "Gráfico de Autocorrelação Amostral da série internet", xlab = "Defasagem", ylab = "Correlação Amostral")

Resposta: O gráfico de autocorrelação amostral, sugere que estamos diante de um processo AutoRegressivo. Concluímos com base na análise gráfica, pois o decaimento é exponencial.

Autocorrelação Parcial

forecast::Pacf(internet,main = "Gráfico de Autocorrelação Parcial da série internet", xlab = "Defasagem", ylab = "Correlação Parcial")

Resposta: De acordo com a análise gráfica acima, pode ser extraído a sugestão que o processo autoregressivo seja de ordem 2. Sendo assim, começa a ter evidências de que a série internet é um \(AR(2)\).

Questão 3

  • Ao nível de significância de 5%, a série internet é estacionária? Apresente as hipóteses nula e alternativa do teste de hipótese. Comente, argumente e justifique.

Para testar a estacionariedade, será utilizado o teste de Dicker-Fuller, no qual as hipóteses são as seguintes:

\[H_0: A \hspace{0.1cm} série \hspace{0.1cm} é \hspace{0.1cm} não \hspace{0.1cm} estacionária\] \[H_1: A \hspace{0.1cm} série \hspace{0.1cm} é \hspace{0.1cm} estacionária\]

tseries::adf.test(internet)

    Augmented Dickey-Fuller Test

data:  internet
Dickey-Fuller = -2.6421, Lag order = 4, p-value = 0.3107
alternative hypothesis: stationary

Resposta: Não rejeitamos \(H_0\), ou seja, com 95% de confiança a série é estacionária, tivemos como resultado o p-valor do teste sendo 0.3107.

Podemos analisar também, através da função ndiffs do pacote forecast, no qual se a resposta for 0, implica que a série já é estacionária, e se for maior que 0, implica que precisamos tomar diferença para tornar a série estacionária.

forecast::ndiffs(internet, test = "adf")
[1] 1

Inconsistência: O resultado do ndiffs foi que precisaria ser tomada uma diferença para tornar a série estacionária, o que mais se aproxima deste é o teste KPSS, pois realizando o teste, podemos obervar que o p-valor que foi 0.0538, é próximo do ponto de corte ao nível de significância de 5%, o resultado do teste seguindo as mesmas hipóteses já definidas é a mesma que foi definida acima.

Conclusão final: Sendo assim, existe evidências significativas que ao nível de 95% de confiança a série internet é não estacionária.

Questão 4

  • É preciso diferenciar a componente sazonal? Comente, argumente e justifique.

Resposta: Não, pois no trabalho considerado não temos um conjunto de dados que apresenta a componente sazonal. Pois, a sua frequência é de 1. O que foi observado quando os dados foram impressos na questão 1.

Questão 5

  • Usando a função auto.arima. a) Selecione a ordem de um modelo usando o critério de seleção AIC; b) Apresente o ajuste do modelo, ou seja, escreva o modelo ajustado; c) Ao nível de significância de 5%, avalie o modelo estimado. Comente, argumente e justifique.

Letra A

forecast::auto.arima(internet, ic = "aic")
Series: internet 
ARIMA(1,1,1) 

Coefficients:
         ar1     ma1
      0.6504  0.5256
s.e.  0.0842  0.0896

sigma^2 = 9.995:  log likelihood = -254.15
AIC=514.3   AICc=514.55   BIC=522.08

Resposta: O processo é um \(ARIMA(1,1,1)\), com base no AIC que foi de 514.2994716, ou seja, de acordo com a utilização da função auto.arima do pacote forecast, observamos que precisa ser tomada uma diferença para tornar a série estacionária corroborando com o resultado de letras anteriores.

Letra B

  • Ajustando um modelo de acordo com a ordem do processo, que foi encontrada na letra anterior.
fit <- forecast::Arima(internet, order = c(1,1,1))
fit
Series: internet 
ARIMA(1,1,1) 

Coefficients:
         ar1     ma1
      0.6504  0.5256
s.e.  0.0842  0.0896

sigma^2 = 9.995:  log likelihood = -254.15
AIC=514.3   AICc=514.55   BIC=522.08

Resposta: O modelo ajustado, encontramos as mesmas estimativas na qual foi verificada no descobrimento da ordem do processo.

Letra C

coeftest(fit)

z test of coefficients:

    Estimate Std. Error z value  Pr(>|z|)    
ar1 0.650376   0.084241  7.7204 1.160e-14 ***
ma1 0.525596   0.089555  5.8690 4.384e-09 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Resposta: Rejeitamos a hipótese nula de que os coeficentes do modelo são iguais a zero, ou seja, com 95% de confiança existe evidência estatística de que o modelo foi bem ajustado, sendo observado que os coeficientes que foram estimados são significativos para o modelo ajustado.

Questão 6

  • Faça a análise de diagnóstico do modelo selecionado/ ajustado na questão [5]. Apresente as hipóteses nula e alternativa dos testes de hipóteses considerados. Adote o nível de significância de 5%. Comente, argumente e justifique.

Padronizando os residuos

residuos <- fit$residuals
residuos_padronizados <- c((residuos - mean(residuos))/sd(residuos))
  • Realizando o teste de maneira mais genérica, através da função checkresiduals, da biblioteca forecast.

Para o teste de Ljung-Box, as hipóteses são as seguintes:

\[H_0: Os \hspace{0.1cm} resíduos \hspace{0.1cm} são \hspace{0.1cm} não \hspace{0.1cm} correlacionados\] \[H_1: Os \hspace{0.1cm} resíduos \hspace{0.1cm} são \hspace{0.1cm} correlacionados\]

forecast::checkresiduals(residuos_padronizados)


    Ljung-Box test

data:  Residuals
Q* = 7.8338, df = 10, p-value = 0.6451

Model df: 0.   Total lags used: 10

Resposta: De acordo com a saída, do teste de Ljung-Box, e com a análise gráfica residual é observado que os resíduos são não correlacionados, pois a hipótese nula de que os resíduos são não correlacionados não foi rejeitada.

Verificando ouliers

#banco <- data.frame()
ggplot2::ggplot(data.frame(residuos_padronizados), ggplot2::aes(x=as.vector(1:length(residuos_padronizados)), y = residuos_padronizados))+
  ggplot2::geom_point(size = 4, color = "#e7ad52") +
  ggplot2::geom_abline(intercept = -2.5, slope = 0,color = "#001132")+
  ggplot2::geom_abline(intercept = 2.5, slope = 0,color = "#001132") + 
  ggplot2::ylim(-3,3) + 
  ggplot2::xlab("Observações") + 
  ggplot2::ylab("Resíduos Padronizados")+
  ggplot2::labs(title = "Gráfico dos resíduos padronizados")

Traçando uma reta em 2.5 e -2.5

Tivemos a quantidade de 1 outlier.

Que a quantidade de usuários conectados a um servidor, foi no minuto 23, e o valor observado:

internet[which(residuos_padronizados>2.5 | residuos_padronizados< -2.5)]
[1] 143

Testando a normalidade

  • Para o teste de normalidade dos resíduos, utilizei o:

Teste de Shapiro-Wilk

  • As hipóteses são:

\[H_0: Os \hspace{0.1cm} resíduos \hspace{0.1cm} seguem \hspace{0.1cm} distribuição \hspace{0.1cm} normal\]

\[H_1: Os \hspace{0.1cm} resíduos \hspace{0.1cm} não \hspace{0.1cm} seguem \hspace{0.1cm} distribuição \hspace{0.1cm} normal\]

shapiro.test(residuos_padronizados)

    Shapiro-Wilk normality test

data:  residuos_padronizados
W = 0.99057, p-value = 0.7107

Resposta: Não rejeitamos \(H_0\), ou seja, com 95% de confiança os resíduos estão distribuidos normalmente.
O resultado do p-valor foi de 0.7107

Resumo: Concluindo a análise de diagnóstico dos resíduos, concluímos que os resíduos são não correlacionados, seguem uma distribuição normal, e que considerando 2.5 como um valor de corte, possuimos um outlier nos resíduos.

Questão 7

  • De acordo com as caracteristicas da série, utilize o algoritmo de alisamento exponencial para prever as observações correspondentes as ordens 101, 102 e 103. Comente, argumente e justique.

Utilizando um teste de hipótese para saber se há tendência

As hipóteses são:

\[H_0: A \hspace{0.1cm} série \hspace{0.1cm} não \hspace{0.1cm} tem \hspace{0.1cm} tendência \hspace{0.1cm} crescente\] \[H_1: A \hspace{0.1cm} série \hspace{0.1cm} tem \hspace{0.1cm} tendência \hspace{0.1cm} crescente\]

randtests::cox.stuart.test(internet, alternative = "right.sided")

    Cox Stuart test

data:  internet
statistic = 31, n = 50, p-value = 0.05946
alternative hypothesis: increasing trend

Resposta: Não rejeitamos \(H_0\), ou seja, com 95% de confiança a série não tem tendência crescente. O resultado do p-valor foi de 0.0595.

Conclusão: Sendo assim, utilizaremos média móvel para fazer a previsão dos valores.

Adotando o nível de significância de 5%

alisamento <- forecast::ses(internet, h=3, level = 95)
alisamento
    Point Forecast    Lo 95    Hi 95
101       220.0002 208.5741 231.4263
102       220.0002 203.8421 236.1583
103       220.0002 200.2109 239.7895

Visualizando o ajuste do alisamento exponencial

forecast::autoplot(alisamento)+
  ggplot2::xlab("Minuto") + 
  ggplot2::ylab("Quantidade de Usuários")+
  ggplot2::labs(title = "Quantidade de usuários conectados a um servidor a cada minuto durante 100 minutos", subtitle = "Utilizando alisamento Exponencial Simples")

Questão 8

  • Seja \(Y_t = \frac{1}{2}y_{t-1}+\frac{1}{4}y_{t-2} + e_t\), em que \(t=1,.....,T\), e \(e_t\) é o ruído branco. Encontre a média, variância e covariância de \(y_t\). A série \(y_t\) é estacionária?

Em um processo Autoregresivo, a média fica a constante, de início, como não temos nenhuma constante de início, a média é 0, a variância é \(\sigma^2\). A série \(y_t\) por ser um processo autoregressivo é estacionária.