🪧 Introducción

En el contexto de las democracias contemporáneas, las protestas son formas públicas de acción colectiva que articulan y expresan demandas sociales. Este fenómeno es especialmente relevante en Argentina, país en el que la calle y los espacios públicos han sido históricamente escenarios de disputas sociales, reivindicaciones, descontentos y demandas. En este sentido, la frecuencia y naturaleza de estas manifestaciones reflejan no solo el pulso de la sociedad argentina, sino también sus dinámicas de cambio y resistencia.

En el presente análisis propongo indagar cómo se distribuyen y evolucionan las protestas sociales a través del espacio y del tiempo. Con este objetivo, realizaré un detallado procesamiento de datos sobre protestas pacíficas geolocalizadas y normalizadas por población entre 2018-2023. Adicionalmente, y mediante técnicas de análisis espacial, buscaré identificar patrones en la ocurrencia de las protestas, ofreciendo así una visión más clara de las dinámicas de movilización social en el país.

Para alcanzar este objetivo, utilizaré métodos de análisis espacial que incluyen la evaluación de la autocorrelación espacial mediante la I de Moran y el Análisis de Indicadores Locales de Asociación Espacial (LISA, por sus siglas en inglés). Estas herramientas no solo facilitarán la comprensión de las tendencias generales, sino que también permitirán examinar las particularidades regionales y locales de las protestas.

📄 Fuentes de datos

Para este estudio usaremos:

  • Datos del Armed Conflict Location & Event Dataset (ACLED), una base de datos pública y de acceso abierto que recopila y registra datos detallados sobre protestas sociales, atentados terroristas y eventos vinculados a conflictos armados en todo el mundo. A los efectos de este análisis, emplearemos datos sobre protestas pacíficas en Argentina observadas desde el 1 de enero de 2018 hasta el 31 de octubre de 2023.
  • Una capa de información geoespacial, en formato vectorial, con los departamentos y partidos de la República Argentina desarrollada por el Instituto Geográfico Nacional.
  • Un dataset de Poblaciones, la plataforma para la consulta y georreferenciación de información social de la Argentina, con información demográfica sobre población por departamentos y partidos.

🎓 Enfoque metodológico

Utilizaremos métodos de análisis espacial, incluyendo la evaluación de la autocorrelación espacial mediante la I de Moran y el método Local Indicators of Spatial Association (LISA), principalmente por dos razones.

  1. La I de Moran es una herramienta estadística que mide la autocorrelación espacial en un conjunto de datos. Esto significa que, en principio, podremos evaluar si las protestas en Argentina están distribuidas de manera aleatoria, agrupadas o dispersas en el espacio.

  2. El Análisis LISA, por su parte, nos permitirá ir más allá del análisis global de la I de Moran y examinar las relaciones espaciales a nivel local. Con LISA, en efecto, identificaremos hotspots y coldspots de protestas. Esto es importante para entender la distribución geográfica de las protestas y determinar si ciertas regiones son particularmente activas o inactivas en términos de actividad de protesta.

En suma, mientras que la I de Moran nos aportará una visión general, LISA nos facilitará un desglose a nivel local, revelando variaciones espaciales particulares que podrían pasar desapercibidas en un análisis global. Al descomponer la autocorrelación espacial en componentes locales, LISA nos ayudará a identificar áreas específicas donde las protestas son significativamente más altas o más bajas que el promedio, así como regiones que se desvían de las tendencias espaciales generales.

📚 Carga de librerías

library(sf)
library(tidyverse)
library(spdep)
library(tmap)
library(leaflet)
library(ggplot2)
library(reactable)

📂 Procesamiento de datos

En primer lugar, cargaremos los datos que necesitamos. En este caso, y como ya mencioné anteriormente, trabajaremos con tres: uno que contiene información sobre protestas, otro que cuenta con información geoespacial de partidos y departamentos de Argentina, y un tercero con datos demográficos del país.

Protestas <- read.csv("Data/Argentina_ACLED.csv")
Departamentos <- read.csv("Data/Departamentos.csv")
Poblacion <- read.csv("Data/Poblacion.csv")

El dataset Protestas contiene 12.823 datos geolocalizados de protestas pacíficas en el país registradas entre enero de 2018 y octubre de 2023. En función de esto, transformaremos a Protestas en un objeto geoespacial sf (simple features), especificando las columnas de longitud y latitud para crear geometrías de puntos con el sistema de referencia de coordenadas WGS 84 (CRS 4326).

