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.

“AÑO” “MES”

“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 <- 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)
#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))

SARIMAX

df_xreg <- as.matrix(df_mod)
str(df_xreg)  # debe ser matriz
##  num [1:120, 1:7] -1767 -6124 4818 -419 9185 ...
##  - 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  intercept  Turistas_Noche_Ext_diff  X.Ocupacion_Hoteles_diff
##       -0.1525  -336.6366                   0.0016                  692.8467
## s.e.   0.0919   165.9577                   0.0010                  305.9267
##       Cuartos_Disponibles_Promedio_log_diff  Estadia_Promedio_log_diff
##                                   -187.0388                  1196.4386
## s.e.                               649.5222                   230.4246
##       Cuartos_Registrados_diff  Llegada_Tur_Nac_diff  Densidad_Ocupación_log
##                          1e-03                0.0043                358.8919
## s.e.                     7e-04                0.0009                172.4912
## 
## sigma^2 = 17234:  log likelihood = -750.89
## AIC=1521.77   AICc=1523.79   BIC=1549.65
## 
## Training set error measures:
##                     ME     RMSE      MAE      MPE     MAPE      MASE
## Training set 0.0450085 126.2599 66.91676 7.571662 122.5196 0.3863159
##                       ACF1
## Training set -0.0004286485
checkresiduals(modelo_auto)

## 
##  Ljung-Box test
## 
## data:  Residuals from Regression with ARIMA(1,0,0) errors
## Q* = 10.129, df = 23, p-value = 0.9904
## 
## 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.4692  0.0395  -0.6480  -0.3520  -0.7573                   0.0018
## s.e.   0.6245  0.1460   0.6198   0.6186   0.0997                   0.0010
##       X.Ocupacion_Hoteles_diff  Cuartos_Disponibles_Promedio_log_diff
##                       427.1910                              -322.3567
## s.e.                  412.2279                              1236.1355
##       Estadia_Promedio_log_diff  Cuartos_Registrados_diff  Llegada_Tur_Nac_diff
##                        966.4942                    0.0012                0.0052
## s.e.                   273.0233                    0.0026                0.0012
##       Densidad_Ocupación_log
##                     443.9180
## s.e.                217.7568
## 
## sigma^2 estimated as 17936:  log likelihood = -684.3,  aic = 1394.6
## 
## Training set error measures:
##                    ME     RMSE      MAE       MPE    MAPE      MASE        ACF1
## Training set 3.182575 126.4641 63.75908 -882.4167 947.436 0.2559096 -0.01118465
checkresiduals(modelo_sarimax1)

