1) Brevemente, describir cómo el análisis espacial de datos se relaciona con la herramienta de inteligencia de negocios “Location Intelligence”.

De acuerdo a Jonker y Gomstyn (2024) la inteligencia de localización se refiere a “el método de obtener insights a partir de datos geoespaciales. Estos insights ayudan a identificar patrones, hacer predicciones y proporcionar una comprensión en tiempo real de las cuestiones específicas de la localización.” Queda claro que para poder aplicar este tipo de inteligencia es necesario hacer un análisis espacial, ya que este es el tipo de análitica que investiga y revisa si el espacio tiene efecto en las variables de estudio. El análisis espacial es el primer paso, y una vez que se define como el espacio afecta lo que se esta estudiando, se puede aplicar la inteligencia de localización para tomar decisiones informadas y de valor. Algunos ejemplos son: marketing (analizar el comportamiento de los consumidores y utilizar diferentes anuncios de acuerdo a la localizaición), cadena de suministro (optimización de flotas), urbanismo (mejoras de transporte público), etc.

2) Describir 3 – 5 principales diferencias entre un modelo de regresión lineal no espacial versus un modelo de regresión lineal espacial.

3) A partir de las bases de datos “tourism_state_data.xlsx” y “desempeno_historico_hoteles_estados.xlsx” especificar y estimar 1 modelo de regresión no espacial.

#Librerias
library(readxl)
library(dplyr)
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(foreign)                  # import external files
library(dplyr)                    # data manipulation 
library(spdep)                    # a collection of functions to create spatial weight matrix 
## Warning: package 'spdep' was built under R version 4.4.3
## Cargando paquete requerido: spData
## Warning: package 'spData' was built under R version 4.4.3
## To access larger datasets in this package, install the spDataLarge
## package with: `install.packages('spDataLarge',
## repos='https://nowosad.github.io/drat/', type='source')`
## Cargando paquete requerido: sf
## Warning: package 'sf' was built under R version 4.4.3
## Linking to GEOS 3.13.0, GDAL 3.10.1, PROJ 9.5.1; sf_use_s2() is TRUE
library(tigris)                   # allows to work with shapefiles
## Warning: package 'tigris' was built under R version 4.4.3
## To enable caching of data, set `options(tigris_use_cache = TRUE)`
## in your R script or .Rprofile.
library(rgeoda)                   # spatial data analysis based on GeoDa
## Warning: package 'rgeoda' was built under R version 4.4.3
## Cargando paquete requerido: digest
## 
## Adjuntando el paquete: 'rgeoda'
## The following object is masked from 'package:spdep':
## 
##     skater
library(RColorBrewer)             # offers several color palettes 
library(viridis)                  # offers several color palettes
## Cargando paquete requerido: viridisLite
library(ggplot2)                  # to create plots and graphics from dataset 
library(tmap)                     # making maps so spatial data distributions are visualized
## Warning: package 'tmap' was built under R version 4.4.3
library(sf)                       # functions to encode spatial vector data 
library(sp)                       # classes and methods for spatial data 
## Warning: package 'sp' was built under R version 4.4.3
#Cargar la Información


#Datos
datos <- read_excel('C:\\Users\\kathi\\OneDrive\\Escritorio\\BDAct2Epsilon.xlsx')
## New names:
## • `region` -> `region...17`
## • `region` -> `region...18`
#Mapa
mx_state_map <- st_read("C:\\Users\\kathi\\OneDrive\\Escritorio\\mx_spatial_data\\mx_maps\\mx_states\\mexlatlong.shp") #autocorrelacion global
## Reading layer `mexlatlong' from data source 
##   `C:\Users\kathi\OneDrive\Escritorio\mx_spatial_data\mx_maps\mx_states\mexlatlong.shp' 
##   using driver `ESRI Shapefile'
## Simple feature collection with 32 features and 19 fields
## Geometry type: MULTIPOLYGON
## Dimension:     XY
## Bounding box:  xmin: -118.4042 ymin: 14.55055 xmax: -86.73862 ymax: 32.71846
## Geodetic CRS:  WGS 84
mx_state_map <- read_sf("C:\\Users\\kathi\\OneDrive\\Escritorio\\mx_spatial_data\\mx_maps\\mx_states\\mexlatlong.shp") #autocorrelacion local
# merging dataset 
state_geodata <- geo_join(mx_state_map,datos,'OBJECTID','state_id',how='inner')
## Warning in geo_join(mx_state_map, datos, "OBJECTID", "state_id", how =
## "inner"): We recommend using the dplyr::*_join() family of functions instead.