Protestas_Geo <- Protestas %>%
  mutate(long = longitude, lat = latitude) %>%
  st_as_sf(coords = c("longitude", "latitude"), crs = 4326)

Haremos lo mismo con Departamentos, para que ambos datasets compartan el sistema de referencia de coordenadas WGS 84 (CRS 4326).

Departamentos <- st_as_sf(Departamentos, wkt = "geom", crs = 4326)

Y de la base Poblacion, que tiene 37 variables, seleccionaremos solo dos y le cambiaremos los nombres para facilitar el tratamiento de los datos.

Poblacion <- Poblacion %>% 
  select(Código.de.departamento., Población.total) %>% 
  rename(in1 = Código.de.departamento., 
         poblacion = Población.total)

Hemos realizado las transformaciones más importantes, pero necesitamos algunas más. En principio, Departamentos ofrece la variable in1 que sirve de identificador de cada observación. Sin embargo, para procesar los datos de manera más ordenada, crearemos una nueva variable que se llame ID_Dpto.

Departamentos <- st_make_valid(Departamentos) %>% 
  mutate(ID_Dpto = row_number())

También vamos crear una nueva variable llamada geom_departamento en el conjunto de datos Departamentos, donde cada fila contendrá la geometría sf correspondiente de ese departamento. Este paso nos facilitará la unión de datasets que haremos más adelante.

Departamentos$geom_departamento <- st_geometry(Departamentos)

Seguidamente, realizaremos un join espacial entre Protestas y Departamentos, uniendo las filas de ambos datasets cuando la geometría de una protesta se encuentre dentro de la geometría de un partido o departamento.

Protestas_Geo <- st_join(Protestas_Geo, Departamentos, join = st_within)

Y también haremos otro join, de tipo no espacial, entre Protestas y Poblacion en base a la columna común in1.

Protestas_Geo <- left_join(Protestas_Geo, Poblacion, by = "in1")

Como consecuencia de las uniones entre datasets, Protestas tiene ahora 12.823 observaciones y 60 variables, pero solo necesitamos algunas de ellas para nuestro análisis. Procederemos entonces a seleccionar columnas específicas, agruparlas por año y departamento, calcular el número de protestas y las protestas per cápita para cada grupo, y eliminar filas duplicadas.

Protestas_Geo <- Protestas_Geo %>%
  select(in1, year, poblacion, geometry, geom_departamento, ID_Dpto, long, lat, admin1)
Protestas_Geo <- Protestas_Geo %>% 
  group_by(in1, year) %>% 
  mutate(numero_protestas = n()) %>%
  mutate(Protestas_Capita = numero_protestas / poblacion) %>% 
  distinct() %>% 
  ungroup()

Por último, crearemos un nuevo dataset para aislar las protestas del año 2018, nuestro primer año de análisis.

Dataset_2018 <- Protestas_Geo %>% 
  st_drop_geometry() %>%
  select(-geom_departamento) %>% 
  filter(year == 2018) %>%
  full_join(Departamentos, by = "ID_Dpto") %>% 
  select(ID_Dpto, numero_protestas, Protestas_Capita, geom, long, lat) %>% 
  mutate(numero_protestas = replace_na(numero_protestas, 0),
    Protestas_Capita = replace_na(Protestas_Capita, 0)) %>% 
  rename(geometry = geom) %>% 
  distinct()

Nuestro nuevo Dataset_2018 cuenta con 588 observaciones y 6 variables: el ID de cada departamento; el número de protestas en ese departamento para el año 2018; el cálculo de protestas per capita; la columna geometry que contiene las geometrías espaciales de cada fila; y las coordenadas de latitud y longitud que emplearemos para una primera visualización de datos.

head(Dataset_2018)
## # A tibble: 6 × 6
##   ID_Dpto numero_protestas Protestas_Capita                       geometry  long
##     <int>            <int>            <dbl>             <MULTIPOLYGON [°]> <dbl>
## 1     141               51        0.0000929 (((-65.16097 -26.79094, -65.1… -65.2
## 2     528              277        0.000423  (((-57.99681 -34.87523, -57.9… -58.0
## 3      61              230        0         (((-58.4333 -34.60269, -58.43… -58.5
## 4     140                5        0.0000881 (((-58.01652 -34.78027, -58.0… -57.9
## 5      57                4        0.0000123 (((-58.19107 -34.73808, -58.1… -58.2
## 6     398               74        0.0000620 (((-60.65944 -32.83391, -60.6… -60.6
## # ℹ 1 more variable: lat <dbl>

