pacman::p_load(dplyr, ggplot2, naniar, tseries, corrplot, patchwork, readxl, psych, maps, sf, rnaturalearth, rnaturalearthdata, stringi, scales, dlookr, DataExplorer, tidyr, knitr, RColorBrewer, plotly, forecast, tseries, openxlsx, vars, lmtest)
library(openxlsx)
df <- read.xlsx("HOTELES-BD.xlsx", sheet ="HOTELES")
kable(head(df))
AÑO MES Cuartos_Disponibles Cuartos_Disponibles_Promedio Cuartos_Ocupados Cuartos_Registrados Densidad_Ocupación Derrama_Economica_Est_mdp Estadia_Promedio Imp_Hospedaje Turistas_Noche_Ext Turistas_Noche_Nac %Ocupacion_Hoteles Llegada_Tur_Ext Llegada_Tur_Nac
2004 1 285891 9142 134696 293105 1.501604 316.5167 2.125116 NA 35742 166518 0.4711446 14725 80451
2004 2 267473 9143 129500 274195 1.486286 345.1886 1.858844 NA 33262 159212 0.4841610 15841 87704
2004 3 289049 9317 154239 293105 1.576326 442.6492 1.957151 NA 38217 204914 0.5336085 18465 105762
2004 4 276364 9205 138065 283650 1.607808 377.4937 1.972139 NA 28712 193270 0.4995766 13567 98992
2004 5 289222 9322 170326 293105 1.608674 464.8694 1.933724 NA 42037 231962 0.5889109 18876 122819
2004 6 280401 9346 141969 283650 1.508153 386.5217 1.866298 NA 39146 174965 0.5063070 18032 96693
# Nulos Totales
sum(is.na(df))
## [1] 132
# Nulos por Columna
gg_miss_var(df)

summary(df)
##       AÑO            MES        Cuartos_Disponibles
##  Min.   :2004   Min.   : 1.00   Min.   :259707     
##  1st Qu.:2009   1st Qu.: 3.75   1st Qu.:346570     
##  Median :2014   Median : 6.50   Median :373090     
##  Mean   :2014   Mean   : 6.50   Mean   :391909     
##  3rd Qu.:2019   3rd Qu.: 9.25   3rd Qu.:430070     
##  Max.   :2024   Max.   :12.00   Max.   :543182     
##                                                    
##  Cuartos_Disponibles_Promedio Cuartos_Ocupados Cuartos_Registrados
##  Min.   : 9142                Min.   : 26308   Min.   :264740     
##  1st Qu.:11568                1st Qu.:168867   1st Qu.:350052     
##  Median :12205                Median :203002   Median :381920     
##  Mean   :12874                Mean   :219182   Mean   :395936     
##  3rd Qu.:14115                3rd Qu.:275674   3rd Qu.:432078     
##  Max.   :17522                Max.   :382072   Max.   :543182     
##                                                                   
##  Densidad_Ocupación Derrama_Economica_Est_mdp Estadia_Promedio
##  Min.   :0.000      Min.   : 103.5            Min.   :1.606   
##  1st Qu.:1.450      1st Qu.: 541.9            1st Qu.:1.910   
##  Median :1.515      Median : 718.4            Median :2.020   
##  Mean   :1.543      Mean   : 909.2            Mean   :2.041   
##  3rd Qu.:1.600      3rd Qu.:1089.8            3rd Qu.:2.160   
##  Max.   :2.080      Max.   :3016.2            Max.   :3.050   
##                                                               
##  Imp_Hospedaje      Turistas_Noche_Ext Turistas_Noche_Nac %Ocupacion_Hoteles
##  Min.   : 1635935   Min.   :  3728     Min.   : 37093     Min.   :0.05811   
##  1st Qu.: 6492250   1st Qu.: 37498     1st Qu.:209590     1st Qu.:0.48184   
##  Median :10329255   Median : 53826     Median :257928     Median :0.57719   
##  Mean   :10509451   Mean   : 56497     Mean   :285699     Mean   :0.55791   
##  3rd Qu.:13543490   3rd Qu.: 71226     3rd Qu.:361718     3rd Qu.:0.65404   
##  Max.   :24075522   Max.   :143049     Max.   :557430     Max.   :0.80457   
##  NA's   :132                                                                
##  Llegada_Tur_Ext Llegada_Tur_Nac 
##  Min.   : 1176   Min.   : 12021  
##  1st Qu.:18874   1st Qu.:106026  
##  Median :27516   Median :123694  
##  Mean   :28754   Mean   :139067  
##  3rd Qu.:37404   3rd Qu.:172872  
##  Max.   :65790   Max.   :315672  
## 
colnames(df)
##  [1] "AÑO"                          "MES"                         
##  [3] "Cuartos_Disponibles"          "Cuartos_Disponibles_Promedio"
##  [5] "Cuartos_Ocupados"             "Cuartos_Registrados"         
##  [7] "Densidad_Ocupación"           "Derrama_Economica_Est_mdp"   
##  [9] "Estadia_Promedio"             "Imp_Hospedaje"               
## [11] "Turistas_Noche_Ext"           "Turistas_Noche_Nac"          
## [13] "%Ocupacion_Hoteles"           "Llegada_Tur_Ext"             
## [15] "Llegada_Tur_Nac"
plot_histogram(df)

plot_normality(df)

library(dplyr)


# Define columnas a transformar
cols_log <- c( "Cuartos_Disponibles_Promedio", 
              "Densidad_Ocupación",
              "Estadia_Promedio")

# Crear las columnas transformadas y agregarlas al dataframe original
df_log <- df %>%
  mutate(across(all_of(cols_log), ~ log(. + 1), .names = "{.col}_log"))
colnames(df_log)
##  [1] "AÑO"                              "MES"                             
##  [3] "Cuartos_Disponibles"              "Cuartos_Disponibles_Promedio"    
##  [5] "Cuartos_Ocupados"                 "Cuartos_Registrados"             
##  [7] "Densidad_Ocupación"               "Derrama_Economica_Est_mdp"       
##  [9] "Estadia_Promedio"                 "Imp_Hospedaje"                   
## [11] "Turistas_Noche_Ext"               "Turistas_Noche_Nac"              
## [13] "%Ocupacion_Hoteles"               "Llegada_Tur_Ext"                 
## [15] "Llegada_Tur_Nac"                  "Cuartos_Disponibles_Promedio_log"
## [17] "Densidad_Ocupación_log"           "Estadia_Promedio_log"
df_log <- df_log[, !(names(df_log) %in% cols_log)]
colnames(df_log)
##  [1] "AÑO"                              "MES"                             
##  [3] "Cuartos_Disponibles"              "Cuartos_Ocupados"                
##  [5] "Cuartos_Registrados"              "Derrama_Economica_Est_mdp"       
##  [7] "Imp_Hospedaje"                    "Turistas_Noche_Ext"              
##  [9] "Turistas_Noche_Nac"               "%Ocupacion_Hoteles"              
## [11] "Llegada_Tur_Ext"                  "Llegada_Tur_Nac"                 
## [13] "Cuartos_Disponibles_Promedio_log" "Densidad_Ocupación_log"          
## [15] "Estadia_Promedio_log"
# Gráfico de dispersión
plot_histogram(df_log)

summary(df_log)
##       AÑO            MES        Cuartos_Disponibles Cuartos_Ocupados
##  Min.   :2004   Min.   : 1.00   Min.   :259707      Min.   : 26308  
##  1st Qu.:2009   1st Qu.: 3.75   1st Qu.:346570      1st Qu.:168867  
##  Median :2014   Median : 6.50   Median :373090      Median :203002  
##  Mean   :2014   Mean   : 6.50   Mean   :391909      Mean   :219182  
##  3rd Qu.:2019   3rd Qu.: 9.25   3rd Qu.:430070      3rd Qu.:275674  
##  Max.   :2024   Max.   :12.00   Max.   :543182      Max.   :382072  
##                                                                     
##  Cuartos_Registrados Derrama_Economica_Est_mdp Imp_Hospedaje     
##  Min.   :264740      Min.   : 103.5            Min.   : 1635935  
##  1st Qu.:350052      1st Qu.: 541.9            1st Qu.: 6492250  
##  Median :381920      Median : 718.4            Median :10329255  
##  Mean   :395936      Mean   : 909.2            Mean   :10509451  
##  3rd Qu.:432078      3rd Qu.:1089.8            3rd Qu.:13543490  
##  Max.   :543182      Max.   :3016.2            Max.   :24075522  
##                                                NA's   :132       
##  Turistas_Noche_Ext Turistas_Noche_Nac %Ocupacion_Hoteles Llegada_Tur_Ext
##  Min.   :  3728     Min.   : 37093     Min.   :0.05811    Min.   : 1176  
##  1st Qu.: 37498     1st Qu.:209590     1st Qu.:0.48184    1st Qu.:18874  
##  Median : 53826     Median :257928     Median :0.57719    Median :27516  
##  Mean   : 56497     Mean   :285699     Mean   :0.55791    Mean   :28754  
##  3rd Qu.: 71226     3rd Qu.:361718     3rd Qu.:0.65404    3rd Qu.:37404  
##  Max.   :143049     Max.   :557430     Max.   :0.80457    Max.   :65790  
##                                                                          
##  Llegada_Tur_Nac  Cuartos_Disponibles_Promedio_log Densidad_Ocupación_log
##  Min.   : 12021   Min.   :9.121                    Min.   :0.0000        
##  1st Qu.:106026   1st Qu.:9.356                    1st Qu.:0.8961        
##  Median :123694   Median :9.410                    Median :0.9223        
##  Mean   :139067   Mean   :9.448                    Mean   :0.9304        
##  3rd Qu.:172872   3rd Qu.:9.555                    3rd Qu.:0.9555        
##  Max.   :315672   Max.   :9.771                    Max.   :1.1249        
##                                                                          
##  Estadia_Promedio_log
##  Min.   :0.9578      
##  1st Qu.:1.0682      
##  Median :1.1053      
##  Mean   :1.1105      
##  3rd Qu.:1.1506      
##  Max.   :1.3987      
## 
plot_correlation(df_log)
## Warning: Removed 28 rows containing missing values or values outside the scale range
## (`geom_text()`).

# 1. Selecciona solo las columnas numéricas
df_numerico <- df_log[sapply(df_log, is.numeric)]

# 2. Calcula la matriz de correlación
matriz_cor <- cor(df_numerico, use = "pairwise.complete.obs")

corrplot( matriz_cor,
  method = "color",            # Mapa de calor
  type = "upper",              # Solo triángulo superior
  addCoef.col = "black",       # Mostrar coeficientes en color negro
  number.cex = 0.6,            # Tamaño del número
  tl.cex = 0.35,                # Tamaño de las etiquetas
  tl.col = "black",            # Color del texto
  diag = FALSE                 # Oculta la diagonal (1s)
)

# Calcular la matriz de correlación
correlaciones <- cor(df_numerico, use = "pairwise.complete.obs")

# Extraer las correlaciones con %Ocupacion_Hoteles
cor_ocupacion <- correlaciones["Derrama_Economica_Est_mdp", ]
cor_ocupacion <- cor_ocupacion[!names(cor_ocupacion) %in% "Derrama_Economica_Est_mdp"]

df_cor <- data.frame(
  Variable = names(cor_ocupacion),
  Correlacion = cor_ocupacion
) %>%
  arrange(desc(abs(Correlacion))) %>%
  mutate(Variable = factor(Variable, levels = Variable))

