El proposito del Laboratorio 4 es utilizar una base de datos para pronosticar el PIB de República Dominicana.

Para eso primero se cargan las librerías y la base de datos.

library(forecast)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(seasonal)
library(tseries)
library(readxl)

datos <- read_excel(file.choose(), sheet = 2)
datos<-ts(datos$GDP, frequency = 1)
str(datos)
##  Time-Series [1:61] from 1 to 61: -2.31 17.05 6.5 6.76 -12.48 ...

Prueba Dickey-fuller

tseries::adf.test(datos)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  datos
## Dickey-Fuller = -3.1946, Lag order = 3, p-value = 0.09674
## alternative hypothesis: stationary

Gráfico de la prueba Dickey-fuller

plot(datos)

Primer diferenciación

data <- datos
diff_ts<-diff(data)

Prueba Dickey-fuller de la primera diferenciación

tseries::adf.test(diff_ts)
## Warning in tseries::adf.test(diff_ts): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  diff_ts
## Dickey-Fuller = -5.7048, Lag order = 3, p-value = 0.01
## alternative hypothesis: stationary

Gráfico Dickey-fuller de la primera diferenciación

plot(diff_ts)

  • Luego de realizar la primera diferenciación, se obtuvo que el nuevo p-value es menor a 0.05, por lo cual, ya no es necesario realizar una segunda diferenciación. Esto nos indica que la serie de tiempo es estacionaria y esto también se puede observar en el gráfico.

Gráfica de autocorrelación(ACF)

acf(diff_ts)

Gráfica de autocorrelación parcial (PACF)

pacf(diff_ts)

  • Al observar la gráfica de autocorrelación, se puede observar que esta cae repentinamente, mientras que al observar la gráfica de autocorrelación parcial cae gradualmente. Por lo cual, se utilizará un modelo de medias moviles (MA).

Se realizan 3 modelos

modelo1 = arima(data, order=c(2,1,1))
modelo2 = arima(data, order=c(2,1,2))
modelo3 = arima(data, order=c(2,1,3))

Resultado de los modelos MA

modelo1$aic
## [1] 379.7082
modelo2$aic
## [1] 381.7082
modelo3$aic
## [1] 378.8351
  • Se elige el modelo MA cuyo resultado sea el más bajo. En este caso el resultado del modelo 3 es el más bajo.

Análisis de ruido blanco

checkresiduals(modelo3$residuals)
## Warning in modeldf.default(object): Could not find appropriate degrees of
## freedom for this model.

Box test (Prueba Ljung-box)

Box.test(modelo3$residuals, type="Ljung-Box")
## 
##  Box-Ljung test
## 
## data:  modelo3$residuals
## X-squared = 0.16436, df = 1, p-value = 0.6852

Pronóstico

a<-forecast::forecast(modelo3)
plot(a)