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.