Manejo de series de tiempo

Cargamos las librerias a usar

library(ggplot2)
library(rmarkdown)
library(fpp2)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
## ── Attaching packages ────────────────────────────────────────────── fpp2 2.5 ──
## ✔ forecast  8.16     ✔ expsmooth 2.3 
## ✔ fma       2.5
## 
library(forecast)
library(timeDate)

Cargamos la base de datos, para esto, se procede primero a obtener el enlace url de la página o repositorio en donde se encuentra almacenada la base, para luego asignarla a un nuevo objeto de la siguiente manera:

url <- "https://raw.githubusercontent.com/pablogaibor/ESPE/main/pib_ecuador.csv"
pib_ec <- read.csv(url,header = T,sep = ";")
pib_ec
##    anio       pib
## 1  2007  51007777
## 2  2008  61762635
## 3  2009  62519686
## 4  2010  69555367
## 5  2011  79276664
## 6  2012  87924544
## 7  2013  95129659
## 8  2014 101726331
## 9  2015  99290381
## 10 2016  99937696
## 11 2017 104295862
## 12 2018 107562008
## 13 2019 108108009
## 14 2020  99291124

Gráficos con base de datos normal

Una vez cargada la base de datos, podemos ver su gráfico de la siguiente manera, como si se tratase de un conjunto de datos de corte transversal.

graf1<-ggplot(pib_ec, aes(x=anio,y=pib))+ #Deginimos la base a utilizar y los ejes
  geom_line(color='blue')+ #Escogemos el tipo de gráfico y el color de la línea
  labs(x="Fecha",y='PIB en miles de dólaares')+ #Establecemos las etiquetas de los ejes
  ggtitle("Evolución del PIB en Ecuador 2007 - 2020") + 
  theme_minimal() + #Agregamos un tema
scale_y_continuous(labels = scales::number_format(scale = 1e3, suffix = "")) + #Modificamos la escala de y
  scale_x_continuous(breaks = unique(pib_ec$anio), labels = unique(pib_ec$anio))+  # Mostrar todas las etiquetas del eje x# 
  theme(axis.text.x = element_text(angle = 45, hjust = 1,vjust = 1))  # Rotar las etiquetas del eje x
graf1

Gráficos con series de tiempo

Transformación de variables a formato de series de tiempo

Sin embargo, debemos recordar que ahora estamos manejando series de tiempo y no datos de corte transversal, para lo cual tenemos que transformar a nuestros datos al formato de series de tiempo con el siguiente código:

pib_ts <- ts(pib_ec$pib, st = 2007, freq = 1)

En donde la función ts sirve para transformar los datos en formato de serie de tiempo, y sus argumentos principales, st indica el periodo de inicio de la serie de tiempo, y freq indica la frecuencia de los datos, como son anuales es 1, si fuesen datos semestrales sería 2, trimestrales 4 y así de acuerdo con su frecuencia. Con los datos en formato de serie de tiempo, es más sencillo graficar la misma, simplemente se ejecuta el siguiente código:

plot.ts(pib_ts)

Si queremos otro tipo de gráfico podemos utilizar la siguiente función:

autoplot(pib_ts)

Series de tiempo mensualizadas

Cargamos la base de datos del nivel de depósitos en un banco comercial

url2 <- "https://raw.githubusercontent.com/pablogaibor/ESPE/main/depositosBP.csv"
depositosBP <- read.csv(url2,header = T,sep = ",")

Observamos el tipo de datos que tiene esta base de datos.

str(depositosBP) 
## 'data.frame':    165 obs. of  5 variables:
##  $ FECHA       : chr  "12/1/2006" "1/1/2007" "2/1/2007" "3/1/2007" ...
##  $ monetarios  : num  1011461 967248 937583 950741 976861 ...
##  $ ahorros     : num  857671 861035 855897 851398 907403 ...
##  $ vista       : num  1869132 1828284 1793480 1802139 1884264 ...
##  $ obligaciones: num  2304082 2273728 2263982 2275485 2390296 ...

Se puede constatar que la variable FECHA está en formato caracter, por lo cual, tenemos que convertir esta variable a un tipo de dato de fecha, de acuerdo con el orden en el que están las fechas (mes/día/año)

depositosBP$FECHA <- as.Date(depositosBP$FECHA,"%m/%d/%Y")
str(depositosBP) 
## 'data.frame':    165 obs. of  5 variables:
##  $ FECHA       : Date, format: "2006-12-01" "2007-01-01" ...
##  $ monetarios  : num  1011461 967248 937583 950741 976861 ...
##  $ ahorros     : num  857671 861035 855897 851398 907403 ...
##  $ vista       : num  1869132 1828284 1793480 1802139 1884264 ...
##  $ obligaciones: num  2304082 2273728 2263982 2275485 2390296 ...

Ahora podemos constatar que la variable FECHA contiene datos de tipo fecha

Transformación de datos a formato de series de tiempo.

En nuestra base de datos depositosBP tenemos 4 variables además de la fecha.

Serie de tiempo univariada

Este primer código nos da una serie de tiempo univariada, es decir vamos a crear una serie de tiempo con la variable obligaciones:

obligaciones.ts<-ts(depositosBP[,5],frequency=12,start=c(2006,12),end=c(2020,08)) 

Graficamos

autoplot(obligaciones.ts)

Series de tiempo multivariadas

Con el siguiente código tomamos todas las variables de la base de datos y las transformamos en series de tiempo.

depositos.ts<-ts(depositosBP[-1],class=c("mts"),frequency=12,start=c(2006,12))

Graficamos

autoplot(depositos.ts)