ggplot(df_cor, aes(x = Variable, y = Correlacion)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  coord_flip() +
  geom_text(aes(label = round(Correlacion, 2)), hjust = ifelse(df_cor$Correlacion > 0, -0.1, 1.1)) +
  labs(
    title = "Correlación con Derrama_Economica_Est_mdp",
    y = "Coeficiente de correlación",
    x = ""
  ) +
  theme_minimal()

df_log <- df_log[!is.na(df_log$"Derrama_Economica_Est_mdp"), ]

derrama_ts <- ts(df_log$"Derrama_Economica_Est_mdp", start = c(2004, 1), end = c(2024, 12), frequency = 12)
plot(derrama_ts, type = "l", col = "darkgreen", lwd = 2,
     xlab = "Año", ylab = "Derrama Económica",
     main = "Serie Temporal de Derrama_Economica_Est_mdp")

length(derrama_ts)
## [1] 252
frequency(derrama_ts)
## [1] 12
end(derrama_ts)
## [1] 2024   12
decomposition <- decompose(derrama_ts)
plot(decomposition)

descomp_stl <- stl(derrama_ts, s.window = "periodic")
plot(descomp_stl)

boxplot(derrama_ts ~ cycle(derrama_ts),
        xlab = "Mes", ylab = "Derrama",
        main = "Estacionalidad mensual", col = "lightblue")

# Autocorrelación y autocorrelación parcial
acf(derrama_ts, main="Autocorrelation - Derrama Económica")

pacf(derrama_ts, main="Partial Autocorrelation -Derrama Económica") #aplicar 1 o 2

adf_ocupacion <- adf.test(df_log$"Derrama_Economica_Est_mdp")
print(adf_ocupacion)
## 
##  Augmented Dickey-Fuller Test
## 
## data:  df_log$Derrama_Economica_Est_mdp
## Dickey-Fuller = -1.9306, Lag order = 6, p-value = 0.605
## alternative hypothesis: stationary
# Aucotorrelación serial
lgunj_box_result <- Box.test(derrama_ts, lag = 5, type = "Ljung-Box")
lgunj_box_result
## 
##  Box-Ljung test
## 
## data:  derrama_ts
## X-squared = 983.29, df = 5, p-value < 2.2e-16
nsdiffs(derrama_ts)
## [1] 0
derrama_diff <- diff(derrama_ts) # Diferencia (d = 1)
adf.test(derrama_diff) #Ya es estacionaria, por ende no se aplica d
## Warning in adf.test(derrama_diff): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  derrama_diff
## Dickey-Fuller = -6.4941, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
mod1 <- arima(derrama_diff, order = c(1, 0, 0))  #  d = 0 porque ya la serie está diferenciada
summary(mod1) #p-value = 2.2e-16 → muy menor a 0.05, los residuos no se comportan como ruido blanco → el modelo no está capturando completamente la estructura de la serie.
## 
## Call:
## arima(x = derrama_diff, order = c(1, 0, 0))
## 
## Coefficients:
##           ar1  intercept
##       -0.1075     7.6542
## s.e.   0.0637     9.6332
## 
## sigma^2 estimated as 28547:  log likelihood = -1643.7,  aic = 3293.4
## 
## Training set error measures:
##                       ME     RMSE      MAE     MPE     MAPE      MASE
## Training set 0.001449583 168.9576 118.4086 210.444 249.2255 0.6696299
##                     ACF1
## Training set -0.03787776
checkresiduals(mod1)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(1,0,0) with non-zero mean
## Q* = 230.01, df = 23, p-value < 2.2e-16
## 
## Model df: 1.   Total lags used: 24
#ar1-> coeficiente bajo, lo que sugiere una débil autocorrelación temporal directa.
modelo_auto <- auto.arima(derrama_ts)
summary(modelo_auto)
## Series: derrama_ts 
## ARIMA(2,1,0)(0,0,2)[12] 
## 
## Coefficients:
##           ar1      ar2    sma1    sma2
##       -0.1440  -0.2517  0.2315  0.2043
## s.e.   0.0616   0.0657  0.0683  0.0633
## 
## sigma^2 = 23305:  log likelihood = -1617.03
## AIC=3244.06   AICc=3244.3   BIC=3261.69
## 
## Training set error measures:
##                    ME     RMSE      MAE       MPE    MAPE      MASE
## Training set 7.723387 151.1387 97.70522 -2.637469 13.8319 0.4266687
##                      ACF1
## Training set 0.0003630307
checkresiduals(modelo_auto)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(2,1,0)(0,0,2)[12]
## Q* = 40.37, df = 20, p-value = 0.004484
## 
## Model df: 4.   Total lags used: 24
#p-value = 0.004484 → menor a 0.05, lo que indica presencia de autocorrelación en los residuos
#No captura tan bien la estacionalidad
library(forecast)

# Lista para guardar resultados
resultados <- list()
modelos_validos <- data.frame()

# Rangos de parámetros (ajústalos si quieres más o menos combinaciones)
for (p in 0:2) {
  for (d in 1:1) {
    for (q in 0:2) {
      for (P in 0:2) {
        for (D in 0:1) {
          for (Q in 0:2) {
            orden <- c(p, d, q)
            orden_estacional <- c(P, D, Q)
            try({
              modelo <- arima(derrama_ts,
                              order = orden,
                              seasonal = list(order = orden_estacional, period = 12),
                              method = "ML")
              aic_val <- AIC(modelo)
              modelos_validos <- rbind(modelos_validos, data.frame(
                p, d, q, P, D, Q,
                AIC = aic_val
              ))
              key <- paste0("(", p, ",", d, ",", q, ")(", P, ",", D, ",", Q, ")[12]")
              resultados[[key]] <- modelo
            }, silent = TRUE)
          }
        }
      }
    }
  }
}
## Warning in log(s2): NaNs produced
## Warning in log(s2): NaNs produced
## Warning in log(s2): NaNs produced
## Warning in log(s2): NaNs produced
## Warning in arima(derrama_ts, order = orden, seasonal = list(order =
## orden_estacional, : possible convergence problem: optim gave code = 1
# Ordenar por AIC
modelos_validos <- modelos_validos[order(modelos_validos$AIC), ]
head(modelos_validos, 5)
##     p d q P D Q      AIC
## 143 2 1 2 0 1 1 3054.344
## 144 2 1 2 0 1 2 3055.413
## 149 2 1 2 1 1 1 3055.552
## 155 2 1 2 2 1 1 3055.905
## 156 2 1 2 2 1 2 3057.343
mod_sugerido <- arima(derrama_ts, order = c(2,1,2), seasonal = list(order = c(0,1,1), period = 12), transform.pars = FALSE)
summary(mod_sugerido)
## 
## Call:
## arima(x = derrama_ts, order = c(2, 1, 2), seasonal = list(order = c(0, 1, 1), 
##     period = 12), transform.pars = FALSE)
## 
## Coefficients:
##           ar1      ar2      ma1     ma2     sma1
##       -0.0019  -1.0062  -0.0692  0.9063  -1.0000
## s.e.   0.0066   0.0114   0.0350  0.0279   0.0772
## 
## sigma^2 estimated as 17409:  log likelihood = -1521.12,  aic = 3054.24
## 
## Training set error measures:
##                    ME     RMSE      MAE       MPE     MAPE      MASE
## Training set 4.716493 128.4957 73.48511 -2.065164 10.35313 0.6143497
##                     ACF1
## Training set -0.05029193
checkresiduals(mod_sugerido)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(2,1,2)(0,1,1)[12]
## Q* = 24.764, df = 19, p-value = 0.1685
## 
## Model df: 5.   Total lags used: 24
#Ljung-Box:
#p-value = 0.1685 > 0.05 → no hay autocorrelación significativa en los residuos.
# Buen indicio de que el modelo capta bien la estructura de la serie
#Captura adecuadamente la tendencia y estacionalidad.
variables_log <- c( "MES", "AÑO",
"Cuartos_Disponibles", "Cuartos_Ocupados", "Cuartos_Registrados", "Derrama_Economica_Est_mdp",  "Imp_Hospedaje", "Turistas_Noche_Ext", "Turistas_Noche_Nac", "%Ocupacion_Hoteles",  "Llegada_Tur_Ext", "Llegada_Tur_Nac", "Cuartos_Disponibles_Promedio_log", "Densidad_Ocupación_log",  "Estadia_Promedio_log"           
)

variables_log <- setdiff(variables_log, c("Imp_Hospedaje", "MES", "AÑO"))


for (var in variables_log) {
  cat("\n--------------------------------------------------\n")
  cat("ADF test for:", var, "\n")
  serie <- ts(df_log[[var]], start = c(2004, 1), frequency = 12)
  print(adf.test(serie))
}
## 
## --------------------------------------------------
## ADF test for: Cuartos_Disponibles 
## 
##  Augmented Dickey-Fuller Test
## 
## data:  serie
## Dickey-Fuller = -1.5393, Lag order = 6, p-value = 0.7698
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: Cuartos_Ocupados 
## 
##  Augmented Dickey-Fuller Test
## 
## data:  serie
## Dickey-Fuller = -2.5579, Lag order = 6, p-value = 0.3409
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: Cuartos_Registrados 
## 
##  Augmented Dickey-Fuller Test
## 
## data:  serie
## Dickey-Fuller = -1.5222, Lag order = 6, p-value = 0.777
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: Derrama_Economica_Est_mdp 
## 
##  Augmented Dickey-Fuller Test
## 
## data:  serie
## Dickey-Fuller = -1.9306, Lag order = 6, p-value = 0.605
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: Turistas_Noche_Ext 
## 
##  Augmented Dickey-Fuller Test
## 
## data:  serie
## Dickey-Fuller = -2.7931, Lag order = 6, p-value = 0.2419
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: Turistas_Noche_Nac 
## 
##  Augmented Dickey-Fuller Test
## 
## data:  serie
## Dickey-Fuller = -2.8091, Lag order = 6, p-value = 0.2351
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: %Ocupacion_Hoteles 
## 
##  Augmented Dickey-Fuller Test
## 
## data:  serie
## Dickey-Fuller = -2.6893, Lag order = 6, p-value = 0.2856
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: Llegada_Tur_Ext 
## 
##  Augmented Dickey-Fuller Test
## 
## data:  serie
## Dickey-Fuller = -3.0551, Lag order = 6, p-value = 0.1315
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: Llegada_Tur_Nac 
## 
##  Augmented Dickey-Fuller Test
## 
## data:  serie
## Dickey-Fuller = -2.243, Lag order = 6, p-value = 0.4735
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: Cuartos_Disponibles_Promedio_log 
## 
##  Augmented Dickey-Fuller Test
## 
## data:  serie
## Dickey-Fuller = -2.4867, Lag order = 6, p-value = 0.3709
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: Densidad_Ocupación_log
## Warning in adf.test(serie): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  serie
## Dickey-Fuller = -4.1695, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: Estadia_Promedio_log 
## 
##  Augmented Dickey-Fuller Test
## 
## data:  serie
## Dickey-Fuller = -3.2396, Lag order = 6, p-value = 0.08173
## alternative hypothesis: stationary
series_diferenciadas <- list()

for (var in variables_log) {
  serie <- ts(df_log[[var]], start = c(2004, 1), frequency = 12)
  adf_result <- tryCatch(adf.test(serie), error = function(e) NULL)

  if (!is.null(adf_result) && adf_result$p.value > 0.05) {
    # No es estacionaria → aplicar diff y renombrar con _diff
    serie_diff <- diff(serie)
    series_diferenciadas[[paste0(var, "_diff")]] <- serie_diff
  } else {
    # Es estacionaria → mantener nombre original (recortada por consistencia)
    series_diferenciadas[[var]] <- window(serie, start = c(2004, 2))
  }
}
## Warning in adf.test(serie): p-value smaller than printed p-value
# Aplicar la prueba ADF a todas las series diferenciadas
for (nombre in names(series_diferenciadas)) {
  cat("\n--------------------------------------------------\n")
  cat("ADF test for:", nombre, "\n")
  print(adf.test(series_diferenciadas[[nombre]]))
}
## 
## --------------------------------------------------
## ADF test for: Cuartos_Disponibles_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  series_diferenciadas[[nombre]]
## Dickey-Fuller = -8.3798, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: Cuartos_Ocupados_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  series_diferenciadas[[nombre]]
## Dickey-Fuller = -6.7058, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: Cuartos_Registrados_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  series_diferenciadas[[nombre]]
## Dickey-Fuller = -8.2225, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: Derrama_Economica_Est_mdp_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  series_diferenciadas[[nombre]]
## Dickey-Fuller = -6.4941, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: Turistas_Noche_Ext_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  series_diferenciadas[[nombre]]
## Dickey-Fuller = -6.649, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: Turistas_Noche_Nac_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  series_diferenciadas[[nombre]]
## Dickey-Fuller = -7.4223, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: %Ocupacion_Hoteles_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  series_diferenciadas[[nombre]]
## Dickey-Fuller = -7.0613, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: Llegada_Tur_Ext_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  series_diferenciadas[[nombre]]
## Dickey-Fuller = -6.3763, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: Llegada_Tur_Nac_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  series_diferenciadas[[nombre]]
## Dickey-Fuller = -7.367, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: Cuartos_Disponibles_Promedio_log_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  series_diferenciadas[[nombre]]
## Dickey-Fuller = -7.6481, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: Densidad_Ocupación_log
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  series_diferenciadas[[nombre]]
## Dickey-Fuller = -4.1607, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
## 
## 
## --------------------------------------------------
## ADF test for: Estadia_Promedio_log_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  series_diferenciadas[[nombre]]
## Dickey-Fuller = -8.6448, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
labels(series_diferenciadas)
##  [1] "Cuartos_Disponibles_diff"             
##  [2] "Cuartos_Ocupados_diff"                
##  [3] "Cuartos_Registrados_diff"             
##  [4] "Derrama_Economica_Est_mdp_diff"       
##  [5] "Turistas_Noche_Ext_diff"              
##  [6] "Turistas_Noche_Nac_diff"              
##  [7] "%Ocupacion_Hoteles_diff"              
##  [8] "Llegada_Tur_Ext_diff"                 
##  [9] "Llegada_Tur_Nac_diff"                 
## [10] "Cuartos_Disponibles_Promedio_log_diff"
## [11] "Densidad_Ocupación_log"               
## [12] "Estadia_Promedio_log_diff"
df_log[2, ]
##    AÑO MES Cuartos_Disponibles Cuartos_Ocupados Cuartos_Registrados
## 2 2004   2              267473           129500              274195
##   Derrama_Economica_Est_mdp Imp_Hospedaje Turistas_Noche_Ext Turistas_Noche_Nac
## 2                  345.1886            NA              33262             159212
##   %Ocupacion_Hoteles Llegada_Tur_Ext Llegada_Tur_Nac
## 2           0.484161           15841           87704
##   Cuartos_Disponibles_Promedio_log Densidad_Ocupación_log Estadia_Promedio_log
## 2                         9.120853              0.9107899             1.050417
df_diff <- as.data.frame(series_diferenciadas)
df_diff[1, ]
##   Cuartos_Disponibles_diff Cuartos_Ocupados_diff Cuartos_Registrados_diff
## 1                   -18418                 -5196                   -18910
##   Derrama_Economica_Est_mdp_diff Turistas_Noche_Ext_diff
## 1                       28.67197                   -2480
##   Turistas_Noche_Nac_diff X.Ocupacion_Hoteles_diff Llegada_Tur_Ext_diff
## 1                   -7306               0.01301642                 1116
##   Llegada_Tur_Nac_diff Cuartos_Disponibles_Promedio_log_diff
## 1                 7253                          0.0001093673
##   Densidad_Ocupación_log Estadia_Promedio_log_diff
## 1              0.9107899               -0.08905393
# 1. Mantener solo MES y AÑO de df_log (recortado)
df_log2 <- df_log[-1, c("MES", "AÑO", "Densidad_Ocupación_log")]

# 2. Eliminar de df_diff las columnas que ya existen en df_log2
cols_existentes <- intersect(names(df_log2), names(df_diff))
df_diff_filtrado <- df_diff[, !(names(df_diff) %in% cols_existentes)]

# 3. Unir MES, AÑO y las series diferenciadas
df_final <- bind_cols(df_log2, df_diff_filtrado)
#aqui inserto el scale?
#df_final
df_final <- df_final[df_final$AÑO >= 2015, ]
correlaciones <- cor(df_final, use = "complete.obs")
round(correlaciones, 2)  # para ver mejor los valores
##                                         MES   AÑO Densidad_Ocupación_log
## MES                                    1.00  0.00                   0.09
## AÑO                                    0.00  1.00                   0.47
## Densidad_Ocupación_log                 0.09  0.47                   1.00
## Cuartos_Disponibles_diff               0.15  0.00                   0.07
## Cuartos_Ocupados_diff                 -0.09  0.01                   0.00
## Cuartos_Registrados_diff               0.17  0.00                   0.07
## Derrama_Economica_Est_mdp_diff        -0.10  0.04                   0.18
## Turistas_Noche_Ext_diff                0.09 -0.01                   0.11
## Turistas_Noche_Nac_diff               -0.03 -0.01                   0.12
## X.Ocupacion_Hoteles_diff              -0.15  0.01                  -0.03
## Llegada_Tur_Ext_diff                   0.13 -0.01                   0.07
## Llegada_Tur_Nac_diff                   0.10  0.01                   0.10
## Cuartos_Disponibles_Promedio_log_diff  0.12 -0.01                  -0.09
## Estadia_Promedio_log_diff             -0.29 -0.02                   0.04
##                                       Cuartos_Disponibles_diff
## MES                                                       0.15
## AÑO                                                       0.00
## Densidad_Ocupación_log                                    0.07
## Cuartos_Disponibles_diff                                  1.00
## Cuartos_Ocupados_diff                                     0.27
## Cuartos_Registrados_diff                                  0.99
## Derrama_Economica_Est_mdp_diff                            0.24
## Turistas_Noche_Ext_diff                                   0.14
## Turistas_Noche_Nac_diff                                   0.30
## X.Ocupacion_Hoteles_diff                                 -0.06
## Llegada_Tur_Ext_diff                                      0.23
## Llegada_Tur_Nac_diff                                      0.25
## Cuartos_Disponibles_Promedio_log_diff                     0.33
## Estadia_Promedio_log_diff                                 0.03
##                                       Cuartos_Ocupados_diff
## MES                                                   -0.09
## AÑO                                                    0.01
## Densidad_Ocupación_log                                 0.00
## Cuartos_Disponibles_diff                               0.27
## Cuartos_Ocupados_diff                                  1.00
## Cuartos_Registrados_diff                               0.23
## Derrama_Economica_Est_mdp_diff                         0.76
## Turistas_Noche_Ext_diff                                0.55
## Turistas_Noche_Nac_diff                                0.90
## X.Ocupacion_Hoteles_diff                               0.94
## Llegada_Tur_Ext_diff                                   0.54
## Llegada_Tur_Nac_diff                                   0.86
## Cuartos_Disponibles_Promedio_log_diff                  0.27
## Estadia_Promedio_log_diff                             -0.06
##                                       Cuartos_Registrados_diff
## MES                                                       0.17
## AÑO                                                       0.00
## Densidad_Ocupación_log                                    0.07
## Cuartos_Disponibles_diff                                  0.99
## Cuartos_Ocupados_diff                                     0.23
## Cuartos_Registrados_diff                                  1.00
## Derrama_Economica_Est_mdp_diff                            0.22
## Turistas_Noche_Ext_diff                                   0.11
## Turistas_Noche_Nac_diff                                   0.28
## X.Ocupacion_Hoteles_diff                                 -0.10
## Llegada_Tur_Ext_diff                                      0.20
## Llegada_Tur_Nac_diff                                      0.23
## Cuartos_Disponibles_Promedio_log_diff                     0.27
## Estadia_Promedio_log_diff                                 0.02
##                                       Derrama_Economica_Est_mdp_diff
## MES                                                            -0.10
## AÑO                                                             0.04
## Densidad_Ocupación_log                                          0.18
## Cuartos_Disponibles_diff                                        0.24
## Cuartos_Ocupados_diff                                           0.76
## Cuartos_Registrados_diff                                        0.22
## Derrama_Economica_Est_mdp_diff                                  1.00
## Turistas_Noche_Ext_diff                                         0.45
## Turistas_Noche_Nac_diff                                         0.85
## X.Ocupacion_Hoteles_diff                                        0.69
## Llegada_Tur_Ext_diff                                            0.37
## Llegada_Tur_Nac_diff                                            0.74
## Cuartos_Disponibles_Promedio_log_diff                           0.18
## Estadia_Promedio_log_diff                                       0.15
##                                       Turistas_Noche_Ext_diff
## MES                                                      0.09
## AÑO                                                     -0.01
## Densidad_Ocupación_log                                   0.11
## Cuartos_Disponibles_diff                                 0.14
## Cuartos_Ocupados_diff                                    0.55
## Cuartos_Registrados_diff                                 0.11
## Derrama_Economica_Est_mdp_diff                           0.45
## Turistas_Noche_Ext_diff                                  1.00
## Turistas_Noche_Nac_diff                                  0.49
## X.Ocupacion_Hoteles_diff                                 0.52
## Llegada_Tur_Ext_diff                                     0.89
## Llegada_Tur_Nac_diff                                     0.44
## Cuartos_Disponibles_Promedio_log_diff                    0.13
## Estadia_Promedio_log_diff                               -0.07
##                                       Turistas_Noche_Nac_diff
## MES                                                     -0.03
## AÑO                                                     -0.01
## Densidad_Ocupación_log                                   0.12
## Cuartos_Disponibles_diff                                 0.30
## Cuartos_Ocupados_diff                                    0.90
## Cuartos_Registrados_diff                                 0.28
## Derrama_Economica_Est_mdp_diff                           0.85
## Turistas_Noche_Ext_diff                                  0.49
## Turistas_Noche_Nac_diff                                  1.00
## X.Ocupacion_Hoteles_diff                                 0.81
## Llegada_Tur_Ext_diff                                     0.43
## Llegada_Tur_Nac_diff                                     0.91
## Cuartos_Disponibles_Promedio_log_diff                    0.23
## Estadia_Promedio_log_diff                                0.11
##                                       X.Ocupacion_Hoteles_diff
## MES                                                      -0.15
## AÑO                                                       0.01
## Densidad_Ocupación_log                                   -0.03
## Cuartos_Disponibles_diff                                 -0.06
## Cuartos_Ocupados_diff                                     0.94
## Cuartos_Registrados_diff                                 -0.10
## Derrama_Economica_Est_mdp_diff                            0.69
## Turistas_Noche_Ext_diff                                   0.52
## Turistas_Noche_Nac_diff                                   0.81
## X.Ocupacion_Hoteles_diff                                  1.00
## Llegada_Tur_Ext_diff                                      0.47
## Llegada_Tur_Nac_diff                                      0.79
## Cuartos_Disponibles_Promedio_log_diff                     0.17
## Estadia_Promedio_log_diff                                -0.07
##                                       Llegada_Tur_Ext_diff Llegada_Tur_Nac_diff
## MES                                                   0.13                 0.10
## AÑO                                                  -0.01                 0.01
## Densidad_Ocupación_log                                0.07                 0.10
## Cuartos_Disponibles_diff                              0.23                 0.25
## Cuartos_Ocupados_diff                                 0.54                 0.86
## Cuartos_Registrados_diff                              0.20                 0.23
## Derrama_Economica_Est_mdp_diff                        0.37                 0.74
## Turistas_Noche_Ext_diff                               0.89                 0.44
## Turistas_Noche_Nac_diff                               0.43                 0.91
## X.Ocupacion_Hoteles_diff                              0.47                 0.79
## Llegada_Tur_Ext_diff                                  1.00                 0.45
## Llegada_Tur_Nac_diff                                  0.45                 1.00
## Cuartos_Disponibles_Promedio_log_diff                 0.13                 0.20
## Estadia_Promedio_log_diff                            -0.29                -0.21
##                                       Cuartos_Disponibles_Promedio_log_diff
## MES                                                                    0.12
## AÑO                                                                   -0.01
## Densidad_Ocupación_log                                                -0.09
## Cuartos_Disponibles_diff                                               0.33
## Cuartos_Ocupados_diff                                                  0.27
## Cuartos_Registrados_diff                                               0.27
## Derrama_Economica_Est_mdp_diff                                         0.18
## Turistas_Noche_Ext_diff                                                0.13
## Turistas_Noche_Nac_diff                                                0.23
## X.Ocupacion_Hoteles_diff                                               0.17
## Llegada_Tur_Ext_diff                                                   0.13
## Llegada_Tur_Nac_diff                                                   0.20
## Cuartos_Disponibles_Promedio_log_diff                                  1.00
## Estadia_Promedio_log_diff                                              0.07
##                                       Estadia_Promedio_log_diff
## MES                                                       -0.29
## AÑO                                                       -0.02
## Densidad_Ocupación_log                                     0.04
## Cuartos_Disponibles_diff                                   0.03
## Cuartos_Ocupados_diff                                     -0.06
## Cuartos_Registrados_diff                                   0.02
## Derrama_Economica_Est_mdp_diff                             0.15
## Turistas_Noche_Ext_diff                                   -0.07
## Turistas_Noche_Nac_diff                                    0.11
## X.Ocupacion_Hoteles_diff                                  -0.07
## Llegada_Tur_Ext_diff                                      -0.29
## Llegada_Tur_Nac_diff                                      -0.21
## Cuartos_Disponibles_Promedio_log_diff                      0.07
## Estadia_Promedio_log_diff                                  1.00
corrplot(correlaciones, method = "color", type = "upper", tl.cex = 0.7)

library(caret)
## Loading required package: lattice
# Detectar columnas con alta correlación
cor_matriz <- cor(df_final, use = "complete.obs")
columnas_a_remover <- findCorrelation(cor_matriz, cutoff = 0.9)

# Ver nombres de columnas altamente correlacionadas
names(df_final)[columnas_a_remover]
## [1] "Cuartos_Ocupados_diff"    "Turistas_Noche_Nac_diff" 
## [3] "Cuartos_Disponibles_diff"
sum(is.na(df_final$Derrama_Económica_Est_mdp_diff))
## [1] 0
which(is.na(df_final$Derrama_Económica_Est_mdp_diff))
## integer(0)

MODELOS CON EXPLICATIVAS

y <- ts(df_final$Derrama_Economica_Est_mdp, start = c(2015, 1), frequency = 12)
#colnames(df_final)
variables_explicativas <- c(
  "Turistas_Noche_Ext_diff", "X.Ocupacion_Hoteles_diff",
  "Cuartos_Disponibles_Promedio_log_diff", "Estadia_Promedio_log_diff",
  "Cuartos_Registrados_diff", "Llegada_Tur_Nac_diff", "Densidad_Ocupación_log"
)
#quitar por "Cuartos_Ocupados_diff"    "Turistas_Noche_Nac_diff"  "Cuartos_Disponibles_diff" 
# Se elimina 'Llegada_Tur_Ext_diff' por baja significancia estadística en el modelo SARIMAX y alto VIF (> 6)

df_mod <- dplyr::select(df_final, any_of(variables_explicativas))
df_mod<- scale(df_mod)
df_mod<-as.data.frame(df_mod)
colnames(df_mod) <- variables_explicativas

SARIMAX

df_xreg <- as.matrix(df_mod)
str(df_xreg)  # debe ser matriz
##  num [1:120, 1:7] -0.1382 -0.4421 0.3212 -0.0441 0.6258 ...
##  - attr(*, "dimnames")=List of 2
##   ..$ : chr [1:120] "132" "133" "134" "135" ...
##   ..$ : chr [1:7] "Turistas_Noche_Ext_diff" "X.Ocupacion_Hoteles_diff" "Cuartos_Disponibles_Promedio_log_diff" "Estadia_Promedio_log_diff" ...
is.matrix(df_xreg)  # debe ser TRUE
## [1] TRUE
nrow(df_xreg) == length(y)
## [1] TRUE
modelo_auto <- auto.arima(y,
                          xreg = df_xreg,
                          seasonal = TRUE,
                          stepwise = FALSE,  # más preciso pero más lento
                          approximation = FALSE)  # evita simplificaciones

summary(modelo_auto)
## Series: y 
## Regression with ARIMA(1,0,0) errors 
## 
## Coefficients:
##           ar1  Turistas_Noche_Ext_diff  X.Ocupacion_Hoteles_diff
##       -0.1414                  22.6080                   57.2796
## s.e.   0.0919                  14.8124                   25.2778
##       Cuartos_Disponibles_Promedio_log_diff  Estadia_Promedio_log_diff
##                                     -3.6413                    63.5477
## s.e.                                12.6979                    12.3166
##       Cuartos_Registrados_diff  Llegada_Tur_Nac_diff  Densidad_Ocupación_log
##                        21.6393              121.1275                 22.4672
## s.e.                   16.1136               24.5629                 10.9122
## 
## sigma^2 = 17283:  log likelihood = -751.59
## AIC=1521.18   AICc=1522.82   BIC=1546.27
## 
## Training set error measures:
##                    ME     RMSE      MAE       MPE     MAPE      MASE
## Training set 13.69782 127.0059 66.73884 -122.2026 165.0345 0.3852888
##                     ACF1
## Training set -0.01119577
checkresiduals(modelo_auto)

## 
##  Ljung-Box test
## 
## data:  Residuals from Regression with ARIMA(1,0,0) errors
## Q* = 10.121, df = 23, p-value = 0.9905
## 
## Model df: 1.   Total lags used: 24
df_xreg <- as.matrix(df_mod)
modelo_sarimax1 <- arima(y,
                        order = c(2, 1, 2),
                        seasonal = list(order = c(0, 1, 1), period = 12),
                        xreg = df_xreg)

summary(modelo_sarimax1)
## 
## Call:
## arima(x = y, order = c(2, 1, 2), seasonal = list(order = c(0, 1, 1), period = 12), 
##     xreg = df_xreg)
## 
## Coefficients:
##           ar1     ar2      ma1      ma2     sma1  Turistas_Noche_Ext_diff
##       -0.4693  0.0395  -0.6480  -0.3520  -0.7573                  26.4362
## s.e.   0.6245  0.1460   0.6197   0.6185   0.0997                  14.9165
##       X.Ocupacion_Hoteles_diff  Cuartos_Disponibles_Promedio_log_diff
##                        35.1200                                -6.2700
## s.e.                   33.8893                                24.0422
##       Estadia_Promedio_log_diff  Cuartos_Registrados_diff  Llegada_Tur_Nac_diff
##                         51.2862                   26.6755              147.8364
## s.e.                    14.4874                   58.7853               32.9268
##       Densidad_Ocupación_log
##                      27.6836
## s.e.                 13.5786
## 
## sigma^2 estimated as 17936:  log likelihood = -684.3,  aic = 1394.6
## 
## Training set error measures:
##                    ME     RMSE      MAE       MPE     MAPE      MASE
## Training set 3.173671 126.4641 63.74363 -882.4353 947.4504 0.2558476
##                     ACF1
## Training set -0.01119028
checkresiduals(modelo_sarimax1)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(2,1,2)(0,1,1)[12]
## Q* = 11.514, df = 19, p-value = 0.9053
## 
## Model df: 5.   Total lags used: 24
# Extraer los coeficientes del modelo
coeficientes <- coef(modelo_sarimax1)

# Ordenar los coeficientes de mayor a menor valor absoluto
coef_ordenados <- sort(coeficientes, decreasing = TRUE)

# Mostrar la lista ordenada
print(coef_ordenados)
##                  Llegada_Tur_Nac_diff             Estadia_Promedio_log_diff 
##                          147.83636835                           51.28616856 
##              X.Ocupacion_Hoteles_diff                Densidad_Ocupación_log 
##                           35.11997364                           27.68356139 
##              Cuartos_Registrados_diff               Turistas_Noche_Ext_diff 
##                           26.67553838                           26.43620005 
##                                   ar2                                   ma2 
##                            0.03947154                           -0.35203585 
##                                   ar1                                   ma1 
##                           -0.46926976                           -0.64796092 
##                                  sma1 Cuartos_Disponibles_Promedio_log_diff 
##                           -0.75730834                           -6.27001640
colnames(modelo_sarimax1$xreg)  # debe darte las 7 columnas
## NULL
# Ordenar por valor absoluto
coef_ordenados_abs <- coeficientes[order(abs(coeficientes), decreasing = TRUE)]

# Mostrar la lista ordenada por valor absoluto
print(coef_ordenados_abs)
##                  Llegada_Tur_Nac_diff             Estadia_Promedio_log_diff 
##                          147.83636835                           51.28616856 
##              X.Ocupacion_Hoteles_diff                Densidad_Ocupación_log 
##                           35.11997364                           27.68356139 
##              Cuartos_Registrados_diff               Turistas_Noche_Ext_diff 
##                           26.67553838                           26.43620005 
## Cuartos_Disponibles_Promedio_log_diff                                  sma1 
##                           -6.27001640                           -0.75730834 
##                                   ma1                                   ar1 
##                           -0.64796092                           -0.46926976 
##                                   ma2                                   ar2 
##                           -0.35203585                            0.03947154

VAR

var_data <- cbind(
  y,  #  variable dependiente diferenciada ->Derrama_Economica_Est_mdp_diff
  df_mod  # regresores ya diferenciados
)

# Convertir a formato ts

var_data_ts <- ts(var_data, start = c(2015,1), frequency = 12)
lag_selection <-VARselect(var_data_ts, lag.max = 12, type = "const")

print(lag_selection$selection)
## AIC(n)  HQ(n)  SC(n) FPE(n) 
##     12     12      1     12
optimal_lag <- lag_selection$selection["AIC(n)"]

colnames(var_data_ts)
## [1] "y"                                           
## [2] "df_mod.Turistas_Noche_Ext_diff"              
## [3] "df_mod.X.Ocupacion_Hoteles_diff"             
## [4] "df_mod.Cuartos_Disponibles_Promedio_log_diff"
## [5] "df_mod.Estadia_Promedio_log_diff"            
## [6] "df_mod.Cuartos_Registrados_diff"             
## [7] "df_mod.Llegada_Tur_Nac_diff"                 
## [8] "df_mod.Densidad_Ocupación_log"
print(colnames(var_data_ts))
## [1] "y"                                           
## [2] "df_mod.Turistas_Noche_Ext_diff"              
## [3] "df_mod.X.Ocupacion_Hoteles_diff"             
## [4] "df_mod.Cuartos_Disponibles_Promedio_log_diff"
## [5] "df_mod.Estadia_Promedio_log_diff"            
## [6] "df_mod.Cuartos_Registrados_diff"             
## [7] "df_mod.Llegada_Tur_Nac_diff"                 
## [8] "df_mod.Densidad_Ocupación_log"
modelo_var <- VAR(var_data_ts, p = 2 , type = "const")
summary(modelo_var)
## 
## VAR Estimation Results:
## ========================= 
## Endogenous variables: y, df_mod.Turistas_Noche_Ext_diff, df_mod.X.Ocupacion_Hoteles_diff, df_mod.Cuartos_Disponibles_Promedio_log_diff, df_mod.Estadia_Promedio_log_diff, df_mod.Cuartos_Registrados_diff, df_mod.Llegada_Tur_Nac_diff, df_mod.Densidad_Ocupación_log 
## Deterministic variables: const 
## Sample size: 118 
## Log Likelihood: -1452.622 
## Roots of the characteristic polynomial:
## 0.9181 0.7448 0.7448 0.6608 0.6608 0.6601 0.6601 0.5684 0.5684 0.5372 0.449 0.449 0.4268 0.3926 0.3926 0.1518
## Call:
## VAR(y = var_data_ts, p = 2, type = "const")
## 
## 
## Estimation results for equation y: 
## ================================== 
## y = y.l1 + df_mod.Turistas_Noche_Ext_diff.l1 + df_mod.X.Ocupacion_Hoteles_diff.l1 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 + df_mod.Estadia_Promedio_log_diff.l1 + df_mod.Cuartos_Registrados_diff.l1 + df_mod.Llegada_Tur_Nac_diff.l1 + df_mod.Densidad_Ocupación_log.l1 + y.l2 + df_mod.Turistas_Noche_Ext_diff.l2 + df_mod.X.Ocupacion_Hoteles_diff.l2 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 + df_mod.Estadia_Promedio_log_diff.l2 + df_mod.Cuartos_Registrados_diff.l2 + df_mod.Llegada_Tur_Nac_diff.l2 + df_mod.Densidad_Ocupación_log.l2 + const 
## 
##                                                  Estimate Std. Error t value
## y.l1                                             -0.05002    0.14882  -0.336
## df_mod.Turistas_Noche_Ext_diff.l1                 9.81700   30.27907   0.324
## df_mod.X.Ocupacion_Hoteles_diff.l1               33.54755   61.84128   0.542
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1  20.36902   24.32815   0.837
## df_mod.Estadia_Promedio_log_diff.l1             -17.24789   29.20953  -0.590
## df_mod.Cuartos_Registrados_diff.l1              -75.57681   39.35969  -1.920
## df_mod.Llegada_Tur_Nac_diff.l1                  -58.25172   62.50863  -0.932
## df_mod.Densidad_Ocupación_log.l1                 17.53137   55.85365   0.314
## y.l2                                             -0.16953    0.14623  -1.159
## df_mod.Turistas_Noche_Ext_diff.l2               -55.42984   25.77825  -2.150
## df_mod.X.Ocupacion_Hoteles_diff.l2               87.99856   46.16892   1.906
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2  -2.52216   22.19049  -0.114
## df_mod.Estadia_Promedio_log_diff.l2             -58.58740   22.09072  -2.652
## df_mod.Cuartos_Registrados_diff.l2              -21.63811   40.93749  -0.529
## df_mod.Llegada_Tur_Nac_diff.l2                  -90.52716   50.31616  -1.799
## df_mod.Densidad_Ocupación_log.l2                 20.66233   53.92195   0.383
## const                                            14.28693   18.43296   0.775
##                                                 Pr(>|t|)   
## y.l1                                             0.73746   
## df_mod.Turistas_Noche_Ext_diff.l1                0.74644   
## df_mod.X.Ocupacion_Hoteles_diff.l1               0.58868   
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1  0.40442   
## df_mod.Estadia_Promedio_log_diff.l1              0.55618   
## df_mod.Cuartos_Registrados_diff.l1               0.05766 . 
## df_mod.Llegada_Tur_Nac_diff.l1                   0.35361   
## df_mod.Densidad_Ocupación_log.l1                 0.75426   
## y.l2                                             0.24906   
## df_mod.Turistas_Noche_Ext_diff.l2                0.03392 * 
## df_mod.X.Ocupacion_Hoteles_diff.l2               0.05949 . 
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2  0.90973   
## df_mod.Estadia_Promedio_log_diff.l2              0.00929 **
## df_mod.Cuartos_Registrados_diff.l2               0.59827   
## df_mod.Llegada_Tur_Nac_diff.l2                   0.07498 . 
## df_mod.Densidad_Ocupación_log.l2                 0.70238   
## const                                            0.44011   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 197.7 on 101 degrees of freedom
## Multiple R-Squared: 0.3593,  Adjusted R-squared: 0.2578 
## F-statistic:  3.54 on 16 and 101 DF,  p-value: 4.879e-05 
## 
## 
## Estimation results for equation df_mod.Turistas_Noche_Ext_diff: 
## =============================================================== 
## df_mod.Turistas_Noche_Ext_diff = y.l1 + df_mod.Turistas_Noche_Ext_diff.l1 + df_mod.X.Ocupacion_Hoteles_diff.l1 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 + df_mod.Estadia_Promedio_log_diff.l1 + df_mod.Cuartos_Registrados_diff.l1 + df_mod.Llegada_Tur_Nac_diff.l1 + df_mod.Densidad_Ocupación_log.l1 + y.l2 + df_mod.Turistas_Noche_Ext_diff.l2 + df_mod.X.Ocupacion_Hoteles_diff.l2 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 + df_mod.Estadia_Promedio_log_diff.l2 + df_mod.Cuartos_Registrados_diff.l2 + df_mod.Llegada_Tur_Nac_diff.l2 + df_mod.Densidad_Ocupación_log.l2 + const 
## 
##                                                   Estimate Std. Error t value
## y.l1                                             0.0001017  0.0006742   0.151
## df_mod.Turistas_Noche_Ext_diff.l1               -0.4295308  0.1371792  -3.131
## df_mod.X.Ocupacion_Hoteles_diff.l1               0.6524279  0.2801716   2.329
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1  0.1472701  0.1102185   1.336
## df_mod.Estadia_Promedio_log_diff.l1             -0.1451311  0.1323336  -1.097
## df_mod.Cuartos_Registrados_diff.l1               0.1411626  0.1783189   0.792
## df_mod.Llegada_Tur_Nac_diff.l1                  -0.4352172  0.2831950  -1.537
## df_mod.Densidad_Ocupación_log.l1                 0.2047211  0.2530447   0.809
## y.l2                                            -0.0002312  0.0006625  -0.349
## df_mod.Turistas_Noche_Ext_diff.l2               -0.1644198  0.1167882  -1.408
## df_mod.X.Ocupacion_Hoteles_diff.l2               0.2910355  0.2091680   1.391
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 -0.2669448  0.1005339  -2.655
## df_mod.Estadia_Promedio_log_diff.l2             -0.0736970  0.1000819  -0.736
## df_mod.Cuartos_Registrados_diff.l2               0.2134988  0.1854671   1.151
## df_mod.Llegada_Tur_Nac_diff.l2                  -0.3104334  0.2279571  -1.362
## df_mod.Densidad_Ocupación_log.l2                -0.1431480  0.2442931  -0.586
## const                                            0.0044344  0.0835104   0.053
##                                                 Pr(>|t|)   
## y.l1                                             0.88036   
## df_mod.Turistas_Noche_Ext_diff.l1                0.00228 **
## df_mod.X.Ocupacion_Hoteles_diff.l1               0.02187 * 
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1  0.18450   
## df_mod.Estadia_Promedio_log_diff.l1              0.27538   
## df_mod.Cuartos_Registrados_diff.l1               0.43043   
## df_mod.Llegada_Tur_Nac_diff.l1                   0.12747   
## df_mod.Densidad_Ocupación_log.l1                 0.42040   
## y.l2                                             0.72788   
## df_mod.Turistas_Noche_Ext_diff.l2                0.16225   
## df_mod.X.Ocupacion_Hoteles_diff.l2               0.16716   
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2  0.00921 **
## df_mod.Estadia_Promedio_log_diff.l2              0.46321   
## df_mod.Cuartos_Registrados_diff.l2               0.25239   
## df_mod.Llegada_Tur_Nac_diff.l2                   0.17629   
## df_mod.Densidad_Ocupación_log.l2                 0.55920   
## const                                            0.95776   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 0.8959 on 101 degrees of freedom
## Multiple R-Squared: 0.3176,  Adjusted R-squared: 0.2095 
## F-statistic: 2.938 on 16 and 101 DF,  p-value: 0.0005279 
## 
## 
## Estimation results for equation df_mod.X.Ocupacion_Hoteles_diff: 
## ================================================================ 
## df_mod.X.Ocupacion_Hoteles_diff = y.l1 + df_mod.Turistas_Noche_Ext_diff.l1 + df_mod.X.Ocupacion_Hoteles_diff.l1 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 + df_mod.Estadia_Promedio_log_diff.l1 + df_mod.Cuartos_Registrados_diff.l1 + df_mod.Llegada_Tur_Nac_diff.l1 + df_mod.Densidad_Ocupación_log.l1 + y.l2 + df_mod.Turistas_Noche_Ext_diff.l2 + df_mod.X.Ocupacion_Hoteles_diff.l2 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 + df_mod.Estadia_Promedio_log_diff.l2 + df_mod.Cuartos_Registrados_diff.l2 + df_mod.Llegada_Tur_Nac_diff.l2 + df_mod.Densidad_Ocupación_log.l2 + const 
## 
##                                                   Estimate Std. Error t value
## y.l1                                             0.0003040  0.0006585   0.462
## df_mod.Turistas_Noche_Ext_diff.l1               -0.0567689  0.1339721  -0.424
## df_mod.X.Ocupacion_Hoteles_diff.l1               0.2454273  0.2736215   0.897
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 -0.0523090  0.1076418  -0.486
## df_mod.Estadia_Promedio_log_diff.l1             -0.1266084  0.1292398  -0.980
## df_mod.Cuartos_Registrados_diff.l1               0.0325329  0.1741500   0.187
## df_mod.Llegada_Tur_Nac_diff.l1                  -0.3582105  0.2765743  -1.295
## df_mod.Densidad_Ocupación_log.l1                 0.1208923  0.2471288   0.489
## y.l2                                            -0.0006325  0.0006470  -0.978
## df_mod.Turistas_Noche_Ext_diff.l2               -0.1282040  0.1140579  -1.124
## df_mod.X.Ocupacion_Hoteles_diff.l2              -0.1960909  0.2042779  -0.960
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 -0.1786048  0.0981835  -1.819
## df_mod.Estadia_Promedio_log_diff.l2             -0.1850295  0.0977421  -1.893
## df_mod.Cuartos_Registrados_diff.l2               0.1411601  0.1811311   0.779
## df_mod.Llegada_Tur_Nac_diff.l2                   0.0291417  0.2226277   0.131
## df_mod.Densidad_Ocupación_log.l2                 0.0267599  0.2385818   0.112
## const                                           -0.0045253  0.0815580  -0.055
##                                                 Pr(>|t|)  
## y.l1                                              0.6453  
## df_mod.Turistas_Noche_Ext_diff.l1                 0.6727  
## df_mod.X.Ocupacion_Hoteles_diff.l1                0.3719  
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1   0.6281  
## df_mod.Estadia_Promedio_log_diff.l1               0.3296  
## df_mod.Cuartos_Registrados_diff.l1                0.8522  
## df_mod.Llegada_Tur_Nac_diff.l1                    0.1982  
## df_mod.Densidad_Ocupación_log.l1                  0.6258  
## y.l2                                              0.3306  
## df_mod.Turistas_Noche_Ext_diff.l2                 0.2637  
## df_mod.X.Ocupacion_Hoteles_diff.l2                0.3394  
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2   0.0719 .
## df_mod.Estadia_Promedio_log_diff.l2               0.0612 .
## df_mod.Cuartos_Registrados_diff.l2                0.4376  
## df_mod.Llegada_Tur_Nac_diff.l2                    0.8961  
## df_mod.Densidad_Ocupación_log.l2                  0.9109  
## const                                             0.9559  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 0.8749 on 101 degrees of freedom
## Multiple R-Squared: 0.3219,  Adjusted R-squared: 0.2145 
## F-statistic: 2.996 on 16 and 101 DF,  p-value: 0.0004188 
## 
## 
## Estimation results for equation df_mod.Cuartos_Disponibles_Promedio_log_diff: 
## ============================================================================= 
## df_mod.Cuartos_Disponibles_Promedio_log_diff = y.l1 + df_mod.Turistas_Noche_Ext_diff.l1 + df_mod.X.Ocupacion_Hoteles_diff.l1 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 + df_mod.Estadia_Promedio_log_diff.l1 + df_mod.Cuartos_Registrados_diff.l1 + df_mod.Llegada_Tur_Nac_diff.l1 + df_mod.Densidad_Ocupación_log.l1 + y.l2 + df_mod.Turistas_Noche_Ext_diff.l2 + df_mod.X.Ocupacion_Hoteles_diff.l2 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 + df_mod.Estadia_Promedio_log_diff.l2 + df_mod.Cuartos_Registrados_diff.l2 + df_mod.Llegada_Tur_Nac_diff.l2 + df_mod.Densidad_Ocupación_log.l2 + const 
## 
##                                                   Estimate Std. Error t value
## y.l1                                            -0.0001720  0.0007607  -0.226
## df_mod.Turistas_Noche_Ext_diff.l1                0.0883128  0.1547821   0.571
## df_mod.X.Ocupacion_Hoteles_diff.l1               0.0984947  0.3161234   0.312
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1  0.0089289  0.1243618   0.072
## df_mod.Estadia_Promedio_log_diff.l1              0.0673797  0.1493147   0.451
## df_mod.Cuartos_Registrados_diff.l1              -0.1569981  0.2012008  -0.780
## df_mod.Llegada_Tur_Nac_diff.l1                  -0.1080665  0.3195347  -0.338
## df_mod.Densidad_Ocupación_log.l1                -0.3284221  0.2855155  -1.150
## y.l2                                            -0.0005744  0.0007475  -0.768
## df_mod.Turistas_Noche_Ext_diff.l2                0.1783384  0.1317746   1.353
## df_mod.X.Ocupacion_Hoteles_diff.l2              -0.1508551  0.2360086  -0.639
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 -0.0402611  0.1134344  -0.355
## df_mod.Estadia_Promedio_log_diff.l2              0.0433497  0.1129245   0.384
## df_mod.Cuartos_Registrados_diff.l2              -0.4040944  0.2092663  -1.931
## df_mod.Llegada_Tur_Nac_diff.l2                   0.3760009  0.2572087   1.462
## df_mod.Densidad_Ocupación_log.l2                 0.2886107  0.2756409   1.047
## const                                            0.0135229  0.0942265   0.144
##                                                 Pr(>|t|)  
## y.l1                                              0.8215  
## df_mod.Turistas_Noche_Ext_diff.l1                 0.5696  
## df_mod.X.Ocupacion_Hoteles_diff.l1                0.7560  
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1   0.9429  
## df_mod.Estadia_Promedio_log_diff.l1               0.6528  
## df_mod.Cuartos_Registrados_diff.l1                0.4370  
## df_mod.Llegada_Tur_Nac_diff.l1                    0.7359  
## df_mod.Densidad_Ocupación_log.l1                  0.2527  
## y.l2                                              0.4440  
## df_mod.Turistas_Noche_Ext_diff.l2                 0.1790  
## df_mod.X.Ocupacion_Hoteles_diff.l2                0.5241  
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2   0.7234  
## df_mod.Estadia_Promedio_log_diff.l2               0.7019  
## df_mod.Cuartos_Registrados_diff.l2                0.0563 .
## df_mod.Llegada_Tur_Nac_diff.l2                    0.1469  
## df_mod.Densidad_Ocupación_log.l2                  0.2976  
## const                                             0.8862  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 1.011 on 101 degrees of freedom
## Multiple R-Squared: 0.1325,  Adjusted R-squared: -0.00493 
## F-statistic: 0.9641 on 16 and 101 DF,  p-value: 0.501 
## 
## 
## Estimation results for equation df_mod.Estadia_Promedio_log_diff: 
## ================================================================= 
## df_mod.Estadia_Promedio_log_diff = y.l1 + df_mod.Turistas_Noche_Ext_diff.l1 + df_mod.X.Ocupacion_Hoteles_diff.l1 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 + df_mod.Estadia_Promedio_log_diff.l1 + df_mod.Cuartos_Registrados_diff.l1 + df_mod.Llegada_Tur_Nac_diff.l1 + df_mod.Densidad_Ocupación_log.l1 + y.l2 + df_mod.Turistas_Noche_Ext_diff.l2 + df_mod.X.Ocupacion_Hoteles_diff.l2 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 + df_mod.Estadia_Promedio_log_diff.l2 + df_mod.Cuartos_Registrados_diff.l2 + df_mod.Llegada_Tur_Nac_diff.l2 + df_mod.Densidad_Ocupación_log.l2 + const 
## 
##                                                   Estimate Std. Error t value
## y.l1                                             3.005e-04  7.091e-04   0.424
## df_mod.Turistas_Noche_Ext_diff.l1               -8.462e-03  1.443e-01  -0.059
## df_mod.X.Ocupacion_Hoteles_diff.l1               2.869e-02  2.947e-01   0.097
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 -6.006e-03  1.159e-01  -0.052
## df_mod.Estadia_Promedio_log_diff.l1             -1.119e-01  1.392e-01  -0.804
## df_mod.Cuartos_Registrados_diff.l1              -1.312e-01  1.876e-01  -0.700
## df_mod.Llegada_Tur_Nac_diff.l1                  -3.814e-01  2.979e-01  -1.280
## df_mod.Densidad_Ocupación_log.l1                -4.999e-03  2.661e-01  -0.019
## y.l2                                             3.829e-05  6.968e-04   0.055
## df_mod.Turistas_Noche_Ext_diff.l2               -1.425e-01  1.228e-01  -1.160
## df_mod.X.Ocupacion_Hoteles_diff.l2               5.248e-01  2.200e-01   2.385
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2  2.231e-02  1.057e-01   0.211
## df_mod.Estadia_Promedio_log_diff.l2             -2.886e-01  1.053e-01  -2.742
## df_mod.Cuartos_Registrados_diff.l2              -2.669e-01  1.951e-01  -1.368
## df_mod.Llegada_Tur_Nac_diff.l2                  -3.308e-01  2.398e-01  -1.380
## df_mod.Densidad_Ocupación_log.l2                -8.990e-02  2.569e-01  -0.350
## const                                           -1.537e-02  8.783e-02  -0.175
##                                                 Pr(>|t|)   
## y.l1                                             0.67267   
## df_mod.Turistas_Noche_Ext_diff.l1                0.95335   
## df_mod.X.Ocupacion_Hoteles_diff.l1               0.92263   
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1  0.95878   
## df_mod.Estadia_Promedio_log_diff.l1              0.42348   
## df_mod.Cuartos_Registrados_diff.l1               0.48581   
## df_mod.Llegada_Tur_Nac_diff.l1                   0.20333   
## df_mod.Densidad_Ocupación_log.l1                 0.98505   
## y.l2                                             0.95629   
## df_mod.Turistas_Noche_Ext_diff.l2                0.24890   
## df_mod.X.Ocupacion_Hoteles_diff.l2               0.01893 * 
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2  0.83329   
## df_mod.Estadia_Promedio_log_diff.l2              0.00723 **
## df_mod.Cuartos_Registrados_diff.l2               0.17435   
## df_mod.Llegada_Tur_Nac_diff.l2                   0.17077   
## df_mod.Densidad_Ocupación_log.l2                 0.72717   
## const                                            0.86146   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 0.9422 on 101 degrees of freedom
## Multiple R-Squared: 0.2333,  Adjusted R-squared: 0.1118 
## F-statistic:  1.92 on 16 and 101 DF,  p-value: 0.02664 
## 
## 
## Estimation results for equation df_mod.Cuartos_Registrados_diff: 
## ================================================================ 
## df_mod.Cuartos_Registrados_diff = y.l1 + df_mod.Turistas_Noche_Ext_diff.l1 + df_mod.X.Ocupacion_Hoteles_diff.l1 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 + df_mod.Estadia_Promedio_log_diff.l1 + df_mod.Cuartos_Registrados_diff.l1 + df_mod.Llegada_Tur_Nac_diff.l1 + df_mod.Densidad_Ocupación_log.l1 + y.l2 + df_mod.Turistas_Noche_Ext_diff.l2 + df_mod.X.Ocupacion_Hoteles_diff.l2 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 + df_mod.Estadia_Promedio_log_diff.l2 + df_mod.Cuartos_Registrados_diff.l2 + df_mod.Llegada_Tur_Nac_diff.l2 + df_mod.Densidad_Ocupación_log.l2 + const 
## 
##                                                   Estimate Std. Error t value
## y.l1                                            -0.0003475  0.0004370  -0.795
## df_mod.Turistas_Noche_Ext_diff.l1                0.0803960  0.0889241   0.904
## df_mod.X.Ocupacion_Hoteles_diff.l1              -0.1182697  0.1816165  -0.651
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1  0.3737593  0.0714473   5.231
## df_mod.Estadia_Promedio_log_diff.l1             -0.0709077  0.0857830  -0.827
## df_mod.Cuartos_Registrados_diff.l1              -1.1227338  0.1155922  -9.713
## df_mod.Llegada_Tur_Nac_diff.l1                   0.2280838  0.1835764   1.242
## df_mod.Densidad_Ocupación_log.l1                 0.1139350  0.1640319   0.695
## y.l2                                             0.0002265  0.0004295   0.527
## df_mod.Turistas_Noche_Ext_diff.l2                0.0096331  0.0757060   0.127
## df_mod.X.Ocupacion_Hoteles_diff.l2               0.2537447  0.1355896   1.871
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2  0.0714770  0.0651694   1.097
## df_mod.Estadia_Promedio_log_diff.l2              0.0686445  0.0648764   1.058
## df_mod.Cuartos_Registrados_diff.l2              -0.4908386  0.1202259  -4.083
## df_mod.Llegada_Tur_Nac_diff.l2                   0.0194906  0.1477693   0.132
## df_mod.Densidad_Ocupación_log.l2                -0.1481316  0.1583589  -0.935
## const                                            0.0045826  0.0541342   0.085
##                                                 Pr(>|t|)    
## y.l1                                              0.4284    
## df_mod.Turistas_Noche_Ext_diff.l1                 0.3681    
## df_mod.X.Ocupacion_Hoteles_diff.l1                0.5164    
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 9.15e-07 ***
## df_mod.Estadia_Promedio_log_diff.l1               0.4104    
## df_mod.Cuartos_Registrados_diff.l1              3.85e-16 ***
## df_mod.Llegada_Tur_Nac_diff.l1                    0.2169    
## df_mod.Densidad_Ocupación_log.l1                  0.4889    
## y.l2                                              0.5991    
## df_mod.Turistas_Noche_Ext_diff.l2                 0.8990    
## df_mod.X.Ocupacion_Hoteles_diff.l2                0.0642 .  
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2   0.2753    
## df_mod.Estadia_Promedio_log_diff.l2               0.2925    
## df_mod.Cuartos_Registrados_diff.l2              8.92e-05 ***
## df_mod.Llegada_Tur_Nac_diff.l2                    0.8953    
## df_mod.Densidad_Ocupación_log.l2                  0.3518    
## const                                             0.9327    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 0.5807 on 101 degrees of freedom
## Multiple R-Squared: 0.7065,  Adjusted R-squared:  0.66 
## F-statistic: 15.19 on 16 and 101 DF,  p-value: < 2.2e-16 
## 
## 
## Estimation results for equation df_mod.Llegada_Tur_Nac_diff: 
## ============================================================ 
## df_mod.Llegada_Tur_Nac_diff = y.l1 + df_mod.Turistas_Noche_Ext_diff.l1 + df_mod.X.Ocupacion_Hoteles_diff.l1 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 + df_mod.Estadia_Promedio_log_diff.l1 + df_mod.Cuartos_Registrados_diff.l1 + df_mod.Llegada_Tur_Nac_diff.l1 + df_mod.Densidad_Ocupación_log.l1 + y.l2 + df_mod.Turistas_Noche_Ext_diff.l2 + df_mod.X.Ocupacion_Hoteles_diff.l2 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 + df_mod.Estadia_Promedio_log_diff.l2 + df_mod.Cuartos_Registrados_diff.l2 + df_mod.Llegada_Tur_Nac_diff.l2 + df_mod.Densidad_Ocupación_log.l2 + const 
## 
##                                                   Estimate Std. Error t value
## y.l1                                             0.0002855  0.0006499   0.439
## df_mod.Turistas_Noche_Ext_diff.l1               -0.0203390  0.1322338  -0.154
## df_mod.X.Ocupacion_Hoteles_diff.l1               0.3165780  0.2700713   1.172
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1  0.0467999  0.1062451   0.440
## df_mod.Estadia_Promedio_log_diff.l1              0.0190259  0.1275629   0.149
## df_mod.Cuartos_Registrados_diff.l1              -0.3115633  0.1718904  -1.813
## df_mod.Llegada_Tur_Nac_diff.l1                  -0.2694825  0.2729857  -0.987
## df_mod.Densidad_Ocupación_log.l1                -0.1033694  0.2439223  -0.424
## y.l2                                            -0.0011926  0.0006386  -1.867
## df_mod.Turistas_Noche_Ext_diff.l2               -0.1833526  0.1125780  -1.629
## df_mod.X.Ocupacion_Hoteles_diff.l2               0.1702573  0.2016275   0.844
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2  0.0071810  0.0969096   0.074
## df_mod.Estadia_Promedio_log_diff.l2             -0.1218834  0.0964739  -1.263
## df_mod.Cuartos_Registrados_diff.l2               0.0860113  0.1787809   0.481
## df_mod.Llegada_Tur_Nac_diff.l2                  -0.0311730  0.2197392  -0.142
## df_mod.Densidad_Ocupación_log.l2                 0.2107951  0.2354863   0.895
## const                                            0.0097419  0.0804998   0.121
##                                                 Pr(>|t|)  
## y.l1                                              0.6614  
## df_mod.Turistas_Noche_Ext_diff.l1                 0.8781  
## df_mod.X.Ocupacion_Hoteles_diff.l1                0.2439  
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1   0.6605  
## df_mod.Estadia_Promedio_log_diff.l1               0.8817  
## df_mod.Cuartos_Registrados_diff.l1                0.0729 .
## df_mod.Llegada_Tur_Nac_diff.l1                    0.3259  
## df_mod.Densidad_Ocupación_log.l1                  0.6726  
## y.l2                                              0.0647 .
## df_mod.Turistas_Noche_Ext_diff.l2                 0.1065  
## df_mod.X.Ocupacion_Hoteles_diff.l2                0.4004  
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2   0.9411  
## df_mod.Estadia_Promedio_log_diff.l2               0.2094  
## df_mod.Cuartos_Registrados_diff.l2                0.6315  
## df_mod.Llegada_Tur_Nac_diff.l2                    0.8875  
## df_mod.Densidad_Ocupación_log.l2                  0.3728  
## const                                             0.9039  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 0.8636 on 101 degrees of freedom
## Multiple R-Squared: 0.3592,  Adjusted R-squared: 0.2577 
## F-statistic: 3.538 on 16 and 101 DF,  p-value: 4.918e-05 
## 
## 
## Estimation results for equation df_mod.Densidad_Ocupación_log: 
## ============================================================== 
## df_mod.Densidad_Ocupación_log = y.l1 + df_mod.Turistas_Noche_Ext_diff.l1 + df_mod.X.Ocupacion_Hoteles_diff.l1 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 + df_mod.Estadia_Promedio_log_diff.l1 + df_mod.Cuartos_Registrados_diff.l1 + df_mod.Llegada_Tur_Nac_diff.l1 + df_mod.Densidad_Ocupación_log.l1 + y.l2 + df_mod.Turistas_Noche_Ext_diff.l2 + df_mod.X.Ocupacion_Hoteles_diff.l2 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 + df_mod.Estadia_Promedio_log_diff.l2 + df_mod.Cuartos_Registrados_diff.l2 + df_mod.Llegada_Tur_Nac_diff.l2 + df_mod.Densidad_Ocupación_log.l2 + const 
## 
##                                                   Estimate Std. Error t value
## y.l1                                             0.0004198  0.0004089   1.027
## df_mod.Turistas_Noche_Ext_diff.l1               -0.0222007  0.0831987  -0.267
## df_mod.X.Ocupacion_Hoteles_diff.l1               0.0822871  0.1699232   0.484
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1  0.0387753  0.0668472   0.580
## df_mod.Estadia_Promedio_log_diff.l1              0.1775459  0.0802599   2.212
## df_mod.Cuartos_Registrados_diff.l1              -0.1236136  0.1081498  -1.143
## df_mod.Llegada_Tur_Nac_diff.l1                  -0.0777135  0.1717569  -0.452
## df_mod.Densidad_Ocupación_log.l1                 0.6288656  0.1534708   4.098
## y.l2                                            -0.0006223  0.0004018  -1.549
## df_mod.Turistas_Noche_Ext_diff.l2               -0.1736957  0.0708317  -2.452
## df_mod.X.Ocupacion_Hoteles_diff.l2               0.5551492  0.1268597   4.376
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2  0.1172959  0.0609735   1.924
## df_mod.Estadia_Promedio_log_diff.l2             -0.0667030  0.0606994  -1.099
## df_mod.Cuartos_Registrados_diff.l2               0.0139838  0.1124852   0.124
## df_mod.Llegada_Tur_Nac_diff.l2                  -0.2831997  0.1382553  -2.048
## df_mod.Densidad_Ocupación_log.l2                 0.2577714  0.1481630   1.740
## const                                            0.0059286  0.0506488   0.117
##                                                 Pr(>|t|)    
## y.l1                                              0.3071    
## df_mod.Turistas_Noche_Ext_diff.l1                 0.7901    
## df_mod.X.Ocupacion_Hoteles_diff.l1                0.6292    
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1   0.5632    
## df_mod.Estadia_Promedio_log_diff.l1               0.0292 *  
## df_mod.Cuartos_Registrados_diff.l1                0.2557    
## df_mod.Llegada_Tur_Nac_diff.l1                    0.6519    
## df_mod.Densidad_Ocupación_log.l1                8.44e-05 ***
## y.l2                                              0.1246    
## df_mod.Turistas_Noche_Ext_diff.l2                 0.0159 *  
## df_mod.X.Ocupacion_Hoteles_diff.l2              2.95e-05 ***
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2   0.0572 .  
## df_mod.Estadia_Promedio_log_diff.l2               0.2744    
## df_mod.Cuartos_Registrados_diff.l2                0.9013    
## df_mod.Llegada_Tur_Nac_diff.l2                    0.0431 *  
## df_mod.Densidad_Ocupación_log.l2                  0.0849 .  
## const                                             0.9070    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 0.5433 on 101 degrees of freedom
## Multiple R-Squared: 0.7418,  Adjusted R-squared: 0.7008 
## F-statistic: 18.13 on 16 and 101 DF,  p-value: < 2.2e-16 
## 
## 
## 
## Covariance matrix of residuals:
##                                                      y
## y                                            39100.316
## df_mod.Turistas_Noche_Ext_diff                  77.369
## df_mod.X.Ocupacion_Hoteles_diff                120.563
## df_mod.Cuartos_Disponibles_Promedio_log_diff    45.028
## df_mod.Estadia_Promedio_log_diff                 7.501
## df_mod.Cuartos_Registrados_diff                  7.277
## df_mod.Llegada_Tur_Nac_diff                    115.881
## df_mod.Densidad_Ocupación_log                   32.896
##                                              df_mod.Turistas_Noche_Ext_diff
## y                                                                  77.36909
## df_mod.Turistas_Noche_Ext_diff                                      0.80255
## df_mod.X.Ocupacion_Hoteles_diff                                     0.41128
## df_mod.Cuartos_Disponibles_Promedio_log_diff                        0.12551
## df_mod.Estadia_Promedio_log_diff                                   -0.07432
## df_mod.Cuartos_Registrados_diff                                     0.02762
## df_mod.Llegada_Tur_Nac_diff                                         0.30264
## df_mod.Densidad_Ocupación_log                                       0.15585
##                                              df_mod.X.Ocupacion_Hoteles_diff
## y                                                                  1.206e+02
## df_mod.Turistas_Noche_Ext_diff                                     4.113e-01
## df_mod.X.Ocupacion_Hoteles_diff                                    7.655e-01
## df_mod.Cuartos_Disponibles_Promedio_log_diff                       1.775e-01
## df_mod.Estadia_Promedio_log_diff                                  -1.143e-01
## df_mod.Cuartos_Registrados_diff                                   -1.248e-02
## df_mod.Llegada_Tur_Nac_diff                                        6.288e-01
## df_mod.Densidad_Ocupación_log                                     -8.434e-04
##                                              df_mod.Cuartos_Disponibles_Promedio_log_diff
## y                                                                              45.0282578
## df_mod.Turistas_Noche_Ext_diff                                                  0.1255103
## df_mod.X.Ocupacion_Hoteles_diff                                                 0.1774561
## df_mod.Cuartos_Disponibles_Promedio_log_diff                                    1.0217309
## df_mod.Estadia_Promedio_log_diff                                               -0.0006832
## df_mod.Cuartos_Registrados_diff                                                 0.3614287
## df_mod.Llegada_Tur_Nac_diff                                                     0.2217742
## df_mod.Densidad_Ocupación_log                                                  -0.0469314
##                                              df_mod.Estadia_Promedio_log_diff
## y                                                                   7.5006422
## df_mod.Turistas_Noche_Ext_diff                                     -0.0743232
## df_mod.X.Ocupacion_Hoteles_diff                                    -0.1142525
## df_mod.Cuartos_Disponibles_Promedio_log_diff                       -0.0006832
## df_mod.Estadia_Promedio_log_diff                                    0.8878145
## df_mod.Cuartos_Registrados_diff                                     0.0233441
## df_mod.Llegada_Tur_Nac_diff                                        -0.2856205
## df_mod.Densidad_Ocupación_log                                       0.1404504
##                                              df_mod.Cuartos_Registrados_diff
## y                                                                   7.277284
## df_mod.Turistas_Noche_Ext_diff                                      0.027622
## df_mod.X.Ocupacion_Hoteles_diff                                    -0.012476
## df_mod.Cuartos_Disponibles_Promedio_log_diff                        0.361429
## df_mod.Estadia_Promedio_log_diff                                    0.023344
## df_mod.Cuartos_Registrados_diff                                     0.337236
## df_mod.Llegada_Tur_Nac_diff                                         0.053276
## df_mod.Densidad_Ocupación_log                                      -0.009171
##                                              df_mod.Llegada_Tur_Nac_diff
## y                                                              115.88111
## df_mod.Turistas_Noche_Ext_diff                                   0.30264
## df_mod.X.Ocupacion_Hoteles_diff                                  0.62877
## df_mod.Cuartos_Disponibles_Promedio_log_diff                     0.22177
## df_mod.Estadia_Promedio_log_diff                                -0.28562
## df_mod.Cuartos_Registrados_diff                                  0.05328
## df_mod.Llegada_Tur_Nac_diff                                      0.74573
## df_mod.Densidad_Ocupación_log                                    0.08728
##                                              df_mod.Densidad_Ocupación_log
## y                                                               32.8963885
## df_mod.Turistas_Noche_Ext_diff                                   0.1558528
## df_mod.X.Ocupacion_Hoteles_diff                                 -0.0008434
## df_mod.Cuartos_Disponibles_Promedio_log_diff                    -0.0469314
## df_mod.Estadia_Promedio_log_diff                                 0.1404504
## df_mod.Cuartos_Registrados_diff                                 -0.0091706
## df_mod.Llegada_Tur_Nac_diff                                      0.0872827
## df_mod.Densidad_Ocupación_log                                    0.2952083
## 
## Correlation matrix of residuals:
##                                                    y
## y                                            1.00000
## df_mod.Turistas_Noche_Ext_diff               0.43676
## df_mod.X.Ocupacion_Hoteles_diff              0.69689
## df_mod.Cuartos_Disponibles_Promedio_log_diff 0.22528
## df_mod.Estadia_Promedio_log_diff             0.04026
## df_mod.Cuartos_Registrados_diff              0.06337
## df_mod.Llegada_Tur_Nac_diff                  0.67863
## df_mod.Densidad_Ocupación_log                0.30619
##                                              df_mod.Turistas_Noche_Ext_diff
## y                                                                   0.43676
## df_mod.Turistas_Noche_Ext_diff                                      1.00000
## df_mod.X.Ocupacion_Hoteles_diff                                     0.52474
## df_mod.Cuartos_Disponibles_Promedio_log_diff                        0.13860
## df_mod.Estadia_Promedio_log_diff                                   -0.08805
## df_mod.Cuartos_Registrados_diff                                     0.05310
## df_mod.Llegada_Tur_Nac_diff                                         0.39120
## df_mod.Densidad_Ocupación_log                                       0.32020
##                                              df_mod.X.Ocupacion_Hoteles_diff
## y                                                                   0.696887
## df_mod.Turistas_Noche_Ext_diff                                      0.524736
## df_mod.X.Ocupacion_Hoteles_diff                                     1.000000
## df_mod.Cuartos_Disponibles_Promedio_log_diff                        0.200660
## df_mod.Estadia_Promedio_log_diff                                   -0.138593
## df_mod.Cuartos_Registrados_diff                                    -0.024556
## df_mod.Llegada_Tur_Nac_diff                                         0.832217
## df_mod.Densidad_Ocupación_log                                      -0.001774
##                                              df_mod.Cuartos_Disponibles_Promedio_log_diff
## y                                                                               0.2252821
## df_mod.Turistas_Noche_Ext_diff                                                  0.1386039
## df_mod.X.Ocupacion_Hoteles_diff                                                 0.2006600
## df_mod.Cuartos_Disponibles_Promedio_log_diff                                    1.0000000
## df_mod.Estadia_Promedio_log_diff                                               -0.0007173
## df_mod.Cuartos_Registrados_diff                                                 0.6157259
## df_mod.Llegada_Tur_Nac_diff                                                     0.2540695
## df_mod.Densidad_Ocupación_log                                                  -0.0854537
##                                              df_mod.Estadia_Promedio_log_diff
## y                                                                   0.0402575
## df_mod.Turistas_Noche_Ext_diff                                     -0.0880496
## df_mod.X.Ocupacion_Hoteles_diff                                    -0.1385934
## df_mod.Cuartos_Disponibles_Promedio_log_diff                       -0.0007173
## df_mod.Estadia_Promedio_log_diff                                    1.0000000
## df_mod.Cuartos_Registrados_diff                                     0.0426628
## df_mod.Llegada_Tur_Nac_diff                                        -0.3510251
## df_mod.Densidad_Ocupación_log                                       0.2743454
##                                              df_mod.Cuartos_Registrados_diff
## y                                                                    0.06337
## df_mod.Turistas_Noche_Ext_diff                                       0.05310
## df_mod.X.Ocupacion_Hoteles_diff                                     -0.02456
## df_mod.Cuartos_Disponibles_Promedio_log_diff                         0.61573
## df_mod.Estadia_Promedio_log_diff                                     0.04266
## df_mod.Cuartos_Registrados_diff                                      1.00000
## df_mod.Llegada_Tur_Nac_diff                                          0.10624
## df_mod.Densidad_Ocupación_log                                       -0.02906
##                                              df_mod.Llegada_Tur_Nac_diff
## y                                                                 0.6786
## df_mod.Turistas_Noche_Ext_diff                                    0.3912
## df_mod.X.Ocupacion_Hoteles_diff                                   0.8322
## df_mod.Cuartos_Disponibles_Promedio_log_diff                      0.2541
## df_mod.Estadia_Promedio_log_diff                                 -0.3510
## df_mod.Cuartos_Registrados_diff                                   0.1062
## df_mod.Llegada_Tur_Nac_diff                                       1.0000
## df_mod.Densidad_Ocupación_log                                     0.1860
##                                              df_mod.Densidad_Ocupación_log
## y                                                                 0.306192
## df_mod.Turistas_Noche_Ext_diff                                    0.320195
## df_mod.X.Ocupacion_Hoteles_diff                                  -0.001774
## df_mod.Cuartos_Disponibles_Promedio_log_diff                     -0.085454
## df_mod.Estadia_Promedio_log_diff                                  0.274345
## df_mod.Cuartos_Registrados_diff                                  -0.029065
## df_mod.Llegada_Tur_Nac_diff                                       0.186026
## df_mod.Densidad_Ocupación_log                                     1.000000
serial.test(modelo_var, lags.pt = 12, type = "PT.asymptotic")
## 
##  Portmanteau Test (asymptotic)
## 
## data:  Residuals of VAR object modelo_var
## Chi-squared = 766.94, df = 640, p-value = 0.0003958
# VAR con serie diferenciada
y_diff <- ts(df_final$Derrama_Economica_Est_mdp_diff, start = c(2015,1), frequency = 12)
var_ts2 <- ts(cbind(y_diff, df_mod), start = c(2015,1), frequency = 12)
modelo_var2 <- VAR(var_ts2, p = optimal_lag)


serial.test(modelo_var2, lags.pt = 12, type = "PT.asymptotic")
## 
##  Portmanteau Test (asymptotic)
## 
## data:  Residuals of VAR object modelo_var2
## Chi-squared = 1318.8, df = 0, p-value < 2.2e-16
AIC(modelo_sarimax1)
## [1] 1394.597
BIC(modelo_sarimax1)
## [1] 1429.344
logLik(modelo_sarimax1)
## 'log Lik.' -684.2986 (df=13)
AIC(modelo_var)
## [1] 3177.244
BIC(modelo_var)
## [1] 3554.057
logLik(modelo_var)
## 'log Lik.' -1452.622 (df=136)
AIC(modelo_auto)
## [1] 1521.182
BIC(modelo_auto)
## [1] 1546.269
logLik(modelo_auto)
## 'log Lik.' -751.5908 (df=9)
library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:psych':
## 
##     logit
## The following object is masked from 'package:dplyr':
## 
##     recode
# Calcular VIF correctamente
modelo_vif <- lm(rep(1, nrow(df_mod)) ~ ., data = df_mod)
vif(modelo_vif)
##               Turistas_Noche_Ext_diff              X.Ocupacion_Hoteles_diff 
##                              1.460450                              4.536625 
## Cuartos_Disponibles_Promedio_log_diff             Estadia_Promedio_log_diff 
##                              1.149146                              1.138083 
##              Cuartos_Registrados_diff                  Llegada_Tur_Nac_diff 
##                              1.572715                              4.282152 
##                Densidad_Ocupación_log 
##                              1.097790
# Paso 1: asegurar que df_xreg sea una matriz numérica con nombres
df_xreg <- as.matrix(df_xreg)
stopifnot(is.matrix(df_xreg), is.numeric(df_xreg))

# Paso 2: crear base futura (última fila repetida)
n_periodos <- 36
future_xreg <- matrix(rep(df_xreg[nrow(df_xreg), ], n_periodos), 
                      nrow = n_periodos, byrow = TRUE)

# Paso 3: aplicar crecimiento acumulado del 2%
growth <- (1.02)^(1:n_periodos)
future_xreg <- sweep(future_xreg, 1, growth, `*`)

# Paso 4: restaurar los nombres de columnas
colnames(future_xreg) <- colnames(df_xreg)

# Paso 5: verificar todo antes del forecast
stopifnot(
  is.matrix(future_xreg),
  is.numeric(future_xreg),
  identical(colnames(df_xreg), colnames(future_xreg)),
  ncol(df_xreg) == ncol(future_xreg)
)
str(modelo_sarimax1$xreg)
##  NULL
str(future_xreg)
##  num [1:36, 1:7] -1.33 -1.36 -1.38 -1.41 -1.44 ...
##  - attr(*, "dimnames")=List of 2
##   ..$ : NULL
##   ..$ : chr [1:7] "Turistas_Noche_Ext_diff" "X.Ocupacion_Hoteles_diff" "Cuartos_Disponibles_Promedio_log_diff" "Estadia_Promedio_log_diff" ...
identical(colnames(modelo_sarimax1$xreg), colnames(future_xreg))
## [1] FALSE
ncol(modelo_sarimax1$xreg) == ncol(future_xreg)
## logical(0)
colnames(df_xreg)
## [1] "Turistas_Noche_Ext_diff"              
## [2] "X.Ocupacion_Hoteles_diff"             
## [3] "Cuartos_Disponibles_Promedio_log_diff"
## [4] "Estadia_Promedio_log_diff"            
## [5] "Cuartos_Registrados_diff"             
## [6] "Llegada_Tur_Nac_diff"                 
## [7] "Densidad_Ocupación_log"
colnames(future_xreg)
## [1] "Turistas_Noche_Ext_diff"              
## [2] "X.Ocupacion_Hoteles_diff"             
## [3] "Cuartos_Disponibles_Promedio_log_diff"
## [4] "Estadia_Promedio_log_diff"            
## [5] "Cuartos_Registrados_diff"             
## [6] "Llegada_Tur_Nac_diff"                 
## [7] "Densidad_Ocupación_log"
colnames(modelo_sarimax1$xreg)
## NULL

PREDICCIÓN

a. ¿Cuál es el pronóstico optimista de la(s) principal(es) variable(s) de interés para el período

de años 2024, 2025, y 2026?

Bajo el escenario optimista, el modelo SARIMAX proyecta que:

2025: La derrama económica promediaría unos 2 135 mdp al mes. Esto implicaría un repunte muy fuerte respecto al último dato observado, gracias al impulso combinado de variables como la llegada de turistas nacionales, la ocupación hotelera y la estadía promedio.

2026: Ese promedio decae hasta alrededor de 1 118 mdp mensuales. Sigue siendo positivo, pero refleja que el “efecto arrastre” de las variables explicativas pierde fuerza: laTendencia de crecimiento ya no resulta tan vigorosa como en 2025.

2027: La media mensual cae hasta unos –980 mdp, es decir, la proyección se vuelve negativa: incluso en el mejor de los casos, el modelo anticipa que la derrama puede contraerse.

Aun en el mejor de los casos (la parte alta de la banda del pronóstico grafica azul), la derrama proyectada permanece negativa y con un patrón estacional marcado, lo que puede sugerir la necesidad de implemenetar medidas de corto plazo (por ej. campañas específicas, ofertas puntuales, etc.) para poder suavizar la tendencia a la baja y reducir la incertidumbre sobre los meses más críticos, ya que el pronóstico base, muestra iniciar en torno a –100 mdp en enero 2025 y va descendiendo mes a mes hasta cerca de –700 mdp a finales de 2027.

# 1) Predecir con SARIMAX
res_pred <- predict(
  modelo_sarimax1,
  n.ahead = n_periodos,
  newxreg  = future_xreg,
  se.fit   = TRUE
)
pred <- res_pred$pred
se   <- res_pred$se

# 2) Construir forecast_df arrancando en enero 2025
ultimo_num <- as.numeric(tail(time(y), 1))
periodo_ym <- as.yearmon(ultimo_num + seq(1/12, n_periodos/12, by = 1/12))
forecast_df <- data.frame(
  Periodo   = as.Date(periodo_ym),
  Pesimista = pred - 1.96 * se,
  Real      = pred,
  Optimo    = pred + 1.96 * se
)

# 3) Dibujar sólo el pronóstico desde 2025
ggplot(forecast_df, aes(x = Periodo)) +
  geom_ribbon(aes(ymin = Pesimista, ymax = Optimo),
              fill = "lightblue", alpha = 0.4) +
  geom_line(aes(y = Real), color = "blue", size = 1) +
  geom_point(aes(y = Real), color = "blue", size = 2) +
  scale_x_date(
    date_breaks = "3 months",
    date_labels = "%b %Y",
    limits = as.Date(c("2025-01-01", max(forecast_df$Periodo)))
  ) +
  labs(
    title    = "Pronóstico Mensual de Derrama Económica (mdp)",
    subtitle = "Sólo la parte de forecast desde enero 2025",
    x        = "Mes",
    y        = "Derrama Económica"
  ) +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))