Solo nos resta convertir a Dataset_2018 en un objeto geoespacial para poder trabajar, más adelante, con las geometrías espaciales almacenadas en la variable geometry.

Dataset_2018 <- st_as_sf(Dataset_2018, sf_column_name = "geometry")

📊 Análisis descriptivo

⚠️️ Nota: el análisis descriptivo se presentará a modo de ejemplo únicamente para el año 2018.

En el año 2018 se registraron un total de 1898 protestas en la República Argentina, es decir, un promedio de 5.2 protestas por día. Visualizadas en un mapa, se ven así.

leaflet(Dataset_2018) %>%
  addProviderTiles(providers$CartoDB.Positron) %>%
  addCircles(~long, ~lat,
    radius = ~numero_protestas * 500,
    color = "#F8766D",
    fillOpacity = 0.8)

Para ganar más profundidad en el análisis, podríamos visualizar qué días y qué meses fueron más activos en términos de protestas. Para ello, primero convertiremos la variable event_date de Protestas a un formato de fecha, y luego crearemos un nuevo conjunto de datos (Protestas_Diarias_2018) que resume el número de protestas por día para el año 2018.

Protestas$event_date <- as.Date(Protestas$event_date, format = "%d %B %Y")
Protestas_Diarias_2018 <- Protestas %>%
  filter(year == 2018) %>% 
  group_by(event_date) %>%
  summarise(protest_count = n())

Finalmente, visualizaremos nuestros datos.

ggplot(Protestas_Diarias_2018, aes(x = event_date, y = protest_count)) +
  geom_line(color = "#F8766D") +
  scale_x_date(date_labels = "%B", date_breaks = "2 months") +
  labs(x = "Mes", y = "Cantidad de Protestas",
       title = "Protestas pacíficas en Argentina en 2018",
       subtitle = "Registro diario de un total anual de n = 1898 observaciones",
       caption = "\n Elaboración personal en base a datos de ACLED") +
  theme_test() +
  theme(legend.position = "bottom",
        legend.box = "vertical",
        plot.title = element_text(
          face = "bold",
          colour = "#3C3C3C",
          size = 20),
        plot.subtitle = element_text(
          colour = "#838383",
          size = 12),
        plot.caption = element_text(
          colour = "#838383",
          hjust = 0,
          margin = margin(r = 20)))

Como se observa en el gráfico, los meses de marzo y abril fueron los que registraron la mayor cantidad de protestas, destacando especialmente el 25 de marzo de 2018, día en el que se contabilizaron 47 movilizaciones.

Pero hasta aquí hemos analizado datos agregados a nivel nacional y, dada la matriz federal de Argentina, sería interesante preguntarnos qué provincias han tenido mayor actividad de protestas en sus territorios.

Para ello crearemos un resumen de las protestas agrupadas por año y provincia (year y admin1), calculando la cantidad total de protestas por año y el porcentaje de protestas por provincia respecto al total anual.

Resumen_Protestas <- Protestas %>%
  group_by(year, admin1) %>%
  summarize(protestas_pcia = n()) %>%
  ungroup() %>%
  group_by(year) %>%
  mutate(total_protestas = sum(protestas_pcia)) %>%
  mutate(porcentaje_pcia = (protestas_pcia / total_protestas) * 100) %>%
  mutate(admin1 = ifelse(admin1 == "Ciudad Autonoma de Buenos Aires", "CABA", admin1)) %>%
  rename(provincia = admin1)
reactable(Resumen_Protestas)

Del total de protestas, 536 tuvieron lugar en la Provincia de Buenos Aires (28.24%), 300 en Chubut (15.81%) y 230 en la Ciudad Autónoma de Buenos Aires (12.12%).

El porcentaje de protestas para el resto de las provincias se puede visualizar en el plot a continuación.

