Fundamentos de Series de Tiempo en R

Jonathan Martez

2024-04-05

Cuando trabajamos con gráficos de lineas en series de tiempo existen cuatro tipos generales, para describir el comportamiento de las series, los caules pueden ser: estacionaria, tendencias, estacionales y cíclicos.

ESTACIONARIA

El compotamiento estacionario de una gráfica, está mayormente relacionado con la conducta que se observa sobre la línea de tendencia. La forma de identificar que una serie tiene comportamiento estacionario es que tendrá una linea de tendencia completamente horizontal o aproximadamente, esto significa que la pendiente de la línea de tendencia es aproximadamente cero (0). En la TABLA 1 se observa una representación del comportamiento estacionario.

TENDENCIA

El compotamiento de tendencia de una gráfica, está mayormente relacionado con la conducta que se observa sobre la línea de tendencia. La forma de identificar que una serie tiene comportamiento de tendencia es que al trazar una línea de tendencia que describa los datos, esta se verá creciente o decreciente, dependiendo del caso. En la TABLA 2 se observa una representación del comportamiento tendencia ascendente y en la TABLA 3 se observa una representación del comportamiento tendencia descendente.

ESTACIONAL

El compotamiento estacional de una gráfica, está mayormente relacionado con la conducta que se observa sobre el gráfico de linea. La forma de identificar que una serie tiene comportamiento estacional es que está va a tener el mismo comportamiento después de un periodo de tiempo, esto quiere decir que si estuvieramos viendo una serie correspodiente a los meses en diferentes años,al pasar de los años siempre va a aumentar y disminuir en los mismos meses. En la TABLA 4 se observa una representación del comportamiento estacional.

CÍCLICO

El compotamiento cíclico de una gráfica, está mayormente relacionado con la conducta que se observa sobre el gráfico de linea. La forma de identificar que una serie tiene comportamiento cíclica es que esta, va a ser una gráfica que oscila, pero no va a presentar un comportamiento similar al pasar del tiempo. En la TABLA 5 se observa una representación del comportamiento cíclico.

Como aclaración, se debe comprender que hay dos comportamientos gráficos que no se pueden dar simultáneamente, estos son: estacionaria y tendencial, ya que como vimos estas están ligados al comportamiento que tenga la línea de tendencia.

TAREA 1

Se nos proporciona una base de datos sobre el desempleo a lo largo de 31 años.

CARGA Y ORGANIZACIÓN DE BASE EN R

#Libreria para abrir archivos de Excel
library(readxl)

#Carga de base a partir de la ruta correspondiente
BASE <- read_excel("C:/Users/Home/Documents/Semestre VII/Fundamentos de Series de Tiempo/EJEMPLO-TABLA 2-3.xlsx", 
                                sheet = "Tarea")

#Se crea una nueva base más ordenada
BASECORRE <- data.frame(
  Año = rep(1948:1978, each = 12),
  Mes = rep(month.name),
  Yt = BASE$Yt
)

#Libraria que permite usar la función mutate()
library(dplyr)

#Realizo la traducción del nombre de los meses
BASECORRE <- BASECORRE %>%
  mutate(Mes = recode(Mes, 
                      "January" = "Enero", 
                      "February" = "Febrero",
                      "March" = "Marzo",
                      "April" = "Abril",
                      "May" = "Mayo",
                      "June" = "Junio",
                      "July" = "Julio",
                      "August" = "Agosto",
                      "September" = "Septiembre",
                      "October" = "Octubre",
                      "November" = "Noviembre",
                      "December" = "Diciembre"))

#Libreria para crear factores con el orden de los meses
library(forcats)

#Establezco un orden oara los meses (Para que al graficar no se ordenen alfabeticamente)
BASECORRE$Mes <- fct_inorder(BASECORRE$Mes)

CALCULO DE MEDIDAS DE TENDENCIA CENTRAL, DISPERCIÓN Y POSICIÓN, PARA MESES

#Libreria para utilizar la función summarise, para calcular medidas de tendencia central
library(dplyr)

#Creo un objeto con todas las medidas de tendencia central 
resumen_mes <- BASECORRE %>%
  group_by(Mes) %>%
  summarise(
    Media = round(mean(Yt, na.rm = TRUE), 2),
    Mediana = round(median(Yt, na.rm = TRUE), 2),
    Moda = round(as.numeric(names(which.max(table(Yt)))), 2),
    Varianza = round(var(Yt, na.rm = TRUE), 2),
    DesviacionEstandar = round(sd(Yt, na.rm = TRUE), 2),
    PrimerCuartil = round(quantile(Yt, 0.25, na.rm = TRUE), 2),
    SegundoCuartil = round(quantile(Yt, 0.50, na.rm = TRUE), 2),
    TercerCuartil = round(quantile(Yt, 0.75, na.rm = TRUE), 2)
  )

