Entrega 1

Author

Mateo Cordoba

library(readr)
library(dplyr)
library(stringr)
library(corrplot)
library(ggplot2)
library(kableExtra)
setwd("~/EspecializacionUNAL/TopicosEstadistica_2024/Global Protests from 1990 to March 2020")

data <- read_csv("data.csv")
kable(head(data))
id Country Year region protest protesterviolence protesterdemand1 protesterdemand2 protesterdemand3 protesterdemand4 stateresponse1 stateresponse2 stateresponse3 stateresponse4 stateresponse5 stateresponse6 stateresponse7 Electoral_Score Liberal_Score Participatory_Score Deliberative_Score Egalitarian_Score HDI_Score violenceStatus predicted_prob
201990001 Canada 1990 North America 1 0 political behavior, process labor wage dispute NA NA ignore NA NA NA NA NA NA 0.834 0.759 0.58 0.756 0.719 0.85 0 0.2993848
201990002 Canada 1990 North America 1 0 political behavior, process NA NA NA ignore NA NA NA NA NA NA 0.834 0.759 0.58 0.756 0.719 0.85 0 0.2993848
201990003 Canada 1990 North America 1 0 political behavior, process NA NA NA ignore NA NA NA NA NA NA 0.834 0.759 0.58 0.756 0.719 0.85 0 0.2993848
201990004 Canada 1990 North America 1 1 land farm issue NA NA NA accomodation NA NA NA NA NA NA 0.834 0.759 0.58 0.756 0.719 0.85 1 0.2993848
201990005 Canada 1990 North America 1 1 political behavior, process NA NA NA crowd dispersal arrests accomodation NA NA NA NA 0.834 0.759 0.58 0.756 0.719 0.85 1 0.2993848
201990006 Canada 1990 North America 1 0 police brutality NA NA NA crowd dispersal shootings NA NA NA NA NA 0.834 0.759 0.58 0.756 0.719 0.85 1 0.2993848

Este conjunto de datos registra todas las protestas ocurridas desde 1990 hasta marzo de 2020, integrando información detallada sobre demandas de los manifestantes, respuestas gubernamentales, ubicación, identidad de los protestantes y niveles de violencia asociados. Combina datos del proyecto Mass Mobilization, centrado en los movimientos ciudadanos contra gobiernos en 162 países, con indicadores de democracia del V-Dem Dataset y medidas de desarrollo humano del HDI. Las variables incluyen el país, región, año, demandas principales de los protestantes, respuestas estatales específicas, puntuaciones de gobernanza y desarrollo, así como una probabilidad predicha asociada a la violencia en cada evento. Este dataset es una herramienta valiosa para analizar dinámicas sociales, políticas y económicas a nivel global.