## 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.
## Don't know how to automatically pick scale for object of type <ts>. Defaulting
## to continuous.
## Don't know how to automatically pick scale for object of type <ts>. Defaulting
## to continuous.
## Don't know how to automatically pick scale for object of type <ts>. Defaulting
## to continuous.

library(dplyr)
library(tidyr)
library(ggplot2)

df_long <- forecast_df %>%
  dplyr::select(Periodo, Pesimista, Real, Optimo) %>%
  pivot_longer(
    cols      = c(Pesimista, Real, Optimo),
    names_to  = "Escenario",
    values_to = "Delta"
  )

ggplot(df_long, aes(x = Periodo, y = Delta, color = Escenario, linetype = Escenario)) +
  geom_line(size = 1) +
  geom_point(size = 2) +
  scale_color_manual(
    values = c(
      "Optimo"    = "darkgreen",  # <-- sin acento, coincide con tu columna
      "Real"      = "blue",
      "Pesimista" = "red"
    )
  ) +
  scale_linetype_manual(
    values = c(
      "Optimo"    = "dashed",
      "Real"      = "solid",
      "Pesimista" = "dotted"
    )
  ) +
  scale_x_date(
    date_breaks = "2 months",
    date_labels = "%b\n%Y"
  ) +
  labs(
    title    = "Pronóstico Mensual de ΔDerrama Económica (mdp)",
    subtitle = "Picos y valles mes a mes en un solo gráfico",
    x        = "Mes",
    y        = "Cambio mensual estimado (mdp)",
    color    = "Escenario",
    linetype = "Escenario"
  ) +
  theme_minimal() +
  theme(
    axis.text.x     = element_text(angle = 45, hjust = 1),
    plot.title      = element_text(face = "bold"),
    plot.subtitle   = element_text(size = 10),
    legend.position = "bottom"
  )