Variable de Estudio: Llegada de Turistas Extranjeros

swm  <- poly2nb(mx_state_map, queen=T)

summary(swm) # The average number of neighbors is 4.31
## Neighbour list object:
## Number of regions: 32 
## Number of nonzero links: 138 
## Percentage nonzero weights: 13.47656 
## Average number of links: 4.3125 
## Link number distribution:
## 
## 1 2 3 4 5 6 7 8 9 
## 1 6 6 6 5 2 3 2 1 
## 1 least connected region:
## 31 with 1 link
## 1 most connected region:
## 8 with 9 links
sswm <- nb2listw(swm, style="W", zero.policy = TRUE)
moran.test(state_geodata$llegadaturextranjeros, sswm) 
## 
##  Moran I test under randomisation
## 
## data:  state_geodata$llegadaturextranjeros  
## weights: sswm    
## 
## Moran I statistic standard deviate = 0.56478, p-value = 0.2861
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic       Expectation          Variance 
##      -0.005744638      -0.032258065       0.002203776

Parece ser que la variable de la cantidad de extranjeros no tiene un componente espacial, debido a que su p-value es superior a .10. Igualmente tiene un valor negativo lo cuál indicaría que si mis vecinos aumetan su número de extranjeros, en un lugar en particular se reduce el número de extranjeros o viceversa.

En el caso del modelo de regresión lineal, no pasa nada al icnluir la variable ya que no se toma en cuenta el componente espacial.

#Modelo de Regresión Lineal no Espacial
model_a <- lm(tourism_gdp ~  crime_rate + real_wage + llegadaturextranjeros, data = state_geodata)
summary(model_a)
## 
## Call:
## lm(formula = tourism_gdp ~ crime_rate + real_wage + llegadaturextranjeros, 
##     data = state_geodata)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -98849 -33119  -9320  15918 190112 
## 
## Coefficients:
##                         Estimate Std. Error t value Pr(>|t|)   
## (Intercept)           -2.092e+05  8.555e+04  -2.446  0.02101 * 
## crime_rate            -1.397e+02  3.893e+02  -0.359  0.72244   
## real_wage              7.549e+02  2.383e+02   3.168  0.00369 **
## llegadaturextranjeros  1.620e-01  6.217e-02   2.605  0.01454 * 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 59560 on 28 degrees of freedom
## Multiple R-squared:  0.373,  Adjusted R-squared:  0.3058 
## F-statistic: 5.552 on 3 and 28 DF,  p-value: 0.004048
AIC(model_a)
## [1] 800.2032

Observando este modelo, vemos que crime_rate no es relevante para el modelo debido a que tiene un p-value sumamente alto. Real_wage y el número de turistas extranjeros son las variables de relevancia debido a que su p-value es menor a 0.10 y también menor a 0.05. Observando el valor de R cuadrada ajustada, podemos comentar que este modelo solo explica aproximadamente el 30.58% de los datos, una cifra bastante baja. Esto se puede deber a que no estamos tomando en cuenta el tema de la autocorrelación espacial. En cuanto a las variables, parece ser que si aumenta el salario y el número de turistas extranjeros aumenta el GDP de Turismo.

4) De acuerdo al ESDA de la Actividad 1 ¿porqué sí / no se justifica el uso de análisis de regresión espacial?

Se justifica realizar un análisis de regresión espacial, debido a que en el ESDA se identificaron variables que de acuerdo al estadístico de global moran I tienen autocorrelación espacial. En el ejercicio anterior se identificó que : crime_rate y real_wage tenían un p-value bajo indicando que la autocorrelación espacial es relevante de tomar en cuenta. Debido a esto se deben de realizar modelos de regresión espaciales para que los resultados sean lo más certeros posibles y así evitar el sesgo.

5) Especificar y estimar 3 modelos diferentes de regresión espacial (e.g., SAR, SEM, SDM).

Las variables para los modelos serán: crime_rate, real_wage y llegadaturextranjeros

