1. Utilizando el set de datos “auscafe” de la libreria fpp2, grafique y describa los componentes de la serie de tiempo
library(fpp2)
## Warning in register(): Can't find generic `scale_type` in package ggplot2 to
## register S3 method.
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
## -- Attaching packages ---------------------------------------------- fpp2 2.4 --
## v ggplot2 3.3.5 v fma 2.4
## v forecast 8.16 v expsmooth 2.3
##
plot(auscafe)

plot(decompose(auscafe))

En la descomposicion de la serie de tiempo podemos observar que tiene una tendencia creciente. Por otro lado, tambien se se puede observar que ¨auscafe¨ es una serie de tiempo con variacion estacional.
3. Utilizando el set de datos “a10” de la libreria fpp2, pronostique los registros para los siguientes 18 meses utilizando modelos ARIMA estacionales (SARIMA).
library(vars)
## Loading required package: MASS
##
## Attaching package: 'MASS'
## The following objects are masked from 'package:fma':
##
## cement, housing, petrol
## Loading required package: strucchange
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
## Loading required package: sandwich
## Loading required package: urca
## Loading required package: lmtest
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v tibble 3.1.6 v dplyr 1.0.7
## v tidyr 1.2.0 v stringr 1.4.0
## v readr 2.1.2 v forcats 0.5.1
## v purrr 0.3.4
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x stringr::boundary() masks strucchange::boundary()
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
## x dplyr::select() masks MASS::select()
library(ggfortify)
## Registered S3 methods overwritten by 'ggfortify':
## method from
## autoplot.Arima forecast
## autoplot.acf forecast
## autoplot.ar forecast
## autoplot.bats forecast
## autoplot.decomposed.ts forecast
## autoplot.ets forecast
## autoplot.forecast forecast
## autoplot.stl forecast
## autoplot.ts forecast
## fitted.ar forecast
## fortify.ts forecast
## residuals.ar forecast
library(forecast)
library(seasonal)
##
## Attaching package: 'seasonal'
## The following object is masked from 'package:tibble':
##
## view
library(tseries)
library(fpp2)
set.seed(300)
a10=ts(arima.sim(list(order = c(1,1,2), ma=c(0.32,0.47), ar=0.8), n = 50)+20, start=2010, frequency = 4)
plot(a10)

plot(decompose(a10))

adf.test(a10)
##
## Augmented Dickey-Fuller Test
##
## data: a10
## Dickey-Fuller = -0.58049, Lag order = 3, p-value = 0.975
## alternative hypothesis: stationary
El P value de la prueba de Dickey-Fuller Aumentada es de 0.975 lo que indica que la serie tiene raices unitarias, es decir, no es estacionaria. Es necesario aplicar diferencias
diff_a10<-diff(diff(a10))
plot(diff_a10)

plot(decompose(diff_a10))

adf.test(diff_a10)
##
## Augmented Dickey-Fuller Test
##
## data: diff_a10
## Dickey-Fuller = -3.5551, Lag order = 3, p-value = 0.04613
## alternative hypothesis: stationary
El P value de la prueba de Dickey-Fuller Aumentada es de 0.04613 lo que indica que la serie ya no tiene raices unitarias, es decir, es estacionaria.
acf(diff_a10)

pacf(diff_a10)

Ambas graficas caen gradualmente por lo que el modelo a utilizar es ARIMA
modelo1 = arima(a10, order=c(1,2,0))
modelo2 = arima(a10, order=c(1,2,1))
modelo3 = arima(a10, order=c(1,2,2))
modelo4 = arima(a10, order=c(1,2,3))
modelo5 = arima(a10, order=c(2,2,0))
modelo6 = arima(a10, order=c(2,2,1))
modelo7 = arima(a10, order=c(2,2,2))
modelo8 = arima(a10, order=c(2,2,3))
modelo9 = arima(a10, order=c(3,2,0))
modelo10 = arima(a10, order=c(3,2,1))
modelo11 = arima(a10, order=c(3,2,2))
modelo12 = arima(a10, order=c(3,2,3))
modelo1$aic
## [1] 153.4622
modelo2$aic
## [1] 154.7564
modelo3$aic
## [1] 149.5071
modelo4$aic
## [1] 151.0614
modelo5$aic
## [1] 153.0968
modelo6$aic
## [1] 151.3842
modelo7$aic
## [1] 149.1661
modelo8$aic
## [1] 151.1476
modelo9$aic
## [1] 147.2237
modelo10$aic
## [1] 147.526
modelo11$aic
## [1] 147.644
modelo12$aic
## [1] 151.6956
El modelo 9 es el mejor modelo para utilizar porque el valor del AIC (147.2237) es el menor de todos.
checkresiduals(modelo9$residuals)
## Warning in modeldf.default(object): Could not find appropriate degrees of
## freedom for this model.

En la primera grafica de residuales no se observa ninguna distribucion anormal, en la segunda gráfica todos los elementos se encuentran dentro de las lineas de tolerancia y la tercera gráfica muestra una distribucion normal.
Box.test(modelo9$residuals, type="Ljung-Box")
##
## Box-Ljung test
##
## data: modelo9$residuals
## X-squared = 0.016377, df = 1, p-value = 0.8982
El P value de la prueba Ljung Box es mayor a 0.05 lo que confirma que el modelo de residuales cumple con los supuestos necesarios.
autoplot(forecast(modelo9))

La gráfica muestra las predicciones del modelo para la siguiente etapa.