## 
##  Ljung-Box test
## 
## data:  Residuals from ARIMA(2,1,2)(0,1,1)[12]
## Q* = 11.517, df = 19, p-value = 0.9052
## 
## 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)
##             Estadia_Promedio_log_diff                Densidad_Ocupación_log 
##                          9.664942e+02                          4.439180e+02 
##              X.Ocupacion_Hoteles_diff                                   ar2 
##                          4.271910e+02                          3.947691e-02 
##                  Llegada_Tur_Nac_diff               Turistas_Noche_Ext_diff 
##                          5.214780e-03                          1.844229e-03 
##              Cuartos_Registrados_diff                                   ma2 
##                          1.189746e-03                         -3.519654e-01 
##                                   ar1                                   ma1 
##                         -4.691963e-01                         -6.480344e-01 
##                                  sma1 Cuartos_Disponibles_Promedio_log_diff 
##                         -7.573069e-01                         -3.223567e+02
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)
##             Estadia_Promedio_log_diff                Densidad_Ocupación_log 
##                          9.664942e+02                          4.439180e+02 
##              X.Ocupacion_Hoteles_diff Cuartos_Disponibles_Promedio_log_diff 
##                          4.271910e+02                         -3.223567e+02 
##                                  sma1                                   ma1 
##                         -7.573069e-01                         -6.480344e-01 
##                                   ar1                                   ma2 
##                         -4.691963e-01                         -3.519654e-01 
##                                   ar2                  Llegada_Tur_Nac_diff 
##                          3.947691e-02                          5.214780e-03 
##               Turistas_Noche_Ext_diff              Cuartos_Registrados_diff 
##                          1.844229e-03                          1.189746e-03

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: -3540.186 
## 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                                            -5.002e-02  1.488e-01  -0.336
## df_mod.Turistas_Noche_Ext_diff.l1                6.848e-04  2.112e-03   0.324
## df_mod.X.Ocupacion_Hoteles_diff.l1               4.081e+02  7.522e+02   0.542
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1  1.047e+03  1.251e+03   0.837
## df_mod.Estadia_Promedio_log_diff.l1             -3.250e+02  5.505e+02  -0.590
## df_mod.Cuartos_Registrados_diff.l1              -3.371e-03  1.755e-03  -1.920
## df_mod.Llegada_Tur_Nac_diff.l1                  -2.055e-03  2.205e-03  -0.932
## df_mod.Densidad_Ocupación_log.l1                 2.811e+02  8.957e+02   0.314
## y.l2                                            -1.695e-01  1.462e-01  -1.159
## df_mod.Turistas_Noche_Ext_diff.l2               -3.867e-03  1.798e-03  -2.150
## df_mod.X.Ocupacion_Hoteles_diff.l2               1.070e+03  5.616e+02   1.906
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 -1.297e+02  1.141e+03  -0.114
## df_mod.Estadia_Promedio_log_diff.l2             -1.104e+03  4.163e+02  -2.652
## df_mod.Cuartos_Registrados_diff.l2              -9.650e-04  1.826e-03  -0.529
## df_mod.Llegada_Tur_Nac_diff.l2                  -3.193e-03  1.775e-03  -1.799
## df_mod.Densidad_Ocupación_log.l2                 3.313e+02  8.647e+02   0.383
## const                                           -5.663e+02  3.260e+02  -1.737
##                                                 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.08543 . 
## ---
## 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                                             1.458e+00  9.665e+00   0.151
## df_mod.Turistas_Noche_Ext_diff.l1               -4.295e-01  1.372e-01  -3.131
## df_mod.X.Ocupacion_Hoteles_diff.l1               1.138e+05  4.885e+04   2.329
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1  1.085e+05  8.122e+04   1.336
## df_mod.Estadia_Promedio_log_diff.l1             -3.921e+04  3.575e+04  -1.097
## df_mod.Cuartos_Registrados_diff.l1               9.025e-02  1.140e-01   0.792
## df_mod.Llegada_Tur_Nac_diff.l1                  -2.201e-01  1.432e-01  -1.537
## df_mod.Densidad_Ocupación_log.l1                 4.706e+04  5.817e+04   0.809
## y.l2                                            -3.314e+00  9.497e+00  -0.349
## df_mod.Turistas_Noche_Ext_diff.l2               -1.644e-01  1.168e-01  -1.408
## df_mod.X.Ocupacion_Hoteles_diff.l2               5.075e+04  3.647e+04   1.391
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 -1.967e+05  7.409e+04  -2.655
## df_mod.Estadia_Promedio_log_diff.l2             -1.991e+04  2.704e+04  -0.736
## df_mod.Cuartos_Registrados_diff.l2               1.365e-01  1.186e-01   1.151
## df_mod.Llegada_Tur_Nac_diff.l2                  -1.570e-01  1.153e-01  -1.362
## df_mod.Densidad_Ocupación_log.l2                -3.291e+04  5.616e+04  -0.586
## const                                           -1.297e+04  2.117e+04  -0.613
##                                                 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.54150   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 12840 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                                             2.499e-05  5.413e-05   0.462
## df_mod.Turistas_Noche_Ext_diff.l1               -3.256e-07  7.683e-07  -0.424
## df_mod.X.Ocupacion_Hoteles_diff.l1               2.454e-01  2.736e-01   0.897
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 -2.211e-01  4.549e-01  -0.486
## df_mod.Estadia_Promedio_log_diff.l1             -1.962e-01  2.002e-01  -0.980
## df_mod.Cuartos_Registrados_diff.l1               1.193e-07  6.385e-07   0.187
## df_mod.Llegada_Tur_Nac_diff.l1                  -1.039e-06  8.021e-07  -1.295
## df_mod.Densidad_Ocupación_log.l1                 1.594e-01  3.258e-01   0.489
## y.l2                                            -5.200e-05  5.319e-05  -0.978
## df_mod.Turistas_Noche_Ext_diff.l2               -7.353e-07  6.541e-07  -1.124
## df_mod.X.Ocupacion_Hoteles_diff.l2              -1.961e-01  2.043e-01  -0.960
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 -7.549e-01  4.150e-01  -1.819
## df_mod.Estadia_Promedio_log_diff.l2             -2.867e-01  1.514e-01  -1.893
## df_mod.Cuartos_Registrados_diff.l2               5.176e-07  6.641e-07   0.779
## df_mod.Llegada_Tur_Nac_diff.l2                   8.451e-08  6.456e-07   0.131
## df_mod.Densidad_Ocupación_log.l2                 3.528e-02  3.145e-01   0.112
## const                                           -1.843e-01  1.186e-01  -1.554
##                                                 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.1233  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 0.07193 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                                            -3.346e-06  1.480e-05  -0.226
## df_mod.Turistas_Noche_Ext_diff.l1                1.198e-07  2.100e-07   0.571
## df_mod.X.Ocupacion_Hoteles_diff.l1               2.330e-02  7.480e-02   0.312
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1  8.929e-03  1.244e-01   0.072
## df_mod.Estadia_Promedio_log_diff.l1              2.470e-02  5.474e-02   0.451
## df_mod.Cuartos_Registrados_diff.l1              -1.362e-07  1.746e-07  -0.780
## df_mod.Llegada_Tur_Nac_diff.l1                  -7.415e-08  2.193e-07  -0.338
## df_mod.Densidad_Ocupación_log.l1                -1.024e-01  8.906e-02  -1.150
## y.l2                                            -1.117e-05  1.454e-05  -0.768
## df_mod.Turistas_Noche_Ext_diff.l2                2.420e-07  1.788e-07   1.353
## df_mod.X.Ocupacion_Hoteles_diff.l2              -3.569e-02  5.584e-02  -0.639
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 -4.026e-02  1.134e-01  -0.355
## df_mod.Estadia_Promedio_log_diff.l2              1.589e-02  4.140e-02   0.384
## df_mod.Cuartos_Registrados_diff.l2              -3.506e-07  1.815e-07  -1.931
## df_mod.Llegada_Tur_Nac_diff.l2                   2.580e-07  1.765e-07   1.462
## df_mod.Densidad_Ocupación_log.l2                 9.003e-02  8.598e-02   1.047
## const                                            1.557e-02  3.242e-02   0.480
##                                                 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.6321  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 0.01966 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                                             1.594e-05  3.763e-05   0.424
## df_mod.Turistas_Noche_Ext_diff.l1               -3.132e-08  5.341e-07  -0.059
## df_mod.X.Ocupacion_Hoteles_diff.l1               1.852e-02  1.902e-01   0.097
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 -1.638e-02  3.162e-01  -0.052
## df_mod.Estadia_Promedio_log_diff.l1             -1.119e-01  1.392e-01  -0.804
## df_mod.Cuartos_Registrados_diff.l1              -3.105e-07  4.438e-07  -0.700
## df_mod.Llegada_Tur_Nac_diff.l1                  -7.139e-07  5.575e-07  -1.280
## df_mod.Densidad_Ocupación_log.l1                -4.254e-03  2.265e-01  -0.019
## y.l2                                             2.032e-06  3.697e-05   0.055
## df_mod.Turistas_Noche_Ext_diff.l2               -5.273e-07  4.547e-07  -1.160
## df_mod.X.Ocupacion_Hoteles_diff.l2               3.387e-01  1.420e-01   2.385
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2  6.087e-02  2.885e-01   0.211
## df_mod.Estadia_Promedio_log_diff.l2             -2.886e-01  1.053e-01  -2.742
## df_mod.Cuartos_Registrados_diff.l2              -6.315e-07  4.617e-07  -1.368
## df_mod.Llegada_Tur_Nac_diff.l2                  -6.191e-07  4.488e-07  -1.380
## df_mod.Densidad_Ocupación_log.l2                -7.650e-02  2.186e-01  -0.350
## const                                            7.792e-02  8.243e-02   0.945
##                                                 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.34679   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 0.05 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                                            -7.793e+00  9.800e+00  -0.795
## df_mod.Turistas_Noche_Ext_diff.l1                1.258e-01  1.391e-01   0.904
## df_mod.X.Ocupacion_Hoteles_diff.l1              -3.226e+04  4.953e+04  -0.651
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1  4.308e+05  8.236e+04   5.231
## df_mod.Estadia_Promedio_log_diff.l1             -2.996e+04  3.625e+04  -0.827
## df_mod.Cuartos_Registrados_diff.l1              -1.123e+00  1.156e-01  -9.713
## df_mod.Llegada_Tur_Nac_diff.l1                   1.804e-01  1.452e-01   1.242
## df_mod.Densidad_Ocupación_log.l1                 4.097e+04  5.898e+04   0.695
## y.l2                                             5.078e+00  9.629e+00   0.527
## df_mod.Turistas_Noche_Ext_diff.l2                1.507e-02  1.184e-01   0.127
## df_mod.X.Ocupacion_Hoteles_diff.l2               6.921e+04  3.698e+04   1.871
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2  8.239e+04  7.512e+04   1.097
## df_mod.Estadia_Promedio_log_diff.l2              2.901e+04  2.741e+04   1.058
## df_mod.Cuartos_Registrados_diff.l2              -4.908e-01  1.202e-01  -4.083
## df_mod.Llegada_Tur_Nac_diff.l2                   1.542e-02  1.169e-01   0.132
## df_mod.Densidad_Ocupación_log.l2                -5.326e+04  5.694e+04  -0.935
## const                                            1.372e+04  2.147e+04   0.639
##                                                 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.5243    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 13020 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                                             8.094e+00  1.842e+01   0.439
## df_mod.Turistas_Noche_Ext_diff.l1               -4.022e-02  2.615e-01  -0.154
## df_mod.X.Ocupacion_Hoteles_diff.l1               1.092e+05  9.313e+04   1.172
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1  6.821e+04  1.548e+05   0.440
## df_mod.Estadia_Promedio_log_diff.l1              1.016e+04  6.815e+04   0.149
## df_mod.Cuartos_Registrados_diff.l1              -3.939e-01  2.173e-01  -1.813
## df_mod.Llegada_Tur_Nac_diff.l1                  -2.695e-01  2.730e-01  -0.987
## df_mod.Densidad_Ocupación_log.l1                -4.699e+04  1.109e+05  -0.424
## y.l2                                            -3.381e+01  1.810e+01  -1.867
## df_mod.Turistas_Noche_Ext_diff.l2               -3.626e-01  2.226e-01  -1.629
## df_mod.X.Ocupacion_Hoteles_diff.l2               5.871e+04  6.953e+04   0.844
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2  1.047e+04  1.412e+05   0.074
## df_mod.Estadia_Promedio_log_diff.l2             -6.512e+04  5.154e+04  -1.263
## df_mod.Cuartos_Registrados_diff.l2               1.087e-01  2.260e-01   0.481
## df_mod.Llegada_Tur_Nac_diff.l2                  -3.117e-02  2.197e-01  -0.142
## df_mod.Densidad_Ocupación_log.l2                 9.583e+04  1.071e+05   0.895
## const                                           -4.523e+04  4.036e+04  -1.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.2651  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 24480 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                                             2.618e-05  2.550e-05   1.027
## df_mod.Turistas_Noche_Ext_diff.l1               -9.658e-08  3.619e-07  -0.267
## df_mod.X.Ocupacion_Hoteles_diff.l1               6.242e-02  1.289e-01   0.484
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1  1.243e-01  2.143e-01   0.580
## df_mod.Estadia_Promedio_log_diff.l1              2.087e-01  9.432e-02   2.212
## df_mod.Cuartos_Registrados_diff.l1              -3.438e-07  3.008e-07  -1.143
## df_mod.Llegada_Tur_Nac_diff.l1                  -1.709e-07  3.778e-07  -0.452
## df_mod.Densidad_Ocupación_log.l1                 6.289e-01  1.535e-01   4.098
## y.l2                                            -3.880e-05  2.506e-05  -1.549
## df_mod.Turistas_Noche_Ext_diff.l2               -7.556e-07  3.081e-07  -2.452
## df_mod.X.Ocupacion_Hoteles_diff.l2               4.211e-01  9.623e-02   4.376
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2  3.760e-01  1.955e-01   1.924
## df_mod.Estadia_Promedio_log_diff.l2             -7.839e-02  7.133e-02  -1.099
## df_mod.Cuartos_Registrados_diff.l2               3.889e-08  3.128e-07   0.124
## df_mod.Llegada_Tur_Nac_diff.l2                  -6.229e-07  3.041e-07  -2.048
## df_mod.Densidad_Ocupación_log.l2                 2.578e-01  1.482e-01   1.740
## const                                            1.090e-01  5.586e-02   1.952
##                                                 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.0537 .  
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## 
## Residual standard error: 0.03388 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                                            3.910e+04
## df_mod.Turistas_Noche_Ext_diff               1.109e+06
## df_mod.X.Ocupacion_Hoteles_diff              9.912e+00
## df_mod.Cuartos_Disponibles_Promedio_log_diff 8.759e-01
## df_mod.Estadia_Promedio_log_diff             3.980e-01
## df_mod.Cuartos_Registrados_diff              1.632e+05
## df_mod.Llegada_Tur_Nac_diff                  3.285e+06
## df_mod.Densidad_Ocupación_log                2.051e+00
##                                              df_mod.Turistas_Noche_Ext_diff
## y                                                                 1.109e+06
## df_mod.Turistas_Noche_Ext_diff                                    1.649e+08
## df_mod.X.Ocupacion_Hoteles_diff                                   4.847e+02
## df_mod.Cuartos_Disponibles_Promedio_log_diff                      3.500e+01
## df_mod.Estadia_Promedio_log_diff                                 -5.653e+01
## df_mod.Cuartos_Registrados_diff                                   8.878e+06
## df_mod.Llegada_Tur_Nac_diff                                       1.230e+08
## df_mod.Densidad_Ocupación_log                                     1.393e+02
##                                              df_mod.X.Ocupacion_Hoteles_diff
## y                                                                  9.912e+00
## df_mod.Turistas_Noche_Ext_diff                                     4.847e+02
## df_mod.X.Ocupacion_Hoteles_diff                                    5.174e-03
## df_mod.Cuartos_Disponibles_Promedio_log_diff                       2.838e-04
## df_mod.Estadia_Promedio_log_diff                                  -4.984e-04
## df_mod.Cuartos_Registrados_diff                                   -2.300e+01
## df_mod.Llegada_Tur_Nac_diff                                        1.465e+03
## df_mod.Densidad_Ocupación_log                                     -4.324e-06
##                                              df_mod.Cuartos_Disponibles_Promedio_log_diff
## y                                                                               8.759e-01
## df_mod.Turistas_Noche_Ext_diff                                                  3.500e+01
## df_mod.X.Ocupacion_Hoteles_diff                                                 2.838e-04
## df_mod.Cuartos_Disponibles_Promedio_log_diff                                    3.866e-04
## df_mod.Estadia_Promedio_log_diff                                               -7.052e-07
## df_mod.Cuartos_Registrados_diff                                                 1.576e+02
## df_mod.Llegada_Tur_Nac_diff                                                     1.223e+02
## df_mod.Densidad_Ocupación_log                                                  -5.693e-05
##                                              df_mod.Estadia_Promedio_log_diff
## y                                                                   3.980e-01
## df_mod.Turistas_Noche_Ext_diff                                     -5.653e+01
## df_mod.X.Ocupacion_Hoteles_diff                                    -4.984e-04
## df_mod.Cuartos_Disponibles_Promedio_log_diff                       -7.052e-07
## df_mod.Estadia_Promedio_log_diff                                    2.500e-03
## df_mod.Cuartos_Registrados_diff                                     2.777e+01
## df_mod.Llegada_Tur_Nac_diff                                        -4.297e+02
## df_mod.Densidad_Ocupación_log                                       4.647e-04
##                                              df_mod.Cuartos_Registrados_diff
## y                                                                  1.632e+05
## df_mod.Turistas_Noche_Ext_diff                                     8.878e+06
## df_mod.X.Ocupacion_Hoteles_diff                                   -2.300e+01
## df_mod.Cuartos_Disponibles_Promedio_log_diff                       1.576e+02
## df_mod.Estadia_Promedio_log_diff                                   2.777e+01
## df_mod.Cuartos_Registrados_diff                                    1.695e+08
## df_mod.Llegada_Tur_Nac_diff                                        3.387e+07
## df_mod.Densidad_Ocupación_log                                     -1.282e+01
##                                              df_mod.Llegada_Tur_Nac_diff
## y                                                              3.285e+06
## df_mod.Turistas_Noche_Ext_diff                                 1.230e+08
## df_mod.X.Ocupacion_Hoteles_diff                                1.465e+03
## df_mod.Cuartos_Disponibles_Promedio_log_diff                   1.223e+02
## df_mod.Estadia_Promedio_log_diff                              -4.297e+02
## df_mod.Cuartos_Registrados_diff                                3.387e+07
## df_mod.Llegada_Tur_Nac_diff                                    5.993e+08
## df_mod.Densidad_Ocupación_log                                  1.543e+02
##                                              df_mod.Densidad_Ocupación_log
## y                                                                2.051e+00
## df_mod.Turistas_Noche_Ext_diff                                   1.393e+02
## df_mod.X.Ocupacion_Hoteles_diff                                 -4.324e-06
## df_mod.Cuartos_Disponibles_Promedio_log_diff                    -5.693e-05
## df_mod.Estadia_Promedio_log_diff                                 4.647e-04
## df_mod.Cuartos_Registrados_diff                                 -1.282e+01
## df_mod.Llegada_Tur_Nac_diff                                      1.543e+02
## df_mod.Densidad_Ocupación_log                                    1.148e-03
## 
## 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] 7352.372
BIC(modelo_var)
## [1] 7729.185
logLik(modelo_var)
## 'log Lik.' -3540.186 (df=136)
AIC(modelo_auto)
## [1] 1521.771
BIC(modelo_auto)
## [1] 1549.646
logLik(modelo_auto)
## 'log Lik.' -750.8855 (df=10)
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
# Asegúrate de que todas las columnas son numéricas
#df_mod_numeric <- data.frame(lapply(df_mod, as.numeric))

