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_diff, 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
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?

resultado_pred <- predict(modelo_sarimax1, n.ahead = n_periodos, newxreg = future_xreg, se.fit = TRUE)
# Extraer predicciones y error estándar
pred <- resultado_pred$pred
se <- resultado_pred$se

# Generar periodos futuros (asume frecuencia mensual)
Periodo <- as.numeric(tail(time(y), 1)) + seq(1/12, n_periodos/12, by = 1/12)

# Niveles de confianza que deseas visualizar
niveles_confianza <- c(0.90, 0.96, 0.99)

# Crear un dataframe base con la predicción
forecast_df <- data.frame(Periodo = Periodo, Predicción = pred)

# Agregar intervalos de confianza
for (ci in niveles_confianza) {
  z <- qnorm(1 - (1 - ci)/2)
  forecast_df[[paste0("Inferior_", ci*100, "%")]] <- pred - z * se
  forecast_df[[paste0("Superior_", ci*100, "%")]] <- pred + z * se
}



library(reshape2)
## 
## Attaching package: 'reshape2'
## The following object is masked from 'package:tidyr':
## 
##     smiths
# Para graficar los intervalos (usamos solo uno, por ejemplo 95%)
ci_sel <- "96"
ggplot(forecast_df, aes(x = Periodo, y = Predicción)) +
  geom_line(color = "blue") +
  geom_ribbon(aes(ymin = forecast_df[[paste0("Inferior_", ci_sel, "%")]],
                  ymax = forecast_df[[paste0("Superior_", ci_sel, "%")]]),
              fill = "lightblue", alpha = 0.3) +
  ggtitle(paste0("Pronóstico con Intervalo de Confianza del ", ci_sel, "%")) +
  xlab("Año") + ylab("Derrama Económica")
## Don't know how to automatically pick scale for object of type <ts>. Defaulting
## to continuous.
## Warning: Use of `forecast_df[[paste0("Inferior_", ci_sel, "%")]]` is discouraged.
## ℹ Use `.data[[paste0("Inferior_", ci_sel, "%")]]` instead.
## Warning: Use of `forecast_df[[paste0("Superior_", ci_sel, "%")]]` is discouraged.
## ℹ Use `.data[[paste0("Superior_", ci_sel, "%")]]` instead.

# Crear dataframe con fechas
Periodo <- as.numeric(tail(time(y), 1)) + seq(1/12, n_periodos/12, by = 1/12)

forecast_df <- data.frame(
  Periodo = Periodo,
  Pesimista = pred - 1.96 * se,
  Real = pred,
  Optimo = pred + 1.96 * se
)

forecast_df$Dif_Real_Optimo <- forecast_df$Optimo - forecast_df$Real
forecast_df$Dif_Real_Pesimista <- forecast_df$Real - forecast_df$Pesimista
library(ggplot2)

ggplot(forecast_df, aes(x = Periodo)) +
  geom_ribbon(aes(ymin = Pesimista, ymax = Optimo), fill = "gray90", alpha = 0.3) +
  geom_line(aes(y = Optimo, color = "Óptimo"), linetype = "dashed", size = 1) +
  geom_line(aes(y = Real, color = "Real"), size = 1.2) +
  geom_line(aes(y = Pesimista, color = "Pesimista"), linetype = "dashed", size = 1) +
  geom_text(aes(y = Optimo + 1000, label = round(Dif_Real_Optimo, 0)), color = "darkgreen", size = 3, vjust = 0) +
  geom_text(aes(y = Pesimista - 1000, label = round(Dif_Real_Pesimista, 0)), color = "darkred", size = 3, vjust = 1) +
  labs(title = "Escenarios de Derrama Económica Estimada",
       y = "Derrama Económica (mdp)",
       x = "Periodo",
       color = "Escenario") +
  scale_color_manual(values = c("Óptimo" = "green", "Real" = "blue", "Pesimista" = "red")) +
  theme_minimal()
## 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.
## 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.

# Crear las bandas de confianza
inferior <- pred - 1.96 * se
superior <- pred + 1.96 * se

# Periodos pronosticados
Periodo <- seq(as.Date("2025-01-01"), by = "month", length.out = length(pred))

# Crear tabla con escenarios
tabla_escenarios <- data.frame(
  Periodo = Periodo,
  Pesimista = round(inferior, 2),
  Real = round(pred, 2),
  Optimista = round(superior, 2),
  Dif_Optimo_Real = round(superior - pred, 2),
  Dif_Real_Pesimista = round(pred - inferior, 2),
  Rango_Total = round(superior - inferior, 2)
)