#Librería pra usar la función datatable()
library(DT)

#Creación de tablas interactiva
datatable(resumen_mes)

Tenemos data correspondiente a cómo se comportó el desempleo en cada uno de los meses tomandose en cuenta los 31 años.

Una forma más fácil de observar la diferencia existente que hay de mes a mes, sería de forma gráfica.

GRÁFICA DE CAJA Y BIGOTES PARA MESES

library(ggstatsplot)

ggbetweenstats(data = BASECORRE,
               x = Mes, 
               y = Yt,
               fill = Mes,
               type = "parametric", 
               var.equal = TRUE, 
               plot.type= "box", 
               centrality.plotting = FALSE, 
               bf.message = FALSE,
               pairwise.display = "none",
               package = "ggthemes",
               palette = "Classic_Purple_Gray_12",
               results.subtitle = FALSE) +
               stat_boxplot(geom = "errorbar") +
               geom_point(stat = "summary", fun = mean, size = 2.5)

Basandonos en la información que nos proporciona la boxplot, pordemos concluir que todos los meses cuentan con valores extremo en la parte superior de la caja, además que las medias se encuentran sobre la mediana de todos los menes, además observamos que en el mes de mayo se observa una menor insidencia de desempleo, en contraste junio presenta un mayor número de desempleo.

GRÁFICO DE LÍNEA DEL COMPORTAMIENTO DE LOS MESES EN LOS AÑOS

library(ggplot2)

ggplot(BASECORRE, aes(x=Año, y=Yt, group=Mes, color=Mes)) +
  geom_line() + geom_point() +
  labs(x="Año", y="Índice de Pobreza", title="Comportamiento del desempleo a lo largo de los años, por meses") +
  theme_minimal()

Recordando lo mencionado al principio del artículo, podríamos decir que este gráfico es de tipo estacional, pero en realidad, no lo es y esto se debe que en un comportamiento se espera que todos los meses crezcan y decrezcan de forma simultanea y si nos fijamos bien, vemos que un perido justo antes del 1960 hay un punto en el cuál todos los meses hacen un pico decreciente, pero febrero, por su parte creció. Esto basta para descartar la idea que se trata de un comportamiento estacional.

CALCULO DE MEDIDAS DE TENDENCIA CENTRAL, DISPERCIÓN Y POSICIÓN, PARA AÑOS

resumen_año <- BASECORRE %>%
  group_by(Año) %>%
  summarise(
    Media = round(mean(Yt, na.rm = TRUE), 2),
    Mediana = round(median(Yt, na.rm = TRUE), 2),
    Moda = round(as.numeric(names(which.max(table(Yt)))), 2),
    Varianza = round(var(Yt, na.rm = TRUE), 2),
    DesviacionEstandar = round(sd(Yt, na.rm = TRUE), 2),
    PrimerCuartil = round(quantile(Yt, 0.25, na.rm = TRUE), 2),
    SegundoCuartil = round(quantile(Yt, 0.50, na.rm = TRUE), 2),
    TercerCuartil = round(quantile(Yt, 0.75, na.rm = TRUE), 2)
  )

#Librería pra usar la función datatable()
library(DT)

#Creación de tablas interactiva
datatable(resumen_año)

Tenemos data correspondiente a cómo se comportó el desempleo en cada uno de los años tomandose en cuenta los 12 meses de cada año.

GRÁFICA DE CAJA Y BIGOTES CORRESPONDIENTE AL COMPORTAMIENTO DE LOS DATOS POR AÑO

library(ggstatsplot)

ggbetweenstats(data = BASECORRE,
               x = Año, 
               y = Yt,
               fill = Mes,
               type = "parametric", 
               var.equal = TRUE, 
               plot.type= "box", 
               centrality.plotting = FALSE, 
               bf.message = FALSE,
               pairwise.display = "none",
               package = "ggsci",
               palette = "default_igv",
               results.subtitle = FALSE) +
               stat_boxplot(geom = "errorbar") +
               geom_point(stat = "summary", fun = mean, size = 1.5) +
               scale_x_discrete(breaks = seq(min(BASECORRE$Año), max(BASECORRE$Año), by = 2))

En este gráfico de boxplot nos permite analizar que la diferencia que existe entre los años, y se observa una gran variedad en cuanto a los años respecta, además que se resaltas que del año inical al final, se observa un gran incremento del desempleo.

GRÁFICO DE LINEAS CORRESPONDIENTE A EL COMPORTAMIENTO DE LOS AÑOS EN CUANTO A LOS MESES RESPECTA