# VIF sobre una regresión lineal auxiliar
modelo_vif <- lm(rep(1, nrow(df_mod)) ~ ., data = df_mod)

# Calcular VIF
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
#forecast_var <- predict(modelo_var, n.ahead = 12)
#plot(forecast_var)
# 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] -18852 -19229 -19613 -20006 -20406 ...
##  - 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

resultado_pred <- predict(modelo_sarimax1, n.ahead = n_periodos, newxreg = future_xreg)
pred <- resultado_pred$pred
se <- resultado_pred$se

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

forecast_df <- data.frame(
  Periodo = Periodo,
  Predicción = pred,
  Inferior = pred - 1.96 * se,
  Superior = pred + 1.96 * se
)

library(ggplot2)
ggplot(forecast_df, aes(x = Periodo, y = Predicción)) +
  geom_line(color = "blue") +
  geom_ribbon(aes(ymin = Inferior, ymax = Superior), alpha = 0.2) +
  ggtitle("Pronóstico con predict()") +
  xlab("Año") + ylab("Derrama Económica")
## Don't know how to automatically pick scale for object of type <ts>. Defaulting
## to continuous.

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?

# Paso 1: Extraer el año desde la columna Periodo (formato: 2024.08333, etc.)
forecast_df$Año <- floor(forecast_df$Periodo)