# 1) Construir la tabla mensual de diferencias ΔDerrama
tabla_diffs <- forecast_df %>%
  dplyr::select(Periodo, Pesimista, Real, Optimo) %>%
  dplyr::rename(
    `Δ Pesimista` = Pesimista,
    `Δ Real`      = Real,
    `Δ Óptimo`    = Optimo
  )

# 2) Imprimir la tabla completa en consola
print(tabla_diffs)
##       Periodo Δ Pesimista     Δ Real    Δ Óptimo
## 1  2025-01-01   -339.4860  -74.35111  190.783789
## 2  2025-02-01   -530.3056 -263.89927    2.507008
## 3  2025-03-01   -504.4744 -236.51080   31.452811
## 4  2025-04-01   -601.3710 -333.31363  -65.256238
## 5  2025-05-01   -637.7973 -369.53241 -101.267481
## 6  2025-06-01   -571.7906 -303.56226  -35.333911
## 7  2025-07-01   -545.1704 -276.89927   -8.628086
## 8  2025-08-01   -639.4751 -371.22173 -102.968394
## 9  2025-09-01   -712.1512 -443.88416 -175.617123
## 10 2025-10-01   -586.4596 -318.20361  -49.947659
## 11 2025-11-01   -556.6123 -288.34324  -20.074194
## 12 2025-12-01   -731.2923 -463.03961 -194.786881
## 13 2026-01-01   -441.9326 -164.85420  112.224232
## 14 2026-02-01   -610.9425 -333.91466  -56.886802
## 15 2026-03-01   -599.7246 -322.50713  -45.289692
## 16 2026-04-01   -690.4421 -413.27101 -136.099964
## 17 2026-05-01   -732.4805 -455.26896 -178.057424
## 18 2026-06-01   -665.9028 -388.70923 -111.515643
## 19 2026-07-01   -642.1644 -364.95901  -87.753617
## 20 2026-08-01   -737.5454 -460.34748 -183.149571
## 21 2026-09-01   -812.3346 -535.12991 -257.925233
## 22 2026-10-01   -688.2479 -411.05196 -133.856052
## 23 2026-11-01   -660.3391 -383.12970 -105.920288
## 24 2026-12-01   -836.8296 -559.63844 -282.447306
## 25 2027-01-01   -549.4319 -263.39083   22.650253
## 26 2027-02-01   -720.3400 -434.37951 -148.419056
## 27 2027-03-01   -711.1340 -424.96496 -138.795895
## 28 2027-04-01   -803.8584 -517.74747 -231.636496
## 29 2027-05-01   -847.9695 -561.81213 -275.654769
## 30 2027-06-01   -783.4923 -497.35627 -211.220278
## 31 2027-07-01   -761.9040 -475.75426 -189.604512
## 32 2027-08-01   -859.4736 -573.33267 -287.191733
## 33 2027-09-01   -936.4984 -650.34951 -364.200623
## 34 2027-10-01   -814.6889 -528.55030 -242.411668
## 35 2027-11-01   -789.1072 -502.95254 -216.797891
## 36 2027-12-01   -967.9656 -681.83218 -395.698749
# — Primero recreamos fc_levels dentro del mismo chunk —
last_nivel <- as.numeric(tail(derrama_ts, 1))
fc_levels <- forecast_df %>%
  mutate(
    Nivel_Pes  = last_nivel + cumsum(Pesimista),
    Nivel_Real = last_nivel + cumsum(Real),
    Nivel_Opt  = last_nivel + cumsum(Optimo),
    Año        = as.integer(format(Periodo, "%Y"))
  )