library(ggplot2)

ggplot(BASECORRE, aes(x=Mes, y=Yt, group=Año, color=Año)) +
  geom_line() + geom_point() +
  labs(x="Año", y="Índice de Pobreza", title="Comportamiento del desempleo a lo largo de los años, por meses") + 
  theme_minimal()

Este gráfico de línea de los años complementa lo citado arriba con los meses, ya que apesar que se podría interpretar un comportamiento estacional, si se toma un mes como lo puede ser mayo, se ve que hay líneas que se incrementan y otras que no, esto significa que no existe un comportamiento estacional, sin embargo sí podría ser cíclico.

GRÁFICO DE LÍNEA PARA VER EL COMPORTAMIENTO DE LA SERIE CON RESPECTO A 31 AÑOS POR MESES

library(ggplot2)

ggplot(BASECORRE, aes(x=interaction(Año, Mes, sep="-", lex.order=TRUE), y=Yt, group=1)) +
  geom_line(color = "purple") +
  labs(x="Año y Mes", y="Desempleo", title="Comportamiento del desempleo a lo largo de los años, por meses") +
  geom_point(color = "purple", size = 2) +
  geom_smooth(method = "lm", se = FALSE, linetype = "dashed", color = "red") +
  theme_minimal() +
  theme(axis.text.x = element_blank(),  # Ocultar las etiquetas del eje x
        axis.ticks.x = element_blank())  # Ocultar las marcas del eje x

Utilizando los comportamientos aprendidos al inicio de este artículo, podemos decir que esta serie tiene un comportamiento de tendencia ascendente y también es cíclica.

TAREA 2

Tenemos una base de datos correspondiente a la tasa de pobreza en cuatro años, por meses

CARGAMOS BASE EN R

#Libreria para abrir archivos de excel
library(readxl)

#Cargamos base de datos de excel
StandardPoor <- read_excel("C:/Users/Home/Documents/Semestre VII/Fundamentos de Series de Tiempo/EJEMPLO-TABLA 2-3.xlsx", 
                           sheet = "TABLA 2-9", range = "A2:E14")

#Libreria para utilizar la fnción melt()
library(reshape2)

#Derretimos la base para un mejor trabajo
StandardPoor <- melt(StandardPoor, id.vars = "Mes", variable.name = "Año", value.name = "Poor")

#libreria para utilizar la función fct_indorder()
library(forcats)

#Comvertimos los meses en factores para que su orden se mantenga
StandardPoor$Mes <- fct_inorder(StandardPoor$Mes)

CALCULO DE MEDIDAS DE TENDENCIA CENTRAL, DISPERCIÓN Y POSICIÓN, PARA MESES

#Liberia para utilizar la función summarise()
library(dplyr)

#Creamos un resumen de todas las medias de tendencia central, de dispersión y de posición para los meses
resumen_mes <- StandardPoor %>% 
  group_by(Mes) %>% 
  summarise(
    Media = round(mean(Poor, na.rm = TRUE), 2),
    Mediana = round(median(Poor, na.rm = TRUE), 2),
    Moda = round(as.numeric(names(which.max(table(Poor)))), 2),
    Varianza = round(var(Poor, na.rm = TRUE), 2),
    DesviacionEstandar = round(sd(Poor, na.rm = TRUE), 2),
    PrimerCuartil = round(quantile(Poor, 0.25, na.rm = TRUE), 2),
    SegundoCuartil = round(quantile(Poor, 0.50, na.rm = TRUE), 2),
    TercerCuartil = round(quantile(Poor, 0.75, na.rm = TRUE), 2)
  )

#Libreria para utilizar la función datatable()
library(DT)

#Crea tabla interactiva
datatable(resumen_mes)

Tenemos data correspondiente a como se comportó el desempleo en cada uno de los meses tomandose en cuenta los cuatro (4) años.

Una forma más fácil de observar la diferencia existente que hay de mes a mes, sería de forma gráfica.

GRÁFICA DE CAJA Y BIGOTES PARA MESES

library(ggstatsplot)
library(ggplot2)

ggbetweenstats(data = StandardPoor,
               x = Mes, 
               y = Poor,
               fill = Mes,
               type = "parametric", 
               var.equal = TRUE, 
               plot.type= "box", 
               centrality.plotting = FALSE, 
               bf.message = FALSE,
               pairwise.display = "none",
               package = "ggthemes",
               palette = "Classic_Purple_Gray_12",
               results.subtitle = FALSE) +
               stat_boxplot(geom = "errorbar") +
               geom_point(stat = "summary", fun = mean, size = 2.5)

