EXAMEN Y TAREA

Author

Bethys Solano Moreno

Instalación de Paquetes

install.packages(“REAT”) Es una herramienta para realizar análisis económicos regionales. Proporciona una serie de funciones y métodos para analizar la desigualdad, la concentración, la especialización regional, las disparidades y convergencia regionales, el crecimiento regional, la interacción espacial y la accesibilidad.

Instalación de Paquetes

install.packages(“REAT”)

install.packpages(“spdep)

install.packpages(“gridExtra”)

install.packpages(“sp”) un paquete que proporciona clases y métodos para datos espaciales

install.packpages(“readxl”)

install.packpages(“RColorBrewer”) es una herramienta para crear paletas de colores de alta calidad, diseñadas para gráficos de datos

install.packpages(“RColorBrewer”)

install.packpages(“spdep”)

install.packpages(“leaflet”) es una herramienta para crear mapas interactivos en la web

install.packpages(“magrittr”) se utiliza para simplificar la manipulación de datos y la creación de gráficos.

install.packpages(“dplyr”) ggplot2

install.packpages(“ggplot2”) spatialEco

install.packpages(“spatialEco”) proporciona herramientas para el análisis ecológico espacial, específicamente diseñado para trabajar con datos raster y datos vectoriales.

install.packpages(“stargazer”)

install.packpages(“readr”)

install.packpages(“sf”) permite trabajar con datos geoespaciales vectoriales.

install.packages(“leaflet.extras”)

Librerías requeridas

library(spdep) # Econometria espacial library(MASS) library(foreign) library(“gridExtra”) # To combine graphs library(sp) library(readxl) library(RColorBrewer) library(spdep) library(leaflet) library(magrittr) library(dplyr) ibrary(ggplot2) library(spatialEco) library(stargazer) library(readr) library(sf) library(leaflet.extras)

Para leer archivos shapes y transformarlo en objeto Shape y DataFrame:

setwd(“C:/Users/pajv2/OneDrive/Escritorio/TAREA Y EXAMEN AA U2/nxcantones_V2-20250608T013535Z-1-001 (2)/nxcantones_V2”)