# — Ahora sí calculamos el resumen anual —
resumen_niveles <- fc_levels %>%
  group_by(Año) %>%
  summarise(
    `Promedio Óptimo (mdp/mes)` = round(mean(Nivel_Opt, na.rm=TRUE), 0)
  )

print(resumen_niveles)
## # A tibble: 3 × 2
##     Año `Promedio Óptimo (mdp/mes)`
##   <int>                       <dbl>
## 1  2025                        2135
## 2  2026                        1118
## 3  2027                        -980
# 1) Agrupar por año y promediar el Δ Óptimo
resumen_anual <- tabla_diffs %>%
  dplyr::mutate(Año = as.integer(format(Periodo, "%Y"))) %>%
  dplyr::group_by(Año) %>%
  dplyr::summarise(
    `Promedio Óptimo (mdp/mes)` = round(mean(`Δ Óptimo`, na.rm = TRUE), 0)
  )

# 2) Imprimir el resumen anual en consola
print(resumen_anual)
## # A tibble: 3 × 2
##     Año `Promedio Óptimo (mdp/mes)`
##   <int>                       <dbl>
## 1  2025                         -44
## 2  2026                        -122
## 3  2027                        -223

b. Para el caso del período de años 2023 – 2024, cuáles son las variables control que explican

un aumento o disminución sobre la(s) principal(es) variable(s) de interés? Visualizar el tipo de relación de dichas variable control sobre la(s) principal(es) variable(s) de interés.