# Verificar si hay NAs tras la unión
summary(state_geodata)
##     OBJECTID     FIPS_ADMIN         GMI_ADMIN          ADMIN_NAME       
##  Min.   : 888   Length:32          Length:32          Length:32         
##  1st Qu.:1047   Class :character   Class :character   Class :character  
##  Median :1081   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :1219                                                           
##  3rd Qu.:1118                                                           
##  Max.   :2357                                                           
##   FIPS_CNTRY         GMI_CNTRY          CNTRY_NAME          POP_ADMIN       
##  Length:32          Length:32          Length:32          Min.   :  345682  
##  Class :character   Class :character   Class :character   1st Qu.: 1260840  
##  Mode  :character   Mode  :character   Mode  :character   Median : 2099768  
##                                                           Mean   : 2782852  
##                                                           3rd Qu.: 3409309  
##                                                           Max.   :10662420  
##    TYPE_ENG           TYPE_LOC              SQKM             SQMI        
##  Length:32          Length:32          Min.   :  1343   Min.   :  518.4  
##  Class :character   Class :character   1st Qu.: 23484   1st Qu.: 9067.4  
##  Mode  :character   Mode  :character   Median : 58628   Median :22636.4  
##                                        Mean   : 61289   Mean   :23663.8  
##                                        3rd Qu.: 74078   3rd Qu.:28601.3  
##                                        Max.   :247935   Max.   :95727.7  
##   COLOR_MAP           Shape_Leng       Shape_Area       OBJECTID_1   
##  Length:32          Min.   : 1.313   Min.   : 0.115   Min.   : 1.00  
##  Class :character   1st Qu.: 8.544   1st Qu.: 2.000   1st Qu.: 8.75  
##  Mode  :character   Median :13.341   Median : 5.126   Median :16.50  
##                     Mean   :13.385   Mean   : 5.441   Mean   :16.50  
##                     3rd Qu.:18.266   3rd Qu.: 6.662   3rd Qu.:24.25  
##                     Max.   :26.273   Max.   :22.891   Max.   :32.00  
##    OBJECTID_2     longitude          latitude              geometry 
##  Min.   : 888   Min.   :-115.10   Min.   :16.50   MULTIPOLYGON :32  
##  1st Qu.:1047   1st Qu.:-103.70   1st Qu.:19.07   epsg:4326    : 0  
##  Median :1081   Median : -99.87   Median :20.69   +proj=long...: 0  
##  Mean   :1219   Mean   :-100.50   Mean   :21.76                     
##  3rd Qu.:1118   3rd Qu.: -98.08   3rd Qu.:24.46                     
##  Max.   :2357   Max.   : -88.27   Max.   :30.58                     
##     state                year       tourism_gdp       crime_rate     
##  Length:32          Min.   :2022   Min.   :  8618   Min.   :  1.984  
##  Class :character   1st Qu.:2022   1st Qu.: 22066   1st Qu.:  9.585  
##  Mode  :character   Median :2022   Median : 34023   Median : 17.346  
##                     Mean   :2022   Mean   : 60345   Mean   : 28.636  
##                     3rd Qu.:2022   3rd Qu.: 62411   3rd Qu.: 40.571  
##                     Max.   :2022   Max.   :365959   Max.   :111.064  
##  college_education  unemployment       employment     business_activity   
##  Min.   :0.1915    Min.   :0.01400   Min.   :0.9541   Min.   :-0.0037923  
##  1st Qu.:0.2560    1st Qu.:0.02500   1st Qu.:0.9695   1st Qu.: 0.0008453  
##  Median :0.2822    Median :0.02900   Median :0.9759   Median : 0.0060581  
##  Mean   :0.2848    Mean   :0.03050   Mean   :0.9748   Mean   : 0.0185571  
##  3rd Qu.:0.3174    3rd Qu.:0.03475   3rd Qu.:0.9799   3rd Qu.: 0.0112165  
##  Max.   :0.4376    Max.   :0.05700   Max.   :0.9928   Max.   : 0.4093354  
##    real_wage      pop_density      good_governance   ratio_public_investment
##  Min.   :282.6   Min.   :  11.36   Min.   : 0.0000   Min.   :0.000000       
##  1st Qu.:314.0   1st Qu.:  42.83   1st Qu.: 0.5026   1st Qu.:0.001399       
##  Median :341.6   Median :  68.54   Median : 1.1424   Median :0.003060       
##  Mean   :348.9   Mean   : 315.07   Mean   : 4.6496   Mean   :0.007506       
##  3rd Qu.:372.7   3rd Qu.: 163.03   3rd Qu.: 4.3422   3rd Qu.:0.005995       
##  Max.   :481.7   Max.   :6211.45   Max.   :46.0277   Max.   :0.067644       
##  exchange_rate        inpc       border_distance   region...17       
##  Min.   :19.47   Min.   :126.5   Min.   :   8.83   Length:32         
##  1st Qu.:19.47   1st Qu.:126.5   1st Qu.: 613.26   Class :character  
##  Median :19.47   Median :126.5   Median : 751.64   Mode  :character  
##  Mean   :19.47   Mean   :126.5   Mean   : 704.92                     
##  3rd Qu.:19.47   3rd Qu.:126.5   3rd Qu.: 875.76                     
##  Max.   :19.47   Max.   :126.5   Max.   :1252.66                     
##   region...18    llegadaturextranjeros
##  Min.   :1.000   Min.   :    16.1     
##  1st Qu.:2.000   1st Qu.:  7029.7     
##  Median :3.000   Median : 17944.8     
##  Mean   :3.188   Mean   : 62892.2     
##  3rd Qu.:4.250   3rd Qu.: 36136.9     
##  Max.   :5.000   Max.   :976411.3
library(spdep)
library(spatialreg)
## Warning: package 'spatialreg' was built under R version 4.4.3
## Cargando paquete requerido: Matrix
## 
## Adjuntando el paquete: 'spatialreg'
## The following objects are masked from 'package:spdep':
## 
##     get.ClusterOption, get.coresOption, get.mcOption,
##     get.VerboseOption, get.ZeroPolicyOption, set.ClusterOption,
##     set.coresOption, set.mcOption, set.VerboseOption,
##     set.ZeroPolicyOption

