Séries Temporais - Utilização

Autor

Paulo Manoel da Silva Junior

Utilização de série temporal

Utilização de série temporal, onde será aplicado algumas coisas que foram vistas na disciplina.

  • A série que será utilizada é a série color, que se encontra no pacote TSA

Carregando a série e visualizando

A descrição da série: Color property from 35 consecutive batches in an industrial process.

data(color, package = "TSA")
color
Time Series:
Start = 1 
End = 35 
Frequency = 1 
 [1] 67 63 76 66 69 71 72 71 72 72 83 87 76 79 74 81 76 77 68 68 74 68 69 75 80
[26] 81 86 86 79 78 77 77 80 76 67

De acordo com a saída acima, é observado que temos uma série anual, com um total de 35 observações.

Estatística Descritiva da série temporal

skimr::skim(color)
Data summary
Name color
Number of rows 35
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 35 1 1 74.89 6.09 63 87 76 ⡠⡠⠌⠒⡠⡐⠑⢂
  • De acordo com a estatística descritiva observamos que o menor valor é 63, sendo observado na posição 2, e o valor máximo é 87, sendo observado na posição 12.

Visualização gráfica da série temporal

forecast::autoplot(color) + 
  ggplot2::xlab("Ano") +
  ggplot2::ylab("valores")+
  ggplot2::labs(title = "Série Temporal do conjunto de dados color da biblioteca TSA")+
  ggplot2::theme_bw()
Registered S3 method overwritten by 'quantmod':
  method            from
  as.zoo.data.frame zoo 

Observação: De maneira rápida observando apenas o plot da série vemos que possivelmente não existe uma tendência na série, onde será comprovado através de um teste.

Características da série

Aqui, vamos testar algumas características que estão presentes em algumas séries temporais, tais como: estacionariedade, tendência, sazonalidade.

Testando a estacionariedade

As hipóteses são:

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(color)

    Augmented Dickey-Fuller Test

data:  color
Dickey-Fuller = -1.9961, Lag order = 3, p-value = 0.5746
alternative hypothesis: stationary

Resposta: Não rejeitamos H_0, ou seja, com 95% de confiança a série, segundo o teste de Dickey-Fuller é não estacionária. O resultado do p-valor foi de 0.5746.

Testando a tendência

  • Como pelo gráfico, é observado que possivelmente tem se uma tendência crescente, esse será o argumento a ser testado.

  • As hipóteses são as seguintes:

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(color, alternative = "right.sided")

    Cox Stuart test

data:  color
statistic = 10, n = 16, p-value = 0.2272
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.2272.

Devido a série ser anual, não precisa testar a sazonalidade.

Correlação Amostral e Parcial

Gráfico de Correlação Amostral

  • O gráfico de correlação amostral é útil na identificação da ordem do processo se ele for um MA, e se for um AR, é esperado um decaimento exponencial.
forecast::Acf(color, main = "Gráfico de correlação amostral", xlab = "Defasagem", ylab = "Autocorrelações")

É observado um decaimento exponencial, sugerindo assim que o processo seja do tipo AR

Gráfico de Correlação Parcial

  • Acima, verificamos que a série possivelmente seja do tipo AR, com o gráfico de Correlação Parcial, é sugerido a ordem do processo, então vamos verificar.
forecast::Pacf(color, main = "Gráfico de correlação Parcial", xlab = "Defasagem", ylab = "Autocorrelações")

  • De acordo com o gráfico de correlação parcial, ele indica que possívelmente a Série seja do tipo AR(1), na continuidade da análise, vamos verificar.

Verificação da série

  • Utilizaremos a função auto.arima do pacote forecast.
forecast::auto.arima(color)
Series: color 
ARIMA(1,0,0) with non-zero mean 

Coefficients:
         ar1     mean
      0.5705  74.3293
s.e.  0.1435   1.9151

sigma^2 = 26.34:  log likelihood = -106.07
AIC=218.15   AICc=218.92   BIC=222.81