Para el periodo 2023–2024, estas son las variables de control que explican la variación (diff) de la Derrama Económica, ordenadas por magnitud de coeficiente en el SARIMAX:

  • Llegada_Tur_Nac_diff : Un incremento de 1 unidad en la diferencia de llegadas de turistas nacionales (p.ej. un aumento de 1 × 10³ llegadas respecto al periodo anterior) se asocia con un aumento de ≈ 147.8 mdp en la derrama.

Coeficiente: +147.84 | Correlación (r): ≈ 0.54 | Tipo de relación: Fuerte y positiva

  • Estadia_Promedio_log_diff : Un aumento relativo del 1 % en la estadía promedio (capturado por la diferencia logarítmica) se asocia con un incremento de ≈ 51.3 mdp en la derrama. Coeficiente: +51.29 | Correlación (r): ≈ 0.62 | Tipo de relación: Muy positiva

  • X.Ocupacion_Hoteles_diff : Un incremento de 1 punto porcentual en la ocupación hotelera se asocia con un aumento de ≈ 35.1 mdp en la derrama. Coeficiente: +35.12 | Correlación (r): ≈ 0.56 | Tipo de relación: Fuerte y positiva

  • Densidad_Ocupación_log : Un aumento relativo del 1 % en la densidad de ocupación (capturado por la diferencia logarítmica) se asocia con un incremento de ≈ 27.7 mdp en la derrama. Coeficiente: +27.68 | Correlación (r): ≈ 0.18 | Tipo de relación: Débil y positiva

  • Cuartos_Registrados_diff : Un incremento de 1 unidad en la diferencia de cuartos registrados (p.ej. 1 × 10³ cuartos) se asocia con un aumento de ≈ 26.7 mdp en la derrama. Coeficiente: +26.68 | Correlación (r): ≈ 0.24 | Tipo de relación: Débil a moderada y positiva

  • Turistas_Noche_Ext_diff : Un incremento de 1 unidad en la diferencia de noches de turistas extranjeros (p.ej. 1 × 10³ noches) se asocia con un aumento de ≈ 26.4 mdp en la derrama. Coeficiente: +26.44 | Correlación (r): ≈ 0.30 | Tipo de relación: Moderada y positiva

  • Cuartos_Disponibles_Promedio_log_diff : Un aumento relativo del 1 % en los cuartos disponibles promedio (capturado por la diferencia logarítmica) se asocia con una disminución de ≈ 6.27 mdp en la derrama. Coeficiente: –6.27 | Correlación (r): ≈ 0.14 | Tipo de relación: Muy débil y negativa