Basandonos en la información que nos proporciona la boxplot, vemos que hay una notable diferencia de distribución de la pobreza de mes a mes, aunque se vuelve un poco complejo identificar de forma adecuada en cúal de estos meses se observo mayor tasa y en cuál se presentó una menor tasa.

GRÁFICO DE LÍNEA DEL COMPORTAMIENTO DE LOS MESES EN LOS AÑOS

library(ggplot2)

ggplot(StandardPoor, aes(x=Año, y=Poor, group=Mes, color=Mes)) +
  geom_line() + geom_point() +
  labs(x="Año", y="Índice de Pobreza", title="Comportamiento del desempleo a lo largo de los años, por meses") +
  theme_minimal()

A diferencia del gráfico de la tarea 1, este sí es más sencillo ver que no hay un comportamiendo de tipo estacional, basta con ver de que forma se comportan los puntos del año 3, ya que algunos son decreciente y otros crecientes.

CALCULO DE MEDIDAS DE TENDENCIA CENTRAL, DISPERCIÓN Y POSICIÓN, PARA AÑOS

#Liberia para utilizar la función summarise()
library(dplyr)

#Creamos un resumen de todas las medias de tendencia central, de dispersión y de posición para los años
resumen_año <- StandardPoor %>% 
  group_by(Año) %>% 
  summarise(
    Media = round(mean(Poor, na.rm = TRUE), 2),
    Mediana = round(median(Poor, na.rm = TRUE), 2),
    Moda = round(as.numeric(names(which.max(table(Poor)))), 2),
    Varianza = round(var(Poor, na.rm = TRUE), 2),
    DesviacionEstandar = round(sd(Poor, na.rm = TRUE), 2),
    PrimerCuartil = round(quantile(Poor, 0.25, na.rm = TRUE), 2),
    SegundoCuartil = round(quantile(Poor, 0.50, na.rm = TRUE), 2),
    TercerCuartil = round(quantile(Poor, 0.75, na.rm = TRUE), 2)
  )


#Libreria para utilizar la función datatable()
library(DT)

#Crea tabla interactiva
datatable(resumen_año)

Tenemos data correspondiente a cómo se comportó el desempleo en cada uno de los años tomandose en cuenta los 12 meses de cada año.

GRÁFICA DE CAJA Y BIGOTES CORRESPONDIENTE AL COMPORTAMIENTO DE LOS DATOS POR AÑO

library(ggstatsplot)

ggbetweenstats(data = StandardPoor,
               x = Año, 
               y = Poor,
               fill = Mes,
               type = "parametric", 
               var.equal = TRUE, 
               plot.type= "box", 
               centrality.plotting = FALSE, 
               bf.message = FALSE,
               pairwise.display = "none",
               package = "ggsci",
               palette = "default_igv",
               results.subtitle = FALSE) +
               stat_boxplot(geom = "errorbar") +
               geom_point(stat = "summary", fun = mean, size = 1.5)

En este gráfico de boxplot vemos que del año 1 al 2 se vió incrementada la tasa de pobreza, sin embargo para el año 3 disminuyó y en el año 4, volvió a subir superando aproximadamente a la tasa vista en el año 2.

GRÁFICO DE LINEAS CORRESPONDIENTE A EL COMPORTAMIENTO DE LOS AÑOS EN CUANTO A LOS MESES RESPECTA

library(ggplot2)

ggplot(StandardPoor, aes(x=Mes, y=Poor, group=Año, color=Año)) +
  geom_line() + geom_point() +
  labs(x="Año", y="Índice de Pobreza", title="Comportamiento del desempleo a lo largo de los años, por meses") + 
  theme_minimal()

Observando este gráfico afirmamos que no hay un comportamiento de tipo estacional en cuanto a los años respecta, ya que se observa el desorden que tiene los puntos.

GRÁFICO DE LÍNEA PARA VER EL COMPORTAMIENTO DE LA SERIE CON RESPECTO A 31 AÑOS POR MESES

library(ggplot2)

ggplot(StandardPoor, aes(x=interaction(Año, Mes, sep="-", lex.order=TRUE), y=Poor, group=1)) +
  geom_line(color = "purple") +
  labs(x="Año y Mes", y="Índice de pobreza", title="Comportamiento del índice de pobreza en los años, por meses") +
  geom_point(color = "purple", size = 2) +
  geom_smooth(method = "lm", se = FALSE, linetype = "dashed", color = "red") +
  theme_minimal() +
  theme(axis.text.x = element_blank(),  # Ocultar las etiquetas del eje x
        axis.ticks.x = element_blank())  # Ocultar las marcas del eje x

Utilizando los comportamientos aprendidos al inicio de este artículo, podemos decir que esta serie tiene un comportamiento estacionario y también es cíclica.