La iconografía y su efecto en actitudes ciudadanas hacia medidas estatales contra el crimen

Limpieza de data

LLamamos la base con etiquetas, puesto que muchas de ellas al ser codificadas automaticamente toman valores que no estan presentes en las alternativas al marcar.

eti = read.csv("https://docs.google.com/spreadsheets/d/e/2PACX-1vSuDuOoPAfN13nPNiIZ5CGxMewBzmnqASy-Z2JaYHjNOU0MoFsqg8Ng41wDJESWDR9T16atTYpSUSCd/pub?gid=458192067&single=true&output=csv")

De la base general, solo nos quedamos con las variables correspondientes a nuestro estudio

eti_limpio = eti[, c("genero", "edad", "ocup", "edu",
                      "cpc_cond", "cpc_act1", "cpc_act2", 
                      "check_com", "seg")]

eti_limpio = eti_limpio[-c(1,2), ]

Se eliminan los “NA” de las variables que deseamos analizar

eti_limpio <- eti_limpio[complete.cases(eti_limpio[, c("cpc_cond", "cpc_act1", "cpc_act2", "check_com")]), ]

Se procede a recodificar las variables puesto que necesitamos los valores numericos, y en la base autogenerada existen valores como “11” cuando la escala propuesta solo llega hasta 10. Esto se produce ya que valores como el 0 o el 10 tienen una descripcion. Ejem: “10. Muy probable” , “Totalmente en desacuerdo 0”, etc.

eti_limpio$cpc_cond = gsub("10\\. Muy probable", "10", eti_limpio$cpc_cond)
eti_limpio$cpc_cond = gsub("0\\. Nada probable", "0", eti_limpio$cpc_cond)
eti_limpio$cpc_act1 = gsub("Totalmente de acuerdo 10", "10", eti_limpio$cpc_act1)
eti_limpio$cpc_act1 = gsub("Totalmente en desacuerdo 0", "0", eti_limpio$cpc_act1)
eti_limpio$cpc_act2 = gsub("Lo apoyo totalmente 10", "10", eti_limpio$cpc_act2)
eti_limpio$cpc_act2 = gsub("No lo apoyo en absoluto 0", "0", eti_limpio$cpc_act2)
eti_limpio$cpc_cond = as.numeric(eti_limpio$cpc_cond)
eti_limpio$cpc_act1 = as.numeric(eti_limpio$cpc_act1)
eti_limpio$cpc_act2 = as.numeric(eti_limpio$cpc_act2)

Nos quedamos solo con los casos que han cumpkido con el filtro de la variable “Check_com” el cual nos indica que el sujeto de estudio presto atencion a la encuesta

eti_limpio = eti_limpio[eti_limpio$check_com %in% c("Policías en un operativo", "No se mostró ninguna foto"), ]

Crear el indice aditivo

Ahora creamos el indice aditivo, el cual nos servira para el analisis de las variables.

eti_limpio$indice_apoyo_seguridad = (eti_limpio$cpc_cond + eti_limpio$cpc_act1 + eti_limpio$cpc_act2) / 30

T test: indice y, el tratamiento y el control

Aplicamos la prueba t de Student para las muestras independientes donde:

Grupo A: “Policías en un operativo” Grupo B: “No se mostró ninguna foto”

t.test(indice_apoyo_seguridad ~ check_com, data = eti_limpio , var.equal = FALSE)
## 
##  Welch Two Sample t-test
## 
## data:  indice_apoyo_seguridad by check_com
## t = -0.79292, df = 50.323, p-value = 0.4315
## alternative hypothesis: true difference in means between group No se mostró ninguna foto and group Policías en un operativo is not equal to 0
## 95 percent confidence interval:
##  -0.14046748  0.06094367
## sample estimates:
## mean in group No se mostró ninguna foto  mean in group Policías en un operativo 
##                                0.572619                                0.612381

Gráficos de las diferencias de medias

Grafico de la diferencia de medias del Indice en base a los grupos de tratamiento y control

library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.2
ggplot(eti_limpio, aes(x = indice_apoyo_seguridad, fill = check_com)) +
  geom_histogram(position = "dodge", bins = 10) +
  facet_wrap(~ check_com) +
  theme_minimal()