De acordo com a saída do teste, vemos que ele identifica que a série é um AR(1), onde \hat{\phi} = 0.5705, é observado também que no teste de Estacionariedade, ele não detectou estacionariedade, pois a componente d, no ajuste foi igual a zero, entendendo assim que a série já é estacionária.

Ajustando um processo

fit <- arima(color, order = c(1,0,0))
fit

Call:
arima(x = color, order = c(1, 0, 0))

Coefficients:
         ar1  intercept
      0.5705    74.3293
s.e.  0.1435     1.9151

sigma^2 estimated as 24.83:  log likelihood = -106.07,  aic = 218.15

O modelo que foi ajustado, observamos que as estimativas foram as mesma quando foi utilizado a função auto.arima, sendo assim vamos verificar se o modelo foi bem ajustado.

lmtest::coeftest(fit)

z test of coefficients:

          Estimate Std. Error z value  Pr(>|z|)    
ar1        0.57055    0.14346  3.9771 6.975e-05 ***
intercept 74.32928    1.91509 38.8124 < 2.2e-16 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Resposta: De acordo com o teste, rejeitamos a hipótese nula de que \beta_i = 0, ou seja, tanto o valor de \phi, quanto o valor da constante, são significativos para o modelo ajustado, obtivemos como resultado os respectivos p-valor: 6.97^{-5} e < 2.2 \times 10^{-16}.

Sendo assim, concluímos que o modelo foi bem ajustado.

Análise Diagnóstico dos Resíduos

  • Precisamos padronizar os resíduos, para que os valores discrepantes não interfiram muito por conta da escala
residuos <- residuals(fit)
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.
forecast::checkresiduals(residuos_padronizados)


    Ljung-Box test

data:  Residuals
Q* = 1.6712, df = 7, p-value = 0.9758

Model df: 0.   Total lags used: 7

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

ggplot2::ggplot(color, ggplot2::aes(x=as.vector(1:35), 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ídos padronizados")

  • De acordo com a análise gráfica podemos observar que não temos resíduos muito discrepante. Pois, o valor máximo dos resíduos padronizados e o mínimo foram de 1.948 e -1.868 respectivamente

Testando a normalidade

  • Para o teste de normalidade dos resíduos vamos utilizar três testes

Teste de Bera-Jarque

  • As hipóteses são:

H_0: Os \hspace{0.1cm} resíduos \hspace{0.1cm} possuem \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} possuem \hspace{0.1cm} distribuição \hspace{0.1cm} normal

tseries::jarque.bera.test(residuos_padronizados)

    Jarque Bera Test

data:  residuos_padronizados
X-squared = 0.80388, df = 2, p-value = 0.669

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

Teste de Lillie-Fors

  • As hipóteses são:

H_0: Os \hspace{0.1cm} resíduos \hspace{0.1cm} possuem \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} possuem \hspace{0.1cm} distribuição \hspace{0.1cm} normal

nortest::lillie.test(residuos_padronizados)

    Lilliefors (Kolmogorov-Smirnov) normality test

data:  residuos_padronizados
D = 0.077987, p-value = 0.8518

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

Teste de Shapiro-Wilk

  • As hipóteses são:

H_0: Os \hspace{0.1cm} resíduos \hspace{0.1cm} possuem \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} possuem \hspace{0.1cm} distribuição \hspace{0.1cm} normal

shapiro.test(residuos_padronizados)

    Shapiro-Wilk normality test

data:  residuos_padronizados
W = 0.97536, p-value = 0.6057

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

Testando não ser correlacionados

  • Para isso, vamos utilizar o teste de Ljung-box, para saber se os resíduos são não correlacionados.

As hipóteses são:

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

Box.test(residuos_padronizados, type = "Ljung-Box")

    Box-Ljung test

data:  residuos_padronizados
X-squared = 0.10056, df = 1, p-value = 0.7512

Resposta: Não rejeitamos H_0, ou seja, com confiança de 95% os resíduos são não correlacionados. O resultado do p-valor do teste foi de 0.7512.

Conclusão

  • Conseguimos aplicar o ajuste de um modelo da série, e verificar as suas características, como está descrito no corpo do trabalho acima, em sua respectiva seção.