Instalar/Cargar librerias necesarias para el análisis
#Cargar librerías necesarias
library(RColorBrewer) # Mejores colores de grafica
library(corrplot)# Para graficar la matriz de correlación
library(readxl) # Para leer archivos Excel
library(tseries) # Para pruebas de estacionariedad
library(forecast) # Para modelado ARIMA y pronósticos
library(ggplot2) # Para visualización de datos
library(plotly) # Para gráficos interactivos
library(timetk) #timetk simplifica y acelera el análisis exploratorio, visualización, y preparación de datos temporales para modelado. Es ideal para quienes trabajan con series temporales en un flujo de trabajo "tidy" y buscan integrar análisis visuales, detección de patrones y forecasting en un solo paquete.
Cargar base de datos
library(readxl)
data_col <- read_excel("C:/Users/johan/Downloads/Base Caso2.xlsx",
col_types = c("date", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric", "numeric",
"numeric", "numeric"))
PASO INDISPENSABLE: Declarar la (s) variable (s) como serie (s) temporal (es):
Variable 1
# Convertir/declarar variable Producción cafe (PNCAFE) en serie de tiempo mensual
variable1_ts <- ts(data_col$PNCAFE, start = c(2012, 1), frequency = 12)
Variable 2
# Convertir/declarar variable Precio interno cafe (PICAFE) en serie de tiempo mensual
variable2_ts <- ts(data_col$PICAFE, start = c(2012, 1), frequency = 12)
Variable 3
# Convertir/declarar variable Precio externo cafe (PECAFE) en serie de tiempo mensual
variable3_ts <- ts(data_col$PECAFE, start = c(2012, 1), frequency = 12)
Variable 4
# Convertir/declarar variable Exportaciones cafe (XCAF) en serie de tiempo mensual
variable4_ts <- ts(data_col$XCAF, start = c(2012, 1), frequency = 12)
Variable 5
# Convertir/declarar variable Tasa de cambio (TRM) en serie de tiempo mensual
variable5_ts <- ts(data_col$TRM, start = c(2012, 1), frequency = 12)
# Combinar series en un solo objeto
series_cafe <- cbind(variable1_ts,
variable2_ts,
variable3_ts,
variable4_ts,
variable5_ts)
# Asignamos un nombre
colnames(series_cafe) <- c("Producción",
"Precio INT",
"Precio EXT",
"Exportación",
"Tasa de cambio")
# Calculamos la matriz de correlación
matriz_cor <- cor(series_cafe)
matriz_cor
## Producción Precio INT Precio EXT Exportación Tasa de cambio
## Producción 1.00000000 0.05404791 -0.1732706 0.2519923 0.2445116
## Precio INT 0.05404791 1.00000000 0.8479236 0.7507505 0.8315816
## Precio EXT -0.17327059 0.84792365 1.0000000 0.6772052 0.4306919
## Exportación 0.25199231 0.75075052 0.6772052 1.0000000 0.5767099
## Tasa de cambio 0.24451165 0.83158156 0.4306919 0.5767099 1.0000000
# Graficamos la matriz
corrplot(matriz_cor,
method = "color",
type = "upper",
addCoef.col = "black",
tl.col = "black",
tl.srt = 45,
order = "AOE")
Gráfico inicial de la variable 1 en niveles -Original
library(ggplot2)
library(plotly)
# Convertir la serie temporal a un vector numérico para lograr graficar con ggplot2
data_col$variable1 <- as.numeric(variable1_ts)
# Crear el gráfico
grafico_serie <- ggplot(data_col, aes(x = seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = nrow(data_col)),
y = variable1)) +
geom_line(color = "grey", linewidth = 0.4) + # Cambiado 'size' por 'linewidth'
geom_point(color = "black", size = 0.1) +
ggtitle("Variable Producción de cafe: Serie original") +
xlab("Tiempo") +
ylab("Unidad Variable 1") +
theme_minimal()
ggplotly(grafico_serie)
Extracción señales variable 1
# Cargar librerías necesarias
library(ggplot2)
library(plotly)
library(RColorBrewer)
library(showtext)
library(sysfonts)
# Agregamos fuente de texto
font_add_google("Montserrat", "montserrat")
showtext_auto()
# Definimos colores
colores <- c(
"Estacional" = "#4B2E1F",
"Tendencia" = "#7B4A2F",
"Residuo" = "#A6192E",
"Serie Original" = "#2F6B3C"
)
# Descomposición de la serie temporal
stl_decomp_var1 <- stl(variable1_ts, s.window = "periodic")
# Convertir la descomposición a un data frame para graficar con ggplot2
stl_df_var1 <- data.frame(
Time = rep(time(variable1_ts), 4), # Tiempo repetido para cada componente
Value = c(stl_decomp_var1$time.series[, "seasonal"],
stl_decomp_var1$time.series[, "trend"],
stl_decomp_var1$time.series[, "remainder"],
variable1_ts),
Component = rep(c("Estacional", "Tendencia", "Residuo", "Serie Original"), each = length(variable1_ts))
)
# Crear gráfico con ggplot2
p <- ggplot(stl_df_var1, aes(x = Time, y = Value, color = Component)) +
geom_line(size = 0.9) +
facet_wrap(~Component, scales = "free_y", ncol = 1) +
scale_color_manual(values = colores) +
theme_minimal(base_size = 13) +
labs(title = "Descomposición temporal de la producción de café",
x = "Tiempo",
y = "Valor"
)
theme(
plot.title = element_text(family = "montserrat", size = 18, face = "bold", hjust = 0.5),
plot.subtitle = element_text(size = 13, hjust = 0.5),
strip.text = element_text(size = 12, face = "bold"),
axis.title = element_text(family = "sans", size = 12),
axis.text = element_text(family = "sans", size = 10),
legend.position = "none",
panel.grid.minor = element_blank()
)
## <theme> List of 7
## $ axis.title : <ggplot2::element_text>
## ..@ family : chr "sans"
## ..@ face : NULL
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 12
## ..@ hjust : NULL
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## $ axis.text : <ggplot2::element_text>
## ..@ family : chr "sans"
## ..@ face : NULL
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 10
## ..@ hjust : NULL
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## $ legend.position : chr "none"
## $ panel.grid.minor: <ggplot2::element_blank>
## $ plot.title : <ggplot2::element_text>
## ..@ family : chr "montserrat"
## ..@ face : chr "bold"
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 18
## ..@ hjust : num 0.5
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## $ plot.subtitle : <ggplot2::element_text>
## ..@ family : NULL
## ..@ face : NULL
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 13
## ..@ hjust : num 0.5
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## $ strip.text : <ggplot2::element_text>
## ..@ family : NULL
## ..@ face : chr "bold"
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 12
## ..@ hjust : NULL
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## @ complete: logi FALSE
## @ validate: logi TRUE
geom_hline(yintercept = 0, linetype = "dashed", color = "gray40")
## mapping: yintercept = ~yintercept
## geom_hline: na.rm = FALSE
## stat_identity: na.rm = FALSE
## position_identity
# Convertir a gráfico interactivo con plotly
ggplotly(p)%>%
layout(
title = list(
x = 0.5,
font = list(family = "Montserrat", size = 22, face = "Bold", hjust = 0.5)
)
)
Extracción señales variable 2
# Cargar librerías necesarias
library(ggplot2)
library(plotly)
library(RColorBrewer)
library(showtext)
library(sysfonts)
# Agregamos fuente de texto
font_add_google("Montserrat", "montserrat")
showtext_auto()
# Definimos colores
colores <- c(
"Estacional" = "#4B2E1F",
"Tendencia" = "#7B4A2F",
"Residuo" = "#A6192E",
"Serie Original" = "#2F6B3C"
)
# Descomposición de la serie temporal
stl_decomp_var2 <- stl(variable2_ts, s.window = "periodic")
# Convertir la descomposición a un data frame para graficar con ggplot2
stl_df_var2 <- data.frame(
Time = rep(time(variable2_ts), 4), # Tiempo repetido para cada componente
Value = c(stl_decomp_var2$time.series[, "seasonal"],
stl_decomp_var2$time.series[, "trend"],
stl_decomp_var2$time.series[, "remainder"],
variable2_ts),
Component = rep(c("Estacional", "Tendencia", "Residuo", "Serie Original"), each = length(variable2_ts))
)
# Crear gráfico con ggplot2
p <- ggplot(stl_df_var2, aes(x = Time, y = Value, color = Component)) +
geom_line(size = 0.9) +
facet_wrap(~Component, scales = "free_y", ncol = 1) +
scale_color_manual(values = colores) +
theme_minimal(base_size = 13) +
labs(title = "Descomposición temporal del precio interno del café",
x = "Tiempo",
y = "Valor"
)
theme(
plot.title = element_text(family = "montserrat", size = 18, face = "bold", hjust = 0.5),
plot.subtitle = element_text(size = 13, hjust = 0.5),
strip.text = element_text(size = 12, face = "bold"),
axis.title = element_text(family = "sans", size = 12),
axis.text = element_text(family = "sans", size = 10),
legend.position = "none",
panel.grid.minor = element_blank()
)
## <theme> List of 7
## $ axis.title : <ggplot2::element_text>
## ..@ family : chr "sans"
## ..@ face : NULL
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 12
## ..@ hjust : NULL
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## $ axis.text : <ggplot2::element_text>
## ..@ family : chr "sans"
## ..@ face : NULL
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 10
## ..@ hjust : NULL
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## $ legend.position : chr "none"
## $ panel.grid.minor: <ggplot2::element_blank>
## $ plot.title : <ggplot2::element_text>
## ..@ family : chr "montserrat"
## ..@ face : chr "bold"
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 18
## ..@ hjust : num 0.5
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## $ plot.subtitle : <ggplot2::element_text>
## ..@ family : NULL
## ..@ face : NULL
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 13
## ..@ hjust : num 0.5
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## $ strip.text : <ggplot2::element_text>
## ..@ family : NULL
## ..@ face : chr "bold"
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 12
## ..@ hjust : NULL
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## @ complete: logi FALSE
## @ validate: logi TRUE
geom_hline(yintercept = 0, linetype = "dashed", color = "gray40")
## mapping: yintercept = ~yintercept
## geom_hline: na.rm = FALSE
## stat_identity: na.rm = FALSE
## position_identity
# Convertir a gráfico interactivo con plotly
ggplotly(p)%>%
layout(
title = list(
x = 0.5,
font = list(family = "Montserrat", size = 22, face = "Bold", hjust = 0.5)
)
)
Extracción señales variable 3
# Cargar librerías necesarias
library(ggplot2)
library(plotly)
library(RColorBrewer)
library(showtext)
library(sysfonts)
# Agregamos fuente de texto
font_add_google("Montserrat", "montserrat")
showtext_auto()
# Definimos colores
colores <- c(
"Estacional" = "#4B2E1F",
"Tendencia" = "#7B4A2F",
"Residuo" = "#A6192E",
"Serie Original" = "#2F6B3C"
)
# Descomposición de la serie temporal
stl_decomp_var3 <- stl(variable3_ts, s.window = "periodic")
# Convertir la descomposición a un data frame para graficar con ggplot2
stl_df_var3 <- data.frame(
Time = rep(time(variable3_ts), 4), # Tiempo repetido para cada componente
Value = c(stl_decomp_var3$time.series[, "seasonal"],
stl_decomp_var3$time.series[, "trend"],
stl_decomp_var3$time.series[, "remainder"],
variable3_ts),
Component = rep(c("Estacional", "Tendencia", "Residuo", "Serie Original"), each = length(variable3_ts))
)
# Crear gráfico con ggplot2
p <- ggplot(stl_df_var3, aes(x = Time, y = Value, color = Component)) +
geom_line(size = 0.9) +
facet_wrap(~Component, scales = "free_y", ncol = 1) +
scale_color_manual(values = colores) +
theme_minimal(base_size = 13) +
labs(title = "Descomposición temporal del precio externo del café",
x = "Tiempo",
y = "Valor"
)
theme(
plot.title = element_text(family = "montserrat", size = 18, face = "bold", hjust = 0.5),
plot.subtitle = element_text(size = 13, hjust = 0.5),
strip.text = element_text(size = 12, face = "bold"),
axis.title = element_text(family = "sans", size = 12),
axis.text = element_text(family = "sans", size = 10),
legend.position = "none",
panel.grid.minor = element_blank()
)
## <theme> List of 7
## $ axis.title : <ggplot2::element_text>
## ..@ family : chr "sans"
## ..@ face : NULL
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 12
## ..@ hjust : NULL
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## $ axis.text : <ggplot2::element_text>
## ..@ family : chr "sans"
## ..@ face : NULL
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 10
## ..@ hjust : NULL
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## $ legend.position : chr "none"
## $ panel.grid.minor: <ggplot2::element_blank>
## $ plot.title : <ggplot2::element_text>
## ..@ family : chr "montserrat"
## ..@ face : chr "bold"
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 18
## ..@ hjust : num 0.5
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## $ plot.subtitle : <ggplot2::element_text>
## ..@ family : NULL
## ..@ face : NULL
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 13
## ..@ hjust : num 0.5
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## $ strip.text : <ggplot2::element_text>
## ..@ family : NULL
## ..@ face : chr "bold"
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 12
## ..@ hjust : NULL
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## @ complete: logi FALSE
## @ validate: logi TRUE
geom_hline(yintercept = 0, linetype = "dashed", color = "gray40")
## mapping: yintercept = ~yintercept
## geom_hline: na.rm = FALSE
## stat_identity: na.rm = FALSE
## position_identity
# Convertir a gráfico interactivo con plotly
ggplotly(p)%>%
layout(
title = list(
x = 0.5 ,
font = list(family = "Montserrat", size = 22, face = "Bold", hjust = 0.5)
)
)
Extracción señales variable 4
# Cargar librerías necesarias
library(ggplot2)
library(plotly)
library(RColorBrewer)
library(showtext)
library(sysfonts)
# Agregamos fuente de texto
font_add_google("Montserrat", "montserrat")
showtext_auto()
# Definimos colores
colores <- c(
"Estacional" = "#4B2E1F",
"Tendencia" = "#7B4A2F",
"Residuo" = "#A6192E",
"Serie Original" = "#2F6B3C"
)
# Descomposición de la serie temporal
stl_decomp_var4 <- stl(variable4_ts, s.window = "periodic")
# Convertir la descomposición a un data frame para graficar con ggplot2
stl_df_var4 <- data.frame(
Time = rep(time(variable4_ts), 4), # Tiempo repetido para cada componente
Value = c(stl_decomp_var4$time.series[, "seasonal"],
stl_decomp_var4$time.series[, "trend"],
stl_decomp_var4$time.series[, "remainder"],
variable4_ts),
Component = rep(c("Estacional", "Tendencia", "Residuo", "Serie Original"), each = length(variable4_ts))
)
# Crear gráfico con ggplot2
p <- ggplot(stl_df_var4, aes(x = Time, y = Value, color = Component)) +
geom_line(size = 0.9) +
facet_wrap(~Component, scales = "free_y", ncol = 1) +
scale_color_manual(values = colores) +
theme_minimal(base_size = 13) +
labs(title = "Descomposición temporal de las exportaciones de café",
x = "Tiempo",
y = "Valor"
)
theme(
plot.title = element_text(family = "montserrat", size = 18, face = "bold", hjust = 0.5),
plot.subtitle = element_text(size = 13, hjust = 0.5),
strip.text = element_text(size = 12, face = "bold"),
axis.title = element_text(family = "sans", size = 12),
axis.text = element_text(family = "sans", size = 10),
legend.position = "none",
panel.grid.minor = element_blank()
)
## <theme> List of 7
## $ axis.title : <ggplot2::element_text>
## ..@ family : chr "sans"
## ..@ face : NULL
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 12
## ..@ hjust : NULL
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## $ axis.text : <ggplot2::element_text>
## ..@ family : chr "sans"
## ..@ face : NULL
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 10
## ..@ hjust : NULL
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## $ legend.position : chr "none"
## $ panel.grid.minor: <ggplot2::element_blank>
## $ plot.title : <ggplot2::element_text>
## ..@ family : chr "montserrat"
## ..@ face : chr "bold"
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 18
## ..@ hjust : num 0.5
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## $ plot.subtitle : <ggplot2::element_text>
## ..@ family : NULL
## ..@ face : NULL
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 13
## ..@ hjust : num 0.5
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## $ strip.text : <ggplot2::element_text>
## ..@ family : NULL
## ..@ face : chr "bold"
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 12
## ..@ hjust : NULL
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## @ complete: logi FALSE
## @ validate: logi TRUE
geom_hline(yintercept = 0, linetype = "dashed", color = "gray40")
## mapping: yintercept = ~yintercept
## geom_hline: na.rm = FALSE
## stat_identity: na.rm = FALSE
## position_identity
# Convertir a gráfico interactivo con plotly
ggplotly(p)%>%
layout(
title = list(
x = 0.5,
font = list(family = "Montserrat", size = 22, face = "Bold", hjust = 0.5)
)
)
Extracción señales variable 5
# Cargar librerías necesarias
library(ggplot2)
library(plotly)
library(RColorBrewer)
library(showtext)
library(sysfonts)
# Agregamos fuente de texto
font_add_google("Montserrat", "montserrat")
showtext_auto()
# Definimos colores
colores <- c(
"Estacional" = "#4B2E1F",
"Tendencia" = "#7B4A2F",
"Residuo" = "#A6192E",
"Serie Original" = "#2F6B3C"
)
# Descomposición de la serie temporal
stl_decomp_var5 <- stl(variable5_ts, s.window = "periodic")
# Convertir la descomposición a un data frame para graficar con ggplot2
stl_df_var5 <- data.frame(
Time = rep(time(variable5_ts), 4), # Tiempo repetido para cada componente
Value = c(stl_decomp_var5$time.series[, "seasonal"],
stl_decomp_var5$time.series[, "trend"],
stl_decomp_var5$time.series[, "remainder"],
variable5_ts),
Component = rep(c("Estacional", "Tendencia", "Residuo", "Serie Original"), each = length(variable5_ts))
)
# Crear gráfico con ggplot2
p <- ggplot(stl_df_var5, aes(x = Time, y = Value, color = Component)) +
geom_line(size = 0.9) +
facet_wrap(~Component, scales = "free_y", ncol = 1) +
scale_color_manual(values = colores) +
theme_minimal(base_size = 13) +
labs(title = "Descomposición temporal de la tasa de cambio",
x = "Tiempo",
y = "Valor")
theme(
plot.title = element_text(family = "montserrat", size = 18, face = "bold", hjust = 0.5),
plot.subtitle = element_text(size = 13, hjust = 0.5),
strip.text = element_text(size = 12, face = "bold"),
axis.title = element_text(family = "sans", size = 12),
axis.text = element_text(family = "sans", size = 10),
legend.position = "none",
panel.grid.minor = element_blank()
)
## <theme> List of 7
## $ axis.title : <ggplot2::element_text>
## ..@ family : chr "sans"
## ..@ face : NULL
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 12
## ..@ hjust : NULL
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## $ axis.text : <ggplot2::element_text>
## ..@ family : chr "sans"
## ..@ face : NULL
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 10
## ..@ hjust : NULL
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## $ legend.position : chr "none"
## $ panel.grid.minor: <ggplot2::element_blank>
## $ plot.title : <ggplot2::element_text>
## ..@ family : chr "montserrat"
## ..@ face : chr "bold"
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 18
## ..@ hjust : num 0.5
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## $ plot.subtitle : <ggplot2::element_text>
## ..@ family : NULL
## ..@ face : NULL
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 13
## ..@ hjust : num 0.5
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## $ strip.text : <ggplot2::element_text>
## ..@ family : NULL
## ..@ face : chr "bold"
## ..@ italic : chr NA
## ..@ fontweight : num NA
## ..@ fontwidth : num NA
## ..@ colour : NULL
## ..@ size : num 12
## ..@ hjust : NULL
## ..@ vjust : NULL
## ..@ angle : NULL
## ..@ lineheight : NULL
## ..@ margin : NULL
## ..@ debug : NULL
## ..@ inherit.blank: logi FALSE
## @ complete: logi FALSE
## @ validate: logi TRUE
geom_hline(yintercept = 0, linetype = "dashed", color = "gray40")
## mapping: yintercept = ~yintercept
## geom_hline: na.rm = FALSE
## stat_identity: na.rm = FALSE
## position_identity
# Convertir a gráfico interactivo con plotly
ggplotly(p)%>%
layout(
title = list(
x = 0.5,
font = list(family = "Montserrat", size = 22, face = "Bold")
)
)
Después de la descomposición temporal de cada variable, se extrae la variable ajustada por estacionalidad para graficarla junto con la serie original:
Se crea la variable1 ajustada por estacionalidad
# Extraer los componentes de la descomposición
variable1_sa <- variable1_ts - stl_decomp_var1$time.series[, "seasonal"]
Se crea la variable2 ajustada por estacionalidad
# Extraer los componentes de la descomposición
variable2_sa <- variable2_ts - stl_decomp_var2$time.series[, "seasonal"]
Se crea la variable3 ajustada por estacionalidad
# Extraer los componentes de la descomposición
variable3_sa <- variable3_ts - stl_decomp_var3$time.series[, "seasonal"]
Se crea la variable4 ajustada por estacionalidad
# Extraer los componentes de la descomposición
variable4_sa <- variable4_ts - stl_decomp_var4$time.series[, "seasonal"]
Se crea la variable5 ajustada por estacionalidad
# Extraer los componentes de la descomposición
variable5_sa <- variable5_ts - stl_decomp_var5$time.series[, "seasonal"]
Ahora si se puede graficar las series originales versus la ajustada por estacionalidad
Gráfico serie original VS ajustada Variable 1
# Crear vector de fechas correctamente alineado con la serie
fechas_var1 <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable1_ts))
# Gráfico mejorado con fechas en el eje X
grafico_ajustada_var1 <- ggplot() +
geom_line(aes(x = fechas_var1, y = variable1_ts), color = "grey", size = 0.5, linetype = "solid", name = "Serie Original") +
geom_line(aes(x = fechas_var1, y = variable1_sa), color = "black", size = 0.6, linetype = "solid", name = "Serie Ajustada") +
ggtitle("Variable Producción: Serie Original vs Serie Ajustada por Estacionalidad") +
xlab("Tiempo") +
ylab("Unidad de medida variable 1") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas para mejor visualización
# Convertir a gráfico interactivo
ggplotly(grafico_ajustada_var1)%>%
layout(
title = list(
x = 0.5,
font = list(family = "Montserrat", size = 22, face = "Bold", hjust = 0.5)
)
)
Gráfico serie original VS ajustada Variable 2
# Crear vector de fechas correctamente alineado con la serie
fechas_var2 <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable2_ts))
# Gráfico mejorado con fechas en el eje X
grafico_ajustada_var2 <- ggplot() +
geom_line(aes(x = fechas_var2, y = variable2_ts), color = "grey", size = 0.5, linetype = "solid", name = "Serie Original") +
geom_line(aes(x = fechas_var2, y = variable2_sa), color = "black", size = 0.6, linetype = "solid", name = "Serie Ajustada") +
ggtitle("Variable Precio Interno: Serie Original vs Serie Ajustada por Estacionalidad") +
xlab("Tiempo") +
ylab("Unidad de medida variable 2") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas para mejor visualización
# Convertir a gráfico interactivo
ggplotly(grafico_ajustada_var2)%>%
layout(
title = list(
x = 0.5,
font = list(family = "Montserrat", size = 22, face = "Bold", hjust = 0.5)
)
)
Gráfico serie original VS ajustada Variable 3
# Crear vector de fechas correctamente alineado con la serie
fechas_var3 <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable3_ts))
# Gráfico mejorado con fechas en el eje X
grafico_ajustada_var3 <- ggplot() +
geom_line(aes(x = fechas_var3, y = variable3_ts), color = "grey", size = 0.5, linetype = "solid", name = "Serie Original") +
geom_line(aes(x = fechas_var3, y = variable3_sa), color = "black", size = 0.6, linetype = "solid", name = "Serie Ajustada") +
ggtitle("Variable Precio Externo: Serie Original vs Serie Ajustada por Estacionalidad") +
xlab("Tiempo") +
ylab("Unidad de medida variable 3") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas para mejor visualización
# Convertir a gráfico interactivo
ggplotly(grafico_ajustada_var3)%>%
layout(
title = list(
x = 0.5 ,
font = list(family = "Montserrat", size = 22, face = "Bold", hjust = 0.5)
)
)
Gráfico serie original VS ajustada Variable 4
# Crear vector de fechas correctamente alineado con la serie
fechas_var4 <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable4_ts))
# Gráfico mejorado con fechas en el eje X
grafico_ajustada_var4 <- ggplot() +
geom_line(aes(x = fechas_var4, y = variable4_ts), color = "grey", size = 0.5, linetype = "solid", name = "Serie Original") +
geom_line(aes(x = fechas_var4, y = variable4_sa), color = "black", size = 0.6, linetype = "solid", name = "Serie Ajustada") +
ggtitle("Variable Exportaciones: Serie Original vs Serie Ajustada por Estacionalidad") +
xlab("Tiempo") +
ylab("Unidad de medida variable 4") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas para mejor visualización
# Convertir a gráfico interactivo
ggplotly(grafico_ajustada_var4)%>%
layout(
title = list(
x = 0.5 ,
font = list(family = "Montserrat", size = 22, face = "Bold", hjust = 0.5)
)
)
Gráfico serie original VS ajustada Variable 5
# Crear vector de fechas correctamente alineado con la serie
fechas_var5 <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable5_ts))
# Gráfico mejorado con fechas en el eje X
grafico_ajustada_var5 <- ggplot() +
geom_line(aes(x = fechas_var5, y = variable5_ts), color = "grey", size = 0.5, linetype = "solid", name = "Serie Original") +
geom_line(aes(x = fechas_var5, y = variable5_sa), color = "black", size = 0.6, linetype = "solid", name = "Serie Ajustada") +
ggtitle("Variable Tasa de Cambio: Serie Original vs Serie Ajustada por Estacionalidad") +
xlab("Tiempo") +
ylab("Unidad de medida variable 5") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas para mejor visualización
# Convertir a gráfico interactivo
ggplotly(grafico_ajustada_var5)%>%
layout(
title = list(
x = 0.5 ,
font = list(family = "Montserrat", size = 22, face = "Bold", hjust = 0.5)
)
)
Ahora graficamos serie original vs tendencia
Primero se debe obtener la tendencia de cada variable y luego graficarla
Tendencia Variable 1
library(ggplot2)
library(plotly)
# Convertir la serie a un vector numérico
variable1_vec <- as.numeric(variable1_ts)
tendencia_var1 <- as.numeric(stl_decomp_var1$time.series[, "trend"])
# Asegurar que 'fechas' tenga la misma longitud
fechas <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable1_ts))
# Gráfico interactivo de la serie original vs tendencia
grafico_tendencia_var1 <- ggplot() +
geom_line(aes(x = fechas, y = variable1_vec, color = "Serie Original"), size = 0.7, linetype = "solid") +
geom_line(aes(x = fechas, y = tendencia_var1, color = "Tendencia"), size = 0.8, linetype = "solid") +
scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "black")) +
ggtitle("Variable Produccion: Serie Original vs Tendencia") +
xlab("Tiempo") +
ylab("Unidad de medida Variable 1") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas del eje X
# Convertir a gráfico interactivo con plotly
ggplotly(grafico_tendencia_var1)%>%
layout(
title = list(
x = 0.5 ,
font = list(family = "Montserrat", size = 22, face = "Bold", hjust = 0.5)
)
)
Tendencia Variable 2
library(ggplot2)
library(plotly)
# Convertir la serie a un vector numérico
variable2_vec <- as.numeric(variable2_ts)
tendencia_var2 <- as.numeric(stl_decomp_var2$time.series[, "trend"])
# Asegurar que 'fechas' tenga la misma longitud
fechas <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable2_ts))
# Gráfico interactivo de la serie original vs tendencia
grafico_tendencia_var2 <- ggplot() +
geom_line(aes(x = fechas, y = variable2_vec, color = "Serie Original"), size = 0.7, linetype = "solid") +
geom_line(aes(x = fechas, y = tendencia_var2, color = "Tendencia"), size = 0.8, linetype = "solid") +
scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "black")) +
ggtitle("Variable Precio Interno: Serie Original vs Tendencia") +
xlab("Tiempo") +
ylab("Unidad de medida Variable 2") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas del eje X
# Convertir a gráfico interactivo con plotly
ggplotly(grafico_tendencia_var2)%>%
layout(
title = list(
x = 0.5 ,
font = list(family = "Montserrat", size = 22, face = "Bold", hjust = 0.5)
)
)
Tendencia Variable 3
library(ggplot2)
library(plotly)
# Convertir la serie a un vector numérico
variable3_vec <- as.numeric(variable3_ts)
tendencia_var3 <- as.numeric(stl_decomp_var3$time.series[, "trend"])
# Asegurar que 'fechas' tenga la misma longitud
fechas <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable3_ts))
# Gráfico interactivo de la serie original vs tendencia
grafico_tendencia_var3 <- ggplot() +
geom_line(aes(x = fechas, y = variable3_vec, color = "Serie Original"), size = 0.7, linetype = "solid") +
geom_line(aes(x = fechas, y = tendencia_var3, color = "Tendencia"), size = 0.8, linetype = "solid") +
scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "black")) +
ggtitle("Variable Precio Externo: Serie Original vs Tendencia") +
xlab("Tiempo") +
ylab("Unidad de medida Variable 3") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas del eje X
# Convertir a gráfico interactivo con plotly
ggplotly(grafico_tendencia_var3)%>%
layout(
title = list(
x = 0.5 ,
font = list(family = "Montserrat", size = 22, face = "Bold", hjust = 0.5)
)
)
Tendencia Variable 4
library(ggplot2)
library(plotly)
# Convertir la serie a un vector numérico
variable4_vec <- as.numeric(variable4_ts)
tendencia_var4 <- as.numeric(stl_decomp_var4$time.series[, "trend"])
# Asegurar que 'fechas' tenga la misma longitud
fechas <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable4_ts))
# Gráfico interactivo de la serie original vs tendencia
grafico_tendencia_var4 <- ggplot() +
geom_line(aes(x = fechas, y = variable4_vec, color = "Serie Original"), size = 0.7, linetype = "solid") +
geom_line(aes(x = fechas, y = tendencia_var4, color = "Tendencia"), size = 0.8, linetype = "solid") +
scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "black")) +
ggtitle("Variable Exportaciones: Serie Original vs Tendencia") +
xlab("Tiempo") +
ylab("Unidad de medida Variable 4") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas del eje X
# Convertir a gráfico interactivo con plotly
ggplotly(grafico_tendencia_var4)%>%
layout(
title = list(
x = 0.5 ,
font = list(family = "Montserrat", size = 22, face = "Bold", hjust = 0.5)
)
)
Tendencia Variable 5
library(ggplot2)
library(plotly)
# Convertir la serie a un vector numérico
variable5_vec <- as.numeric(variable5_ts)
tendencia_var5 <- as.numeric(stl_decomp_var5$time.series[, "trend"])
# Asegurar que 'fechas' tenga la misma longitud
fechas <- seq.Date(from = as.Date("2012-01-01"), by = "month", length.out = length(variable5_ts))
# Gráfico interactivo de la serie original vs tendencia
grafico_tendencia_var5 <- ggplot() +
geom_line(aes(x = fechas, y = variable5_vec, color = "Serie Original"), size = 0.7, linetype = "solid") +
geom_line(aes(x = fechas, y = tendencia_var5, color = "Tendencia"), size = 0.8, linetype = "solid") +
scale_color_manual(values = c("Serie Original" = "grey", "Tendencia" = "black")) +
ggtitle("Variable Tasa de Cambio: Serie Original vs Tendencia") +
xlab("Tiempo") +
ylab("Unidad de medida Variable 5") +
theme_minimal() +
theme(axis.text.x = element_text(angle = 45, hjust = 1)) # Rotar etiquetas del eje X
# Convertir a gráfico interactivo con plotly
ggplotly(grafico_tendencia_var5)%>%
layout(
title = list(
x = 0.5 ,
font = list(family = "Montserrat", size = 22, face = "Bold", hjust = 0.5)
)
)
Ahora calculamos la tasa de crecimiento de la serie original vs tendencia:
Tasa de crecimiento de la serie de tendencia y original para la variable 1
#Cálculo de la tasa de crecimiento anual correctamente alineada
tasa_crecimiento_var1 <- (variable1_ts[(13:length(variable1_ts))] / variable1_ts[1:(length(variable1_ts) - 12)] - 1) * 100
tasa_tendencia_var1 <- (tendencia_var1[(13:length(tendencia_var1))] / tendencia_var1[1:(length(tendencia_var1) - 12)] - 1) * 100
# Crear vector de fechas corregido, es decir que inicie desde enero 2013
fechas_corregidas_var1 <- seq(from = as.Date("2013-01-01"), by = "month", length.out = length(tasa_crecimiento_var1))
# Verificar longitudes
print(length(fechas_corregidas_var1))
## [1] 144
print(length(tasa_crecimiento_var1))
## [1] 144
print(length(tasa_tendencia_var1))
## [1] 144
*Gráfico variable original y tendencia variable 1: tasa de crecimiento anual**
library(ggplot2)
library(plotly)
# Gráfico de la tasa de crecimiento anual variable 1
grafico_crecimiento_var1 <- ggplot() +
geom_line(aes(x = fechas_corregidas_var1, y = tasa_crecimiento_var1), color = "grey", size = 0.7) +
geom_line(aes(x = fechas_corregidas_var1, y = tasa_tendencia_var1), color = "black", size = 0.8, linetype = "dashed") +
ggtitle("Variable Producción: Tasa de crecimiento anual % de la serie Original y la tendencia") +
xlab("Tiempo") +
ylab("% de Crecimiento Anual") +
theme_minimal()
# Convertir a gráfico interactivo
ggplotly(grafico_crecimiento_var1)%>%
layout(
title = list(
x = 0.5 ,
font = list(family = "Montserrat", size = 22, face = "Bold", hjust = 0.5)
)
)
Ahora calculamos la tasa de crecimiento de la serie original vs tendencia: variable 2
#Cálculo de la tasa de crecimiento anual correctamente alineada
tasa_crecimiento_var2 <- (variable2_ts[(13:length(variable2_ts))] / variable2_ts[1:(length(variable2_ts) - 12)] - 1) * 100
tasa_tendencia_var2 <- (tendencia_var2[(13:length(tendencia_var2))] / tendencia_var2[1:(length(tendencia_var2) - 12)] - 1) * 100
# Crear vector de fechas corregido
fechas_corregidas_var2 <- seq(from = as.Date("2013-01-01"), by = "month", length.out = length(tasa_crecimiento_var2))
# Verificar longitudes
print(length(fechas_corregidas_var2))
## [1] 144
print(length(tasa_crecimiento_var2))
## [1] 144
print(length(tasa_tendencia_var2))
## [1] 144
# Gráfico de la tasa de crecimiento anual variable 2
grafico_crecimiento_var2 <- ggplot() +
geom_line(aes(x = fechas_corregidas_var2, y = tasa_crecimiento_var2), color = "grey", size = 0.7) +
geom_line(aes(x = fechas_corregidas_var2, y = tasa_tendencia_var2), color = "black", size = 0.8, linetype = "dashed") +
ggtitle("Variable Precio INT: Tasa de crecimiento anual % de la serie Original y la Tendencia") +
xlab("Tiempo") +
ylab("% de Crecimiento Anual") +
theme_minimal()
# Convertir a gráfico interactivo
ggplotly(grafico_crecimiento_var2)%>%
layout(
title = list(
x = 0.5 ,
font = list(family = "Montserrat", size = 22, face = "Bold", hjust = 0.5)
)
)
Ahora calculamos la tasa de crecimiento de la serie original vs tendencia: variable 3
#Cálculo de la tasa de crecimiento anual correctamente alineada
tasa_crecimiento_var3 <- (variable3_ts[(13:length(variable3_ts))] / variable3_ts[1:(length(variable3_ts) - 12)] - 1) * 100
tasa_tendencia_var3 <- (tendencia_var3[(13:length(tendencia_var3))] / tendencia_var3[1:(length(tendencia_var3) - 12)] - 1) * 100
# Crear vector de fechas corregido
fechas_corregidas_var3 <- seq(from = as.Date("2013-01-01"), by = "month", length.out = length(tasa_crecimiento_var3))
# Verificar longitudes
print(length(fechas_corregidas_var3))
## [1] 144
print(length(tasa_crecimiento_var3))
## [1] 144
print(length(tasa_tendencia_var3))
## [1] 144
# Gráfico de la tasa de crecimiento anual variable 3
grafico_crecimiento_var3 <- ggplot() +
geom_line(aes(x = fechas_corregidas_var3, y = tasa_crecimiento_var3), color = "grey", size = 0.7) +
geom_line(aes(x = fechas_corregidas_var3, y = tasa_tendencia_var3), color = "black", size = 0.8, linetype = "dashed") +
ggtitle("Variable Precio EXT: Tasa de crecimiento anual % de la serie Original y la tendencia") +
xlab("Tiempo") +
ylab("% de Crecimiento Anual") +
theme_minimal()
# Convertir a gráfico interactivo
ggplotly(grafico_crecimiento_var3)%>%
layout(
title = list(
x = 0.5 ,
font = list(family = "Montserrat", size = 22, face = "Bold", hjust = 0.5)
)
)
Ahora calculamos la tasa de crecimiento de la serie original vs tendencia: variable 4
#Cálculo de la tasa de crecimiento anual correctamente alineada
tasa_crecimiento_var4 <- (variable4_ts[(13:length(variable4_ts))] / variable4_ts[1:(length(variable4_ts) - 12)] - 1) * 100
tasa_tendencia_var4 <- (tendencia_var4[(13:length(tendencia_var4))] / tendencia_var4[1:(length(tendencia_var4) - 12)] - 1) * 100
# Crear vector de fechas corregido
fechas_corregidas_var4 <- seq(from = as.Date("2013-01-01"), by = "month", length.out = length(tasa_crecimiento_var4))
# Verificar longitudes
print(length(fechas_corregidas_var4))
## [1] 144
print(length(tasa_crecimiento_var4))
## [1] 144
print(length(tasa_tendencia_var4))
## [1] 144
# Gráfico de la tasa de crecimiento anual variable 4
grafico_crecimiento_var4 <- ggplot() +
geom_line(aes(x = fechas_corregidas_var4, y = tasa_crecimiento_var4), color = "grey", size = 0.7) +
geom_line(aes(x = fechas_corregidas_var4, y = tasa_tendencia_var4), color = "black", size = 0.8, linetype = "dashed") +
ggtitle("Variable Exportación: Tasa de crecimiento anual % de la serie Original y la tendencia") +
xlab("Tiempo") +
ylab("% de Crecimiento Anual") +
theme_minimal()
# Convertir a gráfico interactivo
ggplotly(grafico_crecimiento_var4)%>%
layout(
title = list(
x = 0.5 ,
font = list(family = "Montserrat", size = 22, face = "Bold", hjust = 0.5)
)
)
Ahora calculamos la tasa de crecimiento de la serie original vs tendencia: variable 5
#Cálculo de la tasa de crecimiento anual correctamente alineada
tasa_crecimiento_var5 <- (variable5_ts[(13:length(variable5_ts))] / variable5_ts[1:(length(variable5_ts) - 12)] - 1) * 100
tasa_tendencia_var5 <- (tendencia_var5[(13:length(tendencia_var5))] / tendencia_var5[1:(length(tendencia_var5) - 12)] - 1) * 100
# Crear vector de fechas corregido
fechas_corregidas_var5 <- seq(from = as.Date("2013-01-01"), by = "month", length.out = length(tasa_crecimiento_var5))
# Verificar longitudes
print(length(fechas_corregidas_var5))
## [1] 144
print(length(tasa_crecimiento_var5))
## [1] 144
print(length(tasa_tendencia_var5))
## [1] 144
# Gráfico de la tasa de crecimiento anual variable 5
grafico_crecimiento_var5 <- ggplot() +
geom_line(aes(x = fechas_corregidas_var5, y = tasa_crecimiento_var5), color = "grey", size = 0.7) +
geom_line(aes(x = fechas_corregidas_var5, y = tasa_tendencia_var5), color = "black", size = 0.8, linetype = "dashed") +
ggtitle("Variable TRM: Tasa de crecimiento anual % de la serie Original y la tendencia") +
xlab("Tiempo") +
ylab("% de Crecimiento Anual") +
theme_minimal()
# Convertir a gráfico interactivo
ggplotly(grafico_crecimiento_var5)%>%
layout(
title = list(
font = list(family = "Montserrat", size = 22, face = "Bold", hjust = 0.5)
)
)
Analizar la tasa de crecimiento anual ayuda a detectar cambios en el entorno económico que afectan el sector. Se pueden prever crisis o períodos de auge y prepararse para ellos.