ggplot(eti_limpio, aes(x = indice_apoyo_seguridad, fill = check_com)) +
  geom_histogram(position = "identity", alpha = 0.6, bins = 15) +
  facet_wrap(~ check_com) +
  labs(title = "Distribución del índice de apoyo por grupo",
       x = "Índice de apoyo a medidas de seguridad (0 a 1)",
       fill = "Grupo") +
  theme_minimal()

ggplot(eti_limpio, aes(x = check_com, y = indice_apoyo_seguridad, fill = check_com)) +
  geom_boxplot(alpha = 0.8) +
  labs(
    title = "Comparación del apoyo político al Estado punitivo",
    subtitle = "Según presencia de imagen en la nota de prensa",
    x = "Condición experimental",
    y = "Índice de apoyo al Estado punitivo"
  ) +
  scale_fill_manual(values = c("#76d7c4", "#4a235a")) +  # azul y rojo suave
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", size = 15),
    plot.subtitle = element_text(size = 12),
    legend.position = "none"
  )

ggplot(eti_limpio, aes(sample = indice_apoyo_seguridad)) +
  stat_qq() +
  stat_qq_line() +
  facet_wrap(~ check_com) +
  labs(title = "índice por grupo") +
  theme_minimal()

Descriptivos de las variables que forman parte del indice aditivo

library(tidyverse)
## Warning: package 'tidyverse' was built under R version 4.4.2
## Warning: package 'readr' was built under R version 4.4.2
## Warning: package 'dplyr' was built under R version 4.4.2
## Warning: package 'stringr' was built under R version 4.4.2
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr     1.1.4     ✔ readr     2.1.5
## ✔ forcats   1.0.0     ✔ stringr   1.5.1
## ✔ lubridate 1.9.3     ✔ tibble    3.2.1
## ✔ purrr     1.0.2     ✔ tidyr     1.3.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag()    masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
glimpse(eti_limpio)
## Rows: 98
## Columns: 10
## $ genero                 <chr> "Hombre", "Hombre", "Mujer", "Mujer", "Mujer", …
## $ edad                   <chr> "21", "", "51", "24", "22", "21", "", "", "21",…
## $ ocup                   <chr> "Estudia", "No trabaja ni estudia", "Trabaja", …
## $ edu                    <chr> "Universitaria", "Posgrado", "Posgrado", "Unive…
## $ cpc_cond               <dbl> 3, 10, 4, 7, 7, 8, 6, 5, 8, 10, 8, 5, 4, 10, 5,…
## $ cpc_act1               <dbl> 10, 5, 0, 4, 10, 7, 0, 6, 4, 10, 8, 8, 2, 3, 5,…
## $ cpc_act2               <dbl> 0, 0, 0, 4, 10, 7, 0, 6, 9, 10, 8, 7, 1, 6, 5, …
## $ check_com              <chr> "Policías en un operativo", "Policías en un ope…
## $ seg                    <chr> "Nada seguro/a", "Poco seguro/a", "Algo seguro/…
## $ indice_apoyo_seguridad <dbl> 0.4333333, 0.5000000, 0.1333333, 0.5000000, 0.9…

Variable: cpc_cond

# Cargar librería
library(dplyr)

# Tabla de resumen para cpc_cond
eti_limpio |> 
  summarise(
    Mínimo = min(cpc_cond, na.rm = TRUE), 
    Mediana = median(cpc_cond, na.rm = TRUE), 
    Desviación = sd(cpc_cond, na.rm = TRUE),
    Media = mean(cpc_cond, na.rm = TRUE),
    Máximo = max(cpc_cond, na.rm = TRUE)
  )
##   Mínimo Mediana Desviación    Media Máximo
## 1      0       6   2.880976 5.734694     10
library(ggplot2)

ggplot(eti_limpio, aes(x = cpc_cond)) + 
  geom_histogram(bins = 10, fill = "#1565c0", color = "white", alpha = 0.9) +
  labs(
    title = "Obediencia política al Estado punitivo",
    subtitle = "¿Qué tan probable es que denuncie un crimen si es testigo?",
    x = "Probabilidad de denunciar (0 = nada probable, 10 = muy probable)",
    y = "Frecuencia de respuestas"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", size = 15),
    plot.subtitle = element_text(size = 12, margin = margin(b = 10)),
    axis.title = element_text(size = 13),
    axis.text = element_text(size = 11)
  )

Variable: cpc_act1