1. SAR

modelo_sar <- lagsarlm(tourism_gdp ~  crime_rate + real_wage + llegadaturextranjeros, data = state_geodata, listw = sswm) 
## Warning in lagsarlm(tourism_gdp ~ crime_rate + real_wage + llegadaturextranjeros, : inversion of asymptotic covariance matrix failed for tol.solve = 2.22044604925031e-16 
##   número de condición recíproco = 4.33756e-21 - using numerical Hessian.
summary(modelo_sar)
## 
## Call:
## lagsarlm(formula = tourism_gdp ~ crime_rate + real_wage + llegadaturextranjeros, 
##     data = state_geodata, listw = sswm)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -99841.3 -31821.7  -9739.8  15948.8 188652.9 
## 
## Type: lag 
## Coefficients: (numerical Hessian approximate standard errors) 
##                          Estimate  Std. Error z value  Pr(>|z|)
## (Intercept)           -2.1109e+05  8.0442e+04 -2.6241 0.0086869
## crime_rate            -1.4665e+02  3.6326e+02 -0.4037 0.6864342
## real_wage              7.5181e+02  2.2308e+02  3.3702 0.0007511
## llegadaturextranjeros  1.6319e-01  5.8393e-02  2.7946 0.0051958
## 
## Rho: 0.050527, LR test value: 0.040384, p-value: 0.84073
## Approximate (numerical Hessian) standard error: 0.24591
##     z-value: 0.20547, p-value: 0.83721
## Wald statistic: 0.042217, p-value: 0.83721
## 
## Log likelihood: -395.0814 for lag model
## ML residual variance (sigma squared): 3098100000, (sigma: 55661)
## Number of observations: 32 
## Number of parameters estimated: 6 
## AIC: 802.16, (AIC for lm: 800.2)

Observando los resultados del modelo de Spatial Autoregression, observamos en primer lugar que el AIC es mayor al modelo no espacial, indicando que el primero es mejor.Al observar los p-values de las variables queda claro que real_wage y llegadaturextranjeros son relevantes para el modelo debido a que tienen un valor inferior a 0.10. También es importante recalcar que tienen un efecto positivo, indidcando que si incrementan en los vecinos, aumentará el GDP de tursimo en un lugar en particular. Sin embargo, el p-value de rho es de 0.84, un número superior a 0.10 indicando que no hay evidencia de correlación espacial.

2. SEM (Spatial Error Model)

