##IMPORTANDO MOEDELO descomposicion de series temporales (enfoque tradicional)

library(readxl)
library(forecast)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
#Aqui se carga los datos del archivo
serie.ivae<-read_excel("C:/doc R/IVAE_SLV_A.xlsx",col_types = c("skip","numeric"),skip = 5) 
#objeto de serie temporal
serie.ivae.ts<-ts(data = serie.ivae,start = c(2009,1),frequency = 12)
#Grafica de la serie temporal
serie.ivae.ts%>%
  autoplot(main="IVAE, El Salvador 2009-2021[marzo]",
           xlab = "Años/Meses",
           ylab = "Indice")

##MODELO ADITIVO Yt=Tt+Ct+St+It

###Componente de Tendendia Tt (Componente TCt)

#construimos un promedio movil centrado (la linea roja)
ma2_12<- ma(serie.ivae.ts,12,centre = TRUE)
autoplot(serie.ivae.ts,main = "IVAE, El Salvador 2009-2021[marzo]",
         xlab = "Años/meses",
         ylab = "Indice")+
  autolayer(ma2_12,series = "Tt")
## Warning: Removed 12 row(s) containing missing values (geom_path).

Cálculo de los factores estacionales (componentes St)

library(magrittr)
#cambiamos nombres para darle consistencia teorica
Yt<-serie.ivae.ts #serie original
Tt<-ma2_12 #Media movil centrada (2x12-MA) como componente de Tendencia Ciclo

#insumo paara obtener el componente estacional
SI<-Yt-Tt #Diferencia que contiene componentes Estacional e irregular (combinacion de componente estacional e irregular)

St<-tapply(SI,cycle(SI),mean, na.rm=TRUE) #promediando los resultados de cada mes

#Los factores estacionales deben sumar "0" en el modelo aditivo
St<-St-sum(St)/12 #normalizamos (>0 arriba de la tendencia)

#Generar la serie de factores para cada valor de la serie original
St<-rep(St, len=length(Yt))%>% ts(start = c(2009,1),frequency = 12)
autoplot(St,
         main = "Factores Estacionales",
         xlab = "Años/Meses",
         ylab = "Factor Estacional")

Cálculo del componente irregular(It) It=Yt-Tt-St

#restamos a la serie original las tendencias
It<-Yt-Tt-St
autoplot(It,
         main = "Componente irregular",
         xlab = "Años/meses",
         ylab = "It")

###Descomposicion aditiva (usando la libreria stats) ####nos da de una ves la serie temporal, la tendencia, el componente original y el estacional

#todo el proceso anterior de forma sencilla con "stats"
descomposicion_aditiva<-decompose(serie.ivae.ts,type = "additive")
autoplot(descomposicion_aditiva, main="Descomposicion Aditiva",xlab="Años/meses")

###Descomposicin aditiva usando libreria feasts

library(tsibble)
## 
## Attaching package: 'tsibble'
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, union
library(feasts)
## Loading required package: fabletools
## 
## Attaching package: 'fabletools'
## The following objects are masked from 'package:forecast':
## 
##     accuracy, forecast
library(ggplot2)
#transformar serie temporal a objeto tsibble
Yt%>%as_tsibble()%>%
  model(
    classical_decomposition(value, type = "additive")
  )%>%
  components()%>%
  autoplot()+
  labs(title = "Descomposicion clasica aditiva, IVAE")+xlab("Años/meses")
## Warning: Removed 6 row(s) containing missing values (geom_path).

##Modelo multiplicativo Yt=Tt.Ct.St.It ##misma unidad de valor pero componentes expresados como porcentaje de la tendencia

###Componente tendencia ciclo (Tt=TCt)

Tt<-ma(serie.ivae.ts,12,centre = TRUE) #promediar en funcion de la tendencia y centrar
autoplot(Tt,main = "Componente Tendencia (ciclo)",ylab = "Tt")

###Cálculo de factores estacionales(St)

SI<-Yt/Tt#Serie sin tendencia
St<-tapply(SI, cycle(SI), mean,na.rm=TRUE) #Promediando los resultados de cada mes

#los factores estacionales deben promediar "1" en el modelo muliplicativo
St<-St*12/sum(St)
#Gnerar la serie de factores para cada valor de la serie original
St<-rep(St,len=length(Yt))%>%ts(start = c(2009,1),frequency = 12)
autoplot(St,
         main = "Factores estacionales",
         xlab = "Años/meses",
         ylab = "Factor estacional")

###Cálculo del componente irregular(It) It=Yt/Tt*St

It<-Yt/(Tt*St)
autoplot(It,
         main = "Componente irregular",
         xlab = "Años/meses",
         ylab = "It")

###Descomposición multiplicativa (usando la libreria stats)

descomposicion_multiplicativa<-decompose(serie.ivae.ts,type = "multiplicative")
autoplot(descomposicion_multiplicativa,main="Desscomposicion multiplicativa",xlab="Años/meses")

###Descomposición multiplicativa usando libreria feasts

library(tsibble)
library(feasts)
library(ggplot2)
Yt%>%as_tsibble()%>%
  model(classical_decomposition(value,type = "multiplicative")) %>%components()%>%
  autoplot()+
  labs(title = "Descomposicion clasica multiplicativa,IVAE")+xlab("Años/meses")
## Warning: Removed 6 row(s) containing missing values (geom_path).

#PROBELMAS CON LOS GRAFICOS SON FIJOS SOLO PARA PRESENACIONES O IMPRESION NO INTERACTIVOS

##Descomposición usando la libreria TSstudio

library(TSstudio)
ts_decompose(Yt,type = "additive",showline = TRUE)
ts_seasonal(Yt,type = "box",title = "Análisis de valores estacionales")

#PRONOSTICO DE SERIES TEMPORALES, ENFOQUE DETERMINISTICO (CLASICO)

##Pronóstico a través del promedio histótico

library(forecast)
Xt<-c(24,13,20,19,25,20,18,18,19,15,17)
#Notese que si se omite el argumento de start, la serie temporal se genera respetando la periocidad, pero no se alude a los años
Xt<-ts(data = Xt,frequency = 12)
autoplot(Xt,
         main = "Ventas de la empresa",
         xlab = "meses",
         ylab = "US$")

library(forecast)
Ft<-forecast::meanf(y=Xt,
                    level = c(75,80,95),
                    h=3)
autoplot(Ft,
         main="Pronostico de ventas",
         xlab="meses",
         ylab="US$")

library(kableExtra)
library(magrittr)
Ft%>%kable()%>%kable_material()
Point Forecast Lo 75 Hi 75 Lo 80 Hi 80 Lo 95 Hi 95
Dec 1 18.90909 14.47372 23.34446 13.92557 23.89261 10.8169 27.00128
Jan 2 18.90909 14.47372 23.34446 13.92557 23.89261 10.8169 27.00128
Feb 2 18.90909 14.47372 23.34446 13.92557 23.89261 10.8169 27.00128
accuracy(Ft)
##                         ME     RMSE     MAE       MPE     MAPE MASE       ACF1
## Training set -9.689909e-16 3.315379 2.46281 -3.218575 13.66254  NaN -0.1850308

#PRÓNOSTICO DE SERIES TEMPORALES, ENFOQUE MODERNO (ESTOCÁSTICO) metodología Box-Jenkins

library(TSstudio)
library(forecast)

ts_plot(log(Yt))