pacman::p_load(dplyr, ggplot2, naniar, tseries, corrplot, patchwork, readxl, psych, maps, sf, rnaturalearth, rnaturalearthdata, stringi, scales, dlookr, DataExplorer, tidyr, knitr, RColorBrewer, plotly, forecast, tseries, openxlsx, vars, lmtest)
library(openxlsx)
df <- read.xlsx("HOTELES-BD.xlsx", sheet ="HOTELES")
kable(head(df))
| AÑO | MES | Cuartos_Disponibles | Cuartos_Disponibles_Promedio | Cuartos_Ocupados | Cuartos_Registrados | Densidad_Ocupación | Derrama_Economica_Est_mdp | Estadia_Promedio | Imp_Hospedaje | Turistas_Noche_Ext | Turistas_Noche_Nac | %Ocupacion_Hoteles | Llegada_Tur_Ext | Llegada_Tur_Nac |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2004 | 1 | 285891 | 9142 | 134696 | 293105 | 1.501604 | 316.5167 | 2.125116 | NA | 35742 | 166518 | 0.4711446 | 14725 | 80451 |
| 2004 | 2 | 267473 | 9143 | 129500 | 274195 | 1.486286 | 345.1886 | 1.858844 | NA | 33262 | 159212 | 0.4841610 | 15841 | 87704 |
| 2004 | 3 | 289049 | 9317 | 154239 | 293105 | 1.576326 | 442.6492 | 1.957151 | NA | 38217 | 204914 | 0.5336085 | 18465 | 105762 |
| 2004 | 4 | 276364 | 9205 | 138065 | 283650 | 1.607808 | 377.4937 | 1.972139 | NA | 28712 | 193270 | 0.4995766 | 13567 | 98992 |
| 2004 | 5 | 289222 | 9322 | 170326 | 293105 | 1.608674 | 464.8694 | 1.933724 | NA | 42037 | 231962 | 0.5889109 | 18876 | 122819 |
| 2004 | 6 | 280401 | 9346 | 141969 | 283650 | 1.508153 | 386.5217 | 1.866298 | NA | 39146 | 174965 | 0.5063070 | 18032 | 96693 |
# Nulos Totales
sum(is.na(df))
## [1] 132
# Nulos por Columna
gg_miss_var(df)
summary(df)
## AÑO MES Cuartos_Disponibles
## Min. :2004 Min. : 1.00 Min. :259707
## 1st Qu.:2009 1st Qu.: 3.75 1st Qu.:346570
## Median :2014 Median : 6.50 Median :373090
## Mean :2014 Mean : 6.50 Mean :391909
## 3rd Qu.:2019 3rd Qu.: 9.25 3rd Qu.:430070
## Max. :2024 Max. :12.00 Max. :543182
##
## Cuartos_Disponibles_Promedio Cuartos_Ocupados Cuartos_Registrados
## Min. : 9142 Min. : 26308 Min. :264740
## 1st Qu.:11568 1st Qu.:168867 1st Qu.:350052
## Median :12205 Median :203002 Median :381920
## Mean :12874 Mean :219182 Mean :395936
## 3rd Qu.:14115 3rd Qu.:275674 3rd Qu.:432078
## Max. :17522 Max. :382072 Max. :543182
##
## Densidad_Ocupación Derrama_Economica_Est_mdp Estadia_Promedio
## Min. :0.000 Min. : 103.5 Min. :1.606
## 1st Qu.:1.450 1st Qu.: 541.9 1st Qu.:1.910
## Median :1.515 Median : 718.4 Median :2.020
## Mean :1.543 Mean : 909.2 Mean :2.041
## 3rd Qu.:1.600 3rd Qu.:1089.8 3rd Qu.:2.160
## Max. :2.080 Max. :3016.2 Max. :3.050
##
## Imp_Hospedaje Turistas_Noche_Ext Turistas_Noche_Nac %Ocupacion_Hoteles
## Min. : 1635935 Min. : 3728 Min. : 37093 Min. :0.05811
## 1st Qu.: 6492250 1st Qu.: 37498 1st Qu.:209590 1st Qu.:0.48184
## Median :10329255 Median : 53826 Median :257928 Median :0.57719
## Mean :10509451 Mean : 56497 Mean :285699 Mean :0.55791
## 3rd Qu.:13543490 3rd Qu.: 71226 3rd Qu.:361718 3rd Qu.:0.65404
## Max. :24075522 Max. :143049 Max. :557430 Max. :0.80457
## NA's :132
## Llegada_Tur_Ext Llegada_Tur_Nac
## Min. : 1176 Min. : 12021
## 1st Qu.:18874 1st Qu.:106026
## Median :27516 Median :123694
## Mean :28754 Mean :139067
## 3rd Qu.:37404 3rd Qu.:172872
## Max. :65790 Max. :315672
##
colnames(df)
## [1] "AÑO" "MES"
## [3] "Cuartos_Disponibles" "Cuartos_Disponibles_Promedio"
## [5] "Cuartos_Ocupados" "Cuartos_Registrados"
## [7] "Densidad_Ocupación" "Derrama_Economica_Est_mdp"
## [9] "Estadia_Promedio" "Imp_Hospedaje"
## [11] "Turistas_Noche_Ext" "Turistas_Noche_Nac"
## [13] "%Ocupacion_Hoteles" "Llegada_Tur_Ext"
## [15] "Llegada_Tur_Nac"
plot_histogram(df)
plot_normality(df)
library(dplyr)
# Define columnas a transformar
cols_log <- c( "Cuartos_Disponibles_Promedio",
"Densidad_Ocupación",
"Estadia_Promedio")
# Crear las columnas transformadas y agregarlas al dataframe original
df_log <- df %>%
mutate(across(all_of(cols_log), ~ log(. + 1), .names = "{.col}_log"))
colnames(df_log)
## [1] "AÑO" "MES"
## [3] "Cuartos_Disponibles" "Cuartos_Disponibles_Promedio"
## [5] "Cuartos_Ocupados" "Cuartos_Registrados"
## [7] "Densidad_Ocupación" "Derrama_Economica_Est_mdp"
## [9] "Estadia_Promedio" "Imp_Hospedaje"
## [11] "Turistas_Noche_Ext" "Turistas_Noche_Nac"
## [13] "%Ocupacion_Hoteles" "Llegada_Tur_Ext"
## [15] "Llegada_Tur_Nac" "Cuartos_Disponibles_Promedio_log"
## [17] "Densidad_Ocupación_log" "Estadia_Promedio_log"
df_log <- df_log[, !(names(df_log) %in% cols_log)]
colnames(df_log)
## [1] "AÑO" "MES"
## [3] "Cuartos_Disponibles" "Cuartos_Ocupados"
## [5] "Cuartos_Registrados" "Derrama_Economica_Est_mdp"
## [7] "Imp_Hospedaje" "Turistas_Noche_Ext"
## [9] "Turistas_Noche_Nac" "%Ocupacion_Hoteles"
## [11] "Llegada_Tur_Ext" "Llegada_Tur_Nac"
## [13] "Cuartos_Disponibles_Promedio_log" "Densidad_Ocupación_log"
## [15] "Estadia_Promedio_log"
# Gráfico de dispersión
plot_histogram(df_log)
summary(df_log)
## AÑO MES Cuartos_Disponibles Cuartos_Ocupados
## Min. :2004 Min. : 1.00 Min. :259707 Min. : 26308
## 1st Qu.:2009 1st Qu.: 3.75 1st Qu.:346570 1st Qu.:168867
## Median :2014 Median : 6.50 Median :373090 Median :203002
## Mean :2014 Mean : 6.50 Mean :391909 Mean :219182
## 3rd Qu.:2019 3rd Qu.: 9.25 3rd Qu.:430070 3rd Qu.:275674
## Max. :2024 Max. :12.00 Max. :543182 Max. :382072
##
## Cuartos_Registrados Derrama_Economica_Est_mdp Imp_Hospedaje
## Min. :264740 Min. : 103.5 Min. : 1635935
## 1st Qu.:350052 1st Qu.: 541.9 1st Qu.: 6492250
## Median :381920 Median : 718.4 Median :10329255
## Mean :395936 Mean : 909.2 Mean :10509451
## 3rd Qu.:432078 3rd Qu.:1089.8 3rd Qu.:13543490
## Max. :543182 Max. :3016.2 Max. :24075522
## NA's :132
## Turistas_Noche_Ext Turistas_Noche_Nac %Ocupacion_Hoteles Llegada_Tur_Ext
## Min. : 3728 Min. : 37093 Min. :0.05811 Min. : 1176
## 1st Qu.: 37498 1st Qu.:209590 1st Qu.:0.48184 1st Qu.:18874
## Median : 53826 Median :257928 Median :0.57719 Median :27516
## Mean : 56497 Mean :285699 Mean :0.55791 Mean :28754
## 3rd Qu.: 71226 3rd Qu.:361718 3rd Qu.:0.65404 3rd Qu.:37404
## Max. :143049 Max. :557430 Max. :0.80457 Max. :65790
##
## Llegada_Tur_Nac Cuartos_Disponibles_Promedio_log Densidad_Ocupación_log
## Min. : 12021 Min. :9.121 Min. :0.0000
## 1st Qu.:106026 1st Qu.:9.356 1st Qu.:0.8961
## Median :123694 Median :9.410 Median :0.9223
## Mean :139067 Mean :9.448 Mean :0.9304
## 3rd Qu.:172872 3rd Qu.:9.555 3rd Qu.:0.9555
## Max. :315672 Max. :9.771 Max. :1.1249
##
## Estadia_Promedio_log
## Min. :0.9578
## 1st Qu.:1.0682
## Median :1.1053
## Mean :1.1105
## 3rd Qu.:1.1506
## Max. :1.3987
##
plot_correlation(df_log)
## Warning: Removed 28 rows containing missing values or values outside the scale range
## (`geom_text()`).
# 1. Selecciona solo las columnas numéricas
df_numerico <- df_log[sapply(df_log, is.numeric)]
# 2. Calcula la matriz de correlación
matriz_cor <- cor(df_numerico, use = "pairwise.complete.obs")
corrplot( matriz_cor,
method = "color", # Mapa de calor
type = "upper", # Solo triángulo superior
addCoef.col = "black", # Mostrar coeficientes en color negro
number.cex = 0.6, # Tamaño del número
tl.cex = 0.35, # Tamaño de las etiquetas
tl.col = "black", # Color del texto
diag = FALSE # Oculta la diagonal (1s)
)
# Calcular la matriz de correlación
correlaciones <- cor(df_numerico, use = "pairwise.complete.obs")
# Extraer las correlaciones con %Ocupacion_Hoteles
cor_ocupacion <- correlaciones["Derrama_Economica_Est_mdp", ]
cor_ocupacion <- cor_ocupacion[!names(cor_ocupacion) %in% "Derrama_Economica_Est_mdp"]
df_cor <- data.frame(
Variable = names(cor_ocupacion),
Correlacion = cor_ocupacion
) %>%
arrange(desc(abs(Correlacion))) %>%
mutate(Variable = factor(Variable, levels = Variable))
ggplot(df_cor, aes(x = Variable, y = Correlacion)) +
geom_bar(stat = "identity", fill = "steelblue") +
coord_flip() +
geom_text(aes(label = round(Correlacion, 2)), hjust = ifelse(df_cor$Correlacion > 0, -0.1, 1.1)) +
labs(
title = "Correlación con Derrama_Economica_Est_mdp",
y = "Coeficiente de correlación",
x = ""
) +
theme_minimal()
df_log <- df_log[!is.na(df_log$"Derrama_Economica_Est_mdp"), ]
derrama_ts <- ts(df_log$"Derrama_Economica_Est_mdp", start = c(2004, 1), end = c(2024, 12), frequency = 12)
plot(derrama_ts, type = "l", col = "darkgreen", lwd = 2,
xlab = "Año", ylab = "Derrama Económica",
main = "Serie Temporal de Derrama_Economica_Est_mdp")
length(derrama_ts)
## [1] 252
frequency(derrama_ts)
## [1] 12
end(derrama_ts)
## [1] 2024 12
decomposition <- decompose(derrama_ts)
plot(decomposition)
descomp_stl <- stl(derrama_ts, s.window = "periodic")
plot(descomp_stl)
boxplot(derrama_ts ~ cycle(derrama_ts),
xlab = "Mes", ylab = "Derrama",
main = "Estacionalidad mensual", col = "lightblue")
# Autocorrelación y autocorrelación parcial
acf(derrama_ts, main="Autocorrelation - Derrama Económica")
pacf(derrama_ts, main="Partial Autocorrelation -Derrama Económica") #aplicar 1 o 2
adf_ocupacion <- adf.test(df_log$"Derrama_Economica_Est_mdp")
print(adf_ocupacion)
##
## Augmented Dickey-Fuller Test
##
## data: df_log$Derrama_Economica_Est_mdp
## Dickey-Fuller = -1.9306, Lag order = 6, p-value = 0.605
## alternative hypothesis: stationary
# Aucotorrelación serial
lgunj_box_result <- Box.test(derrama_ts, lag = 5, type = "Ljung-Box")
lgunj_box_result
##
## Box-Ljung test
##
## data: derrama_ts
## X-squared = 983.29, df = 5, p-value < 2.2e-16
nsdiffs(derrama_ts)
## [1] 0
derrama_diff <- diff(derrama_ts) # Diferencia (d = 1)
adf.test(derrama_diff) #Ya es estacionaria, por ende no se aplica d
## Warning in adf.test(derrama_diff): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: derrama_diff
## Dickey-Fuller = -6.4941, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
mod1 <- arima(derrama_diff, order = c(1, 0, 0)) # d = 0 porque ya la serie está diferenciada
summary(mod1) #p-value = 2.2e-16 → muy menor a 0.05, los residuos no se comportan como ruido blanco → el modelo no está capturando completamente la estructura de la serie.
##
## Call:
## arima(x = derrama_diff, order = c(1, 0, 0))
##
## Coefficients:
## ar1 intercept
## -0.1075 7.6542
## s.e. 0.0637 9.6332
##
## sigma^2 estimated as 28547: log likelihood = -1643.7, aic = 3293.4
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 0.001449583 168.9576 118.4086 210.444 249.2255 0.6696299
## ACF1
## Training set -0.03787776
checkresiduals(mod1)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(1,0,0) with non-zero mean
## Q* = 230.01, df = 23, p-value < 2.2e-16
##
## Model df: 1. Total lags used: 24
#ar1-> coeficiente bajo, lo que sugiere una débil autocorrelación temporal directa.
modelo_auto <- auto.arima(derrama_ts)
summary(modelo_auto)
## Series: derrama_ts
## ARIMA(2,1,0)(0,0,2)[12]
##
## Coefficients:
## ar1 ar2 sma1 sma2
## -0.1440 -0.2517 0.2315 0.2043
## s.e. 0.0616 0.0657 0.0683 0.0633
##
## sigma^2 = 23305: log likelihood = -1617.03
## AIC=3244.06 AICc=3244.3 BIC=3261.69
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 7.723387 151.1387 97.70522 -2.637469 13.8319 0.4266687
## ACF1
## Training set 0.0003630307
checkresiduals(modelo_auto)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(2,1,0)(0,0,2)[12]
## Q* = 40.37, df = 20, p-value = 0.004484
##
## Model df: 4. Total lags used: 24
#p-value = 0.004484 → menor a 0.05, lo que indica presencia de autocorrelación en los residuos
#No captura tan bien la estacionalidad
library(forecast)
# Lista para guardar resultados
resultados <- list()
modelos_validos <- data.frame()
# Rangos de parámetros (ajústalos si quieres más o menos combinaciones)
for (p in 0:2) {
for (d in 1:1) {
for (q in 0:2) {
for (P in 0:2) {
for (D in 0:1) {
for (Q in 0:2) {
orden <- c(p, d, q)
orden_estacional <- c(P, D, Q)
try({
modelo <- arima(derrama_ts,
order = orden,
seasonal = list(order = orden_estacional, period = 12),
method = "ML")
aic_val <- AIC(modelo)
modelos_validos <- rbind(modelos_validos, data.frame(
p, d, q, P, D, Q,
AIC = aic_val
))
key <- paste0("(", p, ",", d, ",", q, ")(", P, ",", D, ",", Q, ")[12]")
resultados[[key]] <- modelo
}, silent = TRUE)
}
}
}
}
}
}
## Warning in log(s2): NaNs produced
## Warning in log(s2): NaNs produced
## Warning in log(s2): NaNs produced
## Warning in log(s2): NaNs produced
## Warning in arima(derrama_ts, order = orden, seasonal = list(order =
## orden_estacional, : possible convergence problem: optim gave code = 1
# Ordenar por AIC
modelos_validos <- modelos_validos[order(modelos_validos$AIC), ]
head(modelos_validos, 5)
## p d q P D Q AIC
## 143 2 1 2 0 1 1 3054.344
## 144 2 1 2 0 1 2 3055.413
## 149 2 1 2 1 1 1 3055.552
## 155 2 1 2 2 1 1 3055.905
## 156 2 1 2 2 1 2 3057.343
mod_sugerido <- arima(derrama_ts, order = c(2,1,2), seasonal = list(order = c(0,1,1), period = 12), transform.pars = FALSE)
summary(mod_sugerido)
##
## Call:
## arima(x = derrama_ts, order = c(2, 1, 2), seasonal = list(order = c(0, 1, 1),
## period = 12), transform.pars = FALSE)
##
## Coefficients:
## ar1 ar2 ma1 ma2 sma1
## -0.0019 -1.0062 -0.0692 0.9063 -1.0000
## s.e. 0.0066 0.0114 0.0350 0.0279 0.0772
##
## sigma^2 estimated as 17409: log likelihood = -1521.12, aic = 3054.24
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 4.716493 128.4957 73.48511 -2.065164 10.35313 0.6143497
## ACF1
## Training set -0.05029193
checkresiduals(mod_sugerido)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(2,1,2)(0,1,1)[12]
## Q* = 24.764, df = 19, p-value = 0.1685
##
## Model df: 5. Total lags used: 24
#Ljung-Box:
#p-value = 0.1685 > 0.05 → no hay autocorrelación significativa en los residuos.
# Buen indicio de que el modelo capta bien la estructura de la serie
#Captura adecuadamente la tendencia y estacionalidad.
variables_log <- c( "MES", "AÑO",
"Cuartos_Disponibles", "Cuartos_Ocupados", "Cuartos_Registrados", "Derrama_Economica_Est_mdp", "Imp_Hospedaje", "Turistas_Noche_Ext", "Turistas_Noche_Nac", "%Ocupacion_Hoteles", "Llegada_Tur_Ext", "Llegada_Tur_Nac", "Cuartos_Disponibles_Promedio_log", "Densidad_Ocupación_log", "Estadia_Promedio_log"
)
variables_log <- setdiff(variables_log, c("Imp_Hospedaje", "MES", "AÑO"))
for (var in variables_log) {
cat("\n--------------------------------------------------\n")
cat("ADF test for:", var, "\n")
serie <- ts(df_log[[var]], start = c(2004, 1), frequency = 12)
print(adf.test(serie))
}
##
## --------------------------------------------------
## ADF test for: Cuartos_Disponibles
##
## Augmented Dickey-Fuller Test
##
## data: serie
## Dickey-Fuller = -1.5393, Lag order = 6, p-value = 0.7698
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: Cuartos_Ocupados
##
## Augmented Dickey-Fuller Test
##
## data: serie
## Dickey-Fuller = -2.5579, Lag order = 6, p-value = 0.3409
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: Cuartos_Registrados
##
## Augmented Dickey-Fuller Test
##
## data: serie
## Dickey-Fuller = -1.5222, Lag order = 6, p-value = 0.777
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: Derrama_Economica_Est_mdp
##
## Augmented Dickey-Fuller Test
##
## data: serie
## Dickey-Fuller = -1.9306, Lag order = 6, p-value = 0.605
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: Turistas_Noche_Ext
##
## Augmented Dickey-Fuller Test
##
## data: serie
## Dickey-Fuller = -2.7931, Lag order = 6, p-value = 0.2419
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: Turistas_Noche_Nac
##
## Augmented Dickey-Fuller Test
##
## data: serie
## Dickey-Fuller = -2.8091, Lag order = 6, p-value = 0.2351
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: %Ocupacion_Hoteles
##
## Augmented Dickey-Fuller Test
##
## data: serie
## Dickey-Fuller = -2.6893, Lag order = 6, p-value = 0.2856
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: Llegada_Tur_Ext
##
## Augmented Dickey-Fuller Test
##
## data: serie
## Dickey-Fuller = -3.0551, Lag order = 6, p-value = 0.1315
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: Llegada_Tur_Nac
##
## Augmented Dickey-Fuller Test
##
## data: serie
## Dickey-Fuller = -2.243, Lag order = 6, p-value = 0.4735
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: Cuartos_Disponibles_Promedio_log
##
## Augmented Dickey-Fuller Test
##
## data: serie
## Dickey-Fuller = -2.4867, Lag order = 6, p-value = 0.3709
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: Densidad_Ocupación_log
## Warning in adf.test(serie): p-value smaller than printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: serie
## Dickey-Fuller = -4.1695, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: Estadia_Promedio_log
##
## Augmented Dickey-Fuller Test
##
## data: serie
## Dickey-Fuller = -3.2396, Lag order = 6, p-value = 0.08173
## alternative hypothesis: stationary
series_diferenciadas <- list()
for (var in variables_log) {
serie <- ts(df_log[[var]], start = c(2004, 1), frequency = 12)
adf_result <- tryCatch(adf.test(serie), error = function(e) NULL)
if (!is.null(adf_result) && adf_result$p.value > 0.05) {
# No es estacionaria → aplicar diff y renombrar con _diff
serie_diff <- diff(serie)
series_diferenciadas[[paste0(var, "_diff")]] <- serie_diff
} else {
# Es estacionaria → mantener nombre original (recortada por consistencia)
series_diferenciadas[[var]] <- window(serie, start = c(2004, 2))
}
}
## Warning in adf.test(serie): p-value smaller than printed p-value
# Aplicar la prueba ADF a todas las series diferenciadas
for (nombre in names(series_diferenciadas)) {
cat("\n--------------------------------------------------\n")
cat("ADF test for:", nombre, "\n")
print(adf.test(series_diferenciadas[[nombre]]))
}
##
## --------------------------------------------------
## ADF test for: Cuartos_Disponibles_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: series_diferenciadas[[nombre]]
## Dickey-Fuller = -8.3798, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: Cuartos_Ocupados_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: series_diferenciadas[[nombre]]
## Dickey-Fuller = -6.7058, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: Cuartos_Registrados_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: series_diferenciadas[[nombre]]
## Dickey-Fuller = -8.2225, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: Derrama_Economica_Est_mdp_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: series_diferenciadas[[nombre]]
## Dickey-Fuller = -6.4941, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: Turistas_Noche_Ext_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: series_diferenciadas[[nombre]]
## Dickey-Fuller = -6.649, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: Turistas_Noche_Nac_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: series_diferenciadas[[nombre]]
## Dickey-Fuller = -7.4223, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: %Ocupacion_Hoteles_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: series_diferenciadas[[nombre]]
## Dickey-Fuller = -7.0613, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: Llegada_Tur_Ext_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: series_diferenciadas[[nombre]]
## Dickey-Fuller = -6.3763, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: Llegada_Tur_Nac_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: series_diferenciadas[[nombre]]
## Dickey-Fuller = -7.367, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: Cuartos_Disponibles_Promedio_log_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: series_diferenciadas[[nombre]]
## Dickey-Fuller = -7.6481, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: Densidad_Ocupación_log
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: series_diferenciadas[[nombre]]
## Dickey-Fuller = -4.1607, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
##
##
## --------------------------------------------------
## ADF test for: Estadia_Promedio_log_diff
## Warning in adf.test(series_diferenciadas[[nombre]]): p-value smaller than
## printed p-value
##
## Augmented Dickey-Fuller Test
##
## data: series_diferenciadas[[nombre]]
## Dickey-Fuller = -8.6448, Lag order = 6, p-value = 0.01
## alternative hypothesis: stationary
labels(series_diferenciadas)
## [1] "Cuartos_Disponibles_diff"
## [2] "Cuartos_Ocupados_diff"
## [3] "Cuartos_Registrados_diff"
## [4] "Derrama_Economica_Est_mdp_diff"
## [5] "Turistas_Noche_Ext_diff"
## [6] "Turistas_Noche_Nac_diff"
## [7] "%Ocupacion_Hoteles_diff"
## [8] "Llegada_Tur_Ext_diff"
## [9] "Llegada_Tur_Nac_diff"
## [10] "Cuartos_Disponibles_Promedio_log_diff"
## [11] "Densidad_Ocupación_log"
## [12] "Estadia_Promedio_log_diff"
df_log[2, ]
## AÑO MES Cuartos_Disponibles Cuartos_Ocupados Cuartos_Registrados
## 2 2004 2 267473 129500 274195
## Derrama_Economica_Est_mdp Imp_Hospedaje Turistas_Noche_Ext Turistas_Noche_Nac
## 2 345.1886 NA 33262 159212
## %Ocupacion_Hoteles Llegada_Tur_Ext Llegada_Tur_Nac
## 2 0.484161 15841 87704
## Cuartos_Disponibles_Promedio_log Densidad_Ocupación_log Estadia_Promedio_log
## 2 9.120853 0.9107899 1.050417
df_diff <- as.data.frame(series_diferenciadas)
df_diff[1, ]
## Cuartos_Disponibles_diff Cuartos_Ocupados_diff Cuartos_Registrados_diff
## 1 -18418 -5196 -18910
## Derrama_Economica_Est_mdp_diff Turistas_Noche_Ext_diff
## 1 28.67197 -2480
## Turistas_Noche_Nac_diff X.Ocupacion_Hoteles_diff Llegada_Tur_Ext_diff
## 1 -7306 0.01301642 1116
## Llegada_Tur_Nac_diff Cuartos_Disponibles_Promedio_log_diff
## 1 7253 0.0001093673
## Densidad_Ocupación_log Estadia_Promedio_log_diff
## 1 0.9107899 -0.08905393
# 1. Mantener solo MES y AÑO de df_log (recortado)
df_log2 <- df_log[-1, c("MES", "AÑO", "Densidad_Ocupación_log")]
# 2. Eliminar de df_diff las columnas que ya existen en df_log2
cols_existentes <- intersect(names(df_log2), names(df_diff))
df_diff_filtrado <- df_diff[, !(names(df_diff) %in% cols_existentes)]
# 3. Unir MES, AÑO y las series diferenciadas
df_final <- bind_cols(df_log2, df_diff_filtrado)
#aqui inserto el scale?
#df_final
df_final <- df_final[df_final$AÑO >= 2015, ]
correlaciones <- cor(df_final, use = "complete.obs")
round(correlaciones, 2) # para ver mejor los valores
## MES AÑO Densidad_Ocupación_log
## MES 1.00 0.00 0.09
## AÑO 0.00 1.00 0.47
## Densidad_Ocupación_log 0.09 0.47 1.00
## Cuartos_Disponibles_diff 0.15 0.00 0.07
## Cuartos_Ocupados_diff -0.09 0.01 0.00
## Cuartos_Registrados_diff 0.17 0.00 0.07
## Derrama_Economica_Est_mdp_diff -0.10 0.04 0.18
## Turistas_Noche_Ext_diff 0.09 -0.01 0.11
## Turistas_Noche_Nac_diff -0.03 -0.01 0.12
## X.Ocupacion_Hoteles_diff -0.15 0.01 -0.03
## Llegada_Tur_Ext_diff 0.13 -0.01 0.07
## Llegada_Tur_Nac_diff 0.10 0.01 0.10
## Cuartos_Disponibles_Promedio_log_diff 0.12 -0.01 -0.09
## Estadia_Promedio_log_diff -0.29 -0.02 0.04
## Cuartos_Disponibles_diff
## MES 0.15
## AÑO 0.00
## Densidad_Ocupación_log 0.07
## Cuartos_Disponibles_diff 1.00
## Cuartos_Ocupados_diff 0.27
## Cuartos_Registrados_diff 0.99
## Derrama_Economica_Est_mdp_diff 0.24
## Turistas_Noche_Ext_diff 0.14
## Turistas_Noche_Nac_diff 0.30
## X.Ocupacion_Hoteles_diff -0.06
## Llegada_Tur_Ext_diff 0.23
## Llegada_Tur_Nac_diff 0.25
## Cuartos_Disponibles_Promedio_log_diff 0.33
## Estadia_Promedio_log_diff 0.03
## Cuartos_Ocupados_diff
## MES -0.09
## AÑO 0.01
## Densidad_Ocupación_log 0.00
## Cuartos_Disponibles_diff 0.27
## Cuartos_Ocupados_diff 1.00
## Cuartos_Registrados_diff 0.23
## Derrama_Economica_Est_mdp_diff 0.76
## Turistas_Noche_Ext_diff 0.55
## Turistas_Noche_Nac_diff 0.90
## X.Ocupacion_Hoteles_diff 0.94
## Llegada_Tur_Ext_diff 0.54
## Llegada_Tur_Nac_diff 0.86
## Cuartos_Disponibles_Promedio_log_diff 0.27
## Estadia_Promedio_log_diff -0.06
## Cuartos_Registrados_diff
## MES 0.17
## AÑO 0.00
## Densidad_Ocupación_log 0.07
## Cuartos_Disponibles_diff 0.99
## Cuartos_Ocupados_diff 0.23
## Cuartos_Registrados_diff 1.00
## Derrama_Economica_Est_mdp_diff 0.22
## Turistas_Noche_Ext_diff 0.11
## Turistas_Noche_Nac_diff 0.28
## X.Ocupacion_Hoteles_diff -0.10
## Llegada_Tur_Ext_diff 0.20
## Llegada_Tur_Nac_diff 0.23
## Cuartos_Disponibles_Promedio_log_diff 0.27
## Estadia_Promedio_log_diff 0.02
## Derrama_Economica_Est_mdp_diff
## MES -0.10
## AÑO 0.04
## Densidad_Ocupación_log 0.18
## Cuartos_Disponibles_diff 0.24
## Cuartos_Ocupados_diff 0.76
## Cuartos_Registrados_diff 0.22
## Derrama_Economica_Est_mdp_diff 1.00
## Turistas_Noche_Ext_diff 0.45
## Turistas_Noche_Nac_diff 0.85
## X.Ocupacion_Hoteles_diff 0.69
## Llegada_Tur_Ext_diff 0.37
## Llegada_Tur_Nac_diff 0.74
## Cuartos_Disponibles_Promedio_log_diff 0.18
## Estadia_Promedio_log_diff 0.15
## Turistas_Noche_Ext_diff
## MES 0.09
## AÑO -0.01
## Densidad_Ocupación_log 0.11
## Cuartos_Disponibles_diff 0.14
## Cuartos_Ocupados_diff 0.55
## Cuartos_Registrados_diff 0.11
## Derrama_Economica_Est_mdp_diff 0.45
## Turistas_Noche_Ext_diff 1.00
## Turistas_Noche_Nac_diff 0.49
## X.Ocupacion_Hoteles_diff 0.52
## Llegada_Tur_Ext_diff 0.89
## Llegada_Tur_Nac_diff 0.44
## Cuartos_Disponibles_Promedio_log_diff 0.13
## Estadia_Promedio_log_diff -0.07
## Turistas_Noche_Nac_diff
## MES -0.03
## AÑO -0.01
## Densidad_Ocupación_log 0.12
## Cuartos_Disponibles_diff 0.30
## Cuartos_Ocupados_diff 0.90
## Cuartos_Registrados_diff 0.28
## Derrama_Economica_Est_mdp_diff 0.85
## Turistas_Noche_Ext_diff 0.49
## Turistas_Noche_Nac_diff 1.00
## X.Ocupacion_Hoteles_diff 0.81
## Llegada_Tur_Ext_diff 0.43
## Llegada_Tur_Nac_diff 0.91
## Cuartos_Disponibles_Promedio_log_diff 0.23
## Estadia_Promedio_log_diff 0.11
## X.Ocupacion_Hoteles_diff
## MES -0.15
## AÑO 0.01
## Densidad_Ocupación_log -0.03
## Cuartos_Disponibles_diff -0.06
## Cuartos_Ocupados_diff 0.94
## Cuartos_Registrados_diff -0.10
## Derrama_Economica_Est_mdp_diff 0.69
## Turistas_Noche_Ext_diff 0.52
## Turistas_Noche_Nac_diff 0.81
## X.Ocupacion_Hoteles_diff 1.00
## Llegada_Tur_Ext_diff 0.47
## Llegada_Tur_Nac_diff 0.79
## Cuartos_Disponibles_Promedio_log_diff 0.17
## Estadia_Promedio_log_diff -0.07
## Llegada_Tur_Ext_diff Llegada_Tur_Nac_diff
## MES 0.13 0.10
## AÑO -0.01 0.01
## Densidad_Ocupación_log 0.07 0.10
## Cuartos_Disponibles_diff 0.23 0.25
## Cuartos_Ocupados_diff 0.54 0.86
## Cuartos_Registrados_diff 0.20 0.23
## Derrama_Economica_Est_mdp_diff 0.37 0.74
## Turistas_Noche_Ext_diff 0.89 0.44
## Turistas_Noche_Nac_diff 0.43 0.91
## X.Ocupacion_Hoteles_diff 0.47 0.79
## Llegada_Tur_Ext_diff 1.00 0.45
## Llegada_Tur_Nac_diff 0.45 1.00
## Cuartos_Disponibles_Promedio_log_diff 0.13 0.20
## Estadia_Promedio_log_diff -0.29 -0.21
## Cuartos_Disponibles_Promedio_log_diff
## MES 0.12
## AÑO -0.01
## Densidad_Ocupación_log -0.09
## Cuartos_Disponibles_diff 0.33
## Cuartos_Ocupados_diff 0.27
## Cuartos_Registrados_diff 0.27
## Derrama_Economica_Est_mdp_diff 0.18
## Turistas_Noche_Ext_diff 0.13
## Turistas_Noche_Nac_diff 0.23
## X.Ocupacion_Hoteles_diff 0.17
## Llegada_Tur_Ext_diff 0.13
## Llegada_Tur_Nac_diff 0.20
## Cuartos_Disponibles_Promedio_log_diff 1.00
## Estadia_Promedio_log_diff 0.07
## Estadia_Promedio_log_diff
## MES -0.29
## AÑO -0.02
## Densidad_Ocupación_log 0.04
## Cuartos_Disponibles_diff 0.03
## Cuartos_Ocupados_diff -0.06
## Cuartos_Registrados_diff 0.02
## Derrama_Economica_Est_mdp_diff 0.15
## Turistas_Noche_Ext_diff -0.07
## Turistas_Noche_Nac_diff 0.11
## X.Ocupacion_Hoteles_diff -0.07
## Llegada_Tur_Ext_diff -0.29
## Llegada_Tur_Nac_diff -0.21
## Cuartos_Disponibles_Promedio_log_diff 0.07
## Estadia_Promedio_log_diff 1.00
corrplot(correlaciones, method = "color", type = "upper", tl.cex = 0.7)
library(caret)
## Loading required package: lattice
# Detectar columnas con alta correlación
cor_matriz <- cor(df_final, use = "complete.obs")
columnas_a_remover <- findCorrelation(cor_matriz, cutoff = 0.9)
# Ver nombres de columnas altamente correlacionadas
names(df_final)[columnas_a_remover]
## [1] "Cuartos_Ocupados_diff" "Turistas_Noche_Nac_diff"
## [3] "Cuartos_Disponibles_diff"
sum(is.na(df_final$Derrama_Económica_Est_mdp_diff))
## [1] 0
which(is.na(df_final$Derrama_Económica_Est_mdp_diff))
## integer(0)
y <- ts(df_final$Derrama_Economica_Est_mdp_diff, start = c(2015, 1), frequency = 12)
#colnames(df_final)
variables_explicativas <- c(
"Turistas_Noche_Ext_diff", "X.Ocupacion_Hoteles_diff",
"Cuartos_Disponibles_Promedio_log_diff", "Estadia_Promedio_log_diff",
"Cuartos_Registrados_diff", "Llegada_Tur_Nac_diff", "Densidad_Ocupación_log"
)
#quitar por "Cuartos_Ocupados_diff" "Turistas_Noche_Nac_diff" "Cuartos_Disponibles_diff"
# Se elimina 'Llegada_Tur_Ext_diff' por baja significancia estadística en el modelo SARIMAX y alto VIF (> 6)
df_mod <- dplyr::select(df_final, any_of(variables_explicativas))
df_mod<- scale(df_mod)
df_mod<-as.data.frame(df_mod)
colnames(df_mod) <- variables_explicativas
df_xreg <- as.matrix(df_mod)
str(df_xreg) # debe ser matriz
## num [1:120, 1:7] -0.1382 -0.4421 0.3212 -0.0441 0.6258 ...
## - attr(*, "dimnames")=List of 2
## ..$ : chr [1:120] "132" "133" "134" "135" ...
## ..$ : chr [1:7] "Turistas_Noche_Ext_diff" "X.Ocupacion_Hoteles_diff" "Cuartos_Disponibles_Promedio_log_diff" "Estadia_Promedio_log_diff" ...
is.matrix(df_xreg) # debe ser TRUE
## [1] TRUE
nrow(df_xreg) == length(y)
## [1] TRUE
modelo_auto <- auto.arima(y,
xreg = df_xreg,
seasonal = TRUE,
stepwise = FALSE, # más preciso pero más lento
approximation = FALSE) # evita simplificaciones
summary(modelo_auto)
## Series: y
## Regression with ARIMA(1,0,0) errors
##
## Coefficients:
## ar1 Turistas_Noche_Ext_diff X.Ocupacion_Hoteles_diff
## -0.1414 22.6080 57.2796
## s.e. 0.0919 14.8124 25.2778
## Cuartos_Disponibles_Promedio_log_diff Estadia_Promedio_log_diff
## -3.6413 63.5477
## s.e. 12.6979 12.3166
## Cuartos_Registrados_diff Llegada_Tur_Nac_diff Densidad_Ocupación_log
## 21.6393 121.1275 22.4672
## s.e. 16.1136 24.5629 10.9122
##
## sigma^2 = 17283: log likelihood = -751.59
## AIC=1521.18 AICc=1522.82 BIC=1546.27
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 13.69782 127.0059 66.73884 -122.2026 165.0345 0.3852888
## ACF1
## Training set -0.01119577
checkresiduals(modelo_auto)
##
## Ljung-Box test
##
## data: Residuals from Regression with ARIMA(1,0,0) errors
## Q* = 10.121, df = 23, p-value = 0.9905
##
## Model df: 1. Total lags used: 24
df_xreg <- as.matrix(df_mod)
modelo_sarimax1 <- arima(y,
order = c(2, 1, 2),
seasonal = list(order = c(0, 1, 1), period = 12),
xreg = df_xreg)
summary(modelo_sarimax1)
##
## Call:
## arima(x = y, order = c(2, 1, 2), seasonal = list(order = c(0, 1, 1), period = 12),
## xreg = df_xreg)
##
## Coefficients:
## ar1 ar2 ma1 ma2 sma1 Turistas_Noche_Ext_diff
## -0.4693 0.0395 -0.6480 -0.3520 -0.7573 26.4362
## s.e. 0.6245 0.1460 0.6197 0.6185 0.0997 14.9165
## X.Ocupacion_Hoteles_diff Cuartos_Disponibles_Promedio_log_diff
## 35.1200 -6.2700
## s.e. 33.8893 24.0422
## Estadia_Promedio_log_diff Cuartos_Registrados_diff Llegada_Tur_Nac_diff
## 51.2862 26.6755 147.8364
## s.e. 14.4874 58.7853 32.9268
## Densidad_Ocupación_log
## 27.6836
## s.e. 13.5786
##
## sigma^2 estimated as 17936: log likelihood = -684.3, aic = 1394.6
##
## Training set error measures:
## ME RMSE MAE MPE MAPE MASE
## Training set 3.173671 126.4641 63.74363 -882.4353 947.4504 0.2558476
## ACF1
## Training set -0.01119028
checkresiduals(modelo_sarimax1)
##
## Ljung-Box test
##
## data: Residuals from ARIMA(2,1,2)(0,1,1)[12]
## Q* = 11.514, df = 19, p-value = 0.9053
##
## Model df: 5. Total lags used: 24
# Extraer los coeficientes del modelo
coeficientes <- coef(modelo_sarimax1)
# Ordenar los coeficientes de mayor a menor valor absoluto
coef_ordenados <- sort(coeficientes, decreasing = TRUE)
# Mostrar la lista ordenada
print(coef_ordenados)
## Llegada_Tur_Nac_diff Estadia_Promedio_log_diff
## 147.83636835 51.28616856
## X.Ocupacion_Hoteles_diff Densidad_Ocupación_log
## 35.11997364 27.68356139
## Cuartos_Registrados_diff Turistas_Noche_Ext_diff
## 26.67553838 26.43620005
## ar2 ma2
## 0.03947154 -0.35203585
## ar1 ma1
## -0.46926976 -0.64796092
## sma1 Cuartos_Disponibles_Promedio_log_diff
## -0.75730834 -6.27001640
colnames(modelo_sarimax1$xreg) # debe darte las 7 columnas
## NULL
# Ordenar por valor absoluto
coef_ordenados_abs <- coeficientes[order(abs(coeficientes), decreasing = TRUE)]
# Mostrar la lista ordenada por valor absoluto
print(coef_ordenados_abs)
## Llegada_Tur_Nac_diff Estadia_Promedio_log_diff
## 147.83636835 51.28616856
## X.Ocupacion_Hoteles_diff Densidad_Ocupación_log
## 35.11997364 27.68356139
## Cuartos_Registrados_diff Turistas_Noche_Ext_diff
## 26.67553838 26.43620005
## Cuartos_Disponibles_Promedio_log_diff sma1
## -6.27001640 -0.75730834
## ma1 ar1
## -0.64796092 -0.46926976
## ma2 ar2
## -0.35203585 0.03947154
var_data <- cbind(
y, # variable dependiente diferenciada ->Derrama_Economica_Est_mdp_diff
df_mod # regresores ya diferenciados
)
# Convertir a formato ts
var_data_ts <- ts(var_data, start = c(2015,1), frequency = 12)
lag_selection <-VARselect(var_data_ts, lag.max = 12, type = "const")
print(lag_selection$selection)
## AIC(n) HQ(n) SC(n) FPE(n)
## 12 12 1 12
optimal_lag <- lag_selection$selection["AIC(n)"]
colnames(var_data_ts)
## [1] "y"
## [2] "df_mod.Turistas_Noche_Ext_diff"
## [3] "df_mod.X.Ocupacion_Hoteles_diff"
## [4] "df_mod.Cuartos_Disponibles_Promedio_log_diff"
## [5] "df_mod.Estadia_Promedio_log_diff"
## [6] "df_mod.Cuartos_Registrados_diff"
## [7] "df_mod.Llegada_Tur_Nac_diff"
## [8] "df_mod.Densidad_Ocupación_log"
print(colnames(var_data_ts))
## [1] "y"
## [2] "df_mod.Turistas_Noche_Ext_diff"
## [3] "df_mod.X.Ocupacion_Hoteles_diff"
## [4] "df_mod.Cuartos_Disponibles_Promedio_log_diff"
## [5] "df_mod.Estadia_Promedio_log_diff"
## [6] "df_mod.Cuartos_Registrados_diff"
## [7] "df_mod.Llegada_Tur_Nac_diff"
## [8] "df_mod.Densidad_Ocupación_log"
modelo_var <- VAR(var_data_ts, p = 2 , type = "const")
summary(modelo_var)
##
## VAR Estimation Results:
## =========================
## Endogenous variables: y, df_mod.Turistas_Noche_Ext_diff, df_mod.X.Ocupacion_Hoteles_diff, df_mod.Cuartos_Disponibles_Promedio_log_diff, df_mod.Estadia_Promedio_log_diff, df_mod.Cuartos_Registrados_diff, df_mod.Llegada_Tur_Nac_diff, df_mod.Densidad_Ocupación_log
## Deterministic variables: const
## Sample size: 118
## Log Likelihood: -1452.622
## Roots of the characteristic polynomial:
## 0.9181 0.7448 0.7448 0.6608 0.6608 0.6601 0.6601 0.5684 0.5684 0.5372 0.449 0.449 0.4268 0.3926 0.3926 0.1518
## Call:
## VAR(y = var_data_ts, p = 2, type = "const")
##
##
## Estimation results for equation y:
## ==================================
## y = y.l1 + df_mod.Turistas_Noche_Ext_diff.l1 + df_mod.X.Ocupacion_Hoteles_diff.l1 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 + df_mod.Estadia_Promedio_log_diff.l1 + df_mod.Cuartos_Registrados_diff.l1 + df_mod.Llegada_Tur_Nac_diff.l1 + df_mod.Densidad_Ocupación_log.l1 + y.l2 + df_mod.Turistas_Noche_Ext_diff.l2 + df_mod.X.Ocupacion_Hoteles_diff.l2 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 + df_mod.Estadia_Promedio_log_diff.l2 + df_mod.Cuartos_Registrados_diff.l2 + df_mod.Llegada_Tur_Nac_diff.l2 + df_mod.Densidad_Ocupación_log.l2 + const
##
## Estimate Std. Error t value
## y.l1 -0.05002 0.14882 -0.336
## df_mod.Turistas_Noche_Ext_diff.l1 9.81700 30.27907 0.324
## df_mod.X.Ocupacion_Hoteles_diff.l1 33.54755 61.84128 0.542
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 20.36902 24.32815 0.837
## df_mod.Estadia_Promedio_log_diff.l1 -17.24789 29.20953 -0.590
## df_mod.Cuartos_Registrados_diff.l1 -75.57681 39.35969 -1.920
## df_mod.Llegada_Tur_Nac_diff.l1 -58.25172 62.50863 -0.932
## df_mod.Densidad_Ocupación_log.l1 17.53137 55.85365 0.314
## y.l2 -0.16953 0.14623 -1.159
## df_mod.Turistas_Noche_Ext_diff.l2 -55.42984 25.77825 -2.150
## df_mod.X.Ocupacion_Hoteles_diff.l2 87.99856 46.16892 1.906
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 -2.52216 22.19049 -0.114
## df_mod.Estadia_Promedio_log_diff.l2 -58.58740 22.09072 -2.652
## df_mod.Cuartos_Registrados_diff.l2 -21.63811 40.93749 -0.529
## df_mod.Llegada_Tur_Nac_diff.l2 -90.52716 50.31616 -1.799
## df_mod.Densidad_Ocupación_log.l2 20.66233 53.92195 0.383
## const 14.28693 18.43296 0.775
## Pr(>|t|)
## y.l1 0.73746
## df_mod.Turistas_Noche_Ext_diff.l1 0.74644
## df_mod.X.Ocupacion_Hoteles_diff.l1 0.58868
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 0.40442
## df_mod.Estadia_Promedio_log_diff.l1 0.55618
## df_mod.Cuartos_Registrados_diff.l1 0.05766 .
## df_mod.Llegada_Tur_Nac_diff.l1 0.35361
## df_mod.Densidad_Ocupación_log.l1 0.75426
## y.l2 0.24906
## df_mod.Turistas_Noche_Ext_diff.l2 0.03392 *
## df_mod.X.Ocupacion_Hoteles_diff.l2 0.05949 .
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 0.90973
## df_mod.Estadia_Promedio_log_diff.l2 0.00929 **
## df_mod.Cuartos_Registrados_diff.l2 0.59827
## df_mod.Llegada_Tur_Nac_diff.l2 0.07498 .
## df_mod.Densidad_Ocupación_log.l2 0.70238
## const 0.44011
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 197.7 on 101 degrees of freedom
## Multiple R-Squared: 0.3593, Adjusted R-squared: 0.2578
## F-statistic: 3.54 on 16 and 101 DF, p-value: 4.879e-05
##
##
## Estimation results for equation df_mod.Turistas_Noche_Ext_diff:
## ===============================================================
## df_mod.Turistas_Noche_Ext_diff = y.l1 + df_mod.Turistas_Noche_Ext_diff.l1 + df_mod.X.Ocupacion_Hoteles_diff.l1 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 + df_mod.Estadia_Promedio_log_diff.l1 + df_mod.Cuartos_Registrados_diff.l1 + df_mod.Llegada_Tur_Nac_diff.l1 + df_mod.Densidad_Ocupación_log.l1 + y.l2 + df_mod.Turistas_Noche_Ext_diff.l2 + df_mod.X.Ocupacion_Hoteles_diff.l2 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 + df_mod.Estadia_Promedio_log_diff.l2 + df_mod.Cuartos_Registrados_diff.l2 + df_mod.Llegada_Tur_Nac_diff.l2 + df_mod.Densidad_Ocupación_log.l2 + const
##
## Estimate Std. Error t value
## y.l1 0.0001017 0.0006742 0.151
## df_mod.Turistas_Noche_Ext_diff.l1 -0.4295308 0.1371792 -3.131
## df_mod.X.Ocupacion_Hoteles_diff.l1 0.6524279 0.2801716 2.329
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 0.1472701 0.1102185 1.336
## df_mod.Estadia_Promedio_log_diff.l1 -0.1451311 0.1323336 -1.097
## df_mod.Cuartos_Registrados_diff.l1 0.1411626 0.1783189 0.792
## df_mod.Llegada_Tur_Nac_diff.l1 -0.4352172 0.2831950 -1.537
## df_mod.Densidad_Ocupación_log.l1 0.2047211 0.2530447 0.809
## y.l2 -0.0002312 0.0006625 -0.349
## df_mod.Turistas_Noche_Ext_diff.l2 -0.1644198 0.1167882 -1.408
## df_mod.X.Ocupacion_Hoteles_diff.l2 0.2910355 0.2091680 1.391
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 -0.2669448 0.1005339 -2.655
## df_mod.Estadia_Promedio_log_diff.l2 -0.0736970 0.1000819 -0.736
## df_mod.Cuartos_Registrados_diff.l2 0.2134988 0.1854671 1.151
## df_mod.Llegada_Tur_Nac_diff.l2 -0.3104334 0.2279571 -1.362
## df_mod.Densidad_Ocupación_log.l2 -0.1431480 0.2442931 -0.586
## const 0.0044344 0.0835104 0.053
## Pr(>|t|)
## y.l1 0.88036
## df_mod.Turistas_Noche_Ext_diff.l1 0.00228 **
## df_mod.X.Ocupacion_Hoteles_diff.l1 0.02187 *
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 0.18450
## df_mod.Estadia_Promedio_log_diff.l1 0.27538
## df_mod.Cuartos_Registrados_diff.l1 0.43043
## df_mod.Llegada_Tur_Nac_diff.l1 0.12747
## df_mod.Densidad_Ocupación_log.l1 0.42040
## y.l2 0.72788
## df_mod.Turistas_Noche_Ext_diff.l2 0.16225
## df_mod.X.Ocupacion_Hoteles_diff.l2 0.16716
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 0.00921 **
## df_mod.Estadia_Promedio_log_diff.l2 0.46321
## df_mod.Cuartos_Registrados_diff.l2 0.25239
## df_mod.Llegada_Tur_Nac_diff.l2 0.17629
## df_mod.Densidad_Ocupación_log.l2 0.55920
## const 0.95776
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.8959 on 101 degrees of freedom
## Multiple R-Squared: 0.3176, Adjusted R-squared: 0.2095
## F-statistic: 2.938 on 16 and 101 DF, p-value: 0.0005279
##
##
## Estimation results for equation df_mod.X.Ocupacion_Hoteles_diff:
## ================================================================
## df_mod.X.Ocupacion_Hoteles_diff = y.l1 + df_mod.Turistas_Noche_Ext_diff.l1 + df_mod.X.Ocupacion_Hoteles_diff.l1 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 + df_mod.Estadia_Promedio_log_diff.l1 + df_mod.Cuartos_Registrados_diff.l1 + df_mod.Llegada_Tur_Nac_diff.l1 + df_mod.Densidad_Ocupación_log.l1 + y.l2 + df_mod.Turistas_Noche_Ext_diff.l2 + df_mod.X.Ocupacion_Hoteles_diff.l2 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 + df_mod.Estadia_Promedio_log_diff.l2 + df_mod.Cuartos_Registrados_diff.l2 + df_mod.Llegada_Tur_Nac_diff.l2 + df_mod.Densidad_Ocupación_log.l2 + const
##
## Estimate Std. Error t value
## y.l1 0.0003040 0.0006585 0.462
## df_mod.Turistas_Noche_Ext_diff.l1 -0.0567689 0.1339721 -0.424
## df_mod.X.Ocupacion_Hoteles_diff.l1 0.2454273 0.2736215 0.897
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 -0.0523090 0.1076418 -0.486
## df_mod.Estadia_Promedio_log_diff.l1 -0.1266084 0.1292398 -0.980
## df_mod.Cuartos_Registrados_diff.l1 0.0325329 0.1741500 0.187
## df_mod.Llegada_Tur_Nac_diff.l1 -0.3582105 0.2765743 -1.295
## df_mod.Densidad_Ocupación_log.l1 0.1208923 0.2471288 0.489
## y.l2 -0.0006325 0.0006470 -0.978
## df_mod.Turistas_Noche_Ext_diff.l2 -0.1282040 0.1140579 -1.124
## df_mod.X.Ocupacion_Hoteles_diff.l2 -0.1960909 0.2042779 -0.960
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 -0.1786048 0.0981835 -1.819
## df_mod.Estadia_Promedio_log_diff.l2 -0.1850295 0.0977421 -1.893
## df_mod.Cuartos_Registrados_diff.l2 0.1411601 0.1811311 0.779
## df_mod.Llegada_Tur_Nac_diff.l2 0.0291417 0.2226277 0.131
## df_mod.Densidad_Ocupación_log.l2 0.0267599 0.2385818 0.112
## const -0.0045253 0.0815580 -0.055
## Pr(>|t|)
## y.l1 0.6453
## df_mod.Turistas_Noche_Ext_diff.l1 0.6727
## df_mod.X.Ocupacion_Hoteles_diff.l1 0.3719
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 0.6281
## df_mod.Estadia_Promedio_log_diff.l1 0.3296
## df_mod.Cuartos_Registrados_diff.l1 0.8522
## df_mod.Llegada_Tur_Nac_diff.l1 0.1982
## df_mod.Densidad_Ocupación_log.l1 0.6258
## y.l2 0.3306
## df_mod.Turistas_Noche_Ext_diff.l2 0.2637
## df_mod.X.Ocupacion_Hoteles_diff.l2 0.3394
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 0.0719 .
## df_mod.Estadia_Promedio_log_diff.l2 0.0612 .
## df_mod.Cuartos_Registrados_diff.l2 0.4376
## df_mod.Llegada_Tur_Nac_diff.l2 0.8961
## df_mod.Densidad_Ocupación_log.l2 0.9109
## const 0.9559
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.8749 on 101 degrees of freedom
## Multiple R-Squared: 0.3219, Adjusted R-squared: 0.2145
## F-statistic: 2.996 on 16 and 101 DF, p-value: 0.0004188
##
##
## Estimation results for equation df_mod.Cuartos_Disponibles_Promedio_log_diff:
## =============================================================================
## df_mod.Cuartos_Disponibles_Promedio_log_diff = y.l1 + df_mod.Turistas_Noche_Ext_diff.l1 + df_mod.X.Ocupacion_Hoteles_diff.l1 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 + df_mod.Estadia_Promedio_log_diff.l1 + df_mod.Cuartos_Registrados_diff.l1 + df_mod.Llegada_Tur_Nac_diff.l1 + df_mod.Densidad_Ocupación_log.l1 + y.l2 + df_mod.Turistas_Noche_Ext_diff.l2 + df_mod.X.Ocupacion_Hoteles_diff.l2 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 + df_mod.Estadia_Promedio_log_diff.l2 + df_mod.Cuartos_Registrados_diff.l2 + df_mod.Llegada_Tur_Nac_diff.l2 + df_mod.Densidad_Ocupación_log.l2 + const
##
## Estimate Std. Error t value
## y.l1 -0.0001720 0.0007607 -0.226
## df_mod.Turistas_Noche_Ext_diff.l1 0.0883128 0.1547821 0.571
## df_mod.X.Ocupacion_Hoteles_diff.l1 0.0984947 0.3161234 0.312
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 0.0089289 0.1243618 0.072
## df_mod.Estadia_Promedio_log_diff.l1 0.0673797 0.1493147 0.451
## df_mod.Cuartos_Registrados_diff.l1 -0.1569981 0.2012008 -0.780
## df_mod.Llegada_Tur_Nac_diff.l1 -0.1080665 0.3195347 -0.338
## df_mod.Densidad_Ocupación_log.l1 -0.3284221 0.2855155 -1.150
## y.l2 -0.0005744 0.0007475 -0.768
## df_mod.Turistas_Noche_Ext_diff.l2 0.1783384 0.1317746 1.353
## df_mod.X.Ocupacion_Hoteles_diff.l2 -0.1508551 0.2360086 -0.639
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 -0.0402611 0.1134344 -0.355
## df_mod.Estadia_Promedio_log_diff.l2 0.0433497 0.1129245 0.384
## df_mod.Cuartos_Registrados_diff.l2 -0.4040944 0.2092663 -1.931
## df_mod.Llegada_Tur_Nac_diff.l2 0.3760009 0.2572087 1.462
## df_mod.Densidad_Ocupación_log.l2 0.2886107 0.2756409 1.047
## const 0.0135229 0.0942265 0.144
## Pr(>|t|)
## y.l1 0.8215
## df_mod.Turistas_Noche_Ext_diff.l1 0.5696
## df_mod.X.Ocupacion_Hoteles_diff.l1 0.7560
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 0.9429
## df_mod.Estadia_Promedio_log_diff.l1 0.6528
## df_mod.Cuartos_Registrados_diff.l1 0.4370
## df_mod.Llegada_Tur_Nac_diff.l1 0.7359
## df_mod.Densidad_Ocupación_log.l1 0.2527
## y.l2 0.4440
## df_mod.Turistas_Noche_Ext_diff.l2 0.1790
## df_mod.X.Ocupacion_Hoteles_diff.l2 0.5241
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 0.7234
## df_mod.Estadia_Promedio_log_diff.l2 0.7019
## df_mod.Cuartos_Registrados_diff.l2 0.0563 .
## df_mod.Llegada_Tur_Nac_diff.l2 0.1469
## df_mod.Densidad_Ocupación_log.l2 0.2976
## const 0.8862
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 1.011 on 101 degrees of freedom
## Multiple R-Squared: 0.1325, Adjusted R-squared: -0.00493
## F-statistic: 0.9641 on 16 and 101 DF, p-value: 0.501
##
##
## Estimation results for equation df_mod.Estadia_Promedio_log_diff:
## =================================================================
## df_mod.Estadia_Promedio_log_diff = y.l1 + df_mod.Turistas_Noche_Ext_diff.l1 + df_mod.X.Ocupacion_Hoteles_diff.l1 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 + df_mod.Estadia_Promedio_log_diff.l1 + df_mod.Cuartos_Registrados_diff.l1 + df_mod.Llegada_Tur_Nac_diff.l1 + df_mod.Densidad_Ocupación_log.l1 + y.l2 + df_mod.Turistas_Noche_Ext_diff.l2 + df_mod.X.Ocupacion_Hoteles_diff.l2 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 + df_mod.Estadia_Promedio_log_diff.l2 + df_mod.Cuartos_Registrados_diff.l2 + df_mod.Llegada_Tur_Nac_diff.l2 + df_mod.Densidad_Ocupación_log.l2 + const
##
## Estimate Std. Error t value
## y.l1 3.005e-04 7.091e-04 0.424
## df_mod.Turistas_Noche_Ext_diff.l1 -8.462e-03 1.443e-01 -0.059
## df_mod.X.Ocupacion_Hoteles_diff.l1 2.869e-02 2.947e-01 0.097
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 -6.006e-03 1.159e-01 -0.052
## df_mod.Estadia_Promedio_log_diff.l1 -1.119e-01 1.392e-01 -0.804
## df_mod.Cuartos_Registrados_diff.l1 -1.312e-01 1.876e-01 -0.700
## df_mod.Llegada_Tur_Nac_diff.l1 -3.814e-01 2.979e-01 -1.280
## df_mod.Densidad_Ocupación_log.l1 -4.999e-03 2.661e-01 -0.019
## y.l2 3.829e-05 6.968e-04 0.055
## df_mod.Turistas_Noche_Ext_diff.l2 -1.425e-01 1.228e-01 -1.160
## df_mod.X.Ocupacion_Hoteles_diff.l2 5.248e-01 2.200e-01 2.385
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 2.231e-02 1.057e-01 0.211
## df_mod.Estadia_Promedio_log_diff.l2 -2.886e-01 1.053e-01 -2.742
## df_mod.Cuartos_Registrados_diff.l2 -2.669e-01 1.951e-01 -1.368
## df_mod.Llegada_Tur_Nac_diff.l2 -3.308e-01 2.398e-01 -1.380
## df_mod.Densidad_Ocupación_log.l2 -8.990e-02 2.569e-01 -0.350
## const -1.537e-02 8.783e-02 -0.175
## Pr(>|t|)
## y.l1 0.67267
## df_mod.Turistas_Noche_Ext_diff.l1 0.95335
## df_mod.X.Ocupacion_Hoteles_diff.l1 0.92263
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 0.95878
## df_mod.Estadia_Promedio_log_diff.l1 0.42348
## df_mod.Cuartos_Registrados_diff.l1 0.48581
## df_mod.Llegada_Tur_Nac_diff.l1 0.20333
## df_mod.Densidad_Ocupación_log.l1 0.98505
## y.l2 0.95629
## df_mod.Turistas_Noche_Ext_diff.l2 0.24890
## df_mod.X.Ocupacion_Hoteles_diff.l2 0.01893 *
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 0.83329
## df_mod.Estadia_Promedio_log_diff.l2 0.00723 **
## df_mod.Cuartos_Registrados_diff.l2 0.17435
## df_mod.Llegada_Tur_Nac_diff.l2 0.17077
## df_mod.Densidad_Ocupación_log.l2 0.72717
## const 0.86146
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.9422 on 101 degrees of freedom
## Multiple R-Squared: 0.2333, Adjusted R-squared: 0.1118
## F-statistic: 1.92 on 16 and 101 DF, p-value: 0.02664
##
##
## Estimation results for equation df_mod.Cuartos_Registrados_diff:
## ================================================================
## df_mod.Cuartos_Registrados_diff = y.l1 + df_mod.Turistas_Noche_Ext_diff.l1 + df_mod.X.Ocupacion_Hoteles_diff.l1 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 + df_mod.Estadia_Promedio_log_diff.l1 + df_mod.Cuartos_Registrados_diff.l1 + df_mod.Llegada_Tur_Nac_diff.l1 + df_mod.Densidad_Ocupación_log.l1 + y.l2 + df_mod.Turistas_Noche_Ext_diff.l2 + df_mod.X.Ocupacion_Hoteles_diff.l2 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 + df_mod.Estadia_Promedio_log_diff.l2 + df_mod.Cuartos_Registrados_diff.l2 + df_mod.Llegada_Tur_Nac_diff.l2 + df_mod.Densidad_Ocupación_log.l2 + const
##
## Estimate Std. Error t value
## y.l1 -0.0003475 0.0004370 -0.795
## df_mod.Turistas_Noche_Ext_diff.l1 0.0803960 0.0889241 0.904
## df_mod.X.Ocupacion_Hoteles_diff.l1 -0.1182697 0.1816165 -0.651
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 0.3737593 0.0714473 5.231
## df_mod.Estadia_Promedio_log_diff.l1 -0.0709077 0.0857830 -0.827
## df_mod.Cuartos_Registrados_diff.l1 -1.1227338 0.1155922 -9.713
## df_mod.Llegada_Tur_Nac_diff.l1 0.2280838 0.1835764 1.242
## df_mod.Densidad_Ocupación_log.l1 0.1139350 0.1640319 0.695
## y.l2 0.0002265 0.0004295 0.527
## df_mod.Turistas_Noche_Ext_diff.l2 0.0096331 0.0757060 0.127
## df_mod.X.Ocupacion_Hoteles_diff.l2 0.2537447 0.1355896 1.871
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 0.0714770 0.0651694 1.097
## df_mod.Estadia_Promedio_log_diff.l2 0.0686445 0.0648764 1.058
## df_mod.Cuartos_Registrados_diff.l2 -0.4908386 0.1202259 -4.083
## df_mod.Llegada_Tur_Nac_diff.l2 0.0194906 0.1477693 0.132
## df_mod.Densidad_Ocupación_log.l2 -0.1481316 0.1583589 -0.935
## const 0.0045826 0.0541342 0.085
## Pr(>|t|)
## y.l1 0.4284
## df_mod.Turistas_Noche_Ext_diff.l1 0.3681
## df_mod.X.Ocupacion_Hoteles_diff.l1 0.5164
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 9.15e-07 ***
## df_mod.Estadia_Promedio_log_diff.l1 0.4104
## df_mod.Cuartos_Registrados_diff.l1 3.85e-16 ***
## df_mod.Llegada_Tur_Nac_diff.l1 0.2169
## df_mod.Densidad_Ocupación_log.l1 0.4889
## y.l2 0.5991
## df_mod.Turistas_Noche_Ext_diff.l2 0.8990
## df_mod.X.Ocupacion_Hoteles_diff.l2 0.0642 .
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 0.2753
## df_mod.Estadia_Promedio_log_diff.l2 0.2925
## df_mod.Cuartos_Registrados_diff.l2 8.92e-05 ***
## df_mod.Llegada_Tur_Nac_diff.l2 0.8953
## df_mod.Densidad_Ocupación_log.l2 0.3518
## const 0.9327
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.5807 on 101 degrees of freedom
## Multiple R-Squared: 0.7065, Adjusted R-squared: 0.66
## F-statistic: 15.19 on 16 and 101 DF, p-value: < 2.2e-16
##
##
## Estimation results for equation df_mod.Llegada_Tur_Nac_diff:
## ============================================================
## df_mod.Llegada_Tur_Nac_diff = y.l1 + df_mod.Turistas_Noche_Ext_diff.l1 + df_mod.X.Ocupacion_Hoteles_diff.l1 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 + df_mod.Estadia_Promedio_log_diff.l1 + df_mod.Cuartos_Registrados_diff.l1 + df_mod.Llegada_Tur_Nac_diff.l1 + df_mod.Densidad_Ocupación_log.l1 + y.l2 + df_mod.Turistas_Noche_Ext_diff.l2 + df_mod.X.Ocupacion_Hoteles_diff.l2 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 + df_mod.Estadia_Promedio_log_diff.l2 + df_mod.Cuartos_Registrados_diff.l2 + df_mod.Llegada_Tur_Nac_diff.l2 + df_mod.Densidad_Ocupación_log.l2 + const
##
## Estimate Std. Error t value
## y.l1 0.0002855 0.0006499 0.439
## df_mod.Turistas_Noche_Ext_diff.l1 -0.0203390 0.1322338 -0.154
## df_mod.X.Ocupacion_Hoteles_diff.l1 0.3165780 0.2700713 1.172
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 0.0467999 0.1062451 0.440
## df_mod.Estadia_Promedio_log_diff.l1 0.0190259 0.1275629 0.149
## df_mod.Cuartos_Registrados_diff.l1 -0.3115633 0.1718904 -1.813
## df_mod.Llegada_Tur_Nac_diff.l1 -0.2694825 0.2729857 -0.987
## df_mod.Densidad_Ocupación_log.l1 -0.1033694 0.2439223 -0.424
## y.l2 -0.0011926 0.0006386 -1.867
## df_mod.Turistas_Noche_Ext_diff.l2 -0.1833526 0.1125780 -1.629
## df_mod.X.Ocupacion_Hoteles_diff.l2 0.1702573 0.2016275 0.844
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 0.0071810 0.0969096 0.074
## df_mod.Estadia_Promedio_log_diff.l2 -0.1218834 0.0964739 -1.263
## df_mod.Cuartos_Registrados_diff.l2 0.0860113 0.1787809 0.481
## df_mod.Llegada_Tur_Nac_diff.l2 -0.0311730 0.2197392 -0.142
## df_mod.Densidad_Ocupación_log.l2 0.2107951 0.2354863 0.895
## const 0.0097419 0.0804998 0.121
## Pr(>|t|)
## y.l1 0.6614
## df_mod.Turistas_Noche_Ext_diff.l1 0.8781
## df_mod.X.Ocupacion_Hoteles_diff.l1 0.2439
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 0.6605
## df_mod.Estadia_Promedio_log_diff.l1 0.8817
## df_mod.Cuartos_Registrados_diff.l1 0.0729 .
## df_mod.Llegada_Tur_Nac_diff.l1 0.3259
## df_mod.Densidad_Ocupación_log.l1 0.6726
## y.l2 0.0647 .
## df_mod.Turistas_Noche_Ext_diff.l2 0.1065
## df_mod.X.Ocupacion_Hoteles_diff.l2 0.4004
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 0.9411
## df_mod.Estadia_Promedio_log_diff.l2 0.2094
## df_mod.Cuartos_Registrados_diff.l2 0.6315
## df_mod.Llegada_Tur_Nac_diff.l2 0.8875
## df_mod.Densidad_Ocupación_log.l2 0.3728
## const 0.9039
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.8636 on 101 degrees of freedom
## Multiple R-Squared: 0.3592, Adjusted R-squared: 0.2577
## F-statistic: 3.538 on 16 and 101 DF, p-value: 4.918e-05
##
##
## Estimation results for equation df_mod.Densidad_Ocupación_log:
## ==============================================================
## df_mod.Densidad_Ocupación_log = y.l1 + df_mod.Turistas_Noche_Ext_diff.l1 + df_mod.X.Ocupacion_Hoteles_diff.l1 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 + df_mod.Estadia_Promedio_log_diff.l1 + df_mod.Cuartos_Registrados_diff.l1 + df_mod.Llegada_Tur_Nac_diff.l1 + df_mod.Densidad_Ocupación_log.l1 + y.l2 + df_mod.Turistas_Noche_Ext_diff.l2 + df_mod.X.Ocupacion_Hoteles_diff.l2 + df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 + df_mod.Estadia_Promedio_log_diff.l2 + df_mod.Cuartos_Registrados_diff.l2 + df_mod.Llegada_Tur_Nac_diff.l2 + df_mod.Densidad_Ocupación_log.l2 + const
##
## Estimate Std. Error t value
## y.l1 0.0004198 0.0004089 1.027
## df_mod.Turistas_Noche_Ext_diff.l1 -0.0222007 0.0831987 -0.267
## df_mod.X.Ocupacion_Hoteles_diff.l1 0.0822871 0.1699232 0.484
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 0.0387753 0.0668472 0.580
## df_mod.Estadia_Promedio_log_diff.l1 0.1775459 0.0802599 2.212
## df_mod.Cuartos_Registrados_diff.l1 -0.1236136 0.1081498 -1.143
## df_mod.Llegada_Tur_Nac_diff.l1 -0.0777135 0.1717569 -0.452
## df_mod.Densidad_Ocupación_log.l1 0.6288656 0.1534708 4.098
## y.l2 -0.0006223 0.0004018 -1.549
## df_mod.Turistas_Noche_Ext_diff.l2 -0.1736957 0.0708317 -2.452
## df_mod.X.Ocupacion_Hoteles_diff.l2 0.5551492 0.1268597 4.376
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 0.1172959 0.0609735 1.924
## df_mod.Estadia_Promedio_log_diff.l2 -0.0667030 0.0606994 -1.099
## df_mod.Cuartos_Registrados_diff.l2 0.0139838 0.1124852 0.124
## df_mod.Llegada_Tur_Nac_diff.l2 -0.2831997 0.1382553 -2.048
## df_mod.Densidad_Ocupación_log.l2 0.2577714 0.1481630 1.740
## const 0.0059286 0.0506488 0.117
## Pr(>|t|)
## y.l1 0.3071
## df_mod.Turistas_Noche_Ext_diff.l1 0.7901
## df_mod.X.Ocupacion_Hoteles_diff.l1 0.6292
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l1 0.5632
## df_mod.Estadia_Promedio_log_diff.l1 0.0292 *
## df_mod.Cuartos_Registrados_diff.l1 0.2557
## df_mod.Llegada_Tur_Nac_diff.l1 0.6519
## df_mod.Densidad_Ocupación_log.l1 8.44e-05 ***
## y.l2 0.1246
## df_mod.Turistas_Noche_Ext_diff.l2 0.0159 *
## df_mod.X.Ocupacion_Hoteles_diff.l2 2.95e-05 ***
## df_mod.Cuartos_Disponibles_Promedio_log_diff.l2 0.0572 .
## df_mod.Estadia_Promedio_log_diff.l2 0.2744
## df_mod.Cuartos_Registrados_diff.l2 0.9013
## df_mod.Llegada_Tur_Nac_diff.l2 0.0431 *
## df_mod.Densidad_Ocupación_log.l2 0.0849 .
## const 0.9070
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
##
## Residual standard error: 0.5433 on 101 degrees of freedom
## Multiple R-Squared: 0.7418, Adjusted R-squared: 0.7008
## F-statistic: 18.13 on 16 and 101 DF, p-value: < 2.2e-16
##
##
##
## Covariance matrix of residuals:
## y
## y 39100.316
## df_mod.Turistas_Noche_Ext_diff 77.369
## df_mod.X.Ocupacion_Hoteles_diff 120.563
## df_mod.Cuartos_Disponibles_Promedio_log_diff 45.028
## df_mod.Estadia_Promedio_log_diff 7.501
## df_mod.Cuartos_Registrados_diff 7.277
## df_mod.Llegada_Tur_Nac_diff 115.881
## df_mod.Densidad_Ocupación_log 32.896
## df_mod.Turistas_Noche_Ext_diff
## y 77.36909
## df_mod.Turistas_Noche_Ext_diff 0.80255
## df_mod.X.Ocupacion_Hoteles_diff 0.41128
## df_mod.Cuartos_Disponibles_Promedio_log_diff 0.12551
## df_mod.Estadia_Promedio_log_diff -0.07432
## df_mod.Cuartos_Registrados_diff 0.02762
## df_mod.Llegada_Tur_Nac_diff 0.30264
## df_mod.Densidad_Ocupación_log 0.15585
## df_mod.X.Ocupacion_Hoteles_diff
## y 1.206e+02
## df_mod.Turistas_Noche_Ext_diff 4.113e-01
## df_mod.X.Ocupacion_Hoteles_diff 7.655e-01
## df_mod.Cuartos_Disponibles_Promedio_log_diff 1.775e-01
## df_mod.Estadia_Promedio_log_diff -1.143e-01
## df_mod.Cuartos_Registrados_diff -1.248e-02
## df_mod.Llegada_Tur_Nac_diff 6.288e-01
## df_mod.Densidad_Ocupación_log -8.434e-04
## df_mod.Cuartos_Disponibles_Promedio_log_diff
## y 45.0282578
## df_mod.Turistas_Noche_Ext_diff 0.1255103
## df_mod.X.Ocupacion_Hoteles_diff 0.1774561
## df_mod.Cuartos_Disponibles_Promedio_log_diff 1.0217309
## df_mod.Estadia_Promedio_log_diff -0.0006832
## df_mod.Cuartos_Registrados_diff 0.3614287
## df_mod.Llegada_Tur_Nac_diff 0.2217742
## df_mod.Densidad_Ocupación_log -0.0469314
## df_mod.Estadia_Promedio_log_diff
## y 7.5006422
## df_mod.Turistas_Noche_Ext_diff -0.0743232
## df_mod.X.Ocupacion_Hoteles_diff -0.1142525
## df_mod.Cuartos_Disponibles_Promedio_log_diff -0.0006832
## df_mod.Estadia_Promedio_log_diff 0.8878145
## df_mod.Cuartos_Registrados_diff 0.0233441
## df_mod.Llegada_Tur_Nac_diff -0.2856205
## df_mod.Densidad_Ocupación_log 0.1404504
## df_mod.Cuartos_Registrados_diff
## y 7.277284
## df_mod.Turistas_Noche_Ext_diff 0.027622
## df_mod.X.Ocupacion_Hoteles_diff -0.012476
## df_mod.Cuartos_Disponibles_Promedio_log_diff 0.361429
## df_mod.Estadia_Promedio_log_diff 0.023344
## df_mod.Cuartos_Registrados_diff 0.337236
## df_mod.Llegada_Tur_Nac_diff 0.053276
## df_mod.Densidad_Ocupación_log -0.009171
## df_mod.Llegada_Tur_Nac_diff
## y 115.88111
## df_mod.Turistas_Noche_Ext_diff 0.30264
## df_mod.X.Ocupacion_Hoteles_diff 0.62877
## df_mod.Cuartos_Disponibles_Promedio_log_diff 0.22177
## df_mod.Estadia_Promedio_log_diff -0.28562
## df_mod.Cuartos_Registrados_diff 0.05328
## df_mod.Llegada_Tur_Nac_diff 0.74573
## df_mod.Densidad_Ocupación_log 0.08728
## df_mod.Densidad_Ocupación_log
## y 32.8963885
## df_mod.Turistas_Noche_Ext_diff 0.1558528
## df_mod.X.Ocupacion_Hoteles_diff -0.0008434
## df_mod.Cuartos_Disponibles_Promedio_log_diff -0.0469314
## df_mod.Estadia_Promedio_log_diff 0.1404504
## df_mod.Cuartos_Registrados_diff -0.0091706
## df_mod.Llegada_Tur_Nac_diff 0.0872827
## df_mod.Densidad_Ocupación_log 0.2952083
##
## Correlation matrix of residuals:
## y
## y 1.00000
## df_mod.Turistas_Noche_Ext_diff 0.43676
## df_mod.X.Ocupacion_Hoteles_diff 0.69689
## df_mod.Cuartos_Disponibles_Promedio_log_diff 0.22528
## df_mod.Estadia_Promedio_log_diff 0.04026
## df_mod.Cuartos_Registrados_diff 0.06337
## df_mod.Llegada_Tur_Nac_diff 0.67863
## df_mod.Densidad_Ocupación_log 0.30619
## df_mod.Turistas_Noche_Ext_diff
## y 0.43676
## df_mod.Turistas_Noche_Ext_diff 1.00000
## df_mod.X.Ocupacion_Hoteles_diff 0.52474
## df_mod.Cuartos_Disponibles_Promedio_log_diff 0.13860
## df_mod.Estadia_Promedio_log_diff -0.08805
## df_mod.Cuartos_Registrados_diff 0.05310
## df_mod.Llegada_Tur_Nac_diff 0.39120
## df_mod.Densidad_Ocupación_log 0.32020
## df_mod.X.Ocupacion_Hoteles_diff
## y 0.696887
## df_mod.Turistas_Noche_Ext_diff 0.524736
## df_mod.X.Ocupacion_Hoteles_diff 1.000000
## df_mod.Cuartos_Disponibles_Promedio_log_diff 0.200660
## df_mod.Estadia_Promedio_log_diff -0.138593
## df_mod.Cuartos_Registrados_diff -0.024556
## df_mod.Llegada_Tur_Nac_diff 0.832217
## df_mod.Densidad_Ocupación_log -0.001774
## df_mod.Cuartos_Disponibles_Promedio_log_diff
## y 0.2252821
## df_mod.Turistas_Noche_Ext_diff 0.1386039
## df_mod.X.Ocupacion_Hoteles_diff 0.2006600
## df_mod.Cuartos_Disponibles_Promedio_log_diff 1.0000000
## df_mod.Estadia_Promedio_log_diff -0.0007173
## df_mod.Cuartos_Registrados_diff 0.6157259
## df_mod.Llegada_Tur_Nac_diff 0.2540695
## df_mod.Densidad_Ocupación_log -0.0854537
## df_mod.Estadia_Promedio_log_diff
## y 0.0402575
## df_mod.Turistas_Noche_Ext_diff -0.0880496
## df_mod.X.Ocupacion_Hoteles_diff -0.1385934
## df_mod.Cuartos_Disponibles_Promedio_log_diff -0.0007173
## df_mod.Estadia_Promedio_log_diff 1.0000000
## df_mod.Cuartos_Registrados_diff 0.0426628
## df_mod.Llegada_Tur_Nac_diff -0.3510251
## df_mod.Densidad_Ocupación_log 0.2743454
## df_mod.Cuartos_Registrados_diff
## y 0.06337
## df_mod.Turistas_Noche_Ext_diff 0.05310
## df_mod.X.Ocupacion_Hoteles_diff -0.02456
## df_mod.Cuartos_Disponibles_Promedio_log_diff 0.61573
## df_mod.Estadia_Promedio_log_diff 0.04266
## df_mod.Cuartos_Registrados_diff 1.00000
## df_mod.Llegada_Tur_Nac_diff 0.10624
## df_mod.Densidad_Ocupación_log -0.02906
## df_mod.Llegada_Tur_Nac_diff
## y 0.6786
## df_mod.Turistas_Noche_Ext_diff 0.3912
## df_mod.X.Ocupacion_Hoteles_diff 0.8322
## df_mod.Cuartos_Disponibles_Promedio_log_diff 0.2541
## df_mod.Estadia_Promedio_log_diff -0.3510
## df_mod.Cuartos_Registrados_diff 0.1062
## df_mod.Llegada_Tur_Nac_diff 1.0000
## df_mod.Densidad_Ocupación_log 0.1860
## df_mod.Densidad_Ocupación_log
## y 0.306192
## df_mod.Turistas_Noche_Ext_diff 0.320195
## df_mod.X.Ocupacion_Hoteles_diff -0.001774
## df_mod.Cuartos_Disponibles_Promedio_log_diff -0.085454
## df_mod.Estadia_Promedio_log_diff 0.274345
## df_mod.Cuartos_Registrados_diff -0.029065
## df_mod.Llegada_Tur_Nac_diff 0.186026
## df_mod.Densidad_Ocupación_log 1.000000
serial.test(modelo_var, lags.pt = 12, type = "PT.asymptotic")
##
## Portmanteau Test (asymptotic)
##
## data: Residuals of VAR object modelo_var
## Chi-squared = 766.94, df = 640, p-value = 0.0003958
AIC(modelo_sarimax1)
## [1] 1394.597
BIC(modelo_sarimax1)
## [1] 1429.344
logLik(modelo_sarimax1)
## 'log Lik.' -684.2986 (df=13)
AIC(modelo_var)
## [1] 3177.244
BIC(modelo_var)
## [1] 3554.057
logLik(modelo_var)
## 'log Lik.' -1452.622 (df=136)
AIC(modelo_auto)
## [1] 1521.182
BIC(modelo_auto)
## [1] 1546.269
logLik(modelo_auto)
## 'log Lik.' -751.5908 (df=9)
library(car)
## Loading required package: carData
##
## Attaching package: 'car'
## The following object is masked from 'package:psych':
##
## logit
## The following object is masked from 'package:dplyr':
##
## recode
# Calcular VIF correctamente
modelo_vif <- lm(rep(1, nrow(df_mod)) ~ ., data = df_mod)
vif(modelo_vif)
## Turistas_Noche_Ext_diff X.Ocupacion_Hoteles_diff
## 1.460450 4.536625
## Cuartos_Disponibles_Promedio_log_diff Estadia_Promedio_log_diff
## 1.149146 1.138083
## Cuartos_Registrados_diff Llegada_Tur_Nac_diff
## 1.572715 4.282152
## Densidad_Ocupación_log
## 1.097790
# Paso 1: asegurar que df_xreg sea una matriz numérica con nombres
df_xreg <- as.matrix(df_xreg)
stopifnot(is.matrix(df_xreg), is.numeric(df_xreg))
# Paso 2: crear base futura (última fila repetida)
n_periodos <- 36
future_xreg <- matrix(rep(df_xreg[nrow(df_xreg), ], n_periodos),
nrow = n_periodos, byrow = TRUE)
# Paso 3: aplicar crecimiento acumulado del 2%
growth <- (1.02)^(1:n_periodos)
future_xreg <- sweep(future_xreg, 1, growth, `*`)
# Paso 4: restaurar los nombres de columnas
colnames(future_xreg) <- colnames(df_xreg)
# Paso 5: verificar todo antes del forecast
stopifnot(
is.matrix(future_xreg),
is.numeric(future_xreg),
identical(colnames(df_xreg), colnames(future_xreg)),
ncol(df_xreg) == ncol(future_xreg)
)
str(modelo_sarimax1$xreg)
## NULL
str(future_xreg)
## num [1:36, 1:7] -1.33 -1.36 -1.38 -1.41 -1.44 ...
## - attr(*, "dimnames")=List of 2
## ..$ : NULL
## ..$ : chr [1:7] "Turistas_Noche_Ext_diff" "X.Ocupacion_Hoteles_diff" "Cuartos_Disponibles_Promedio_log_diff" "Estadia_Promedio_log_diff" ...
identical(colnames(modelo_sarimax1$xreg), colnames(future_xreg))
## [1] FALSE
ncol(modelo_sarimax1$xreg) == ncol(future_xreg)
## logical(0)
colnames(df_xreg)
## [1] "Turistas_Noche_Ext_diff"
## [2] "X.Ocupacion_Hoteles_diff"
## [3] "Cuartos_Disponibles_Promedio_log_diff"
## [4] "Estadia_Promedio_log_diff"
## [5] "Cuartos_Registrados_diff"
## [6] "Llegada_Tur_Nac_diff"
## [7] "Densidad_Ocupación_log"
colnames(future_xreg)
## [1] "Turistas_Noche_Ext_diff"
## [2] "X.Ocupacion_Hoteles_diff"
## [3] "Cuartos_Disponibles_Promedio_log_diff"
## [4] "Estadia_Promedio_log_diff"
## [5] "Cuartos_Registrados_diff"
## [6] "Llegada_Tur_Nac_diff"
## [7] "Densidad_Ocupación_log"
colnames(modelo_sarimax1$xreg)
## NULL
de años 2024, 2025, y 2026?
resultado_pred <- predict(modelo_sarimax1, n.ahead = n_periodos, newxreg = future_xreg, se.fit = TRUE)
# Extraer predicciones y error estándar
pred <- resultado_pred$pred
se <- resultado_pred$se
# Generar periodos futuros (asume frecuencia mensual)
Periodo <- as.numeric(tail(time(y), 1)) + seq(1/12, n_periodos/12, by = 1/12)
# Niveles de confianza que deseas visualizar
niveles_confianza <- c(0.90, 0.96, 0.99)
# Crear un dataframe base con la predicción
forecast_df <- data.frame(Periodo = Periodo, Predicción = pred)
# Agregar intervalos de confianza
for (ci in niveles_confianza) {
z <- qnorm(1 - (1 - ci)/2)
forecast_df[[paste0("Inferior_", ci*100, "%")]] <- pred - z * se
forecast_df[[paste0("Superior_", ci*100, "%")]] <- pred + z * se
}
library(reshape2)
##
## Attaching package: 'reshape2'
## The following object is masked from 'package:tidyr':
##
## smiths
# Para graficar los intervalos (usamos solo uno, por ejemplo 95%)
ci_sel <- "96"
ggplot(forecast_df, aes(x = Periodo, y = Predicción)) +
geom_line(color = "blue") +
geom_ribbon(aes(ymin = forecast_df[[paste0("Inferior_", ci_sel, "%")]],
ymax = forecast_df[[paste0("Superior_", ci_sel, "%")]]),
fill = "lightblue", alpha = 0.3) +
ggtitle(paste0("Pronóstico con Intervalo de Confianza del ", ci_sel, "%")) +
xlab("Año") + ylab("Derrama Económica")
## Don't know how to automatically pick scale for object of type <ts>. Defaulting
## to continuous.
## Warning: Use of `forecast_df[[paste0("Inferior_", ci_sel, "%")]]` is discouraged.
## ℹ Use `.data[[paste0("Inferior_", ci_sel, "%")]]` instead.
## Warning: Use of `forecast_df[[paste0("Superior_", ci_sel, "%")]]` is discouraged.
## ℹ Use `.data[[paste0("Superior_", ci_sel, "%")]]` instead.
# Crear dataframe con fechas
Periodo <- as.numeric(tail(time(y), 1)) + seq(1/12, n_periodos/12, by = 1/12)
forecast_df <- data.frame(
Periodo = Periodo,
Pesimista = pred - 1.96 * se,
Real = pred,
Optimo = pred + 1.96 * se
)
forecast_df$Dif_Real_Optimo <- forecast_df$Optimo - forecast_df$Real
forecast_df$Dif_Real_Pesimista <- forecast_df$Real - forecast_df$Pesimista
library(ggplot2)
ggplot(forecast_df, aes(x = Periodo)) +
geom_ribbon(aes(ymin = Pesimista, ymax = Optimo), fill = "gray90", alpha = 0.3) +
geom_line(aes(y = Optimo, color = "Óptimo"), linetype = "dashed", size = 1) +
geom_line(aes(y = Real, color = "Real"), size = 1.2) +
geom_line(aes(y = Pesimista, color = "Pesimista"), linetype = "dashed", size = 1) +
geom_text(aes(y = Optimo + 1000, label = round(Dif_Real_Optimo, 0)), color = "darkgreen", size = 3, vjust = 0) +
geom_text(aes(y = Pesimista - 1000, label = round(Dif_Real_Pesimista, 0)), color = "darkred", size = 3, vjust = 1) +
labs(title = "Escenarios de Derrama Económica Estimada",
y = "Derrama Económica (mdp)",
x = "Periodo",
color = "Escenario") +
scale_color_manual(values = c("Óptimo" = "green", "Real" = "blue", "Pesimista" = "red")) +
theme_minimal()
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Don't know how to automatically pick scale for object of type <ts>. Defaulting
## to continuous.
## Don't know how to automatically pick scale for object of type <ts>. Defaulting
## to continuous.
## Don't know how to automatically pick scale for object of type <ts>. Defaulting
## to continuous.
## Don't know how to automatically pick scale for object of type <ts>. Defaulting
## to continuous.
## Don't know how to automatically pick scale for object of type <ts>. Defaulting
## to continuous.
# Crear las bandas de confianza
inferior <- pred - 1.96 * se
superior <- pred + 1.96 * se
# Periodos pronosticados
Periodo <- seq(as.Date("2025-01-01"), by = "month", length.out = length(pred))
# Crear tabla con escenarios
tabla_escenarios <- data.frame(
Periodo = Periodo,
Pesimista = round(inferior, 2),
Real = round(pred, 2),
Optimista = round(superior, 2),
Dif_Optimo_Real = round(superior - pred, 2),
Dif_Real_Pesimista = round(pred - inferior, 2),
Rango_Total = round(superior - inferior, 2)
)
# Mostrar tabla
print(tabla_escenarios)
## Periodo Pesimista Real Optimista Dif_Optimo_Real Dif_Real_Pesimista
## 1 2025-01-01 -339.49 -74.35 190.78 265.13 265.13
## 2 2025-02-01 -530.31 -263.90 2.51 266.41 266.41
## 3 2025-03-01 -504.47 -236.51 31.45 267.96 267.96
## 4 2025-04-01 -601.37 -333.31 -65.26 268.06 268.06
## 5 2025-05-01 -637.80 -369.53 -101.27 268.26 268.26
## 6 2025-06-01 -571.79 -303.56 -35.33 268.23 268.23
## 7 2025-07-01 -545.17 -276.90 -8.63 268.27 268.27
## 8 2025-08-01 -639.48 -371.22 -102.97 268.25 268.25
## 9 2025-09-01 -712.15 -443.88 -175.62 268.27 268.27
## 10 2025-10-01 -586.46 -318.20 -49.95 268.26 268.26
## 11 2025-11-01 -556.61 -288.34 -20.07 268.27 268.27
## 12 2025-12-01 -731.29 -463.04 -194.79 268.25 268.25
## 13 2026-01-01 -441.93 -164.85 112.22 277.08 277.08
## 14 2026-02-01 -610.94 -333.91 -56.89 277.03 277.03
## 15 2026-03-01 -599.72 -322.51 -45.29 277.22 277.22
## 16 2026-04-01 -690.44 -413.27 -136.10 277.17 277.17
## 17 2026-05-01 -732.48 -455.27 -178.06 277.21 277.21
## 18 2026-06-01 -665.90 -388.71 -111.52 277.19 277.19
## 19 2026-07-01 -642.16 -364.96 -87.75 277.21 277.21
## 20 2026-08-01 -737.55 -460.35 -183.15 277.20 277.20
## 21 2026-09-01 -812.33 -535.13 -257.93 277.20 277.20
## 22 2026-10-01 -688.25 -411.05 -133.86 277.20 277.20
## 23 2026-11-01 -660.34 -383.13 -105.92 277.21 277.21
## 24 2026-12-01 -836.83 -559.64 -282.45 277.19 277.19
## 25 2027-01-01 -549.43 -263.39 22.65 286.04 286.04
## 26 2027-02-01 -720.34 -434.38 -148.42 285.96 285.96
## 27 2027-03-01 -711.13 -424.96 -138.80 286.17 286.17
## 28 2027-04-01 -803.86 -517.75 -231.64 286.11 286.11
## 29 2027-05-01 -847.97 -561.81 -275.65 286.16 286.16
## 30 2027-06-01 -783.49 -497.36 -211.22 286.14 286.14
## 31 2027-07-01 -761.90 -475.75 -189.60 286.15 286.15
## 32 2027-08-01 -859.47 -573.33 -287.19 286.14 286.14
## 33 2027-09-01 -936.50 -650.35 -364.20 286.15 286.15
## 34 2027-10-01 -814.69 -528.55 -242.41 286.14 286.14
## 35 2027-11-01 -789.11 -502.95 -216.80 286.15 286.15
## 36 2027-12-01 -967.97 -681.83 -395.70 286.13 286.13
## Rango_Total
## 1 530.27
## 2 532.81
## 3 535.93
## 4 536.11
## 5 536.53
## 6 536.46
## 7 536.54
## 8 536.51
## 9 536.53
## 10 536.51
## 11 536.54
## 12 536.51
## 13 554.16
## 14 554.06
## 15 554.43
## 16 554.34
## 17 554.42
## 18 554.39
## 19 554.41
## 20 554.40
## 21 554.41
## 22 554.39
## 23 554.42
## 24 554.38
## 25 572.08
## 26 571.92
## 27 572.34
## 28 572.22
## 29 572.31
## 30 572.27
## 31 572.30
## 32 572.28
## 33 572.30
## 34 572.28
## 35 572.31
## 36 572.27
un aumento o disminución sobre la(s) principal(es) variable(s) de interés? Visualizar el tipo de relación de dichas variable control sobre la(s) principal(es) variable(s) de interés.
summary(modelo_sarimax1)$coef
## ar1 ar2
## -0.46926976 0.03947154
## ma1 ma2
## -0.64796092 -0.35203585
## sma1 Turistas_Noche_Ext_diff
## -0.75730834 26.43620005
## X.Ocupacion_Hoteles_diff Cuartos_Disponibles_Promedio_log_diff
## 35.11997364 -6.27001640
## Estadia_Promedio_log_diff Cuartos_Registrados_diff
## 51.28616856 26.67553838
## Llegada_Tur_Nac_diff Densidad_Ocupación_log
## 147.83636835 27.68356139
# Extraer todos los coeficientes
coef_sarimax <- summary(modelo_sarimax1)$coef
# Filtrar solo los coeficientes cuyas variables están en tus explicativas (df_xreg)
coef_explicativas <- coef_sarimax[names(coef_sarimax) %in% colnames(df_xreg)]
# Convertir a data frame y ordenar por valor absoluto (descendente)
library(tibble)
library(dplyr)
tabla_coef <- tibble(
Variable = names(coef_explicativas),
Coeficiente = as.numeric(coef_explicativas)
) %>%
mutate(Coef_Abs = abs(Coeficiente)) %>%
arrange(desc(Coef_Abs))
# Mostrar tabla
print(tabla_coef)
## # A tibble: 7 × 3
## Variable Coeficiente Coef_Abs
## <chr> <dbl> <dbl>
## 1 Llegada_Tur_Nac_diff 148. 148.
## 2 Estadia_Promedio_log_diff 51.3 51.3
## 3 X.Ocupacion_Hoteles_diff 35.1 35.1
## 4 Densidad_Ocupación_log 27.7 27.7
## 5 Cuartos_Registrados_diff 26.7 26.7
## 6 Turistas_Noche_Ext_diff 26.4 26.4
## 7 Cuartos_Disponibles_Promedio_log_diff -6.27 6.27
Turistas_Noche_Nac_diff (≈ 0.80)
Cuartos_Ocupados_diff (≈ 0.72)
X.Ocupacion_Hoteles_diff (≈ 0.63)
Estadia_Promedio_log_diff (≈ 0.55)
Llegada_Tur_Nac_diff (≈ 0.54)
# Filtrar años 2023 y 2024
df_plot <- df_final[df_final$AÑO %in% c(2023, 2024), ]
# Iterar sobre cada variable explicativa
for (var in variables_explicativas) {
# Calcular correlación
r <- cor(df_plot[[var]], df_plot$Derrama_Economica_Est_mdp_diff, use = "complete.obs")
r_label <- paste0("r = ", round(r, 2))
# Crear gráfico
p <- ggplot(df_plot, aes_string(x = var, y = "Derrama_Economica_Est_mdp_diff")) +
geom_point() +
geom_smooth(method = "lm", se = FALSE, color = "blue") +
ggtitle(paste("Relación entre", var, "y Derrama Económica (2023-2024)", r_label)) +
xlab(var) +
ylab("Derrama Económica Estimada (Diff)")
print(p)
}
## Warning: `aes_string()` was deprecated in ggplot2 3.0.0.
## ℹ Please use tidy evaluation idioms with `aes()`.
## ℹ See also `vignette("ggplot2-in-packages")` for more information.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
## `geom_smooth()` using formula = 'y ~ x'
# 3. Calcular matriz de correlación
cor_matrix <- cor(df_plot, use = "complete.obs")
# 4. Extraer correlaciones con la variable dependiente
correlaciones <- cor_matrix["Derrama_Economica_Est_mdp_diff", -1]
# 5. Convertir a tabla ordenada
tabla_correlacion <- data.frame(
Variable = names(correlaciones),
Coef_de_Correlacion = as.numeric(correlaciones)
) %>%
arrange(desc(abs(Coef_de_Correlacion))) # Sin espacios en el nombre
# 6. Mostrar
print(tabla_correlacion)
## Variable Coef_de_Correlacion
## 1 Derrama_Economica_Est_mdp_diff 1.00000000
## 2 Turistas_Noche_Nac_diff 0.79822271
## 3 Cuartos_Ocupados_diff 0.72349499
## 4 X.Ocupacion_Hoteles_diff 0.63461937
## 5 Estadia_Promedio_log_diff 0.55427282
## 6 Llegada_Tur_Nac_diff 0.54112254
## 7 Turistas_Noche_Ext_diff 0.38504745
## 8 Cuartos_Disponibles_diff 0.27940090
## 9 Cuartos_Registrados_diff 0.22377855
## 10 Densidad_Ocupación_log 0.22192337
## 11 Llegada_Tur_Ext_diff 0.17178725
## 12 AÑO -0.09284935
## 13 Cuartos_Disponibles_Promedio_log_diff 0.08655315
control significativas sobre la(s) principal(es) variable(s) de interés?
# Definir incrementos a simular
incrementos <- c(0.25, 0.50, 0.75)
# Crear tabla de impactos desde tabla_coef
impactos <- data.frame()
for (i in 1:nrow(tabla_coef)) {
var <- tabla_coef$Variable[i]
coef <- tabla_coef$Coeficiente[i]
for (inc in incrementos) {
efecto <- coef * inc
impactos <- rbind(impactos, data.frame(
Variable = var,
Incremento = paste0("+", inc * 100, "%"),
Impacto_Pronosticado = round(efecto, 3)
))
}
}
# Ordenar por magnitud del impacto
impactos$Impacto_Abs <- abs(impactos$Impacto_Pronosticado)
impactos <- impactos[order(-impactos$Impacto_Abs), ]
impactos <- subset(impactos, select = -Impacto_Abs)
# Mostrar tabla
print(impactos)
## Variable Incremento Impacto_Pronosticado
## 3 Llegada_Tur_Nac_diff +75% 110.877
## 2 Llegada_Tur_Nac_diff +50% 73.918
## 6 Estadia_Promedio_log_diff +75% 38.465
## 1 Llegada_Tur_Nac_diff +25% 36.959
## 9 X.Ocupacion_Hoteles_diff +75% 26.340
## 5 Estadia_Promedio_log_diff +50% 25.643
## 12 Densidad_Ocupación_log +75% 20.763
## 15 Cuartos_Registrados_diff +75% 20.007
## 18 Turistas_Noche_Ext_diff +75% 19.827
## 8 X.Ocupacion_Hoteles_diff +50% 17.560
## 11 Densidad_Ocupación_log +50% 13.842
## 14 Cuartos_Registrados_diff +50% 13.338
## 17 Turistas_Noche_Ext_diff +50% 13.218
## 4 Estadia_Promedio_log_diff +25% 12.822
## 7 X.Ocupacion_Hoteles_diff +25% 8.780
## 10 Densidad_Ocupación_log +25% 6.921
## 13 Cuartos_Registrados_diff +25% 6.669
## 16 Turistas_Noche_Ext_diff +25% 6.609
## 21 Cuartos_Disponibles_Promedio_log_diff +75% -4.703
## 20 Cuartos_Disponibles_Promedio_log_diff +50% -3.135
## 19 Cuartos_Disponibles_Promedio_log_diff +25% -1.568
knitr::kable(impactos, caption = "Impacto estimado por incremento en variables explicativas")
| Variable | Incremento | Impacto_Pronosticado | |
|---|---|---|---|
| 3 | Llegada_Tur_Nac_diff | +75% | 110.877 |
| 2 | Llegada_Tur_Nac_diff | +50% | 73.918 |
| 6 | Estadia_Promedio_log_diff | +75% | 38.465 |
| 1 | Llegada_Tur_Nac_diff | +25% | 36.959 |
| 9 | X.Ocupacion_Hoteles_diff | +75% | 26.340 |
| 5 | Estadia_Promedio_log_diff | +50% | 25.643 |
| 12 | Densidad_Ocupación_log | +75% | 20.763 |
| 15 | Cuartos_Registrados_diff | +75% | 20.007 |
| 18 | Turistas_Noche_Ext_diff | +75% | 19.827 |
| 8 | X.Ocupacion_Hoteles_diff | +50% | 17.560 |
| 11 | Densidad_Ocupación_log | +50% | 13.842 |
| 14 | Cuartos_Registrados_diff | +50% | 13.338 |
| 17 | Turistas_Noche_Ext_diff | +50% | 13.218 |
| 4 | Estadia_Promedio_log_diff | +25% | 12.822 |
| 7 | X.Ocupacion_Hoteles_diff | +25% | 8.780 |
| 10 | Densidad_Ocupación_log | +25% | 6.921 |
| 13 | Cuartos_Registrados_diff | +25% | 6.669 |
| 16 | Turistas_Noche_Ext_diff | +25% | 6.609 |
| 21 | Cuartos_Disponibles_Promedio_log_diff | +75% | -4.703 |
| 20 | Cuartos_Disponibles_Promedio_log_diff | +50% | -3.135 |
| 19 | Cuartos_Disponibles_Promedio_log_diff | +25% | -1.568 |
# Extraer métricas del modelo SARIMAX
aic_val <- AIC(modelo_sarimax1)
bic_val <- BIC(modelo_sarimax1)
loglik_val <- logLik(modelo_sarimax1)
# Si quieres RMSE (opcional, si tienes valores reales y predichos)
library(Metrics)
##
## Attaching package: 'Metrics'
## The following objects are masked from 'package:caret':
##
## precision, recall
## The following object is masked from 'package:forecast':
##
## accuracy
rmse_val <- rmse(df_plot$Derrama_Economica_Est_mdp_diff, fitted(modelo_sarimax1))
# Crear tabla resumen
tabla_metricas <- data.frame(
Métrica = c("AIC", "BIC", "Log-Likelihood", "RMSE"),
Valor = c(aic_val, bic_val, loglik_val, rmse_val)
)
print(tabla_metricas)
## Métrica Valor
## 1 AIC 1394.5973
## 2 BIC 1429.3441
## 3 Log-Likelihood -684.2986
## 4 RMSE 308.5369
library(Metrics)
# SARIMAX
aic_sarimax <- AIC(modelo_sarimax1)
bic_sarimax <- BIC(modelo_sarimax1)
loglik_sarimax <- logLik(modelo_sarimax1)
rmse_sarimax <- rmse(y, fitted(modelo_sarimax1))
# AutoARIMA
aic_auto <- AIC(modelo_auto)
bic_auto <- BIC(modelo_auto)
loglik_auto <- logLik(modelo_auto)
rmse_auto <- rmse(y, fitted(modelo_auto))
# VAR
# Ajustar predicciones del VAR (asegúrate de que lo has entrenado como modelo_var)
library(vars)
aic_var <- AIC(modelo_var)
bic_var <- BIC(modelo_var)
loglik_var <- logLik(modelo_var)
rmse_var <- rmse(y, fitted(modelo_var)[, "y"])
## Warning in `-.default`(actual, predicted): longer object length is not a
## multiple of shorter object length
# Comparar en una tabla
tabla_comparativa <- data.frame(
Modelo = c("SARIMAX", "AutoARIMA", "VAR"),
AIC = c(aic_sarimax, aic_auto, aic_var),
BIC = c(bic_sarimax, bic_auto, bic_var),
LogLikelihood = c(loglik_sarimax, loglik_auto, loglik_var),
RMSE = c(rmse_sarimax, rmse_auto, rmse_var)
)
# Mostrar tabla con dos decimales
tabla_comparativa[] <- lapply(tabla_comparativa, function(x) if(is.numeric(x)) round(x, 2) else x)
print(tabla_comparativa)
## Modelo AIC BIC LogLikelihood RMSE
## 1 SARIMAX 1394.60 1429.34 -684.30 126.46
## 2 AutoARIMA 1521.18 1546.27 -751.59 127.01
## 3 VAR 3177.24 3554.06 -1452.62 323.43