library(forecast)
library(dplyr)
library(readr)
library(plotly)
demanda <- read_csv("AnalisisSeriesTemporales/datasets/demanda.csv",
col_types = cols(Comercial = col_skip(),
`Industrial/Comercial Grande` = col_skip(),
Residencial = col_skip()))
names(demanda)=c('Fecha','Demanda')
demanda$Fecha <- as.Date(demanda$Fecha, "%Y-%m-%d")
ts_demanda <- ts(demanda$Demanda, start=c(2013, 1, 1), frequency = 12)
plot_ly(data = demanda, x=~Fecha, y=~Demanda ,name='Demanda', type = 'scatter', mode = 'lines', line = list(color = 'steelblue') )
### Descomponer serie de tiempo
tmp1 <- stl(ts_demanda, s.window = "periodic")
stl_df <- as.data.frame(tmp1$time.series)
stl_df <- bind_cols (stl_df, Fecha=demanda$Fecha, Demanda= demanda$Demanda)
ax <- list( showticklabels = FALSE)
p1 <- plot_ly(data=stl_df , x=~ Fecha,y=~Demanda ) %>%
add_lines( name="Data")
p2 <- plot_ly(data=stl_df , x=~ Fecha,y=~seasonal ) %>%
add_lines( name="Seasonal") %>% layout(yaxis= ax)
p3 <- plot_ly(data=stl_df , x=~ Fecha,y=~trend ) %>%
add_lines( name="Trend") %>% layout(yaxis= ax)
p4 <- plot_ly(data=stl_df , x=~ Fecha,y=~remainder, type = 'bar', name="Remainders") %>%
layout(yaxis= ax)
subplot(p1, p2, p3, p4, nrows = 4, shareX = T ) %>% layout(title ="Series de Tiempo - Descomposición STL",legend = list(x = 100, y = 0.5))
1 - HW CON VALORES POR DEFECTO (alpha = NULL, beta = NULL, gamma = NULL, seasonal = “additive”)
# 1 - modelo por defecto (alpha = NULL, beta = NULL, gamma = NULL, seasonal = "additive") !!!
modelo_demanda_hw_1 <- HoltWinters(ts_demanda)
#obtengo la columna de ajuste
hw_fit_1 <- modelo_demanda_hw_1$fitted[,1]
demanda_hw_1 <- data.frame( "Fecha" = demanda$Fecha[13:nrow(demanda)],
"Demanda" = demanda$Demanda[13:nrow(demanda)],
"HoltWinters" = hw_fit_1)
#plotear ambas series
p5 <- plot_ly(data = demanda_hw_1, x=~Fecha, y=~Demanda ,name='Demanda', type = 'scatter', mode = 'lines', line = list(color = 'steelblue') ) %>%
add_trace(y = ~hw_fit_1 , name='HW-Default', mode='lines' ,line = list(color = 'green', width = 3)) %>%
layout(title = "METODO HOLT WINTERS - Additive, 0, 0, 0")
# 2 - Variación de parámetros (a = 1, b = 1, g = 1, seasonal = "multiplicative") !!!
modelo_demanda_hw_2 <- HoltWinters(ts_demanda,
alpha = 1,
beta = 1,
gamma=1,
seasonal = "multiplicative")
#obtengo la columna de ajuste
hw_fit_2 <- modelo_demanda_hw_2$fitted[,1]
demanda_hw_2 <- data.frame( "Fecha" = demanda$Fecha[13:nrow(demanda)],
"Demanda" = demanda$Demanda[13:nrow(demanda)],
"HoltWinters" = hw_fit_2)
#plotear ambas series
p6 <- plot_ly(data = demanda_hw_2, x=~Fecha, y=~Demanda ,name='Demanda', type = 'scatter', mode = 'lines', line = list(color = 'steelblue') ) %>%
add_trace(y = ~hw_fit_2 , name='HW-Mult,1,1,1', mode='lines' ,line = list(color = 'green', width = 3)) %>%
layout(title = "METODO HOLT WINTERS - Multiplicative, 1, 1, 1")
#plotea todo
subplot(p5, p6, nrows = 2, shareX = T ) %>% layout(title ="HoltWinters",legend = list(x = 100, y = 0.5))
## [1] "Suma de los errores cuadráticos para HW por defecto: 16113514844683.6"
## [1] "Suma de los errores cuadráticos para HW con a=1, b=1 y g=1: 64186820632153"
train <- demanda %>% filter(Fecha <= '2018-12-01')
test <- demanda %>% filter(Fecha > '2018-12-01')
train_ts <- ts(train$Demanda, start=c(2013, 1, 1), frequency = 12)
modelo_hw_final <- HoltWinters(train_ts)
hw_forecast <- forecast(modelo_hw_final, h=7)
forecast_df <- data.frame( "Fecha" = test$Fecha,
"Demanda" = test$Demanda,
"HoltWinters" = (as.integer(hw_forecast$mean))
)
plot_ly(data = forecast_df, x=~Fecha, y=~Demanda ,name='Demanda', type = 'scatter', mode = 'lines', line = list(color = 'steelblue') ) %>%
add_trace(y = ~HoltWinters , name='HoltWinters', mode='lines' ,line = list(color = 'green', width = 3)) %>%
layout(title = "METODO HOLT WINTERS")