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)
y <- ts(df_final$Derrama_Economica_Est_mdp_diff, start = c(2015, 1), frequency = 12)
#colnames(df_final)
variables_explicativas <- c(
"Turistas_Noche_Ext_diff", "X.Ocupacion_Hoteles_diff",
"Cuartos_Disponibles_Promedio_log_diff", "Estadia_Promedio_log_diff",
"Cuartos_Registrados_diff", "Llegada_Tur_Nac_diff", "Densidad_Ocupación_log"
)
#quitar por "Cuartos_Ocupados_diff" "Turistas_Noche_Nac_diff" "Cuartos_Disponibles_diff"
# Se elimina 'Llegada_Tur_Ext_diff' por baja significancia estadística en el modelo SARIMAX y alto VIF (> 6)
df_mod <- dplyr::select(df_final, any_of(variables_explicativas))
df_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_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
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.
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.
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
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
df_plot <- df_final[df_final$AÑO %in% c(2023, 2024), ]
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”)
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]
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)