# Paso 2: Calcular el promedio anual (puedes usar sum o media)
library(dplyr)

resumen_anual <- forecast_df %>%
  group_by(Año) %>%
  summarise(
    Promedio_Prediccion = mean(Predicción),
    Pesimista = mean(Inferior),
    Optimista = mean(Superior)
  )

print(resumen_anual)
## # A tibble: 3 × 4
##     Año Promedio_Prediccion Pesimista Optimista
##   <dbl>               <dbl>     <dbl>     <dbl>
## 1  2025               -252.     -519.      16.3
## 2  2026               -207.     -484.      70.0
## 3  2027               -150.     -436.     136.

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 
##                         -4.691963e-01                          3.947691e-02 
##                                   ma1                                   ma2 
##                         -6.480344e-01                         -3.519654e-01 
##                                  sma1               Turistas_Noche_Ext_diff 
##                         -7.573069e-01                          1.844229e-03 
##              X.Ocupacion_Hoteles_diff Cuartos_Disponibles_Promedio_log_diff 
##                          4.271910e+02                         -3.223567e+02 
##             Estadia_Promedio_log_diff              Cuartos_Registrados_diff 
##                          9.664942e+02                          1.189746e-03 
##                  Llegada_Tur_Nac_diff                Densidad_Ocupación_log 
##                          5.214780e-03                          4.439180e+02
library(tibble)

