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)
Prova II - Séries Temporais
Prova II - Séries Temporais
Aluno:
Paulo Manoel da Silva Junior
Matrícula:
20190041314
Carregando os pacotes
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.
<- fma::internet
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
::skim(internet) skimr
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
::autoplot(internet)+
forecast::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") ggplot2
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
::Acf(internet,main = "Gráfico de Autocorrelação Amostral da série internet", xlab = "Defasagem", ylab = "Correlação Amostral") forecast
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
::Pacf(internet,main = "Gráfico de Autocorrelação Parcial da série internet", xlab = "Defasagem", ylab = "Correlação Parcial") forecast
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\]
::adf.test(internet) tseries
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.
::ndiffs(internet, test = "adf") forecast
[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
::auto.arima(internet, ic = "aic") forecast
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.
<- forecast::Arima(internet, order = c(1,1,1))
fit 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
<- fit$residuals
residuos <- c((residuos - mean(residuos))/sd(residuos)) residuos_padronizados
- Realizando o teste de maneira mais genérica, através da função
checkresiduals
, da bibliotecaforecast
.
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\]
::checkresiduals(residuos_padronizados) forecast
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()
::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") ggplot2
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:
which(residuos_padronizados>2.5 | residuos_padronizados< -2.5)] internet[
[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\]
::cox.stuart.test(internet, alternative = "right.sided") randtests
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%
<- forecast::ses(internet, h=3, level = 95)
alisamento 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
::autoplot(alisamento)+
forecast::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") ggplot2
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.