summary(modelo_sarimax1)$coef
##                                   ar1                                   ar2 
##                           -0.46926976                            0.03947154 
##                                   ma1                                   ma2 
##                           -0.64796092                           -0.35203585 
##                                  sma1               Turistas_Noche_Ext_diff 
##                           -0.75730834                           26.43620005 
##              X.Ocupacion_Hoteles_diff Cuartos_Disponibles_Promedio_log_diff 
##                           35.11997364                           -6.27001640 
##             Estadia_Promedio_log_diff              Cuartos_Registrados_diff 
##                           51.28616856                           26.67553838 
##                  Llegada_Tur_Nac_diff                Densidad_Ocupación_log 
##                          147.83636835                           27.68356139
# Extraer todos los coeficientes
coef_sarimax <- summary(modelo_sarimax1)$coef

# Filtrar solo los coeficientes cuyas variables están en tus explicativas (df_xreg)
coef_explicativas <- coef_sarimax[names(coef_sarimax) %in% colnames(df_xreg)]

# Convertir a data frame y ordenar por valor absoluto (descendente)
library(tibble)
library(dplyr)

tabla_coef <- tibble(
  Variable = names(coef_explicativas),
  Coeficiente = as.numeric(coef_explicativas)
) %>%
  mutate(Coef_Abs = abs(Coeficiente)) %>%
  arrange(desc(Coef_Abs))