setwd("C:/Users/pajv2/OneDrive/Escritorio/TAREA Y EXAMEN  AA U2/nxcantones_V2-20250608T013535Z-1-001 (2)/nxcantones_V2")
library(spdep)
Cargando paquete requerido: spData
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
Linking to GEOS 3.13.1, GDAL 3.11.0, PROJ 9.6.0; sf_use_s2() is TRUE
shape_canton <- st_read("NXCantones.shp")
Reading layer `NXCantones' from data source 
  `C:\Users\pajv2\OneDrive\Escritorio\TAREA Y EXAMEN  AA U2\nxcantones_V2-20250608T013535Z-1-001 (2)\nxcantones_V2\NXCantones.shp' 
  using driver `ESRI Shapefile'
Simple feature collection with 221 features and 12 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -732143.5 ymin: 9445216 xmax: 1147852 ymax: 10189400
Projected CRS: WGS 84 / UTM zone 17S
print(shape_canton)
Simple feature collection with 221 features and 12 fields
Geometry type: MULTIPOLYGON
Dimension:     XY
Bounding box:  xmin: -732143.5 ymin: 9445216 xmax: 1147852 ymax: 10189400
Projected CRS: WGS 84 / UTM zone 17S
First 10 features:
    D_R D_R_B D_R_A DPA_VALOR DPA_ANIO DPA_CANTON ID_CANTON DPA_DESCAN
1  <NA>  <NA>  <NA>         0     2011       0101       101         NA
2  <NA>  <NA>  <NA>         0     2011       0102       102         NA
3  <NA>  <NA>  <NA>         0     2011       0103       103         NA
4  <NA>  <NA>  <NA>         0     2011       0104       104         NA
5  <NA>  <NA>  <NA>         0     2011       0105       105         NA
6  <NA>  <NA>  <NA>         0     2011       0106       106         NA
7  <NA>  <NA>  <NA>         0     2011       0107       107         NA
8  <NA>  <NA>  <NA>         0     2011       0108       108         NA
9  <NA>  <NA>  <NA>         0     2011       0109       109         NA
10 <NA>  <NA>  <NA>         0     2011       0110       110         NA
   DPA_PROVIN DPA_DESPRO CODIGO       CANTON                       geometry
1          01      AZUAY    101       Cuenca MULTIPOLYGON (((678670.4 97...
2          01      AZUAY    102        Giron MULTIPOLYGON (((719040.2 96...
3          01      AZUAY    103     Gualaceo MULTIPOLYGON (((763237.9 96...
4          01      AZUAY    104        Nabon MULTIPOLYGON (((729367 9636...
5          01      AZUAY    105        Paute MULTIPOLYGON (((762177.3 96...
6          01      AZUAY    106       Pucara MULTIPOLYGON (((669285.4 96...
7          01      AZUAY    107 San Fernando MULTIPOLYGON (((696094.9 96...
8          01      AZUAY    108 Santa Isabel MULTIPOLYGON (((688511 9660...
9          01      AZUAY    109       Sigsig MULTIPOLYGON (((747464.4 96...
10         01      AZUAY    110       O\xa4a MULTIPOLYGON (((716412.7 96...
library(sf)
class(shape_canton)
[1] "sf"         "data.frame"
summary(shape_canton)
     D_R               D_R_B              D_R_A             DPA_VALOR
 Length:221         Length:221         Length:221         Min.   :0  
 Class :character   Class :character   Class :character   1st Qu.:0  
 Mode  :character   Mode  :character   Mode  :character   Median :0  
                                                          Mean   :0  
                                                          3rd Qu.:0  
                                                          Max.   :0  
                                                                     
   DPA_ANIO          DPA_CANTON          ID_CANTON      DPA_DESCAN 
 Length:221         Length:221         Min.   : 101   Min.   : NA  
 Class :character   Class :character   1st Qu.: 704   1st Qu.: NA  
 Mode  :character   Mode  :character   Median :1107   Median : NA  
                                       Mean   :1100   Mean   :NaN  
                                       3rd Qu.:1411   3rd Qu.: NA  
                                       Max.   :2403   Max.   : NA  
                                                      NA's   :221  
  DPA_PROVIN         DPA_DESPRO            CODIGO        CANTON         
 Length:221         Length:221         Min.   : 101   Length:221        
 Class :character   Class :character   1st Qu.: 704   Class :character  
 Mode  :character   Mode  :character   Median :1106   Mode  :character  
                                       Mean   :1093                     
                                       3rd Qu.:1410                     
                                       Max.   :2403                     
                                                                        
          geometry  
 MULTIPOLYGON :221  
 epsg:32717   :  0  
 +proj=utm ...:  0  
                    
                    
                    
                    
View(shape_canton)

Verificar la validez de las geometrías

valid_geom <- st_is_valid(shape_canton)

Mostrar las geometrías no válidas

cantones_invalidos <- shape_canton[!valid_geom, ]

Corregir las geometrías no válidas

cantones_corregidos <- st_make_valid(shape_canton)

Verificar de nuevo

valid_geom_corregido <- st_is_valid(cantones_corregidos)

Crear una matriz de cinco vecinos

coords_centroides <- st_centroid(cantones_corregidos)[, 1:2]
Warning: st_centroid assumes attributes are constant over geometries

Creo un objeto con una matriz de los puntos de los 5 vecinos

vc_k5 <- knn2nb(knearneigh(coords_centroides, k = 5))
print(coords_centroides)
Simple feature collection with 221 features and 2 fields
Geometry type: POINT
Dimension:     XY
Bounding box:  xmin: -643716.7 ymin: 9463821 xmax: 1070598 ymax: 10110140
Projected CRS: WGS 84 / UTM zone 17S
First 10 features:
    D_R D_R_B                 geometry
1  <NA>  <NA>   POINT (697860 9683563)
2  <NA>  <NA> POINT (704541.8 9648385)
3  <NA>  <NA>   POINT (747169 9677155)
4  <NA>  <NA> POINT (709009.6 9631756)
5  <NA>  <NA> POINT (751048.5 9695427)
6  <NA>  <NA> POINT (663618.7 9647021)
7  <NA>  <NA> POINT (692468.1 9653579)
8  <NA>  <NA> POINT (681845.5 9645897)
9  <NA>  <NA> POINT (738510.3 9653811)
10 <NA>  <NA> POINT (707668.6 9614130)

Creo una matriz de pesos espaciales w

Una matriz de pesos espaciales (también conocida como matriz W) es una representación matemática de las relaciones espaciales entre diferentes entidades en un conjunto de datos. Esta matriz se utiliza en diversos análisis espaciales para representar cómo una unidad geográfica afecta a sus vecinos.

wk5 <- nb2listw(vc_k5, style="W")
summary(wk5)
Characteristics of weights list object:
Neighbour list object:
Number of regions: 221 
Number of nonzero links: 1105 
Percentage nonzero weights: 2.262443 
Average number of links: 5 
Non-symmetric neighbours list
Link number distribution:

  5 
221 
221 least connected regions:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 with 5 links
221 most connected regions:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 with 5 links

Weights style: W 
Weights constants summary:
    n    nn  S0    S1     S2
W 221 48841 221 78.84 906.64
wk5 <- nb2listw(vc_k5, style="W")
summary(wk5)
Characteristics of weights list object:
Neighbour list object:
Number of regions: 221 
Number of nonzero links: 1105 
Percentage nonzero weights: 2.262443 
Average number of links: 5 
Non-symmetric neighbours list
Link number distribution:

  5 
221 
221 least connected regions:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 with 5 links
221 most connected regions:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 with 5 links

Weights style: W 
Weights constants summary:
    n    nn  S0    S1     S2
W 221 48841 221 78.84 906.64

Graficar los vecinos de la matriz de pesos espaciales

library(ggplot2)
plot(vc_k5, st_coordinates(coords_centroides), col = "blue", pch = 8, cex = 0.1)

Análisis La malla de vecindad espacial construida con los cinco cantones más cercanos a cada uno (K = 5) refleja una conectividad homogénea entre los territorios. Esto significa que todos los cantones están vinculados con sus cinco vecinos inmediatos, logrando así una distribución equilibrada en todo el país. Esta configuración asegura que ningún cantón quede excluido del análisis espacial y que la matriz de pesos espaciales (W) abarque de forma adecuada todo el territorio nacional. No obstante, es importante señalar que el hecho de tener una buena conectividad visual entre cantones no implica necesariamente la existencia de autocorrelación espacial entre las variables analizadas..

Agregar los enlaces de los vecinos a los centroides

library(ggplot2)
plot(wk5, coords = st_coordinates(coords_centroides), col = "red")

Análisis:

Se visualizan las relaciones de proximidad definidas por la matriz W, en la cual cada cantón se conecta con sus cinco vecinos más próximos. Esto genera una red de enlaces densa y bien distribuida, que abarca incluso áreas remotas como Galápagos. De esta manera, se garantiza que el análisis espacial sea sólido y que todas las regiones estén representadas en la evaluación de los patrones espaciales.

Mostrar centroides

library(ggplot2)
library(sf)
geom <- st_geometry(shape_canton)
centroides <- st_centroid(geom)
plot(geom, border = "black", col = rgb(1, 1, 0, alpha = 0))
points(st_coordinates(centroides), col = "red", pch = 20, cex = 1)

La gráfica muestra puntos rojos por cantón, que corresponde al centroide o punto geométrico central de cada cantón. Identificados para resumir la ubicación de cada cantón en un solo punto.

##Datos transpuesto para sacar índices de Moran anuales

library(readxl)
datosmoran <- read_excel("transpuestos_moran.xlsx")
New names:
• `` -> `...1`
summary(datosmoran)
      ...1      Provincia          ID_CANTON         Número_personas_15añosomás
 Min.   :  1   Length:221         Length:221         Min.   :   1454           
 1st Qu.: 56   Class :character   Class :character   1st Qu.:   8662           
 Median :111   Mode  :character   Mode  :character   Median :  18320           
 Mean   :111                                         Mean   :  57131           
 3rd Qu.:166                                         3rd Qu.:  41156           
 Max.   :221                                         Max.   :2110191           
   P_Ocupada        P_Desocupada    P_Fuera_fuerza_trabajo
 Min.   :    493   Min.   :   104   Min.   :   489        
 1st Qu.:   4343   1st Qu.:   650   1st Qu.:  3583        
 Median :   8551   Median :  1452   Median :  8670        
 Mean   :  29671   Mean   :  4782   Mean   : 22678        
 3rd Qu.:  20338   3rd Qu.:  3784   3rd Qu.: 18016        
 Max.   :1279545   Max.   :192461   Max.   :792938        
View(datosmoran)

###Unir shape cantonal con datos de Moran

shape_merge <- merge(shape_canton, datosmoran , by ="ID_CANTON")
print(class(datosmoran))
[1] "tbl_df"     "tbl"        "data.frame"
print(str(datosmoran))
tibble [221 × 7] (S3: tbl_df/tbl/data.frame)
 $ ...1                      : num [1:221] 1 2 3 4 5 6 7 8 9 10 ...
 $ Provincia                 : chr [1:221] "Azuay" "Azuay" "Azuay" "Azuay" ...
 $ ID_CANTON                 : chr [1:221] "Cuenca" "Girón" "Gualaceo" "Nabón" ...
 $ Número_personas_15añosomás: num [1:221] 458829 9089 31337 11189 20087 ...
 $ P_Ocupada                 : num [1:221] 270600 4381 16491 4625 10417 ...
 $ P_Desocupada              : num [1:221] 20794 501 1658 570 972 ...
 $ P_Fuera_fuerza_trabajo    : num [1:221] 167435 4207 13188 5994 8698 ...
NULL
print(class(shape_canton))
[1] "sf"         "data.frame"
print(str(shape_canton))
Classes 'sf' and 'data.frame':  221 obs. of  13 variables:
 $ D_R       : chr  NA NA NA NA ...
 $ D_R_B     : chr  NA NA NA NA ...
 $ D_R_A     : chr  NA NA NA NA ...
 $ DPA_VALOR : int  0 0 0 0 0 0 0 0 0 0 ...
 $ DPA_ANIO  : chr  "2011" "2011" "2011" "2011" ...
 $ DPA_CANTON: chr  "0101" "0102" "0103" "0104" ...
 $ ID_CANTON : int  101 102 103 104 105 106 107 108 109 110 ...
 $ DPA_DESCAN: num  NA NA NA NA NA NA NA NA NA NA ...
 $ DPA_PROVIN: chr  "01" "01" "01" "01" ...
 $ DPA_DESPRO: chr  "AZUAY" "AZUAY" "AZUAY" "AZUAY" ...
 $ CODIGO    : num  101 102 103 104 105 106 107 108 109 110 ...
 $ CANTON    : chr  "Cuenca" "Giron" "Gualaceo" "Nabon" ...
 $ geometry  :sfc_MULTIPOLYGON of length 221; first list element: List of 1
  ..$ :List of 1
  .. ..$ : num [1:8046, 1:2] 678670 678671 678671 678675 678695 ...
  ..- attr(*, "class")= chr [1:3] "XY" "MULTIPOLYGON" "sfg"
 - attr(*, "sf_column")= chr "geometry"
 - attr(*, "agr")= Factor w/ 3 levels "constant","aggregate",..: NA NA NA NA NA NA NA NA NA NA ...
  ..- attr(*, "names")= chr [1:12] "D_R" "D_R_B" "D_R_A" "DPA_VALOR" ...
NULL

###############Indice de Moran###########

P_Ocupada<-moran.test(datosmoran$P_Ocupada, listw = wk5, zero.policy = TRUE);P_Ocupada

    Moran I test under randomisation

data:  datosmoran$P_Ocupada  
weights: wk5    

Moran I statistic standard deviate = 0.79086, p-value = 0.2145
alternative hypothesis: greater
sample estimates:
Moran I statistic       Expectation          Variance 
     0.0191672234     -0.0045454545      0.0008989982 

Análisis El análisis del índice de Moran revela que los niveles de ocupación en los cantones analizados no presentan un patrón espacial significativo. El valor del índice (0.0192) es muy cercano a cero, lo que indica una autocorrelación espacial prácticamente nula, es decir, los niveles de ocupación parecen distribuirse de manera aleatoria en el territorio. Esto se ve reforzado por el valor del p (0.21), que supera ampliamente el umbral convencional de 0.05, lo que implica que cualquier posible agrupación observada podría ser producto del azar y no de una relación espacial real.

Aunque el índice muestra una ligera tendencia positiva, esta no es lo suficientemente marcada como para concluir que exista un patrón de concentración o similitud espacial entre cantones vecinos. En resumen, no se puede afirmar que existan zonas geográficas en las que los cantones cercanos compartan niveles similares de ocupación; más bien, estos parecen distribuirse sin un orden espacial evidente.

#transformar shape con datos

shape_canton <- st_transform(shape_merge, crs = 4326)

#Location #plot(shape_canton)

library(leaflet)
leaflet(shape_canton) %>%
  addPolygons(stroke = FALSE, fillOpacity = 0.5, smoothFactor = 0.5) %>%
  addTiles()

#Plotting variable productividad en Google maps #t_crs(shape_canton) # Si no está en EPSG:4326

library(leaflet)
qpal<-colorQuantile("Blues", shape_canton$P_Ocupada, n=9) 
leaflet(shape_canton) %>%
  addPolygons(stroke = FALSE, fillOpacity = 0.6, smoothFactor = 0.5, color = ~qpal(shape_canton$P_Ocupada)) %>%
  addTiles() %>% 
  addLegend(pal = qpal, 
            values = shape_canton$P_Ocupada, 
            title = "Índice de Productividad")

Crear mapa con marcadores en OpenStreetMap(ejemplo con coordenadas Zamora, Guayaquil, Ambato) (sucursales de tiendas)

library(leaflet)
coords <- data.frame(lon = c(-78.95488, -79.897453 , -78.61675 ), lat = c(-4.06685, -2.203816, -1.24908), name = c("Centro A", "Centro B", "Centro C"))
leaflet() %>%
  addTiles() %>%
  addMarkers(data = coords, ~lon, ~lat, popup = ~name)

Análisis: En el presente análisis, se han marcado en el mapa los cantones solicitados como puntos de referencia. Esta representación facilita la identificación visual de su ubicación dentro del contexto nacional o regional, permitiendo observar de manera clara en qué parte del país se encuentran, cómo se distribuyen entre sí y qué relación espacial guardan con otras ciudades importantes. Esta visualización es un insumo fundamental para complementar análisis más profundos sobre temas como desarrollo económico, niveles de ocupación, movilidad, accesibilidad o planificación territorial.

Conectar puntos con líneas (ejemplo con coordenadas Guayaquil -Zamora)

library(leaflet)
leaflet() %>%
  addTiles() %>%
  addPolylines(lng = c(-79.897453, -78.95488), lat = c(-2.203816, -4.06685), color = "red", weight = 2)

Análisis

Los mapas que conectan puntos con líneas nos permiten visualizar las relaciones directas entre territorios, como trayectorias o enlaces funcionales entre cantones, en este caso entre Guayaquil y Zamora.

Crear mapa de calor (con puntos de ejemplo)

library(leaflet.extras)
coords <- data.frame(lon = c(-78.95488, -79.897453 , -78.61675), lat = c(-4.06685, -2.203816, -1.24908), intensity = c(300, 900, 600))
leaflet() %>%
  addTiles() %>%
  addHeatmap(data = coords, lat = ~lat, lng = ~lon, intensity = ~intensity, blur = 5, max = 1)

Análisis

Los mapas de calor con puntos fijos nos permiten identificar zonas de alta concentración o intensidad de una variable, como la cantidad de empleo o áreas con fuerte potencial económico. En este caso se analiza la intencidad de personas ocupadas en los cantones de Zamora, Guayaquil y Ambato, observando que entre Guayaquil, Ambato y Zamora, Guayaquil es quien tine mayor concentración de personas ocupadas.

Otro mapa de calor

Paleta de colores basada en la variable ‘P_Desocupada’

Mapa de coropletas con ggplot2 (color por variable continua)

library(ggplot2)
ggplot(data = shape_canton) +
  geom_sf(aes(fill = shape_canton$P_Desocupada)) + 
  scale_fill_viridis_c() +
  theme_minimal() +
  labs(title = "Índice de Productividad por Cantón")

Crear mapa con capas de diferentes variables

library(ggplot2)
ggplot(data = shape_canton) +
  geom_sf(aes(fill = P_Ocupada)) + 
  geom_sf(data = shape_canton, aes(fill =  P_Ocupada), color = "white", size = 0.5) +
  scale_fill_viridis_c() +
  theme_minimal() +
  labs(title = "Mapa con Capas de Diferentes Variables")

library(ggplot2)
ggplot(data = shape_canton) +
geom_sf(aes(fill = P_Ocupada)) +
geom_sf(data = shape_canton, aes(fill = P_Ocupada), color = "white", size = 0.5) +
scale_fill_viridis_c() +
theme_minimal() +
labs(title = "Mapa con Capas de Diferentes Variables")

`