ggplot(Resumen_Protestas %>% filter(year == 2018),
  aes(x = reorder(provincia, porcentaje_pcia),
    y = porcentaje_pcia,
    fill = as.factor(year))) +
  geom_bar(stat = "identity") +
  scale_y_continuous(limits = c(0, 30)) +
  labs(title = "Protestas pacíficas por provincia en 2018",
    subtitle = "Porcentajes sobre un total de n = 1898 observaciones",
    caption = "\n Elaboración personal en base a datos de ACLED",
    x = NULL,
    y = NULL) +
  theme_test() +
  coord_flip() +
  geom_text(aes(label = paste0(round(
    porcentaje_pcia, 2), "%")), hjust = -0.2, size = 2.5) +
  theme(legend.position = "none",
    axis.ticks = element_blank(),
    plot.title = element_text(
      face = "bold",
      colour = "#3C3C3C",
      size = 20),
    plot.subtitle = element_text(colour = "#838383", size = 12),
    plot.margin = margin(10, 10, 30, 10),
    plot.caption = element_text(colour = "#838383",
      hjust = 0,
      margin = margin(r = 20)))

Los datos presentados hasta aquí ofrecen una visión descriptiva general de las protestas en Argentina durante el año 2018. Este análisis proporciona una comprensión básica de la frecuencia y distribución de las protestas, pero no profundiza en las complejidades y matices de sus tendencias geográficas. Para ir más allá de este nivel descriptivo, entonces, es necesario explorar y revelar patrones espaciales que podrían permanecer ocultos con un enfoque general.

📈 Análisis con I de Moran

El Análisis de Asociación Espacial de Moran, conocido como I de Moran, es una medida de autocorrelación espacial que se utiliza para evaluar si un patrón espacial es regular, aleatorio o agrupado.

Al aplicar el I de Moran a nuestro estudio de las protestas en Argentina, podremos evaluar si existe una autocorrelación espacial en la distribución de estas protestas. En otras palabras, determinaremos si las protestas tienden a ocurrir geográficamente cerca unas de otras de una manera que no es aleatoria, lo que podría indicar patrones específicos de agrupamiento o dispersión en el contexto geográfico argentino.

Para ello, el primer paso es generar los datos vecinos de cada polígono usando poly2nb().

w_18 <- poly2nb(Dataset_2018, row.names = "geometry")

En segundo lugar, convertiremos el objeto de vecindad w_18 en un objeto de lista de pesos (lwb_18) con un estilo binario (“B”), permitiendo áreas sin vecinos (zero.policy = TRUE) para análisis espaciales.

lwb_18 <- nb2listw(w_18, style = "B", zero.policy = TRUE)

Por último, calcularemos el I de Moran global para la variable Protestas_Capita de Dataset_2018 con el objetivo de analizar la autocorrelación espacial de las protestas per capita por partido y/o departamento.

I_Moran_18 <- moran(Dataset_2018$Protestas_Capita, listw = lwb_18, 
                     n = length(w_18), S0 = Szero(lwb_18),
                     zero.policy = TRUE)[1]
I_Moran_18
## $I
## [1] 0.3642744

Un I de Moran de 0.3642744 indica una autocorrelación espacial positiva moderada. En términos de análisis geoespacial, esto sugiere que existe una tendencia donde valores similares de protestas per capita tienden a estar geográficamente agrupados más de lo que se esperaría por azar. Sin embargo, es crucial evaluar también si esta autocorrelación espacial positiva moderada es estadísticamente significativa.

moran.test(Dataset_2018$Protestas_Capita, lwb_18, zero.policy = TRUE)
## 
##  Moran I test under randomisation
## 
## data:  Dataset_2018$Protestas_Capita  
## weights: lwb_18  n reduced by no-neighbour observations
##   
## 
## Moran I statistic standard deviate = 17.634, p-value < 2.2e-16
## alternative hypothesis: greater
## sample estimates:
## Moran I statistic       Expectation          Variance 
##      0.3630354177     -0.0017094017      0.0004278198

La prueba de significatividad señala que la autocorrelación espacial de las protestas per capita es estadísticamente significativa (p-value < 2.2e-16), lo que indica que la agrupación de valores similares es muy probablemente no aleatoria.

Correlograma de Moran

Para complementar nuestro análisis, y entender mejor la naturaleza y la escala de la agrupación espacial en los datos, podemos construir un Correlograma de Moran. El correlograma nos permitirá visualizar cómo la autocorrelación espacial de las protestas per capita varía a lo largo de diferentes distancias o niveles de vecindad (hasta un orden de cinco).

Correlograma_2018 <- sp.correlogram(neighbours = w_18,
                         var = Dataset_2018$Protestas_Capita,
                         order = 5, 
                         method = "I",
                         style = "W",
                         zero.policy = TRUE)