# Mostrar tabla
print(tabla_coef)
## # A tibble: 7 × 3
##   Variable                              Coeficiente Coef_Abs
##   <chr>                                       <dbl>    <dbl>
## 1 Llegada_Tur_Nac_diff                       148.     148.  
## 2 Estadia_Promedio_log_diff                   51.3     51.3 
## 3 X.Ocupacion_Hoteles_diff                    35.1     35.1 
## 4 Densidad_Ocupación_log                      27.7     27.7 
## 5 Cuartos_Registrados_diff                    26.7     26.7 
## 6 Turistas_Noche_Ext_diff                     26.4     26.4 
## 7 Cuartos_Disponibles_Promedio_log_diff       -6.27     6.27
# Filtrar años 2023 y 2024
df_plot <- df_final[df_final$AÑO %in% c(2023, 2024), ]

# Iterar sobre cada variable explicativa
for (var in variables_explicativas) {
  # Calcular correlación
  r <- cor(df_plot[[var]], df_plot$Derrama_Economica_Est_mdp_diff, use = "complete.obs")
  r_label <- paste0("r = ", round(r, 2))

  # Crear gráfico
  p <- ggplot(df_plot, aes_string(x = var, y = "Derrama_Economica_Est_mdp_diff")) +
    geom_point() +
    geom_smooth(method = "lm", se = FALSE, color = "blue") +
    ggtitle(paste("Relación entre", var, "y Derrama Económica (2023-2024)", r_label)) +
    xlab(var) +
    ylab("Derrama Económica Estimada (Diff)")
  
  print(p)
}
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `geom_smooth()` using formula = 'y ~ x'

## `geom_smooth()` using formula = 'y ~ x'

## `geom_smooth()` using formula = 'y ~ x'

## `geom_smooth()` using formula = 'y ~ x'

## `geom_smooth()` using formula = 'y ~ x'

## `geom_smooth()` using formula = 'y ~ x'

## `geom_smooth()` using formula = 'y ~ x'

# 3. Calcular matriz de correlación
cor_matrix <- cor(df_plot, use = "complete.obs")

# 4. Extraer correlaciones con la variable dependiente
correlaciones <- cor_matrix["Derrama_Economica_Est_mdp_diff", -1]

# 5. Convertir a tabla ordenada
tabla_correlacion <- data.frame(
  Variable = names(correlaciones),
  Coef_de_Correlacion = as.numeric(correlaciones)
) %>%
  arrange(desc(abs(Coef_de_Correlacion)))  # Sin espacios en el nombre

# 6. Mostrar
print(tabla_correlacion)
##                                 Variable Coef_de_Correlacion
## 1         Derrama_Economica_Est_mdp_diff          1.00000000
## 2                Turistas_Noche_Nac_diff          0.79822271
## 3                  Cuartos_Ocupados_diff          0.72349499
## 4               X.Ocupacion_Hoteles_diff          0.63461937
## 5              Estadia_Promedio_log_diff          0.55427282
## 6                   Llegada_Tur_Nac_diff          0.54112254
## 7                Turistas_Noche_Ext_diff          0.38504745
## 8               Cuartos_Disponibles_diff          0.27940090
## 9               Cuartos_Registrados_diff          0.22377855
## 10                Densidad_Ocupación_log          0.22192337
## 11                  Llegada_Tur_Ext_diff          0.17178725
## 12                                   AÑO         -0.09284935
## 13 Cuartos_Disponibles_Promedio_log_diff          0.08655315

c. ¿Cuál es el tamaño del impacto de un incremento en 25%, 50%, y 75% de las variables

control significativas sobre la(s) principal(es) variable(s) de interés?

Llegada de turistas nacionales es el factor más determinante

Un aumento del 75 % en la variable Llegada_Tur_Nac_diff se traduce en un incremento aproximado de 110.9 mdp en la derrama.

Incluso un 25 % extra de llegadas nacionales aporta casi 37 mdp. → Implica que campañas o políticas orientadas a atraer turistas nacionales tendrán el retorno más alto en derrama económica.

Estadía promedio y ocupación hotelera, segundos motores importantes

Estadia_Promedio_log_diff: +75 % ⇒ +38.5 mdp

X.Ocupacion_Hoteles_diff (porcentaje de ocupación): +75 % ⇒ +26.3 mdp → Alargar la estancia media y mantener alta la ocupación optimiza significativamente la derrama.

# Definir incrementos a simular
incrementos <- c(0.25, 0.50, 0.75)

# Crear tabla de impactos desde tabla_coef
impactos <- data.frame()

for (i in 1:nrow(tabla_coef)) {
  var <- tabla_coef$Variable[i]
  coef <- tabla_coef$Coeficiente[i]
  
  for (inc in incrementos) {
    efecto <- coef * inc
    impactos <- rbind(impactos, data.frame(
      Variable = var,
      Incremento = paste0("+", inc * 100, "%"),
      Impacto_Pronosticado = round(efecto, 3)
    ))
  }
}

# Ordenar por magnitud del impacto
impactos$Impacto_Abs <- abs(impactos$Impacto_Pronosticado)
impactos <- impactos[order(-impactos$Impacto_Abs), ]
impactos <- subset(impactos, select = -Impacto_Abs)

# Mostrar tabla
print(impactos)
##                                 Variable Incremento Impacto_Pronosticado
## 3                   Llegada_Tur_Nac_diff       +75%              110.877
## 2                   Llegada_Tur_Nac_diff       +50%               73.918
## 6              Estadia_Promedio_log_diff       +75%               38.465
## 1                   Llegada_Tur_Nac_diff       +25%               36.959
## 9               X.Ocupacion_Hoteles_diff       +75%               26.340
## 5              Estadia_Promedio_log_diff       +50%               25.643
## 12                Densidad_Ocupación_log       +75%               20.763
## 15              Cuartos_Registrados_diff       +75%               20.007
## 18               Turistas_Noche_Ext_diff       +75%               19.827
## 8               X.Ocupacion_Hoteles_diff       +50%               17.560
## 11                Densidad_Ocupación_log       +50%               13.842
## 14              Cuartos_Registrados_diff       +50%               13.338
## 17               Turistas_Noche_Ext_diff       +50%               13.218
## 4              Estadia_Promedio_log_diff       +25%               12.822
## 7               X.Ocupacion_Hoteles_diff       +25%                8.780
## 10                Densidad_Ocupación_log       +25%                6.921
## 13              Cuartos_Registrados_diff       +25%                6.669
## 16               Turistas_Noche_Ext_diff       +25%                6.609
## 21 Cuartos_Disponibles_Promedio_log_diff       +75%               -4.703
## 20 Cuartos_Disponibles_Promedio_log_diff       +50%               -3.135
## 19 Cuartos_Disponibles_Promedio_log_diff       +25%               -1.568
knitr::kable(impactos, caption = "Impacto estimado por incremento en variables explicativas")
Impacto estimado por incremento en variables explicativas
Variable Incremento Impacto_Pronosticado
3 Llegada_Tur_Nac_diff +75% 110.877
2 Llegada_Tur_Nac_diff +50% 73.918
6 Estadia_Promedio_log_diff +75% 38.465
1 Llegada_Tur_Nac_diff +25% 36.959
9 X.Ocupacion_Hoteles_diff +75% 26.340
5 Estadia_Promedio_log_diff +50% 25.643
12 Densidad_Ocupación_log +75% 20.763
15 Cuartos_Registrados_diff +75% 20.007
18 Turistas_Noche_Ext_diff +75% 19.827
8 X.Ocupacion_Hoteles_diff +50% 17.560
11 Densidad_Ocupación_log +50% 13.842
14 Cuartos_Registrados_diff +50% 13.338
17 Turistas_Noche_Ext_diff +50% 13.218
4 Estadia_Promedio_log_diff +25% 12.822
7 X.Ocupacion_Hoteles_diff +25% 8.780
10 Densidad_Ocupación_log +25% 6.921
13 Cuartos_Registrados_diff +25% 6.669
16 Turistas_Noche_Ext_diff +25% 6.609
21 Cuartos_Disponibles_Promedio_log_diff +75% -4.703
20 Cuartos_Disponibles_Promedio_log_diff +50% -3.135
19 Cuartos_Disponibles_Promedio_log_diff +25% -1.568

d. Describir el nivel de precisión del modelo de predicción.

Justificación de la elección de SARIMAX:

AIC y BIC más bajos: Obtiene los valores más reducidos (AIC = 1394.60, BIC = 1429.34), señal de mejor equilibrio entre ajuste y complejidad.

Log-Likelihood superior: Presenta la verosimilitud más alta (–684.30 frente a –751.59 y –1452.62), indicando un ajuste más fino de la distribución real de los datos.

RMSE mínimo: Con 126.46, es el menor error de predicción frente a 127.01 (AutoARIMA) y 323.43 (VAR), lo que conlleva mayor precisión en los pronósticos.

Residuos como ruido blanco: El test de Ljung–Box en los residuos de SARIMAX arroja p-value > 0.05, confirmando ausencia de autocorrelación remanente y cumplimiento de supuestos.

Captura de estacionalidad y regresores externos: Incorpora de forma explícita tanto términos estacionales como variables explicativas («xreg»), modelando más completamente las dinámicas de tendencia y ciclos del sector Hospitalidad (Hotelera)

# Extraer métricas del modelo SARIMAX
aic_val <- AIC(modelo_sarimax1)
bic_val <- BIC(modelo_sarimax1)
loglik_val <- logLik(modelo_sarimax1)

# Si quieres RMSE (opcional, si tienes valores reales y predichos)
library(Metrics)
## 
## Attaching package: 'Metrics'
## The following objects are masked from 'package:caret':
## 
##     precision, recall
## The following object is masked from 'package:forecast':
## 
##     accuracy
rmse_val <- rmse(df_plot$Derrama_Economica_Est_mdp_diff, fitted(modelo_sarimax1))

# Crear tabla resumen
tabla_metricas <- data.frame(
  Métrica = c("AIC", "BIC", "Log-Likelihood", "RMSE"),
  Valor = c(aic_val, bic_val, loglik_val, rmse_val)
)

print(tabla_metricas)
##          Métrica     Valor
## 1            AIC 1394.5973
## 2            BIC 1429.3441
## 3 Log-Likelihood -684.2986
## 4           RMSE  308.5369
library(Metrics)

# SARIMAX
aic_sarimax <- AIC(modelo_sarimax1)
bic_sarimax <- BIC(modelo_sarimax1)
loglik_sarimax <- logLik(modelo_sarimax1)
rmse_sarimax <- rmse(y, fitted(modelo_sarimax1))

# AutoARIMA
aic_auto <- AIC(modelo_auto)
bic_auto <- BIC(modelo_auto)
loglik_auto <- logLik(modelo_auto)
rmse_auto <- rmse(y, fitted(modelo_auto))

# VAR
# Ajustar predicciones del VAR 
library(vars)

aic_var <- AIC(modelo_var)
bic_var <- BIC(modelo_var)
loglik_var <- logLik(modelo_var)
rmse_var <- rmse(y, fitted(modelo_var)[, "y"])
## Warning in `-.default`(actual, predicted): longer object length is not a
## multiple of shorter object length
aic_var2 <- AIC(modelo_var2)
bic_var2 <- BIC(modelo_var2)
loglik_var2 <- logLik(modelo_var2)
rmse_var2 <- rmse(y, fitted(modelo_var2)[, "y_diff"])
## Warning in `-.default`(actual, predicted): longer object length is not a
## multiple of shorter object length
# Comparar en una tabla
tabla_comparativa <- data.frame(
  Modelo = c("SARIMAX", "AutoARIMA", "VAR", "VAR2"),
  AIC = c(aic_sarimax, aic_auto, aic_var, aic_var2),
  BIC = c(bic_sarimax, bic_auto, bic_var, bic_var2),
  LogLikelihood = c(loglik_sarimax, loglik_auto, loglik_var, loglik_var2),
  RMSE = c(rmse_sarimax, rmse_auto, rmse_var, rmse_var2)
)

# Mostrar tabla con dos decimales
tabla_comparativa[] <- lapply(tabla_comparativa, function(x) if(is.numeric(x)) round(x, 2) else x)
print(tabla_comparativa)
##      Modelo     AIC     BIC LogLikelihood   RMSE
## 1   SARIMAX 1394.60 1429.34       -684.30 126.46
## 2 AutoARIMA 1521.18 1546.27       -751.59 127.01
## 3       VAR 3177.24 3554.06      -1452.62 323.43
## 4      VAR2 1510.71 3592.05         20.64 251.16