# Extraer coeficientes del modelo
coeficientes <- summary(modelo_sarimax1)$coef

# Crear tibble y ordenar
tabla_coef <- tibble::tibble(
  Variable = names(coeficientes),
  Coeficiente = as.numeric(coeficientes)
) %>%
  mutate(Coef_Abs = abs(Coeficiente)) %>%
  arrange(desc(Coef_Abs))

print(tabla_coef)
## # A tibble: 12 × 3
##    Variable                              Coeficiente  Coef_Abs
##    <chr>                                       <dbl>     <dbl>
##  1 Estadia_Promedio_log_diff               966.      966.     
##  2 Densidad_Ocupación_log                  444.      444.     
##  3 X.Ocupacion_Hoteles_diff                427.      427.     
##  4 Cuartos_Disponibles_Promedio_log_diff  -322.      322.     
##  5 sma1                                     -0.757     0.757  
##  6 ma1                                      -0.648     0.648  
##  7 ar1                                      -0.469     0.469  
##  8 ma2                                      -0.352     0.352  
##  9 ar2                                       0.0395    0.0395 
## 10 Llegada_Tur_Nac_diff                      0.00521   0.00521
## 11 Turistas_Noche_Ext_diff                   0.00184   0.00184
## 12 Cuartos_Registrados_diff                  0.00119   0.00119