modelo_sem <- errorsarlm(tourism_gdp ~  crime_rate + real_wage + llegadaturextranjeros, data = state_geodata, listw = sswm) 
## Warning in errorsarlm(tourism_gdp ~ crime_rate + real_wage + llegadaturextranjeros, : inversion of asymptotic covariance matrix failed for tol.solve = 2.22044604925031e-16 
##   número de condición recíproco = 5.20738e-21 - using numerical Hessian.
summary(modelo_sem)
## 
## Call:
## errorsarlm(formula = tourism_gdp ~ crime_rate + real_wage + llegadaturextranjeros, 
##     data = state_geodata, listw = sswm)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -97788.8 -28811.5  -9420.9  13764.5 175502.4 
## 
## Type: error 
## Coefficients: (asymptotic standard errors) 
##                          Estimate  Std. Error z value  Pr(>|z|)
## (Intercept)           -2.1818e+05  8.0487e+04 -2.7108 0.0067125
## crime_rate            -2.1817e+02  3.5644e+02 -0.6121 0.5404791
## real_wage              7.8289e+02  2.2269e+02  3.5155 0.0004389
## llegadaturextranjeros  1.7712e-01  5.6569e-02  3.1310 0.0017423
## 
## Lambda: 0.22674, LR test value: 0.84726, p-value: 0.35733
## Approximate (numerical Hessian) standard error: 0.23574
##     z-value: 0.96183, p-value: 0.33613
## Wald statistic: 0.92512, p-value: 0.33613
## 
## Log likelihood: -394.678 for error model
## ML residual variance (sigma squared): 2981800000, (sigma: 54606)
## Number of observations: 32 
## Number of parameters estimated: 6 
## AIC: 801.36, (AIC for lm: 800.2)

Observando los resultados del modelo de Spatial Error, observamos en primer lugar que el AIC es ligeramente menor que el SAR, indicando que este es mejor.Al observar los p-values de las variables queda claro que real_wage y llegadaturextranjeros son relevantes para el modelo debido a que tienen un valor inferior a 0.10, igual que en el modelo anterior. También es importante recalcar que tienen un efecto positivo. Sin embargo, el p-value de lambda es de 0.36, un número superior a 0.10 indicando que no hay evidencia de correlación espacial aunque sea un valor menor al p-value del modelo anterior.

3. SDM

modelo_sdm <- lagsarlm(tourism_gdp ~  crime_rate + real_wage + llegadaturextranjeros, data = state_geodata, listw = sswm, type="mixed") 
## Warning in lagsarlm(tourism_gdp ~ crime_rate + real_wage + llegadaturextranjeros, : inversion of asymptotic covariance matrix failed for tol.solve = 2.22044604925031e-16 
##   número de condición recíproco = 4.35827e-21 - using numerical Hessian.
summary(modelo_sdm)
## 
## Call:
## lagsarlm(formula = tourism_gdp ~ crime_rate + real_wage + llegadaturextranjeros, 
##     data = state_geodata, listw = sswm, type = "mixed")
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -94430 -28618 -12699  13987 168111 
## 
## Type: mixed 
## Coefficients: (numerical Hessian approximate standard errors) 
##                              Estimate  Std. Error z value  Pr(>|z|)
## (Intercept)                373.433153 5507.915078  0.0678 0.9459453
## crime_rate                -213.502327  358.722652 -0.5952 0.5517273
## real_wage                  799.136599  214.872470  3.7191 0.0001999
## llegadaturextranjeros        0.195181    0.058798  3.3195 0.0009017
## lag.crime_rate             541.528247  686.741904  0.7885 0.4303768
## lag.real_wage             -705.933136  231.112325 -3.0545 0.0022543
## lag.llegadaturextranjeros   -0.054561    0.101333 -0.5384 0.5902781
## 
## Rho: 0.13418, LR test value: 0.28094, p-value: 0.59609
## Approximate (numerical Hessian) standard error: 0.24804
##     z-value: 0.54096, p-value: 0.58854
## Wald statistic: 0.29263, p-value: 0.58854
## 
## Log likelihood: -393.8961 for mixed model
## ML residual variance (sigma squared): 2865300000, (sigma: 53529)
## Number of observations: 32 
## Number of parameters estimated: 9 
## AIC: 805.79, (AIC for lm: 804.07)

El p-value del coeficiente Rho indica que no hay autocorrelación espacial (mayor a 0.10) en el PIB turístico, lo que significa que no depende del desempeño de los estados vecinos. Además, las variables “real_wage” y “llegadaturextranjeros” tienen un impacto positivo y significativo en el PIB turístico. El único spatial lag que sale estadisticamente significativo es el de real_wage y este sale negativo. Lo cuál indica que si el salario aumenta en un punto en particular, bajará en los estados vecinos o viceversa.