summary(data)
       id              Country               Year         region         
 Min.   :2.020e+08   Length:12652       Min.   :1990   Length:12652      
 1st Qu.:2.052e+09   Class :character   1st Qu.:1999   Class :character  
 Median :3.732e+09   Mode  :character   Median :2008   Mode  :character  
 Mean   :4.264e+09                      Mean   :2007                     
 3rd Qu.:6.452e+09                      3rd Qu.:2014                     
 Max.   :9.102e+09                      Max.   :2019                     
                                                                         
    protest  protesterviolence protesterdemand1   protesterdemand2  
 Min.   :1   Min.   :0.000     Length:12652       Length:12652      
 1st Qu.:1   1st Qu.:0.000     Class :character   Class :character  
 Median :1   Median :0.000     Mode  :character   Mode  :character  
 Mean   :1   Mean   :0.264                                          
 3rd Qu.:1   3rd Qu.:1.000                                          
 Max.   :1   Max.   :1.000                                          
                                                                    
 protesterdemand3   protesterdemand4   stateresponse1     stateresponse2    
 Length:12652       Length:12652       Length:12652       Length:12652      
 Class :character   Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character   Mode  :character  
                                                                            
                                                                            
                                                                            
                                                                            
 stateresponse3     stateresponse4     stateresponse5     stateresponse6
 Length:12652       Length:12652       Length:12652       Mode:logical  
 Class :character   Class :character   Class :character   NA's:12652    
 Mode  :character   Mode  :character   Mode  :character                 
                                                                        
                                                                        
                                                                        
                                                                        
 stateresponse7     Electoral_Score  Liberal_Score    Participatory_Score
 Length:12652       Min.   :0.0140   Min.   :0.0060   Min.   :0.0090     
 Class :character   1st Qu.:0.3520   1st Qu.:0.2110   1st Qu.:0.2030     
 Mode  :character   Median :0.5490   Median :0.4030   Median :0.3460     
                    Mean   :0.5661   Mean   :0.4467   Mean   :0.3703     
                    3rd Qu.:0.8430   3rd Qu.:0.7550   3rd Qu.:0.5820     
                    Max.   :0.9220   Max.   :0.8960   Max.   :0.8070     
                                                                         
 Deliberative_Score Egalitarian_Score   HDI_Score      violenceStatus  
 Min.   :0.0060     Min.   :0.034     Min.   :0.1970   Min.   :0.0000  
 1st Qu.:0.2410     1st Qu.:0.213     1st Qu.:0.5580   1st Qu.:0.0000  
 Median :0.4150     Median :0.331     Median :0.6940   Median :0.0000  
 Mean   :0.4556     Mean   :0.421     Mean   :0.6795   Mean   :0.4406  
 3rd Qu.:0.7270     3rd Qu.:0.680     3rd Qu.:0.8070   3rd Qu.:1.0000  
 Max.   :0.8860     Max.   :0.885     Max.   :0.9550   Max.   :1.0000  
                                      NA's   :216                      
 predicted_prob  
 Min.   :0.2379  
 1st Qu.:0.3096  
 Median :0.4554  
 Mean   :0.4395  
 3rd Qu.:0.5392  
 Max.   :0.7754  
 NA's   :216     

El dataset contiene 12,652 observaciones y abarca eventos desde 1990 hasta 2019.

La variable protest indica que cada registro corresponde a un evento de protesta, con valores mínimos y máximos que sugieren su presencia (1) en todas las filas.

La variable protesterviolence, que refleja si hubo violencia asociada, muestra que aproximadamente el 26.4% de los eventos incluyen violencia (media = 0.264).

Las demandas de los manifestantes (protesterdemand1 a protesterdemand4) y las respuestas estatales (stateresponse1 a stateresponse7) son variables categóricas que registran las motivaciones de las protestas y las reacciones gubernamentales.

En cuanto a las puntuaciones de gobernanza y desarrollo (Electoral_Score, Liberal_Score, Participatory_Score, Deliberative_Score, Egalitarian_Score y HDI_Score), se observa una amplia variabilidad entre países y eventos, con valores mínimos cercanos a 0, reflejando bajos niveles de desarrollo o democracia, y máximos que alcanzan 0.9, indicando contextos de mayor desarrollo y democracia. Finalmente, la probabilidad predicha de violencia (predicted_prob) tiene una media de 0.44, mostrando un riesgo moderado de violencia en los eventos registrados.

missing_values_summary <- sapply(data, function(column) sum(is.na(column)))

# Mostrar el número de valores faltantes por columna
missing_values_summary <- as.data.frame(missing_values_summary)
names(missing_values_summary) <- "Missing_Values"

# Mostrar las columnas con sus valo

head(missing_values_summary,25)
                    Missing_Values
id                               0
Country                          0
Year                             0
region                           0
protest                          0
protesterviolence                0
protesterdemand1                 1
protesterdemand2             10091
protesterdemand3             12317
protesterdemand4             12011
stateresponse1                  23
stateresponse2               10280
stateresponse3               11896
stateresponse4               12453
stateresponse5               11995
stateresponse6               12652
stateresponse7               11893
Electoral_Score                  0
Liberal_Score                    0
Participatory_Score              0
Deliberative_Score               0
Egalitarian_Score                0
HDI_Score                      216
violenceStatus                   0
predicted_prob                 216