Para el periodo 2023–2024, se realizó un análisis exploratorio de correlación entre la Derrama Económica Estimada (diferenciada) y las variables control consideradas en el modelo. Este análisis tuvo como objetivo identificar qué variables muestran una mayor asociación con la variable de interés.

Mediante el cálculo del coeficiente de correlación de Pearson y la visualización con gráficos de dispersión, se observaron las siguientes relaciones destacadas:

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)

Estas variables presentaron una relación positiva moderada a fuerte con la derrama económica durante el periodo analizado, lo que sugiere que aumentos en dichas variables podrían estar asociados a incrementos en la derrama económica hotelera.

Este análisis es de tipo exploratorio. La correlación indica asociación, pero no necesariamente causalidad. Para estimar el efecto individual de cada variable se recurre al modelo SARIMAX, que considera simultáneamente todas las variable (como se muestran arriba) las cuales se tomaran como base para responder el inciso C.

Pero si dejamos aquellas que con base en el modelo son las de control, se muestra de la siguiente manera:

Estadia_Promedio_log_diff ( ≈ 0.55) Densidad_Ocupación_log ( ≈ 0.22) X.Ocupacion_Hoteles_diff ( ≈ 0.63) Cuartos_Disponibles_Promedio_log_diff ( ≈ 0.1) Llegada_Tur_Nac_diff ( ≈ 0.54) Turistas_Noche_Ext_diff ( ≈ 0.52) Cuartos_Registrados_diff ( ≈ 0.43)

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

# Coeficientes SARIMAX significativos
coeficientes <- c(
  X.Ocupacion_Hoteles_diff = 427.19,
  Cuartos_Disponibles_Promedio_log_diff = -322.36,
  Estadia_Promedio_log_diff = 966.49,
  Cuartos_Registrados_diff = 0.001189746,
  Densidad_Ocupación_log = 443.9180,
  Turistas_Noche_Ext_diff = 0.001844229,
  Llegada_Tur_Nac_diff = 0.00521478
)

