Medias móviles

Función de medias móviles

med_mov <- function(x, unilateral = TRUE, r = 2){
v1 <- rep(NA, length(x))
if(unilateral == TRUE){
k <- 1
for(i in r:length(x)){
v1[i] <- mean(x[k:i])
k <- k+1 } }
else{
r1 <- ifelse(r%%2 == 0, r/2, (r-1)/2)
r2 <- ifelse(r%%2 == 0, (r/2-1), (r-1)/2)
for(i in (r1+1):(length(x)-r2)){
v1[i] <- mean(x[(i-r1):(i+r2)]) } }
return(v1)}

Gráfico

library(TSstudio) #Contiene bd USVSales

plot(USVSales, main = "Ventas mensuales totales de vehículos en USA", 
     ylab = "Miles de unidades", 
     xlab = "Año")

Aplicando med_mov

Unilateral

ma_uni1 <- med_mov(USVSales, r = 12, unilateral = TRUE)
ts_ma_uni1 <- ts(ma_uni1, start = 1976, frequency = 12)

Bilateral

ma_bi1 <- med_mov(USVSales, r = 12, unilateral = FALSE)
ts_ma_bi1 <- ts(ma_bi1, start = 1976, frequency = 12)

Gráfico aplicado

plot(USVSales, main = "Ventas mensuales totales de vehículos en USA", 
     ylab = "Miles de unidades", 
     xlab = "Año")
lines(ts_ma_uni1, col = "blue", lwd = 2)
lines (ts_ma_bi1, col = "red", lwd = 2)

Ciclos

¿Qué es un ciclo?: Pueden entenderse como eventos que se repiten a lo largo del tiempo y, por lo general, un ciclo comienza con un mínimo local de la serie y termina en el siguiente mínimo local, el cual a su vez es el punto de partida del siguiente ciclo. No necesariamente ocurren en intervalos de la misma longitud, y esta puede variar de ciclo a ciclo.

Paquete base

library(forecast)

plot(USgas, main = "Consumo de gas natural en USA", 
     ylab = "billones de pìes cúbicos", 
     xlab = "Año")

ggseasonplot en forecast

ggseasonplot(USgas, year.labels = TRUE, continuous = TRUE)

Estacionalidad

Es una variación repetida en la serie, que está relacionada con unidades de frecuencia de la serie (meses para una serie mensual). Por ejemplo los hábitos de consumo son diferentes a mitad de año que en diciembre, o los fines de semana se observan comportamientos diferentes a los que se observan en semana.

ts_seaspnal en TSstudio

ts_seasonal(USgas, type = "box") #Esta función hace uso de plotly

Gráfico polar

ggseasonplot(USgas, polar = TRUE)

Mapa de calor

ts_heatmap(USgas, color = "Reds")

Análisis de la bd “Construcción (ECG)”

La base de datos pertenece a las estadísticas de cemento gris del dane, puede buscarla en el sitio, o descargarlas haciendo click AQUÍ.

Depuración de base de datos

library(readxl) #read_xlsx
library(dplyr)
library(zoo) #na.locf()
library(janitor) #clean_names
library(tidyr) #unite()
library(lubridate) #ym()


cemento <- read_xlsx("Anexos_ECG_may22.xlsx", sheet = 2, skip = 8) %>% 
  clean_names() %>% select(c(x1, x3, produccion, despachos_nacionales))

cemento$x1 <- na.locf(na.locf(cemento$x1), fromLast = TRUE) #LLenando NA de x1

cemento <- cemento %>% mutate(x1 = as.numeric(x1)) %>%  
  rename(year = x1, month = x3) %>% 
  unite(year, month, col = "fecha", sep = "-") %>% 
  mutate(fecha = ym(fecha)) %>% na.omit()

cemento_a6 <- read_xlsx("Anexos_ECG_may22.xlsx", sheet = 7, skip = 7) %>% 
  clean_names() %>% rename(depto = x3, year = x1, month = x2) %>% 
  mutate(year = as.numeric(year)) %>% na.omit() %>% 
  unite(year, month, col = "fecha", sep = "-") %>% 
  mutate(fecha = ym(fecha))

Series de tiempo

library(ggplot2)

cemento %>% ggplot(aes(x = fecha, y = produccion)) + 
  geom_line() + labs(y = "Producción (ton)") + 
  scale_x_date("fecha", date_breaks = "2 year")

cemento %>% ggplot(aes(x = fecha, y = despachos_nacionales)) + 
  geom_line() + labs(y = "Despachos nacionales (ton)") + 
  scale_x_date("fecha", date_breaks = "2 year")

cemento_a6 %>% filter(depto == "ANTIOQUIA") %>% na.omit() %>% 
  ggplot(aes(x = fecha, y = total)) +  geom_line() + 
  labs(y = "Despachos totales (ton)", 
       title = "Despachos nacionales de cemento gris", 
       subtitle = "Departamento de Antioquia") + 
  scale_x_date("fecha", date_breaks = "2 year")

cemento_a6 %>% filter(depto == "BOLÍVAR") %>% na.omit() %>% 
  ggplot(aes(x = fecha, y = total)) +  geom_line() + 
  labs(y = "Despachos totales (ton)", 
       title = "Despachos nacionales de cemento gris", 
       subtitle = "Departamento de Bolívar") + 
  scale_x_date("fecha", date_breaks = "2 year")