# install.packages(c("readxl", "forecast", "tseries", "ggplot2"))
library(readxl)
library(forecast)
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
library(tseries)
library(ggplot2)
data <- read_excel("Water2.xlsx", sheet = "Hoja1")
serie <- ts(data$Data, frequency = 12)  # mensual
autoplot(serie) + 
  ggtitle("Serie de Tiempo - Datos Mensuales") +
  xlab("Tiempo (meses)") + ylab("Valor")

adf.test(serie)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  serie
## Dickey-Fuller = -2.6275, Lag order = 4, p-value = 0.3166
## alternative hypothesis: stationary
serie_diff <- diff(serie)
adf.test(serie_diff)
## Warning in adf.test(serie_diff): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  serie_diff
## Dickey-Fuller = -5.7771, Lag order = 4, p-value = 0.01
## alternative hypothesis: stationary
par(mfrow = c(1,2))
acf(serie_diff, main="ACF - Serie diferenciada")
pacf(serie_diff, main="PACF - Serie diferenciada")

par(mfrow = c(1,1))
modelo_arima <- Arima(serie, order = c(1, 1, 1))
summary(modelo_arima)
## Series: serie 
## ARIMA(1,1,1) 
## 
## Coefficients:
##          ar1      ma1
##       0.8701  -1.0000
## s.e.  0.0569   0.1454
## 
## sigma^2 = 4.762:  log likelihood = -219.96
## AIC=445.91   AICc=446.16   BIC=453.73
## 
## Training set error measures:
##                      ME     RMSE      MAE      MPE     MAPE      MASE
## Training set -0.1990862 2.149632 1.748978 8.264955 240.9662 0.3765516
##                    ACF1
## Training set 0.06364312
forecast_arima <- forecast(modelo_arima, h = 4)
autoplot(forecast_arima) + ggtitle("Pronóstico ARIMA(1,1,1)")

modelo_sarima <- Arima(serie, order = c(1, 1, 1), seasonal = c(1, 1, 1))
summary(modelo_sarima)
## Series: serie 
## ARIMA(1,1,1)(1,1,1)[12] 
## 
## Coefficients:
##          ar1      ma1     sar1     sma1
##       0.2419  -0.2161  -0.2922  -0.2124
## s.e.  1.1469   1.1491   0.3452   0.4052
## 
## sigma^2 = 6.209:  log likelihood = -204.7
## AIC=419.39   AICc=420.12   BIC=431.78
## 
## Training set error measures:
##                      ME     RMSE      MAE      MPE     MAPE      MASE
## Training set 0.05278957 2.272356 1.698842 -60.3544 300.1729 0.3657574
##                     ACF1
## Training set -0.01185301
forecast_sarima <- forecast(modelo_sarima, h = 4)
autoplot(forecast_sarima) + ggtitle("Pronóstico SARIMA(1,1,1)(1,1,1)[12]")

modelo_alt1 <- Arima(serie, order = c(2, 1, 2)) 
modelo_alt2 <- Arima(serie, order = c(0, 1, 1), seasonal = c(1, 1, 0)) 
summary(modelo_alt1)
## Series: serie 
## ARIMA(2,1,2) 
## 
## Coefficients:
##           ar1      ar2     ma1     ma2
##       -1.2148  -0.6230  1.2736  0.7745
## s.e.   0.2447   0.2623  0.2000  0.2163
## 
## sigma^2 = 4.925:  log likelihood = -219.69
## AIC=449.39   AICc=450.02   BIC=462.41
## 
## Training set error measures:
##                     ME     RMSE      MAE      MPE     MAPE      MASE
## Training set -0.104673 2.163663 1.791323 27.51791 237.6793 0.3856684
##                     ACF1
## Training set -0.01393519
summary(modelo_alt2)
## Series: serie 
## ARIMA(0,1,1)(1,1,0)[12] 
## 
## Coefficients:
##          ma1     sar1
##       0.0196  -0.4580
## s.e.  0.1012   0.0984
## 
## sigma^2 = 6.107:  log likelihood = -204.88
## AIC=415.76   AICc=416.05   BIC=423.19
## 
## Training set error measures:
##                      ME     RMSE      MAE       MPE     MAPE      MASE
## Training set 0.05480725 2.280311 1.701955 -65.77481 292.9239 0.3664276
##                      ACF1
## Training set -0.003247394