# Valores base para cada variable (promedios o valores típicos que tú determines)
valores_base <- c(
  X.Ocupacion_Hoteles_diff = 0.05,
  Cuartos_Disponibles_Promedio_log_diff = 0.01,
  Estadia_Promedio_log_diff = 0.02,
  Cuartos_Registrados_diff = 10000,
  Densidad_Ocupación_log = 1.1,
  Turistas_Noche_Ext_diff = 20000,
  Llegada_Tur_Nac_diff = 50000
)

# Porcentajes de incremento
incrementos <- c(0.25, 0.50, 0.75)

# Calcular impacto esperado
impacto_df <- data.frame()

for (var in names(coeficientes)) {
  for (inc in incrementos) {
    cambio <- valores_base[var] * inc
    impacto <- cambio * coeficientes[var]
    impacto_df <- rbind(impacto_df, data.frame(
      Variable = var,
      Incremento = paste0(inc * 100, "%"),
      Impacto_Estimado_mdp = impacto
    ))
  }
}
print(impacto_df)
##                                                                     Variable
## X.Ocupacion_Hoteles_diff                            X.Ocupacion_Hoteles_diff
## X.Ocupacion_Hoteles_diff1                           X.Ocupacion_Hoteles_diff
## X.Ocupacion_Hoteles_diff2                           X.Ocupacion_Hoteles_diff
## Cuartos_Disponibles_Promedio_log_diff  Cuartos_Disponibles_Promedio_log_diff
## Cuartos_Disponibles_Promedio_log_diff1 Cuartos_Disponibles_Promedio_log_diff
## Cuartos_Disponibles_Promedio_log_diff2 Cuartos_Disponibles_Promedio_log_diff
## Estadia_Promedio_log_diff                          Estadia_Promedio_log_diff
## Estadia_Promedio_log_diff1                         Estadia_Promedio_log_diff
## Estadia_Promedio_log_diff2                         Estadia_Promedio_log_diff
## Cuartos_Registrados_diff                            Cuartos_Registrados_diff
## Cuartos_Registrados_diff1                           Cuartos_Registrados_diff
## Cuartos_Registrados_diff2                           Cuartos_Registrados_diff
## Densidad_Ocupación_log                                Densidad_Ocupación_log
## Densidad_Ocupación_log1                               Densidad_Ocupación_log
## Densidad_Ocupación_log2                               Densidad_Ocupación_log
## Turistas_Noche_Ext_diff                              Turistas_Noche_Ext_diff
## Turistas_Noche_Ext_diff1                             Turistas_Noche_Ext_diff
## Turistas_Noche_Ext_diff2                             Turistas_Noche_Ext_diff
## Llegada_Tur_Nac_diff                                    Llegada_Tur_Nac_diff
## Llegada_Tur_Nac_diff1                                   Llegada_Tur_Nac_diff
## Llegada_Tur_Nac_diff2                                   Llegada_Tur_Nac_diff
##                                        Incremento Impacto_Estimado_mdp
## X.Ocupacion_Hoteles_diff                      25%             5.339875
## X.Ocupacion_Hoteles_diff1                     50%            10.679750
## X.Ocupacion_Hoteles_diff2                     75%            16.019625
## Cuartos_Disponibles_Promedio_log_diff         25%            -0.805900
## Cuartos_Disponibles_Promedio_log_diff1        50%            -1.611800
## Cuartos_Disponibles_Promedio_log_diff2        75%            -2.417700
## Estadia_Promedio_log_diff                     25%             4.832450
## Estadia_Promedio_log_diff1                    50%             9.664900
## Estadia_Promedio_log_diff2                    75%            14.497350
## Cuartos_Registrados_diff                      25%             2.974365
## Cuartos_Registrados_diff1                     50%             5.948730
## Cuartos_Registrados_diff2                     75%             8.923095
## Densidad_Ocupación_log                        25%           122.077450
## Densidad_Ocupación_log1                       50%           244.154900
## Densidad_Ocupación_log2                       75%           366.232350
## Turistas_Noche_Ext_diff                       25%             9.221145
## Turistas_Noche_Ext_diff1                      50%            18.442290
## Turistas_Noche_Ext_diff2                      75%            27.663435
## Llegada_Tur_Nac_diff                          25%            65.184750
## Llegada_Tur_Nac_diff1                         50%           130.369500
## Llegada_Tur_Nac_diff2                         75%           195.554250

Densidad de ocupación, llegadas de turistas nacionales y turistas noche extranjeros son las variables cuyo incremento tiene mayor impacto positivo sobre la derrama económica. En contraste, un aumento en Cuartos disponibles promedio tiene un impacto negativo, lo cual podría interpretarse como una señal de menor ocupación o eficiencia.

# Mostrar resultados ordenados
library(dplyr)
impacto_df <- impacto_df %>%
  arrange(desc(abs(Impacto_Estimado_mdp)))