# Comparación de bondad de ajuste
AIC(modelo_sar, modelo_sem, modelo_sdm)
##            df      AIC
## modelo_sar  6 802.1629
## modelo_sem  6 801.3560
## modelo_sdm  9 805.7922

Criterio de información de Akaike (AIC) -> AIC más bajo = mejor modelo.

Observando únicamente este criterio, queda claro que el mejor modelo es el SEM debido a que buscamos minimizar el valor del AIC, sin embargo si observamos este valor para el modelo no espacial generado en el punto 3 observamos que este es el de menor valor (800.2032). Por lo tanto, si solo se toma en cuenta este criterio, el modelo no sería espacial.

6) Especificar y estimar 1 modelo de regresión mediante el uso de machine learning (e.g., support vector machine, decision trees, random forest, XGBoost regression, etc.)

library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ lubridate 1.9.3     ✔ tibble    3.2.1
## ✔ purrr     1.0.2     ✔ tidyr     1.3.1
## ✔ readr     2.1.5     
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ tidyr::expand() masks Matrix::expand()
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ✖ tidyr::pack()   masks Matrix::pack()
## ✖ tidyr::unpack() masks Matrix::unpack()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(randomForest)
## randomForest 4.7-1.1
## Type rfNews() to see new features/changes/bug fixes.
## 
## Adjuntando el paquete: 'randomForest'
## 
## The following object is masked from 'package:ggplot2':
## 
##     margin
## 
## The following object is masked from 'package:dplyr':
## 
##     combine
library(stargazer)
## 
## Please cite as: 
## 
##  Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
##  R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
data <- state_geodata %>%
  mutate(
    crime_rate_lag = lag.listw(sswm, crime_rate),
    real_wage_lag = lag.listw(sswm, real_wage),
    tourism_lag = lag.listw(sswm, llegadaturextranjeros),
    tourism_lag = lag.listw(sswm, tourism_gdp)
  )
#Entrenar el Random Forest
set.seed(42)
model_rf_spatial <- randomForest(
  tourism_gdp ~ crime_rate + real_wage + llegadaturextranjeros +
                crime_rate_lag + real_wage_lag + tourism_lag,
  data = data,
  ntree = 500,
  importance = TRUE
)
sqrt(mean((predict(model_rf_spatial) - data$tourism_gdp)^2))  # RMSE
## [1] 70184.33
varImpPlot(model_rf_spatial)  # Plot importance

state_geodata$tourism_lag <- lag.listw(sswm, state_geodata$tourism_gdp)  # Add spatial lag
modelo_randomfor <- randomForest(tourism_gdp ~ crime_rate + real_wage + llegadaturextranjeros + tourism_lag, 
                       data = data, ntree = 500)

7) Mediante el uso de Root Mean Square Error – RMSE seleccionar 1-2 modelos de regresión estimados en 3) - 6) y describir los principales resultados estimados.