# Tabla de resumen para cpc_act1
eti_limpio |> 
  summarise(
    Mínimo = min(cpc_act1, na.rm = TRUE), 
    Mediana = median(cpc_act1, na.rm = TRUE), 
    Desviación = sd(cpc_act1, na.rm = TRUE),
    Media = mean(cpc_act1, na.rm = TRUE),
    Máximo = max(cpc_act1, na.rm = TRUE)
  )
##   Mínimo Mediana Desviación    Media Máximo
## 1      0       6   2.706815 6.153061     10
ggplot(eti_limpio, aes(x = cpc_act1)) + 
  geom_histogram(bins = 10, fill = "#76d7c4", color = "white", alpha = 0.9) +
  labs(
    title = "Apoyo político al Estado punitivo",
    subtitle = "¿Qué tan de acuerdo está con la política del Gobierno contra la criminalidad?",
    x = "Grado de acuerdo (0 = totalmente en desacuerdo, 10 = totalmente de acuerdo)",
    y = "Frecuencia de respuestas"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", size = 15),
    plot.subtitle = element_text(size = 12, margin = margin(b = 10)),
    axis.title = element_text(size = 13),
    axis.text = element_text(size = 11)
  )

Variable: cpc_act2

# Tabla de resumen para cpc_act2
eti_limpio |> 
  summarise(
    Mínimo = min(cpc_act2, na.rm = TRUE), 
    Mediana = median(cpc_act2, na.rm = TRUE), 
    Desviación = sd(cpc_act2, na.rm = TRUE),
    Media = mean(cpc_act2, na.rm = TRUE),
    Máximo = max(cpc_act2, na.rm = TRUE)
  )
##   Mínimo Mediana Desviación    Media Máximo
## 1      0     6.5   3.039262 6.142857     10
ggplot(eti_limpio, aes(x = cpc_act2)) + 
  geom_histogram(bins = 10, fill = "#1e8449", color = "white", alpha = 0.9) +
  labs(
    title = "Apoyo al funcionario que comunica la política punitiva",
    subtitle = "¿Qué tanto apoya la iniciativa del Ministro del Interior contra la criminalidad?",
    x = "Nivel de apoyo (0 = no lo apoyo en absoluto, 10 = lo apoyo totalmente)",
    y = "Frecuencia de respuestas"
  ) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", size = 15),
    plot.subtitle = element_text(size = 12, margin = margin(b = 10)),
    axis.title = element_text(size = 13),
    axis.text = element_text(size = 11)
  )

table(eti_limpio$check_com)
## 
## No se mostró ninguna foto  Policías en un operativo 
##                        28                        70

Analisis: genero con el indice aditivo

Solo usaremos hombre y mujer, por ende procedemos a filtrar la data

table(eti_limpio$genero)
## 
## Hombre  Mujer   Otro 
##     34     61      3
eti_filtrado <- eti_limpio |> 
  filter(genero %in% c("Hombre", "Mujer"))
table(eti_filtrado$genero)
## 
## Hombre  Mujer 
##     34     61

la pruba de T test: genero con el indice aditivo

t.test(indice_apoyo_seguridad ~ genero, data = eti_filtrado)
## 
##  Welch Two Sample t-test
## 
## data:  indice_apoyo_seguridad by genero
## t = -1.8927, df = 59.764, p-value = 0.06325
## alternative hypothesis: true difference in means between group Hombre and group Mujer is not equal to 0
## 95 percent confidence interval:
##  -0.195612915  0.005416836
## sample estimates:
## mean in group Hombre  mean in group Mujer 
##            0.5382353            0.6333333
# Solo con Hombre y Mujer
eti_filtrado <- eti_limpio |> 
  filter(genero %in% c("Hombre", "Mujer"))

ggplot(eti_filtrado, aes(x = genero, y = indice_apoyo_seguridad, fill = genero)) +
  geom_boxplot(alpha = 0.8) +
  labs(
    title = "Apoyo político al Estado punitivo según género",
    subtitle = "Comparación del índice compuesto de apoyo entre hombres y mujeres",
    x = "Género",
    y = "Índice de apoyo al Estado punitivo"
  ) +
  scale_fill_manual(values = c("Hombre" = "#64b5f6", "Mujer" = "#f48fb1")) +
  theme_minimal(base_size = 13) +
  theme(
    plot.title = element_text(face = "bold", size = 15),
    plot.subtitle = element_text(size = 12, margin = margin(b = 10)),
    legend.position = "none"
  )