print(impacto_df)
##                                                                     Variable
## Densidad_Ocupación_log2                               Densidad_Ocupación_log
## Densidad_Ocupación_log1                               Densidad_Ocupación_log
## Llegada_Tur_Nac_diff2                                   Llegada_Tur_Nac_diff
## Llegada_Tur_Nac_diff1                                   Llegada_Tur_Nac_diff
## Densidad_Ocupación_log                                Densidad_Ocupación_log
## Llegada_Tur_Nac_diff                                    Llegada_Tur_Nac_diff
## Turistas_Noche_Ext_diff2                             Turistas_Noche_Ext_diff
## Turistas_Noche_Ext_diff1                             Turistas_Noche_Ext_diff
## X.Ocupacion_Hoteles_diff2                           X.Ocupacion_Hoteles_diff
## Estadia_Promedio_log_diff2                         Estadia_Promedio_log_diff
## X.Ocupacion_Hoteles_diff1                           X.Ocupacion_Hoteles_diff
## Estadia_Promedio_log_diff1                         Estadia_Promedio_log_diff
## Turistas_Noche_Ext_diff                              Turistas_Noche_Ext_diff
## Cuartos_Registrados_diff2                           Cuartos_Registrados_diff
## Cuartos_Registrados_diff1                           Cuartos_Registrados_diff
## X.Ocupacion_Hoteles_diff                            X.Ocupacion_Hoteles_diff
## Estadia_Promedio_log_diff                          Estadia_Promedio_log_diff
## Cuartos_Registrados_diff                            Cuartos_Registrados_diff
## Cuartos_Disponibles_Promedio_log_diff2 Cuartos_Disponibles_Promedio_log_diff
## Cuartos_Disponibles_Promedio_log_diff1 Cuartos_Disponibles_Promedio_log_diff
## Cuartos_Disponibles_Promedio_log_diff  Cuartos_Disponibles_Promedio_log_diff
##                                        Incremento Impacto_Estimado_mdp
## Densidad_Ocupación_log2                       75%           366.232350
## Densidad_Ocupación_log1                       50%           244.154900
## Llegada_Tur_Nac_diff2                         75%           195.554250
## Llegada_Tur_Nac_diff1                         50%           130.369500
## Densidad_Ocupación_log                        25%           122.077450
## Llegada_Tur_Nac_diff                          25%            65.184750
## Turistas_Noche_Ext_diff2                      75%            27.663435
## Turistas_Noche_Ext_diff1                      50%            18.442290
## X.Ocupacion_Hoteles_diff2                     75%            16.019625
## Estadia_Promedio_log_diff2                    75%            14.497350
## X.Ocupacion_Hoteles_diff1                     50%            10.679750
## Estadia_Promedio_log_diff1                    50%             9.664900
## Turistas_Noche_Ext_diff                       25%             9.221145
## Cuartos_Registrados_diff2                     75%             8.923095
## Cuartos_Registrados_diff1                     50%             5.948730
## X.Ocupacion_Hoteles_diff                      25%             5.339875
## Estadia_Promedio_log_diff                     25%             4.832450
## Cuartos_Registrados_diff                      25%             2.974365
## Cuartos_Disponibles_Promedio_log_diff2        75%            -2.417700
## Cuartos_Disponibles_Promedio_log_diff1        50%            -1.611800
## Cuartos_Disponibles_Promedio_log_diff         25%            -0.805900
# 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.5219
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.77 1549.65       -750.89 126.26
## 3       VAR 7352.37 7729.19      -3540.19 323.43

Filtrar manualmente los años 2024 y 2025

df_plot <- df_final[df_final$AÑO %in% c(2023, 2024), ]

Crear los gráficos uno por uno (ejemplo con 3 variables)

library(ggplot2)

ggplot(df_plot, aes(x = Turistas_Noche_Ext_diff, y = Derrama_Economica_Est_mdp_diff)) + geom_point() + geom_smooth(method = “lm”, se = FALSE) + ggtitle(“Relación: Turistas vs Derrama”)

ggplot(df_plot, aes(x = X.Ocupacion_Hoteles_diff, y = Derrama_Economica_Est_mdp_diff)) + geom_point() + geom_smooth(method = “lm”, se = FALSE) + ggtitle(“Relación: Ocupación Hoteles vs Derrama”)

ggplot(df_plot, aes(x = Cuartos_Registrados_diff, y = Derrama_Economica_Est_mdp_diff)) + geom_point() + geom_smooth(method = “lm”, se = FALSE) + ggtitle(“Relación: Cuartos Registrados vs Derrama”)

Obtener valores por año (asumiendo frecuencia mensual)

pred_values <- as.numeric(forecast_result$mean) pred_2024 <- pred_values[1:12] pred_2025 <- pred_values[13:24] pred_2026 <- pred_values[25:36]

Promedio anual

mean_2024 <- mean(pred_2024) mean_2025 <- mean(pred_2025) mean_2026 <- mean(pred_2026)

cbind(2024 = mean_2024, 2025 = mean_2025, 2026 = mean_2026)