stargazer(model_a,modelo_sar, modelo_sdm, modelo_sem, type = "text", title="Estimated Regression Results")
## 
## Estimated Regression Results
## =====================================================================================================
##                                                       Dependent variable:                            
##                           ---------------------------------------------------------------------------
##                                                           tourism_gdp                                
##                                    OLS                        spatial                    spatial     
##                                                           autoregressive                  error      
##                                    (1)                 (2)               (3)               (4)       
## -----------------------------------------------------------------------------------------------------
## crime_rate                      -139.672            -146.650          -213.502          -218.174     
##                                 (389.280)           (363.265)         (358.723)         (356.443)    
##                                                                                                      
## real_wage                      754.869***          751.812***        799.137***        782.890***    
##                                 (238.251)           (223.076)         (214.872)         (222.694)    
##                                                                                                      
## llegadaturextranjeros            0.162**            0.163***          0.195***          0.177***     
##                                  (0.062)             (0.058)           (0.059)           (0.057)     
##                                                                                                      
## lag.crime_rate                                                         541.528                       
##                                                                       (686.742)                      
##                                                                                                      
## lag.real_wage                                                        -705.933***                     
##                                                                       (231.112)                      
##                                                                                                      
## lag.llegadaturextranjeros                                              -0.055                        
##                                                                        (0.101)                       
##                                                                                                      
## Constant                     -209,225.100**      -211,090.600***       373.433       -218,183.600*** 
##                               (85,553.640)        (80,441.980)       (5,507.915)      (80,487.410)   
##                                                                                                      
## -----------------------------------------------------------------------------------------------------
## Observations                       32                  32                32                32        
## R2                                0.373                                                              
## Adjusted R2                       0.306                                                              
## Log Likelihood                                      -395.081          -393.896          -394.678     
## sigma2                                          3,098,119,523.000 2,865,329,159.000 2,981,769,580.000
## Akaike Inf. Crit.                                    802.163           805.792           801.356     
## Residual Std. Error       59,560.790 (df = 28)                                                       
## F Statistic               5.552*** (df = 3; 28)                                                      
## Wald Test (df = 1)                                    0.042             0.293             0.925      
## LR Test (df = 1)                                      0.040             0.281             0.847      
## =====================================================================================================
## Note:                                                                     *p<0.1; **p<0.05; ***p<0.01
observed_values <- state_geodata$tourism_gdp
# (SAR, SEM, SDM)
pred_sar <- fitted(modelo_sar)
## This method assumes the response is known - see manual page
pred_sdm <- fitted(modelo_sdm)
## This method assumes the response is known - see manual page
pred_sem <- fitted(modelo_sem)
## This method assumes the response is known - see manual page
# Non-spatial 
pred_a <- predict(model_a, newdata = state_geodata)

# Random forest 
pred_rf <- sqrt(mean((predict(model_rf_spatial) - data$tourism_gdp)^2))  # RMSE
rmse <- function(observed, predicted) {
  sqrt(mean((observed - predicted)^2, na.rm = TRUE))  # Handles NA values
}
rmse_table <- data.frame(
  Model = c("OLS (model_a)", "SAR (Lag)", "SDM (Durbin)", "SEM (Error)", "Random Forest"),
  RMSE = c(
    rmse(observed_values, pred_a),     # OLS
    rmse(observed_values, pred_sar),   # SAR
    rmse(observed_values, pred_sdm),   # SDM
    rmse(observed_values, pred_sem),   # SEM
    pred_rf                            # Pre-calculated RF RMSE
  )
)
print(rmse_table)
##           Model     RMSE
## 1 OLS (model_a) 55714.02
## 2     SAR (Lag) 55660.75
## 3  SDM (Durbin) 53528.77
## 4   SEM (Error) 54605.58
## 5 Random Forest 70184.33
model_ba <- lagsarlm(tourism_gdp ~  crime_rate + real_wage + llegadaturextranjeros + pop_density, data = state_geodata, listw = sswm) 
## Warning in lagsarlm(tourism_gdp ~ crime_rate + real_wage + llegadaturextranjeros + : inversion of asymptotic covariance matrix failed for tol.solve = 2.22044604925031e-16 
##   número de condición recíproco = 1.24842e-20 - using numerical Hessian.
summary(model_ba)
## 
## Call:
## lagsarlm(formula = tourism_gdp ~ crime_rate + real_wage + llegadaturextranjeros + 
##     pop_density, data = state_geodata, listw = sswm)
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -34983.2 -22202.6  -8872.8   7682.8  91724.0 
## 
## Type: lag 
## Coefficients: (numerical Hessian approximate standard errors) 
##                         Estimate Std. Error z value  Pr(>|z|)
## (Intercept)           7.2117e+03 5.3892e+04  0.1338  0.893547
## crime_rate            1.0836e+02 2.2019e+02  0.4921  0.622627
## real_wage             1.2678e+02 1.5090e+02  0.8402  0.400792
## llegadaturextranjeros 1.2593e-01 3.5360e-02  3.5613  0.000369
## pop_density           5.1171e+01 6.7318e+00  7.6014 2.931e-14
## 
## Rho: -0.30186, LR test value: 2.3141, p-value: 0.12821
## Approximate (numerical Hessian) standard error: 0.19275
##     z-value: -1.5661, p-value: 0.11734
## Wald statistic: 2.4525, p-value: 0.11734
## 
## Log likelihood: -378.9745 for lag model
## ML residual variance (sigma squared): 1107900000, (sigma: 33285)
## Number of observations: 32 
## Number of parameters estimated: 7 
## AIC: 771.95, (AIC for lm: 772.26)