Tras analizar los valores faltantes en el dataset, se identificaron varias columnas con una alta proporción de valores ausentes, como protesterdemand2, protesterdemand3, protesterdemand4, stateresponse2, stateresponse3, stateresponse4, stateresponse5, y stateresponse7. Además, la columna stateresponse6 no contiene ningún dato válido. Dado que estas columnas tienen más del 80% de valores faltantes, se considera que aportan poca o ninguna información relevante para el análisis. Por lo tanto, se procederá a eliminarlas del dataset para simplificar el preprocesamiento y enfocar el análisis en las variables con información más completa.

columns_to_remove <- c("protesterdemand2", "protesterdemand3", "protesterdemand4", 
                       "stateresponse2", "stateresponse3", "stateresponse4", 
                       "stateresponse5", "stateresponse6", "stateresponse7")
data <- data[ , !(names(data) %in% columns_to_remove)]

statistical summary

numeric variables

numeric_data <- data %>%
  select(where(is.numeric))

central_tendency_summary <- data.frame(
  Variable = colnames(numeric_data),
  Mean = sapply(numeric_data, mean, na.rm = TRUE),
  Median = sapply(numeric_data, median, na.rm = TRUE),
  Mode = sapply(numeric_data, function(x) {
    ux <- unique(x)
    ux[which.max(tabulate(match(x, ux)))]
  })
)

row.names(central_tendency_summary) <- NULL

kable(central_tendency_summary)
Variable Mean Median Mode
id 4.263609e+09 3.732010e+09 2.0199e+08
Year 2.006627e+03 2.008000e+03 2.0150e+03
protest 1.000000e+00 1.000000e+00 1.0000e+00
protesterviolence 2.639899e-01 0.000000e+00 0.0000e+00
Electoral_Score 5.660691e-01 5.490000e-01 8.9000e-01
Liberal_Score 4.467354e-01 4.030000e-01 4.2100e-01
Participatory_Score 3.702861e-01 3.460000e-01 6.3900e-01
Deliberative_Score 4.556037e-01 4.150000e-01 4.3500e-01
Egalitarian_Score 4.209568e-01 3.310000e-01 3.2900e-01
HDI_Score 6.794709e-01 6.940000e-01 NA
violenceStatus 4.406418e-01 0.000000e+00 0.0000e+00
predicted_prob 4.395304e-01 4.553887e-01 NA

Categoric variables

categoric_vars <- c("protest","protesterviolence","protesterdemand1",
                    "stateresponse1", "violenceStatus")

categoric_vars_df <- data[,categoric_vars]

sapply(categoric_vars_df, function(col) table(col))
$protest
col
    1 
12652 

$protesterviolence
col
   0    1 
9312 3340 

$protesterdemand1
col
         labor wage dispute             land farm issue 
                       1421                         409 
           police brutality political behavior, process 
                        657                        7964 
price increases, tax policy       removal of politician 
                        966                         848 
        social restrictions 
                        386 

$stateresponse1
col
   accomodation         arrests        beatings crowd dispersal          ignore 
            830             874             186            3313            6841 
       killings       shootings 
            219             366 

$violenceStatus
col
   0    1 
7077 5575 

La variable protest está completamente llena con el valor 1, lo que indica que todas las filas corresponden a protestas.

La variable protesterviolence muestra que la mayoría de las protestas no involucraron violencia (0), con 9312 casos frente a 3340 con violencia (1).

En cuanto a las demandas de los manifestantes protesterdemand1, la mayor parte de las protestas se enfocaron en cuestiones de comportamiento político y procesos, representando una proporción significativa con 7964 casos, seguido por otros temas como disputas laborales y aumento de precios.