Correlograma_2018
## Spatial correlogram for Dataset_2018$Protestas_Capita 
## method: Moran's I
##            estimate expectation    variance standard deviate Pr(I) two sided
## 1 (586)  0.30769322 -0.00170940  0.00049174          13.9526       < 2.2e-16
## 2 (585)  0.30955904 -0.00171233  0.00025705          19.4146       < 2.2e-16
## 3 (583)  0.20784429 -0.00171821  0.00016400          16.3638       < 2.2e-16
## 4 (583)  0.08945280 -0.00171821  0.00012593           8.1244       4.495e-16
## 5 (583)  0.08938330 -0.00171821  0.00010268           8.9903       < 2.2e-16
##            
## 1 (586) ***
## 2 (585) ***
## 3 (583) ***
## 4 (583) ***
## 5 (583) ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Si graficamos el correlograma, advertimos que la autocorrelación espacial de las protestas per capita es estadísticamente significativa y positiva hasta cinco niveles de vecindad, pero disminuye gradualmente en magnitud con el aumento de la distancia. En otras palabras, la tendencia de agrupación espacial de las protestas decrece a medida que la distancia entre las áreas aumenta.

plot(Correlograma_2018)

Diagrama de dispersión de Moran

Adicionalmente al correlograma, un diagrama de dispersión de Moran puede ayudarnos a comprender nuestros resultados.

Moran_Plot18 <- moran.plot(Dataset_2018$Protestas_Capita, 
                 listw = lwb_18, 
                 zero.policy = TRUE, 
                 labels = as.character(Dataset_2018$ID_Dpto))

En el diagrama de dispersión vemos que existe una relación positiva entre las protestas per capita y su equivalente rezagado espacialmente, tal como lo indica la pendiente ascendente de la línea de ajuste.

La mayoría de los puntos se concentran cerca del origen, lo que sugiere que para muchos partidos o departamentos, tanto las protestas per capita como su rezago espacial son bajos. Sin embargo, hay puntos significativamente por encima de la línea de expectativa —la línea punteada horizontal—, particularmente la observación 422. Esto indica que hay áreas con un número significativamente más alto de protestas per capita también rodeadas por áreas con números altos. Esto es indicativo de autocorrelación espacial positiva y agrupamiento de altas tasas de protestas per capita en ciertas áreas.

I de Moran local

El próximo paso de nuestro análisis consiste en calcular el I de Moran local. Así como el I de Moran global ofrece una visión general de la autocorrelación en toda el área estudiada, el I de Moran local permite identificar clústers o áreas específicas donde los valores son significativamente más altos o más bajos que el promedio, y cómo dichos clusters están distribuidos espacialmente.

Local_Moran18 <- localmoran(Dataset_2018$Protestas_Capita, listw = lwb_18, zero.policy = TRUE)
head(Local_Moran18)
##            Ii          E.Ii       Var.Ii       Z.Ii Pr(z != E(Ii))
## 1 -0.10414368 -1.710361e-04  0.100050113 -0.3287080      0.7423764
## 2 -1.84637539 -3.589070e-02 20.758091393 -0.3973756      0.6910905
## 3  0.25679649 -4.374727e-04  0.255889074  0.5085134      0.6110933
## 4  0.16090206 -1.283497e-04  0.075080823  0.5876833      0.5567449
## 5 -0.24793347 -4.035698e-04  0.235258500 -0.5103346      0.6098171
## 6 -0.01338854 -3.116937e-06  0.001823375 -0.3134687      0.7539246

En los resultados, cada fila representa un partido o departamento diferente en nuestro conjunto de datos. Y la primera observación, por ejemplo:

  • Tiene un Ii (I de Moran local) de -0.10414368, valor que indica una autocorrelación espacial negativa (es decir, esta área tiende a estar rodeada por áreas con valores opuestos).

  • Muestra un valor esperado bajo la hipótesis de aleatoriedad (E.Ii) de -0.0001710361. Este es el valor esperado del índice si no hubiera autocorrelación espacial.

  • La Var.Ii (Varianza del índice) es de 0.100050113, lo que indica la variabilidad del índice en esta área.

  • Tiene una Z.Ii (Puntuación Z) de -0.3287080, que sugiere que el índice observado está ligeramente por debajo del valor esperado. El Z.Ii es una medida estadística que indica cuántas desviaciones estándar el valor observado del índice (Ii) se desvía del valor esperado (E.Ii).

  • Su valor de significancia o p-value (Pr(z != E(Ii))) es alto (0.7423764), cuestión que sugiere que no hay suficiente evidencia para rechazar la hipótesis de aleatoriedad. Es decir que, para esta observación, la autocorrelación observada podría ser producto del azar.

