# Cargar librerías necesarias
library(readxl)
library(forecast)
## Registered S3 method overwritten by 'quantmod':
## method from
## as.zoo.data.frame zoo
library(tseries)
library(ggplot2)
library(plotly) # Para gráficos interactivos
##
## Adjuntando el paquete: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
library(timetk)
library(readxl)
data_col <- read_excel("~/econometria/PACCIONES COL.xlsx",
col_types = c("date", "numeric"))
View(data_col)
# Convertir/declarar variable 1=ENER en serie de tiempo mensual
variable1_ts <- ts(data_col$CCB, start = c(2010, 1), frequency = 12)
variable1_ts
## Jan Feb Mar Apr May Jun Jul Aug
## 2010 6072.93 6083.28 6197.08 5959.13 5814.29 5897.06 5907.41 6114.32
## 2011 5917.75 5690.14 5617.72 5534.96 5969.48 5834.98 5700.49 5741.87
## 2012 5638.42 5638.42 5741.87 6310.89 5793.60 7000.00 7080.00 7100.00
## 2013 10940.00 9300.00 8700.00 8150.00 7800.00 7980.00 8650.00 9160.00
## 2014 8330.00 9200.00 10080.00 10800.00 10800.00 11820.00 11000.00 11300.00
## 2015 9200.00 8960.00 8530.00 10120.00 9200.00 9250.00 9870.00 9760.00
## 2016 9800.00 10300.00 11620.00 11580.00 11640.00 11920.00 11500.00 11800.00
## 2017 11660.00 11700.00 11800.00 11900.00 11720.00 11840.00 11900.00 11960.00
## 2018 11300.00 10440.00 9690.00 9930.00 9200.00 9800.00 9200.00 9020.00
## 2019 8080.00 8130.00 7880.00 8070.00 7290.00 7500.00 7690.00 7680.00
## 2020 6500.00 5300.00 4090.00 3895.00 3500.00 3400.00 3660.00 5000.00
## 2021 5840.00 5770.00 5150.00 5130.00 5070.00 5350.00 5595.00 5900.00
## 2022 6480.00 6070.00 6230.00 6005.00 5500.00 4640.00 3900.00 3489.00
## 2023 3213.00 3012.00 3018.00 3090.00 3180.00 3400.00 3540.00 2902.00
## 2024 6400.00 6790.00 8640.00 8120.00 8200.00 8330.00 8350.00 8320.00
## 2025 10340.00 10700.00
## Sep Oct Nov Dec
## 2010 6517.80 6569.53 5886.71 5897.06
## 2011 5638.42 5555.65 5514.27 5617.72
## 2012 7820.00 8760.00 9120.00 10100.00
## 2013 10000.00 9990.00 9330.00 9800.00
## 2014 10800.00 10500.00 9540.00 10200.00
## 2015 9440.00 9600.00 9360.00 9720.00
## 2016 11480.00 11900.00 10940.00 11860.00
## 2017 11700.00 11100.00 10600.00 11520.00
## 2018 7700.00 7020.00 7000.00 6960.00
## 2019 7440.00 7630.00 6200.00 7300.00
## 2020 4630.00 4555.00 4980.00 6180.00
## 2021 5895.00 6350.00 6010.00 6110.00
## 2022 3380.00 3330.00 3503.00 3600.00
## 2023 4910.00 4736.00 5540.00 6110.00
## 2024 7500.00 8590.00 9620.00 10200.00
## 2025
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("2010-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 1: Serie original") +
xlab("Tiempo") +
ylab("Unidad Variable 1") +
theme_minimal()
ggplotly(grafico_serie)
# Cargar librerías necesarias
library(ggplot2)
library(plotly)
# 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 (son 4 componentes)
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() +
facet_wrap(~Component, scales = "free_y", ncol = 1) +
theme_minimal() +
labs(title = "Descomposición temporal de la variable 1",
x = "Tiempo",
y = "Valor")
# Convertir a gráfico interactivo con plotly
ggplotly(p)
La descomposición temporal de la serie muestra cuatro componentes clave: tendencia, estacionalidad, residuo y serie original. La serie original (azul) refleja la evolución del valor de la variable a lo largo del tiempo, con fluctuaciones notables. La tendencia (morado) indica un comportamiento cíclico, con picos alrededor de 2015 y 2025, y una caída entre 2020 y 2023, lo que sugiere posibles periodos de expansión y contracción en la serie. La componente estacional (naranja) muestra un patrón recurrente con variaciones regulares en el tiempo, lo que sugiere efectos estacionales significativos en los datos. El residuo (verde) representa las fluctuaciones no explicadas por la tendencia y la estacionalidad, con alta variabilidad en ciertos periodos, indicando momentos de mayor incertidumbre o eventos inesperados. En general, la serie parece tener una estructura bien definida con patrones cíclicos y estacionales,
# Extraer los componentes de la descomposición
variable1_sa <- variable1_ts - stl_decomp_var1$time.series[, "seasonal"]
##Gráfico serie original VS ajustada Variable 1
# Crear vector de fechas correctamente alineado con la serie
fechas_var1 <- seq.Date(from = as.Date("2010-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 1: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
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning in geom_line(aes(x = fechas_var1, y = variable1_ts), color = "grey", :
## Ignoring unknown parameters: `name`
## Warning in geom_line(aes(x = fechas_var1, y = variable1_sa), color = "black", :
## Ignoring unknown parameters: `name`
# Convertir a gráfico interactivo
ggplotly(grafico_ajustada_var1)
## Don't know how to automatically pick scale for object of type <ts>. Defaulting
## to continuous.
##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("2010-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 1: 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)
##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("2010-01-01"), by = "month", length.out = length(tasa_crecimiento_var1))
# Verificar longitudes
print(length(fechas_corregidas_var1))
## [1] 170
print(length(tasa_crecimiento_var1))
## [1] 170
print(length(tasa_tendencia_var1))
## [1] 170
##*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 = "gray", size = 0.7) +
geom_line(aes(x = fechas_corregidas_var1, y = tasa_tendencia_var1), color = "green", size = 0.8, linetype = "dashed") +
ggtitle("Variable1: 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)
La acción de Argos ha mostrado un comportamiento cíclico con periodos de fuerte crecimiento y correcciones significativas. Entre 2010 y 2015, su crecimiento fue impulsado por la expansión del sector construcción, alcanzando picos por encima del 50%. Sin embargo, entre 2015 y 2019, la tasa de crecimiento disminuyó, posiblemente debido a una desaceleración económica y menor demanda en el sector. A partir de 2020, la acción experimentó un repunte agresivo, superando el 150% en 2022-2023, impulsado por la recuperación post-pandemia y la reactivación de la construcción. No obstante, en los últimos meses ha mostrado una corrección, lo que sugiere que el mercado ajusta sus expectativas ante factores como tasas de interés altas y una posible reducción en la inversión en infraestructura.