# Mostrar tabla
print(tabla_escenarios)
##       Periodo Pesimista    Real Optimista Dif_Optimo_Real Dif_Real_Pesimista
## 1  2025-01-01   -339.49  -74.35    190.78          265.13             265.13
## 2  2025-02-01   -530.31 -263.90      2.51          266.41             266.41
## 3  2025-03-01   -504.47 -236.51     31.45          267.96             267.96
## 4  2025-04-01   -601.37 -333.31    -65.26          268.06             268.06
## 5  2025-05-01   -637.80 -369.53   -101.27          268.26             268.26
## 6  2025-06-01   -571.79 -303.56    -35.33          268.23             268.23
## 7  2025-07-01   -545.17 -276.90     -8.63          268.27             268.27
## 8  2025-08-01   -639.48 -371.22   -102.97          268.25             268.25
## 9  2025-09-01   -712.15 -443.88   -175.62          268.27             268.27
## 10 2025-10-01   -586.46 -318.20    -49.95          268.26             268.26
## 11 2025-11-01   -556.61 -288.34    -20.07          268.27             268.27
## 12 2025-12-01   -731.29 -463.04   -194.79          268.25             268.25
## 13 2026-01-01   -441.93 -164.85    112.22          277.08             277.08
## 14 2026-02-01   -610.94 -333.91    -56.89          277.03             277.03
## 15 2026-03-01   -599.72 -322.51    -45.29          277.22             277.22
## 16 2026-04-01   -690.44 -413.27   -136.10          277.17             277.17
## 17 2026-05-01   -732.48 -455.27   -178.06          277.21             277.21
## 18 2026-06-01   -665.90 -388.71   -111.52          277.19             277.19
## 19 2026-07-01   -642.16 -364.96    -87.75          277.21             277.21
## 20 2026-08-01   -737.55 -460.35   -183.15          277.20             277.20
## 21 2026-09-01   -812.33 -535.13   -257.93          277.20             277.20
## 22 2026-10-01   -688.25 -411.05   -133.86          277.20             277.20
## 23 2026-11-01   -660.34 -383.13   -105.92          277.21             277.21
## 24 2026-12-01   -836.83 -559.64   -282.45          277.19             277.19
## 25 2027-01-01   -549.43 -263.39     22.65          286.04             286.04
## 26 2027-02-01   -720.34 -434.38   -148.42          285.96             285.96
## 27 2027-03-01   -711.13 -424.96   -138.80          286.17             286.17
## 28 2027-04-01   -803.86 -517.75   -231.64          286.11             286.11
## 29 2027-05-01   -847.97 -561.81   -275.65          286.16             286.16
## 30 2027-06-01   -783.49 -497.36   -211.22          286.14             286.14
## 31 2027-07-01   -761.90 -475.75   -189.60          286.15             286.15
## 32 2027-08-01   -859.47 -573.33   -287.19          286.14             286.14
## 33 2027-09-01   -936.50 -650.35   -364.20          286.15             286.15
## 34 2027-10-01   -814.69 -528.55   -242.41          286.14             286.14
## 35 2027-11-01   -789.11 -502.95   -216.80          286.15             286.15
## 36 2027-12-01   -967.97 -681.83   -395.70          286.13             286.13
##    Rango_Total
## 1       530.27
## 2       532.81
## 3       535.93
## 4       536.11
## 5       536.53
## 6       536.46
## 7       536.54
## 8       536.51
## 9       536.53
## 10      536.51
## 11      536.54
## 12      536.51
## 13      554.16
## 14      554.06
## 15      554.43
## 16      554.34
## 17      554.42
## 18      554.39
## 19      554.41
## 20      554.40
## 21      554.41
## 22      554.39
## 23      554.42
## 24      554.38
## 25      572.08
## 26      571.92
## 27      572.34
## 28      572.22
## 29      572.31
## 30      572.27
## 31      572.30
## 32      572.28
## 33      572.30
## 34      572.28
## 35      572.31
## 36      572.27

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.

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

Turistas_Noche_Nac_diff (≈ 0.80)

Cuartos_Ocupados_diff (≈ 0.72)

X.Ocupacion_Hoteles_diff (≈ 0.63)

Estadia_Promedio_log_diff (≈ 0.55)

Llegada_Tur_Nac_diff (≈ 0.54)

# 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?

# 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
# 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 (asegúrate de que lo has entrenado como modelo_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
# Comparar en una tabla
tabla_comparativa <- data.frame(
  Modelo = c("SARIMAX", "AutoARIMA", "VAR"),
  AIC = c(aic_sarimax, aic_auto, aic_var),
  BIC = c(bic_sarimax, bic_auto, bic_var),
  LogLikelihood = c(loglik_sarimax, loglik_auto, loglik_var),
  RMSE = c(rmse_sarimax, rmse_auto, rmse_var)
)

# 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