Para continuar con nuestro análisis LISA, usaremos solamente las variables Ii y Pr(z != E(Ii)).

🗺 Análisis LISA

Ahora ya estamos en condiciones de proceder al análisis LISA. Para ello le sumaremos a Dataset_2018 los resultados del I de Moran local y categorizaremos nuestros departamentos según el tipo y la significancia estadística de la autocorrelación espacial local.

La categorización de los departamentos se hará en cinco categorías: baja-baja, alta-baja, baja-alta, alta-alta y no significativa.

Dataset_2018 <- cbind(Dataset_2018,
             Moran_Plot18[c("x", "wx")],
             Local_Moran18,
             attributes(Local_Moran18)$quadr) %>% 
  rename(p = Pr.z....E.Ii..) %>% 
  mutate(quad = ifelse(p > 0.05, 5, mean),
         quad = factor(quad, levels = 1:5,
                       labels = c("Low-Low", "High-Low", 
                                  "Low-High", "High-High", 
                                  "No Signif")))
table(Dataset_2018$quad)
## 
##   Low-Low  High-Low  Low-High High-High No Signif 
##         0         0        11        30       545

Según los resultados, tenemos:

  • 0 observaciones low-low: partidos o departamentos con valores bajos rodeados por áreas también con valores bajos.
  • 0 observaciones high-low: partidos o departamentos con valores altos rodeados por áreas con valores bajos.
  • 11 observaciones low-high: partidos o departamentos con valores bajos rodeados por áreas con valores altos.
  • 30 observaciones high-high: partidos o departamentos con valores altos rodeados por áreas también con valores altos.
  • 545 observaciones no significativas: partidos o departamentos donde la autocorrelación espacial no es estadísticamente significativa.

Y ahora, finalmente, podemos visualizar los hotspots de protestas en la Argentina durante 2018. Para ello, construiremos la paleta de colores para visualizar los datos.

LISA_col <- c("blue","skyblue2", "lightpink", "red", "white")
names(LISA_col) <- levels(Dataset_2018$quad)

Y visualizaremos los resultados, a continuación, en un plot y en un mapa.

Dataset_2018 %>% 
  st_drop_geometry() %>% 
  ggplot(aes(x = x, y = wx)) + 
  geom_hline(linetype = 2, yintercept = mean(Dataset_2018$wx)) +
  geom_vline(linetype = 2, xintercept = mean(Dataset_2018$x)) +
  geom_point(aes(fill = quad), shape = 21) + 
  geom_smooth(method = lm, se = F, linetype = 2, color = "tomato4" ) + 
  labs(x = "Protestas per capita", y = "Lag") +
  scale_fill_manual(values = LISA_col, drop = F) +
  theme_test()

LISA_18 <- Dataset_2018 %>% 
  ggplot() +
  geom_sf(aes(fill = quad)) +
  scale_fill_manual(values = LISA_col, drop = F) +
  labs(title = "Mapa LISA de protestas sociales",
       subtitle = "Hotspots en Argentina durante 2018",
       caption = "\n marialasa.ar") +
  theme_test() +
  theme(plot.title = element_text(
    face = "bold",
    colour = "#3C3C3C",
    size = 15),
    plot.subtitle = element_text(colour = "#838383", size = 10),
    plot.margin = margin(10, 10, 30, 10),
    plot.caption = element_text(colour = "#838383",
                                hjust = 0,
                                margin = margin(r = 20))) +
    guides(fill = guide_legend(title = NULL))
LISA_18

Mapas LISA 2019-2023

Repliqué el análisis utilizando el I de Moran y LISA para cada año dentro de nuestro marco temporal. Por razones de brevedad, no incluyo todo el código desarrollado, pero realicé simplemente una adaptación de los métodos utilizados para procesar datos del año 2018.

A modo informativo, los I de Moran globales para cada año fueron:

  • 0.3843008 (p-value < 2.2e-16) para el año 2019
  • 0.5633781 (p-value < 2.2e-16) para el año 2020
  • 0.4147352 (p-value < 2.2e-16) para el año 2021
  • 0.5858161 (p-value < 2.2e-16) para el año 2022
  • 0.6952575 (p-value < 2.2e-16) para el año 2023