Utilizando el criterio de RMSE, los mejores modelos son:

  • SDM (Durbin Spatial Model) debido a que su valor de error es el menor (53528.77). Pero su AIC no es el menor.

  • SEM (Spatial Error Model) debido a que su valor de error es le menor después de SDM. Su AIC es menor que el del SDM pero no es el menor (ese es el OLS).

Los resultados son:

    1. La variable de crime_rate debería de ser reemplazada por otra, debido a que no es estadísticamente significativo en los modelos.
    1. Los AIC no variaron de manera significativa entre los modelos, en un rango de 800 a 805.
    1. El modelo randomforest es el modelo menos adecuado, debido a que tiene un alto valor en el RMSE.
    1. Aunque las variables de llegada de tursitas extranjeros y los salarios sean relevantes, se deben de tomar en cuenta en nuevos modelos debido a que son relevantes en la mayoría de los modelos.

Tomando en cuenta solamente este criterio, el modelo Durbin sería el mejor al presentar el RMSE más bajo, indicando que es el modelo con la mejor capacidad predictiva. El modelo SEM sería el segundo mejor modelo con la mejor capacidad predictiva, sin embargo el modelo Random Forest al presentar el RMSE más alto indica una menor capacidad predictiva y el no capturar correctamente los datos.

8) Describir los principales 5 – 7 hallazgos del análisis de regresión no espacial y espacial. Principalmente, ¿cómo es el impacto de las variables que incluyen una especificación espacial de estados vecinos (W) sobre la variable dependiente Y?

    1. Queda claro que en este ejercicio que la predicción del GDP de tursimo en el 2022, tiene relación espacial ya que los dos mejores modelos son aquellos que toman en cuenta este componente.
    1. La variable de realwage tiende a siempre ser positiva, indicando que en los modelos de SAR y SDM, su aumento significa que si en un punto en especifico aumenta el valor, en sus vecinos también aumentará.
    1. La variable de llegadaturistasextranjeros también suele ser positiva, lo cuál indica que si aumenta el número de turistas en los vecinos de un punto en particular, aumentará en ese mismo punto o viceversa.
    1. Al hacer una prueba con densidas de población se observa que esta es aún más relevante y positiva indicando un efecto similar a los mencionados anteriormente.
    1. A la hora de utilizar el rezago espacial, el comportamiento de las variables cambian: real wage y la llegada de turistas tienen un valor negativo, indicando que ahora si aumenta alguno de estos valores en los vecinos, en un punto en especifico se disminuiría indicando mayor competencia.
    1. Los modelos espaciales (SAR, SEM y SDM) mejoran el ajuste del modelo en comparación con el modelo de Regresión Lineal no Espacial, esto se refleja especialmente en sus valores RMSE más bajos (en especial para el modelo SDM y SEM).

9) A partir de los modelos de regresión seleccionados y los hallazgos identificados describir 2 – 3 sugerencias relacionadas con la toma de decisiones para:

a. Identificar las variables que explican un incremento / disminución en la actividad turística a nivel estatal.

    1. Densidad Poblacional, si aumenta la densidad población parece ser que aumenta el GDP de turismo.
    1. Número de Turistas Extranjeros, si aumenta el número parece ser que aumenta el GDP de turismo.
    1. Salario Real, si aumenta el número parece ser que aumenta el GDP de turismo.

b.Incrementar la actividad turística a nivel regional de entidades federativas seleccionadas.

    1. Mejorar e implementar medidas para poder aumentar los salarios de la población para beneficio de ellas y también de esta manera aumentar el GDP de turismo.
    1. Promocionar los estados a turistas extranjeros para fomentar el turismo y aspirar observar un aumento en las ganancias por esta actividad.
    1. Promover e incentivar la vivienda en los estados poco poblados para poder aumentar el turismo.

10) Citar referencias y/o otras fuentes de información consideradas para el desarrollo de la actividad.

Jonker, A. & Gomstyn, A.(2024). ¿Qué es la inteligencia de localización? IBM. Consultado el 7 de abril de 2025. Tomado de: https://www.ibm.com/mx-es/topics/location-intelligence

Arab,A. Hooten, B & Wikle, C. (2006). Hierarchical Spatial Models. Department of Statistics, University of Missouri-Columbia. Consultado el 7 de abril de 2025. Tomado de: https://mhooten.github.io/publications/Arab_etal_EGIS_Chap_2007.pdf