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.
#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.
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.
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.
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
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.
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.
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.
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)
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:
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.
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