Es decir, todos indican autocorrelación global positiva con significancia estadística.

En términos de análisis LISA, se comparten a continuación los mapas con hotposts de protestas.

💡 Hallazgos y limitaciones

1. Altos niveles de movilización en áreas con baja densidad poblacional

La concentración de protestas entre 2018-2023, según valores absolutos, gravita en torno a la Provincia de Buenos Aires. Este patrón sugiere que las áreas con alta densidad poblacional tienden a ser epicentros de movilizaciones. Además, la relevancia de la Provincia de Buenos Aires, en términos electorales y productivos, la convierte en un escenario clave para el despliegue de protestas. Esta particularidad trae aparejada la consecuente atención de los medios de comunicación.

Sin embargo, cuando las protestas se normalizan por población y se aplica un análisis de indicadores locales de asociación espacial, se detectan hotspots de movilizaciones en regiones “periféricas”. Esto revela que, aunque en términos absolutos las protestas parecen concentrarse en la Provincia de Buenos Aires, en términos relativos a la población otras áreas experimentan también una alta intensidad de manifestaciones.

El análisis LISA, en este sentido, nos ha ayudado a identificar áreas que difieren del patrón espacial general, resaltando regiones donde la frecuencia de protestas es alta en comparación con su población. Esto sugiere que los factores impulsores de las protestas podrían ser independientes de la densidad demográfica de una zona determinada.

2. Protestas con matriz subestatal

En tanto país federal compuesto por unidades subestatales autónomas, Argentina experimenta protestas y movilizaciones que reflejan agendas específicas de cada región.

Los hotspots detectados en los mapas indican que las marchas articulan reclamos específicos de esas provincias que no necesariamente son extrapolables a nivel federal. Este patrón se hace evidente en el dataset Protestas cuando se examinan en detalle los principales actores involucrados y sus motivos de reclamo.

  • 2018: Chubut (petroleros) y Santa Cruz (docentes)
  • 2019: La Pampa (femicidio de Valeria Coggiola), Chubut (petroleros) y Santa Cruz (docentes)
  • 2020: Chubut (petroleros) y Salta (protestas anti-cuarentena)
  • 2021: Chubut (Ley de Minería), Santa Cruz (docentes) y Catamarca (megaminería)
  • 2022: Chubut (Ley de Minería), Santa Cruz (docentes), Catamarca (megaminería) y La Pampa (reclamos salariales de trabajadores municipales y provinciales)
  • 2023: Jujuy (reforma constitucional provincial), Chubut (docentes) y Neuquén (planes sociales provinciales)

El análisis LISA, en este sentido, ha reflejado la dinámica federal de la Argentina, cuestión importante para comprender mejor la dispersión geográfica y las especificidades regionales de un país diverso y descentralizado.

3. Limitaciones

  • Dependencia de la definición de vecindad: el análisis LISA que hemos empleado se basa en una definición preestablecida de vecindad o proximidad espacial, la cual puede influir significativamente en los resultados. Si la definición de vecindad no captura adecuadamente la realidad de las interacciones espaciales en el contexto de las protestas, los hotspots identificados podrían no reflejar con precisión la distribución real de las manifestaciones.

  • Sensibilidad a la escala y la agregación: los resultados de LISA pueden variar según la escala y el nivel de agregación de los datos. Esto significa que la identificación de hotspots de nuestro estudio podría cambiar si los datos se analizan agregados a nivel provincial. Este fenómeno, conocido como el problema de la unidad espacial modificable (MAUP), sugiere que los patrones espaciales identificados pueden ser “manufacturados” por la escala de análisis utilizada.

  • Limitación en la interpretación de causas subyacentes: aunque LISA es útil para identificar patrones espaciales, no proporciona información directa sobre las causas subyacentes de estos patrones. Por lo tanto, los hotspots detectados necesitan ser interpretados con cautela y en conjunto con un análisis contextual y cualitativo para entender las razones detrás de las concentraciones de protestas.

📖 Bibliografía consultada


⚠️ Disclaimer: el presente estudio se ha realizado utilizando datos públicos y abiertos. Los resultados y conclusiones aquí presentados son producto del análisis y procesamiento de información accesible al público. Cualquier interpretación, conclusión o decisión basada en este estudio recae bajo la responsabilidad del usuario. Se recomienda verificar la fuente de los datos y considerar posibles limitaciones en la precisión y actualidad de la información utilizada.

💻 Más proyectos de datos en marialasa.ar.