La variable stateresponse1 refleja la respuesta estatal, donde la opción más común fue la ignorancia o falta de respuesta a las protestas, con 6841 casos, seguida de dispersión de multitudes y arrestos. Finalmente.

la variable violenceStatus muestra una distribución más equilibrada entre los estados de violencia, con 7077 protestas sin violencia (0) y 5575 con violencia (1).

Data visualization

num_col <- c("Year","Electoral_Score", "Liberal_Score","Participatory_Score",
             "Deliberative_Score", "Egalitarian_Score", "HDI_Score", "predicted_prob")

par(mfrow = c(3,3))

for( i in num_col){
  
  
  hist(numeric_data[[i]], main = i)
}

categoric data

par(mfrow = c(3, 2))

barplot(table(data$Country), main = "Country")
barplot(table(data$region), main = "Region")
barplot(table(data$protesterviolence), main = "protester violence")
barplot(table(data$protesterdemand1) , main ="protesterdemand1")
barplot(table(data$stateresponse1)   , main ="stateresponse1")
barplot(table(data$violenceStatus)   , main ="violenceStatus")

par(mfrow = c(2,4))

for(i in num_col){
  
  boxplot(numeric_data[,i], main = i)
  
}

Bivariate analysis

corrplot(cor(numeric_data))
Warning in cor(numeric_data): the standard deviation is zero

Correlaciones fuertes entre Electoral_Score, Liberal_Score, Participatory_Score, Deliberative_Score, y Egalitarian_Score:

Estas variables miden diferentes aspectos de la democracia electoral, por lo que se espera que estén altamente correlacionadas. Los puntajes son evaluaciones de las características democráticas de un país, por lo que es natural que compartan patrones comunes. Las altas correlaciones entre estas variables son completamente coherentes con la naturaleza de las mediciones.

Una relación negativa moderada entre el puntaje electoral y la violencia de los protestantes (-0.10) puede ser interpretada como que en contextos donde hay una menor calidad democrática (puntajes más bajos de Electoral_Score), es más probable que ocurran protestas violentas. Esto podría reflejar un descontento de los ciudadanos con las condiciones democráticas, lo que lleva a que las protestas se vuelvan más intensas.

La correlación positiva de 0.675 entre estas dos variables tiene sentido, ya que ambas indican la presencia de violencia, pero desde diferentes perspectivas. Mientras que protesterviolence mide si los protestantes están involucrados en actos violentos, violenceStatus refleja si el estado ha respondido con violencia (arrestos, disparos, etc.). Es lógico que las protestas violentas tengan una alta probabilidad de estar asociadas con una respuesta violenta del estado.

La correlación de -0.22 entre Electoral_Score y violenceStatus es moderada y negativa. Esto podría sugerir que en países con mayores puntajes democráticos en términos electorales, las protestas tienden a ser menos violentas. Sin embargo, esta correlación podría ser más compleja, ya que la violencia no solo depende de los puntajes democráticos, sino también de otros factores sociales, políticos y económicos.

Relaciones no esperadas

Las correlaciones entre violenceStatus y las variables ideológicas (Liberal_Score, Participatory_Score, etc.) son negativas y relativamente bajas, lo que no es necesariamente esperado. Esto sugiere que las protestas violentas no están directamente relacionadas con los aspectos ideológicos de la democracia electoral. Sin embargo, esto podría indicar que la violencia en las protestas puede ser más influenciada por factores externos a las ideologías políticas, como las respuestas estatales o el contexto socioeconómico.

Las correlaciones cercanas a cero entre HDI_Score y las demás variables podrían ser sorprendentes, dado que se esperaría que el Índice de Desarrollo Humano (HDI) influencie en algunos aspectos de las protestas, como la participación política y la violencia. Sin embargo, la falta de correlación fuerte puede sugerir que otros factores son más determinantes en la ocurrencia de las protestas y su naturaleza (violenta o no), más allá del nivel de desarrollo humano de un país.