SITUACIÓN PROBLEMA:

¿Cómo vamos en seguridad? Análisis del impacto de los factores institucionales en la percepción de seguridad en el AMM.

Limpieza de la base: (se limpia al inicio porque se usará para gráficos del contexto)

library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ISLR)
eav23 <- read.csv("eav23.csv")

# Filtramos la base de datos en las variables de interés 
eav23 <- eav23[, c("P93","sexo_num", "NUM_MUN", "P135", "CP4_1", "P144", "P126", "P137", "P109", "P118", "P99", "P115", "P119", "P120", "P101_1", "P101_2", "P101_3", "P101_4", "P101_5", "P136", "num_acciones_participacion_ciudadana", "Factor_CVNL")]

# La volvemos a filtrar en los Municipios del AMM
AMM <- c("6", "9", "21", "18", "26", "31", "39", "46", "19", "48", "49")
eav23 <- eav23 %>%
  filter(NUM_MUN %in% AMM)

#Renombramos las variables
eav23 <- eav23 %>%
  rename(MUNICIPIOS = NUM_MUN, 
         SEXO = sexo_num,
         EDAD = CP4_1,
         influencia.ciudadana.estado = P135,
         aprobacion.alcalde = P126, 
         aprobacion.gobernador = P137,
         aprobacion.fiscalia = P109,
         corrupcion.estado = P118, 
         INGRESO_MENSUAL_HOGAR = P144,
         INSEGURIDAD = P93, 
         impunidad = P99, 
         transparencia.gobierno = P115,
         corrupcion.municipio = P119,
         corrupcion.tramites = P120,
         desempeño.policia = P101_1,
         desempeño.fuerza.civil = P101_2,
         desempeño.guardia.nacional = P101_3,
         desempeño.ejercito = P101_4,
         desempeño.marina = P101_5,
         influencia.ciudadana.municipio = P136,
         numero.acciones.part.ciud = num_acciones_participacion_ciudadana
         )%>%
  mutate(MUNICIPIOS = case_when(
    MUNICIPIOS == 6 ~ "APODACA",
    MUNICIPIOS == 9 ~ "CADEREYTA",
    MUNICIPIOS == 18 ~ "GARCIA",
    MUNICIPIOS == 19 ~ "SAN PEDRO",
    MUNICIPIOS == 21 ~ "ESCOBEDO",
    MUNICIPIOS == 26 ~ "GUADALUPE",
    MUNICIPIOS == 31 ~ "JUAREZ",
    MUNICIPIOS == 39 ~ "MONTERREY",
    MUNICIPIOS == 46 ~ "SAN NICOLÁS",
    MUNICIPIOS == 48 ~ "SANTA CATARINA",
    MUNICIPIOS == 49 ~ "SANTIAGO",
    TRUE ~ "DESCONOCIDO" # Por si hay algún código no especificado
  ))

# Quitamos los 8888 y los 9999 y los na
eav23 <- eav23 %>%
  filter(if_all(c(MUNICIPIOS, SEXO, EDAD, influencia.ciudadana.estado, aprobacion.alcalde, aprobacion.gobernador, aprobacion.fiscalia, corrupcion.estado, INGRESO_MENSUAL_HOGAR, INSEGURIDAD, impunidad, transparencia.gobierno, corrupcion.municipio, corrupcion.tramites, desempeño.policia, desempeño.fuerza.civil, desempeño.guardia.nacional, desempeño.ejercito, desempeño.marina, influencia.ciudadana.municipio, numero.acciones.part.ciud), ~ !(. %in% c("8888", "9999"))))
eav23 <- na.omit(eav23)

# Las convertimos a factores/numéricos respectivamente
eav23 <- eav23 %>%
  mutate(MUNICIPIOS = as.factor(MUNICIPIOS),
         SEXO = as.factor(SEXO),
         EDAD = as.numeric(EDAD),
         influencia.ciudadana.estado = as.numeric(influencia.ciudadana.estado), 
         aprobacion.alcalde = as.factor(aprobacion.alcalde), 
         aprobacion.gobernador = as.factor(aprobacion.gobernador),
         aprobacion.fiscalia = as.factor(aprobacion.fiscalia),
         corrupcion.estado = as.numeric(corrupcion.estado),
         INGRESO_MENSUAL_HOGAR = as.numeric(INGRESO_MENSUAL_HOGAR),
         INSEGURIDAD = as.factor(INSEGURIDAD),
         impunidad = as.numeric(impunidad),
         transparencia.gobierno = as.factor(transparencia.gobierno),
         corrupcion.municipio = as.numeric(corrupcion.municipio),
         corrupcion.tramites = as.factor(corrupcion.tramites),
         desempeño.policia = as.numeric(desempeño.policia),
         desempeño.fuerza.civil = as.numeric(desempeño.fuerza.civil),
         desempeño.guardia.nacional = as.numeric(desempeño.guardia.nacional),
         desempeño.ejercito = as.numeric(desempeño.ejercito),
         desempeño.marina = as.numeric(desempeño.marina),
         influencia.ciudadana.municipio = as.numeric(influencia.ciudadana.municipio),
         numero.acciones.part.ciud = as.numeric(numero.acciones.part.ciud))

# Cambiamos los nombres de los factores y las dimensiones las reordenamos
eav23 <- eav23 %>%
  #mutate(SEXO = ifelse(SEXO== 0, "Hombre", "Mujer")) %>%
  mutate(influencia.ciudadana.estado = case_when(
    influencia.ciudadana.estado == 1~4,
    influencia.ciudadana.estado == 2~3,
    influencia.ciudadana.estado == 3~2,
    influencia.ciudadana.estado == 4~1
  )) %>%
  #mutate(aprobacion.alcalde = ifelse(aprobacion.alcalde== 0, "Desaprueba", "Aprueba")) %>%
  #mutate(aprobacion.gobernador = ifelse(aprobacion.gobernador== 0, "Desaprueba", "Aprueba")) %>%
  mutate(INSEGURIDAD = ifelse(INSEGURIDAD %in% c(1, 2), 0, 1))%>%
  #mutate(aprobacion.fiscalia = ifelse(aprobacion.fiscalia== 0, "Desaprueba", "Aprueba")) %>%
  mutate(corrupcion.estado = case_when(
    corrupcion.estado == 1~4,
    corrupcion.estado == 2~3,
    corrupcion.estado == 3~2,
    corrupcion.estado == 4~1
  )) %>%
  #mutate(transparencia.gobierno = ifelse(transparencia.gobierno== 0, "Si", "No")) %>%
  mutate(corrupcion.municipio = case_when(
    corrupcion.municipio == 1~4,
    corrupcion.municipio == 2~3,
    corrupcion.municipio == 3~2,
    corrupcion.municipio == 4~1
  )) %>%
   mutate(corrupcion.tramites = ifelse(corrupcion.tramites== 0, "Si", "No")) %>%
    mutate(influencia.ciudadana.municipio = case_when(
    influencia.ciudadana.municipio == 1~4,
    influencia.ciudadana.municipio == 2~3,
    influencia.ciudadana.municipio == 3~2,
    influencia.ciudadana.municipio == 4~1
  )) 

  
eav23 <- eav23 %>%
  mutate(SEXO = as.factor(ifelse(SEXO== 0, "Hombre", "Mujer"))) %>%
  mutate(aprobacion.alcalde = as.factor(ifelse(aprobacion.alcalde== 0, "Desaprueba", "Aprueba"))) %>%
  mutate(aprobacion.gobernador = as.factor(ifelse(aprobacion.gobernador== 0, "Desaprueba", "Aprueba"))) %>%
  mutate(aprobacion.fiscalia = as.factor(ifelse(aprobacion.fiscalia== 0, "Desaprueba", "Aprueba"))) %>%
  mutate(transparencia.gobierno = as.factor(ifelse(transparencia.gobierno== 0, "Si", "No"))) %>%
  mutate(INSEGURIDAD = as.factor(ifelse(INSEGURIDAD== 1, "Si", "No")))

# Establecemos la semilla y conjuntos de entrenamiento/ prueba que utilizaremos en todo el modelo: 
set.seed(1)
subset.train <- sample(1:nrow(eav23), nrow(eav23) * 0.7)
subset.test <- setdiff(1:nrow(eav23), subset.train)
subset.test.df <- eav23[-subset.train, ]
Inseguridad.test <- eav23$INSEGURIDAD[-subset.train]

# Establecemos un subconjunto de hombres y mujeres que nos servirá para contrastes a lo largo de la investigación: 
eav23.hombre <- eav23 %>%
  filter(SEXO == "Hombre")
eav23.mujer <- eav23 %>%
  filter(SEXO == "Mujer")

Introducción y Contexto:

La inseguridad es el principal tema que preocupa a las personas en México, esto al contar con dos dimensiones: por un lado, la objetiva, que se refiere a las tasas de delitos de las que se tiene registro; por otro, la dimensión subjetiva, esta se refiere al grado de temor y distintos sentimientos expresados por los individuos, que se ven encuentran presentes en distintas encuestas ( Focás & Kessler, 2015).

De acuerdo con la encuesta Así Vamos, en Nuevo León  el 38% de la población del AMM se siente insegura en su municipio (ver gráfico 1).

Gráfico 1. Percepción de inseguridad en el AMM.

library(ggplot2)
# Crear el gráfico de pastel con colores personalizados y tamaño ajustado
grafico.inseg <- ggplot(eav23, aes(x = "", fill = INSEGURIDAD,)) +
  geom_bar(width = 1) + 
  coord_polar(theta = "y") +
  scale_fill_manual(values = c("blueviolet", "gold1")) +  # Especificar los colores
  labs(fill = "¿Se percibe Insegurx?") +
  theme_void() +
  theme(legend.position = "bottom",
        plot.title = element_text(face = "bold", size = 10, family = "Arial")) +
  ggtitle("Distribución de Percepción de Inseguridad en el AMM")+
  geom_text(aes(label = paste(round((..count..)/sum(..count..) * 100), "%")), 
            stat = "count", position = position_stack(vjust = 0.5))

# Enseñar el gráfico:
grafico.inseg
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

Fuente: Elaboración propia con la base de datos de Cómo Vamos Nuevo León (2023).

En general, el 39% de las mujeres en el AMM dicen sentirse inseguras o muy inseguras, comparado con el 37% de los hombres.

Gráfico 2 y 3. Percepción de inseguridad en el AMM desglosada por sexo.

# Crear gráficos de pastel separados para hombres y mujeres
grafico_hombres <- ggplot(eav23.hombre, aes(x = "", fill = INSEGURIDAD)) +
  geom_bar(width = 1) + 
  coord_polar(theta = "y") +
  scale_fill_manual(values = c("blueviolet", "gold1")) +  # Colores personalizados
  labs(fill = "¿Se percibe Insegurx?") +
  theme_void() +
  theme(legend.position = "bottom",
        plot.title = element_text(face = "bold", size = 10, family = "Arial")) +
  ggtitle("Distribución de Percepción de Inseguridad en Hombres")+
geom_text(aes(label = paste(round((..count..)/sum(..count..) * 100), "%")), 
            stat = "count", position = position_stack(vjust = 0.5))

grafico_mujeres <- ggplot(eav23.mujer, aes(x = "", fill = INSEGURIDAD)) +
  geom_bar(width = 1) + 
  coord_polar(theta = "y") +
  scale_fill_manual(values = c("blueviolet", "gold1")) +  # Colores personalizados
  labs(fill = "¿Se percibe Insegurx?") +
  theme_void() +
  theme(legend.position = "bottom",
        plot.title = element_text(face = "bold", size = 10, family = "Arial")) +
  ggtitle("Distribución de Percepción de Inseguridad en Mujeres")+
  geom_text(aes(label = paste(round((..count..)/sum(..count..) * 100), "%")), 
            stat = "count", position = position_stack(vjust = 0.5))

# Mostrar los gráficos de pastel por separado
grafico_hombres

grafico_mujeres

Fuente: Elaboración propia con la base de datos de Cómo Vamos Nuevo León (2023).

Es preocupante que 1 de cada 3 personas del AMM se sienta insegura. Por lo que, procederemos a ver qué factores institucionales moldean esta percepción para al final terminar con recomendaciones basadas en nuestros hallazgos.

Población de estudio

La población de estudio comprende los municipios que conforman el área metropolitana de Monterrey, en el estado de Nuevo León, México. Estos municipios son Apodaca, Cadereyta, General Escobedo, García, Guadalupe, Juárez, Monterrey, San Nicolás de los Garza, San Pedro, Santa Catarina y Santiago. A través de este enfoque, se busca comprender cómo los factores institucionales influyen en la percepción de seguridad (ver gráfico 4).

Gráfico 4. Distribución de observaciones por municipio del AMM.

library(dplyr)

# Calcular los porcentajes por municipio
porcentajes <- eav23 %>%
  count(MUNICIPIOS) %>%
  mutate(porcentaje = n / sum(n) * 100)

# Crear el gráfico de pastel con porcentajes
ggplot(porcentajes, aes(x = "", y = porcentaje, fill = MUNICIPIOS)) +
  geom_bar(stat = "identity", width = 1) +
  geom_text(aes(label = paste0(round(porcentaje), "%")), 
            position = position_stack(vjust = 0.5)) +
  coord_polar(theta = "y") +
  labs(fill = "Municipio") +
  theme_void() +
  theme(legend.position = "bottom",  plot.title = element_text(face = "bold", size = 13, family = "Arial")) +
  ggtitle("Distribución de observaciones por Municipios en el AMM")

Fuente: Elaboración propia con la base de datos de Cómo Vamos Nuevo León (2023).

Se observa que, no se preguntó uniformemente entre municipios. Esto es bueno pues no sobrerepresenta municipios con menor población. Como por ejemplo, en Monterrey se preguntan más que en San Pedro, lo que hace sentido si comparamos la población de cada uno de estos municipios.

Una vez entendido el problema y navegado un poco en los datos de la encuesta, se procede enmarcar la problemática:

Definición de la problemática:

Como se estableció, nos basaremos en los factores institucionales. Los factores institucionales se refieren a las características y dinámicas de las instituciones que operan en una sociedad. Estas instituciones pueden incluir organismos gubernamentales, agencias públicas, organizaciones no gubernamentales, empresas privadas y otras entidades que desempeñan roles importantes en la sociedad y en la vida de las personas. Los factores institucionales pueden abarcar una variedad de aspectos, como la estructura organizativa, los procedimientos operativos, las políticas, las normas, la cultura organizativa y la interacción con otras instituciones y con la sociedad en general.

Éstos pueden influir significativamente en la percepción de inseguridad en un municipio de varias formas:

  • Eficiencia de las instituciones de seguridad: La capacidad de las instituciones locales, como la policía y los servicios de emergencia, para prevenir el crimen y responder a las emergencias puede impactar directamente en cómo perciben los residentes la seguridad en su comunidad. Si las instituciones son percibidas como efectivas y confiables, la sensación de seguridad puede aumentar. Por el contrario, si hay una percepción de corrupción, ineficiencia o falta de recursos en estas instituciones, la sensación de inseguridad puede aumentar.

  • Transparencia y rendición de cuentas: La transparencia en la gestión de las instituciones públicas, incluidas las encargadas de la seguridad, puede influir en la confianza que tienen los ciudadanos en ellas. Cuando las instituciones son transparentes y responsables ante la comunidad, es más probable que los residentes se sientan seguros y confiados en su capacidad para abordar los problemas de seguridad.

  • Participación ciudadana: La participación activa de la comunidad en la formulación de políticas de seguridad y en la colaboración con las instituciones puede contribuir a una sensación de seguridad. Cuando los residentes se sienten involucrados en la toma de decisiones y tienen la oportunidad de expresar sus preocupaciones y sugerencias, es más probable que perciban un mayor nivel de seguridad en su entorno.

  • Recursos y políticas de seguridad: La asignación de recursos adecuados a las instituciones de seguridad y la implementación de políticas efectivas pueden tener un impacto directo en la prevención del crimen y la reducción de la percepción de inseguridad. Si las instituciones cuentan con los recursos necesarios y adoptan políticas basadas en evidencia y mejores prácticas, es más probable que los residentes perciban un entorno más seguro.

  • Percepción de corrupción y abuso de poder: Cuando hay una percepción generalizada de corrupción o abuso de poder dentro de las instituciones locales, esto puede erosionar la confianza de los ciudadanos en el sistema de seguridad y contribuir a una mayor sensación de inseguridad. La percepción de que las instituciones no están trabajando en el mejor interés de la comunidad puede generar miedo y desconfianza entre los residentes.

En el siguiente apartado, se abordará cómo se buscó cada uno de estos factores en la encuesta. Se tomaron aquellos que eran similares o iguales y se da una fundamentación teórica para cada uno de ellos.

Pregunta de investigación planteada:

Con el marco que hemos desarrollado arriba, hemos planteado la pregunta de investigación de la siguiente manera: “¿Cómo es que los factores institucionales moldean la percepción de inseguridad en el AMM?” La pregunta de investigación plantea una indagación crucial en torno a la percepción de inseguridad entre los habitantes en el Área Metropolitana de Monterrey (AMM) y cómo esta percepción está moldeada por factores institucionales. El modelo nos llevará a la comprensión de cómo las estructuras institucionales, tales como políticas gubernamentales, sistemas legales, y servicios públicos afectan a la percecpión de seguridad.

Preselección de las variables y justificación de la selección

Para realizar nuestar regresión, hemos seleccionado las siguientes variables las cuales esperemos estén relacionadas a nuestra pregunta de investigación una vez hagamos nuestra regresión. Se específica el código en el que se encuentra en la base de datos, la pregunta que contesta el encuestado y la justificación teórica para su utilización.

Variable dependiente:

-P93:

  • ¿Qué tan seguro se siente en su municipio? Esta es nuestra variable de respuesta, ya que queremos saber qué tan inseguro perciben su municipio los individuos con respecto a otras variables.

  • Tipo de variable: int del 1-4 ordinal 1: muy seguro 2: seguro 3: poco seguro 4: muy inseguro

Variables independientes:

-sexo_num:

  • Esta variable nos sirve para ver la diferencia de la percepción de seguridad entre hombres y mujeres, pues en la encuesta de “Así vamos Nuevo León” existe una diferencia en el nivel de percepción.

  • Tipo de variable: int 0 = hombre 1 = mujer

-NUM_MUN:

  • Para poder filtrar los municipios que no son del AMM, así como para contrastar entre municipios del misma área los factores institucionales locales tal el desempeño del alcalde, etc.

  • Tipo de variable: int donde cada número representa a un municipio en específico de NL.

-P99:

  • ¿Qué tan probable considera que los delitos denunciados sean investigados y castigados por las autoridades?: La percepción de inseguridad también se ve influenciada por la percepción de impunidad que existe en su entorno (Herrera, 2015).

  • Tipo de variable: int del 1-4 ordinal 1: muy probable 2: probable 3: poco probable 4: nada probable

-P109:

  • La Fiscalía General de Justicia es la responsable de investigar y perseguir los delitos en Nuevo León, en términos generales: ¿Aprueba o desaprueba el trabajo realizado por la fiscalía?: La percepción que tienen las personas sobre las autoridades es crucial en la percepción de inseguridad. Al no existir una relación estrecha autoridad-ciudadano, esto puede desembocar en malentendidos y una solución parcial al problema (Herrera, 2012).

  • Tipo de variable: Int dicotómica 0 = desaprueba 1 = aprueba

-P118:

  • La corrupción consiste en el abuso de poder para beneficio propio ya sea en el sector público o en el privado. En su opinión, en el estado de Nuevo León la corrupción es una práctica: La corrupción es sin duda un factor importante en la percepción de inseguridad de los individuos. Esto porque se tiene la creencia de que todo el gobierno es corrupto y no hace nada por cambiar la situación, lo que desemboca en impunidad y lleva consigo una mala percepción de las instituciones (Herrera, 2012).

  • Tipo de variable: Int ordinal del 1-4 1 = muy frecuente 2= frecuente 3= poco frecuente 4 = no ocurre

-P126:

  • En términos generales, ¿aprueba o desaprueba el trabajo que ha hecho Nombre de ALCALDE/ALCALDESA)?: Los funcionarios públicos juegan un rol importante al momento en que las personas definen su percepción de inseguridad, pues sienten una lejanía con el funcionario y no encuentran la forma de pedir ayuda (Herrera, 2012).

  • Tipo de variable: Int dicotómica 0 = desaprueba 1 = aprueba

-P135:

  • ¿Cuánto considera que los ciudadanos pueden influir en las decisiones del gobierno del estado?: Los ciudadanos se perciben externos al sistema gubernamental y piensan que la única forma de incidir en política es a través del voto, por lo que no buscan otras formas de participación ciudadana. Esto afecta la percepción de inseguridad porque los ciudadanos no se sienten escuchados o tomados en cuenta por las autoridades (Herrera, 2012). Además, el INEGI detalló que la corrupción no sólo impacta en el derecho a un gobierno efectivo, sino que sus efectos son muy sensibles. (El Economista, 2023)

  • Tipo de variable: Int ordinal del 1-4 1= mucho 2= algo 3= poco 4= nada

-P137:

  • En términos generales, ¿aprueba o desaprueba el trabajo que ha hecho Samuel García?: La aprobación que tienen los gobernantes llega a tener cierta influencia en la percepción de seguridad de los ciudadanos. En nuestro país es de suma importancia el tema de la seguridad, por lo que una buena percepción del gobernador puede sugerir una baja percepción de inseguridad

  • Tipo de variable: Int dicotómica 0 = desaprueba 1 = aprueba

-P144:

  • Ingresos Mensuales: Nos servirá para poder contrastar las distintos outputs que nos de el modelo dependiendo del nivel económico de la muestra.

  • Tipo de variable: Int ordinal, mientras mayor sea la categoría, más dinero gana.

-CP4_1:

  • ¿Cuál es tu edad?: Nos servirá para poder contrastar las distintos outputs que nos de el modelo dependiendo de la edad de los encuestados

  • Tipo de variable: Numérica.

Justificación de la selección

Elegimos estas variables porque representan factores institucionales cruciales dentro del estado de derecho de nuestro país tales: gestión gubernamental, impunidad, corrupción, participación ciudadana, entre otros. Cada uno juega un rol muy importante en la vida cotidiana de los ciudadanos que impacta más allá de los actos cívicos o democráticos representativos tales el voto, marchas, etc. Queremos ver el impacto que éstos tienen en la percepción de seguridad, el cual es uno de los más grandes problemas comentados en la encuesta. Soria (2018) marca un vínculo teórico de estas variables. Para empezar, se habla de que la eficacia del poder ejecutivo en la implementación de políticas de seguridad, asignación de recursos y coordinación con otras instituciones (como la policía) afecta directamente la percepción de seguridad. Una gestión eficiente puede generar confianza en la capacidad del gobierno para abordar los problemas de seguridad, mientras que una gestión deficiente puede generar desconfianza y aumentar la sensación de inseguridad. Además, la capacidad de la fiscalía para investigar y procesar delitos también puede moldear la percepción ciudadana de seguridad. La corrupción dentro de las instituciones encargadas de hacer cumplir la ley socava la confianza de los ciudadanos en esas instituciones y puede generar una sensación de impunidad entre los delincuentes que se ve reflejada en su percepción de seguridad. Así mismo que, cuando los ciudadanos se sienten empoderados y participan en iniciativas comunitarias de seguridad, tienden a sentirse más seguros en sus vecindarios. Por otro lado, la falta de participación ciudadana puede llevar a una sensación de vulnerabilidad y desconfianza en las autoridades.

Por último, sería interesante ver cómo éstos pueden cambiar de acuerdo al sexo y localidad del encuestado, por lo que las pondremos a intercactuar con la variable sexo y municipio.Pues la violencia de género y respuesta institucional puede cambiar de municipio a municipio siendo que las autoridades, representantes burócraticos y gestión municipal cambia.

Limpieza de la base de datos:

La limpieza consistió basicamente en:

  1. Filtrar por variables de interés (no todas las preguntas nos servirían para contestar nuestra pregunta).
  2. Filtrar por municipios del área Metropolitana de Monterrey
  3. Renombrar las variables (para que fueran más entendibles en el análisis de resultados)
  4. Cambiar los códigos de los municipios por sus nombres reales
  5. quitar los 888 y 999 (no sé y no contestó); así como los valores NA.
  6. Cambiar las variables a factores o numeros según el tipo de predictor.
  7. Cambiar el orden de algunas variables. A veces el 1 representaba lo mejor, y queríamos que 4 (el valor más alto lo representara). Tuvimos que modificar el orden a la inversa.
  8. Cambiar las variables dummy por su significado real (en vez de 0 y 1 que nos dijera más la observación, ej. aprueba/desaprueba)
  9. Hacer un subconjunto de entrenamiento y prueba que utilizariamos a lo largo de las pruebas de MSE de la evidencia
  10. Hacer bases de datos alternativas por sexo para contrastes de los modelos.

Selección de Subconjuntos

La selección de subconjuntos nos ayudó para ver qué predictores eran significativos y cuáles no.

# Cargar el paquete leaps
library(leaps)

# Hacemos la selección de subconjuntos. 
subconjuntos <- regsubsets (INSEGURIDAD~. -MUNICIPIOS-INGRESO_MENSUAL_HOGAR-EDAD-SEXO,data=eav23  ) 

summary (subconjuntos)
## Subset selection object
## Call: regsubsets.formula(INSEGURIDAD ~ . - MUNICIPIOS - INGRESO_MENSUAL_HOGAR - 
##     EDAD - SEXO, data = eav23)
## 17 Variables  (and intercept)
##                                 Forced in Forced out
## influencia.ciudadana.estado         FALSE      FALSE
## aprobacion.alcaldeDesaprueba        FALSE      FALSE
## aprobacion.gobernadorDesaprueba     FALSE      FALSE
## aprobacion.fiscaliaDesaprueba       FALSE      FALSE
## corrupcion.estado                   FALSE      FALSE
## impunidad                           FALSE      FALSE
## transparencia.gobiernoSi            FALSE      FALSE
## corrupcion.municipio                FALSE      FALSE
## corrupcion.tramitesSi               FALSE      FALSE
## desempeño.policia                   FALSE      FALSE
## desempeño.fuerza.civil              FALSE      FALSE
## desempeño.guardia.nacional          FALSE      FALSE
## desempeño.ejercito                  FALSE      FALSE
## desempeño.marina                    FALSE      FALSE
## influencia.ciudadana.municipio      FALSE      FALSE
## numero.acciones.part.ciud           FALSE      FALSE
## Factor_CVNL                         FALSE      FALSE
## 1 subsets of each size up to 8
## Selection Algorithm: exhaustive
##          influencia.ciudadana.estado aprobacion.alcaldeDesaprueba
## 1  ( 1 ) " "                         " "                         
## 2  ( 1 ) " "                         " "                         
## 3  ( 1 ) " "                         " "                         
## 4  ( 1 ) " "                         " "                         
## 5  ( 1 ) " "                         " "                         
## 6  ( 1 ) " "                         " "                         
## 7  ( 1 ) " "                         " "                         
## 8  ( 1 ) " "                         " "                         
##          aprobacion.gobernadorDesaprueba aprobacion.fiscaliaDesaprueba
## 1  ( 1 ) " "                             " "                          
## 2  ( 1 ) " "                             "*"                          
## 3  ( 1 ) " "                             "*"                          
## 4  ( 1 ) " "                             "*"                          
## 5  ( 1 ) " "                             "*"                          
## 6  ( 1 ) " "                             "*"                          
## 7  ( 1 ) " "                             "*"                          
## 8  ( 1 ) " "                             "*"                          
##          corrupcion.estado impunidad transparencia.gobiernoSi
## 1  ( 1 ) " "               " "       "*"                     
## 2  ( 1 ) " "               " "       "*"                     
## 3  ( 1 ) "*"               " "       "*"                     
## 4  ( 1 ) "*"               " "       "*"                     
## 5  ( 1 ) "*"               " "       "*"                     
## 6  ( 1 ) "*"               " "       "*"                     
## 7  ( 1 ) "*"               "*"       "*"                     
## 8  ( 1 ) "*"               "*"       "*"                     
##          corrupcion.municipio corrupcion.tramitesSi desempeño.policia
## 1  ( 1 ) " "                  " "                   " "              
## 2  ( 1 ) " "                  " "                   " "              
## 3  ( 1 ) " "                  " "                   " "              
## 4  ( 1 ) " "                  " "                   "*"              
## 5  ( 1 ) "*"                  " "                   "*"              
## 6  ( 1 ) "*"                  " "                   "*"              
## 7  ( 1 ) "*"                  " "                   "*"              
## 8  ( 1 ) "*"                  " "                   "*"              
##          desempeño.fuerza.civil desempeño.guardia.nacional desempeño.ejercito
## 1  ( 1 ) " "                    " "                        " "               
## 2  ( 1 ) " "                    " "                        " "               
## 3  ( 1 ) " "                    " "                        " "               
## 4  ( 1 ) " "                    " "                        " "               
## 5  ( 1 ) " "                    " "                        " "               
## 6  ( 1 ) " "                    " "                        " "               
## 7  ( 1 ) " "                    " "                        " "               
## 8  ( 1 ) " "                    " "                        "*"               
##          desempeño.marina influencia.ciudadana.municipio
## 1  ( 1 ) " "              " "                           
## 2  ( 1 ) " "              " "                           
## 3  ( 1 ) " "              " "                           
## 4  ( 1 ) " "              " "                           
## 5  ( 1 ) " "              " "                           
## 6  ( 1 ) " "              " "                           
## 7  ( 1 ) " "              " "                           
## 8  ( 1 ) " "              " "                           
##          numero.acciones.part.ciud Factor_CVNL
## 1  ( 1 ) " "                       " "        
## 2  ( 1 ) " "                       " "        
## 3  ( 1 ) " "                       " "        
## 4  ( 1 ) " "                       " "        
## 5  ( 1 ) " "                       " "        
## 6  ( 1 ) "*"                       " "        
## 7  ( 1 ) "*"                       " "        
## 8  ( 1 ) "*"                       " "

De acuerdo a las variables significativas, armamos 3 modelos distintos (uno con 8 predictores, otro con 7 y otro con 6):

Modelos REGSUBSETS

modelo1 <- glm(INSEGURIDAD~aprobacion.fiscalia+corrupcion.estado+impunidad+transparencia.gobierno+corrupcion.municipio+desempeño.policia+desempeño.ejercito+numero.acciones.part.ciud, data=eav23, family=binomial)
modelo2 <- glm(INSEGURIDAD~aprobacion.fiscalia+corrupcion.estado+impunidad+transparencia.gobierno+corrupcion.municipio+desempeño.policia+numero.acciones.part.ciud, data=eav23, family=binomial)
modelo3 <- glm(INSEGURIDAD~aprobacion.fiscalia+corrupcion.estado+transparencia.gobierno+corrupcion.municipio+desempeño.policia+numero.acciones.part.ciud, data=eav23, family=binomial)
summary(modelo1) # Nos da un AIC de 2389.3
## 
## Call:
## glm(formula = INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + 
##     impunidad + transparencia.gobierno + corrupcion.municipio + 
##     desempeño.policia + desempeño.ejercito + numero.acciones.part.ciud, 
##     family = binomial, data = eav23)
## 
## Coefficients:
##                               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                   -1.52735    0.39569  -3.860 0.000113 ***
## aprobacion.fiscaliaDesaprueba  0.64551    0.11005   5.865 4.48e-09 ***
## corrupcion.estado              0.48989    0.07629   6.421 1.35e-10 ***
## impunidad                      0.22114    0.05836   3.789 0.000151 ***
## transparencia.gobiernoSi       0.78177    0.12020   6.504 7.82e-11 ***
## corrupcion.municipio          -0.28125    0.07833  -3.590 0.000330 ***
## desempeño.policia             -0.08084    0.02949  -2.741 0.006128 ** 
## desempeño.ejercito            -0.06910    0.02913  -2.373 0.017664 *  
## numero.acciones.part.ciud      0.14098    0.03688   3.823 0.000132 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 2701.4  on 2035  degrees of freedom
## Residual deviance: 2371.3  on 2027  degrees of freedom
## AIC: 2389.3
## 
## Number of Fisher Scoring iterations: 3
summary(modelo2) # Nos da un AIC de 2392.9
## 
## Call:
## glm(formula = INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + 
##     impunidad + transparencia.gobierno + corrupcion.municipio + 
##     desempeño.policia + numero.acciones.part.ciud, family = binomial, 
##     data = eav23)
## 
## Coefficients:
##                               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                   -1.90570    0.36035  -5.289 1.23e-07 ***
## aprobacion.fiscaliaDesaprueba  0.68625    0.10866   6.316 2.69e-10 ***
## corrupcion.estado              0.52647    0.07476   7.042 1.90e-12 ***
## impunidad                      0.18758    0.05653   3.318 0.000905 ***
## transparencia.gobiernoSi       0.79864    0.11996   6.657 2.79e-11 ***
## corrupcion.municipio          -0.31031    0.07750  -4.004 6.23e-05 ***
## desempeño.policia             -0.10236    0.02800  -3.656 0.000257 ***
## numero.acciones.part.ciud      0.14344    0.03667   3.912 9.17e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 2701.4  on 2035  degrees of freedom
## Residual deviance: 2376.9  on 2028  degrees of freedom
## AIC: 2392.9
## 
## Number of Fisher Scoring iterations: 3
summary(modelo3) # Nos da una AIC de 2402
## 
## Call:
## glm(formula = INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + 
##     transparencia.gobierno + corrupcion.municipio + desempeño.policia + 
##     numero.acciones.part.ciud, family = binomial, data = eav23)
## 
## Coefficients:
##                               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)                   -1.26468    0.30144  -4.195 2.72e-05 ***
## aprobacion.fiscaliaDesaprueba  0.72678    0.10784   6.740 1.59e-11 ***
## corrupcion.estado              0.47047    0.07231   6.506 7.71e-11 ***
## transparencia.gobiernoSi       0.82482    0.11946   6.904 5.04e-12 ***
## corrupcion.municipio          -0.28530    0.07674  -3.718 0.000201 ***
## desempeño.policia             -0.11554    0.02768  -4.174 2.99e-05 ***
## numero.acciones.part.ciud      0.12881    0.03602   3.577 0.000348 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 2701.4  on 2035  degrees of freedom
## Residual deviance: 2388.0  on 2029  degrees of freedom
## AIC: 2402
## 
## Number of Fisher Scoring iterations: 3
# El indicador AIC es muy parecido en los tres modelos, por lo que no es un factor decisivo. Dado que son modelos logísticos, no se puede conocer la R^2.

Dado que contiene menos predictores y un AIC más grande , nos quedaremso con el segundo, el cual usa los predictores:

  1. aprobacion.fiscalia
  2. corrupcion.estado
  3. impunidad
  4. transparencia.gobierno
  5. corrupcion.municipio
  6. desempeño.policia
  7. numero.acciones.part.ciud

Matriz de confusión del modelo

Esto nos sirve para ver la precisión del modelo escogido:

# Probamos con el conjunto de entrenamiento, el cual se especificó al inicio del código (un 70% de la muestra)
Modelo.train.regsubset <- glm(INSEGURIDAD~aprobacion.fiscalia+corrupcion.estado+impunidad+transparencia.gobierno+corrupcion.municipio+desempeño.policia+numero.acciones.part.ciud, data=eav23, subset= subset.train, family=binomial)
# Usamos lo del conjunto de entrenamiento pero ahora en el de prueba (el 30% restante de las observaciones)
predict.reg <- predict(Modelo.train.regsubset, newdata = subset.test.df, type = "response")
# Dado que es respuesta binaria, lo clasificamos en probabilidades, donde si es mayor a .5 lo ponemos como Si tiene una percecpción de inseguridad y menor a este valor como que no. 
predicted.reg<-ifelse(predict.reg > 0.5, 'Si', 'No')  
# Hacemos una matriz de confusión de los valores obtenidos en el subconjunto de prueba para ver cuántos predijimos correctamente y cuántos fueron clasificados erróneamente. 
matriz.confusion.reg <- table(Predicted = predicted.reg, Actual = Inseguridad.test)
print(matriz.confusion.reg)
##          Actual
## Predicted  No  Si
##        No 295 120
##        Si  84 112
(295+112)/(295+112+84+120)
## [1] 0.6661211
# El modelo tiene 66.6% de precisión

El modelo nos dio una precisión del 66.6%.

LDA

LDA nos sirve para ver cómo se distribuyen las probabilidades de que una observación pertenezca a una de las dos posibles respuestas qu tiene inseguridad. En este caso obtuvimos que:

library(MASS)
## 
## Attaching package: 'MASS'
## The following object is masked from 'package:dplyr':
## 
##     select
lda.fitI<-lda(INSEGURIDAD~aprobacion.fiscalia+corrupcion.estado+impunidad+transparencia.gobierno+corrupcion.municipio+desempeño.policia+numero.acciones.part.ciud, data= eav23)
lda.fitI
## Call:
## lda(INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + impunidad + 
##     transparencia.gobierno + corrupcion.municipio + desempeño.policia + 
##     numero.acciones.part.ciud, data = eav23)
## 
## Prior probabilities of groups:
##        No        Si 
## 0.6213163 0.3786837 
## 
## Group means:
##    aprobacion.fiscaliaDesaprueba corrupcion.estado impunidad
## No                     0.4181818          2.663241  2.483004
## Si                     0.6913100          3.118029  2.692607
##    transparencia.gobiernoSi corrupcion.municipio desempeño.policia
## No                0.4521739             2.547826          7.413439
## Si                0.7548638             2.853437          6.494163
##    numero.acciones.part.ciud
## No                 0.4671937
## Si                 0.6018158
## 
## Coefficients of linear discriminants:
##                                      LD1
## aprobacion.fiscaliaDesaprueba  0.8294339
## corrupcion.estado              0.6156789
## impunidad                      0.2161561
## transparencia.gobiernoSi       0.9444438
## corrupcion.municipio          -0.3876842
## desempeño.policia             -0.1308275
## numero.acciones.part.ciud      0.1636275
plot(lda.fitI)

Estas son las probabilidades previas de los grupos en la variable INSEGURIDAD. Aquí, la percepción de seguridad tiene una probabilidad de 62% y la de inseguridad tiene una probabilidad de 38%. Esto significa que es más probable sentirse seguro en el AMM. No obstante, es muy grande el grupo de personas que no se perciben seguros. ¡Esto es un tercio de la muestra! Veremos cómo se desglosa por sexo:

Matriz de confusión de LDA

# Probamos con el conjunto de entrenamiento, el cual se especificó al inicio del código (un 70% de la muestra)
Modelo.train.LDA <- lda(INSEGURIDAD~aprobacion.fiscalia+corrupcion.estado+impunidad+transparencia.gobierno+corrupcion.municipio+desempeño.policia+numero.acciones.part.ciud, data=eav23, subset= subset.train)
# Usamos lo del conjunto de entrenamiento pero ahora en el de prueba (el 30% restante de las observaciones)
predict.lda <- predict(Modelo.train.LDA, newdata = subset.test.df, type = "response")
# Dado que es respuesta binaria, lo clasificamos en probabilidades, donde si es mayor a .5 lo ponemos como Si tiene una percecpción de inseguridad y menor a este valor como que no. 
predicted.lda <- ifelse(predict.lda$posterior[, "Si"] > 0.5, 'Si', 'No')
# Hacemos una matriz de confusión de los valores obtenidos en el subconjunto de prueba para ver cuántos predijimos correctamente y cuántos fueron clasificados erróneamente. 
matriz.confusion.lda <- table(Predicted = predicted.lda, Actual = Inseguridad.test)
print(matriz.confusion.lda)
##          Actual
## Predicted  No  Si
##        No 294 119
##        Si  85 113
(294+113)/(294+113+119+85)
## [1] 0.6661211
# El modelo tiene 66.6% de precisión

La precisión del modelo es del 66.6% nos dio igual que la regresión lineal. Nos quedaremos con la lineal pues creemos que una regresión explica mejor que una clasificación la naturaleza del problema.

Aunque no es parte de la pregunta de investigación per se, se procede a hacer un contraste por género sólo para reflexionar en el impacto que tiene el género en la variable de respuesta inseguridad:

LDA por género

lda.fitmujer<-lda(INSEGURIDAD~aprobacion.fiscalia+corrupcion.estado+impunidad+transparencia.gobierno+corrupcion.municipio+desempeño.policia+numero.acciones.part.ciud, data= eav23.mujer)
lda.fithombre<-lda(INSEGURIDAD~aprobacion.fiscalia+corrupcion.estado+impunidad+transparencia.gobierno+corrupcion.municipio+desempeño.policia+numero.acciones.part.ciud, data= eav23.hombre)

Se aprecia que, la probabilidad de que la percepción de los hombres sea segura es de 63.37% frente a n 60.81% de las mujeres.

Validación del modelo

Validación Leave-One-Out

Esto nos sirve para validar la precisión del modelo, dejando sólo una observación fuera de la validación y usándola como test.

# Cargar la librería boot
library(boot)

# Realizar validación cruzada utilizando cv.glm
cv.err2 <- cv.glm(eav23, modelo2)
cv.err1 <- cv.glm(eav23, modelo1)
cv.err3 <- cv.glm(eav23, modelo3)
# Mostrar los resultados de la validación cruzada
cv.err2$delta
## [1] 0.2026416 0.2026412
cv.err1$delta
## [1] 0.2024517 0.2024512
cv.err3$delta
## [1] 0.2036811 0.2036807

Los tres modelos presentan errores parecidos después de la prueba de validación cruzada. Por lo que, nos quedaremos con el modelo 2 por lo ya establecido .

# Al iterar 5 veces, obtenemos un resultado parecido y consistente: 
cv.error<-rep(0,5)
for (i in 1:5){
cv.error[i]<-cv.glm(eav23,modelo2)$delta[1]
}
cv.error
## [1] 0.2026416 0.2026416 0.2026416 0.2026416 0.2026416

El modelo escogido (el 2), tiene un error de validación cruzada de 0,2026, lo que sugiere que el modelo tiene un error de predicción estimado de aproximadamente el 20,26 %. Entre más bajo, mejor. Veremos cuánto nos da con un k-fold de 10:

Validación cruzada k-fold con k= 10

Este es como leave one out, pero en vez de dejar una observación fuera, dejamos 10. Los resultados fueron los siguientes:

cv.error.kfold.2 <- rep(0, 10)
cv.error.kfold.3 <- rep(0, 10)
cv.error.kfold.1 <- rep(0, 10)
# Realizamos validación cruzada con 10 folds del modelo 2
for (i in 1:10) {
  cv.error.kfold.2[i] <- cv.glm(eav23, modelo2, K = 10)$delta[1]
}
# Realizamos validación cruzada con 10 folds del modelo 3
for (i in 1:10) {
  cv.error.kfold.3[i] <- cv.glm(eav23, modelo3, K = 10)$delta[1]
}
# Realizamos validación cruzada con 10 folds del modelo 1
for (i in 1:10) {
  cv.error.kfold.1[i] <- cv.glm(eav23, modelo1, K = 10)$delta[1]
}
# Mostramos los errores de validación cruzada
cv.error.kfold.2
##  [1] 0.2028174 0.2036562 0.2028931 0.2025419 0.2019501 0.2024897 0.2027122
##  [8] 0.2029715 0.2032903 0.2029560
cv.error.kfold.3
##  [1] 0.2039520 0.2035765 0.2037357 0.2037270 0.2033710 0.2038207 0.2040939
##  [8] 0.2040414 0.2040506 0.2036271
cv.error.kfold.1
##  [1] 0.2023175 0.2028189 0.2025481 0.2024592 0.2027189 0.2030898 0.2026581
##  [8] 0.2021414 0.2022810 0.2026570
# Graficamos los errores de validación cruzada
par(mfrow = c(1, 3))
plot(cv.error.kfold.2, xlab = "Número de Folds", ylab = "Error de Validación Cruzada", main = "Error de CV ~ MODELO 2")
plot(cv.error.kfold.3, xlab = "Número de Folds", ylab = "Error de Validación Cruzada", main = "Error de CV  ~ MODELO 3")
plot(cv.error.kfold.1, xlab = "Número de Folds", ylab = "Error de Validación Cruzada", main = "Error de CV ~ MODELO 1")

Los errores de los tres modelos son muy parecidos en K-fold y LOOCV, por lo que, el modelo 2 sigue siendo el predilecto.

Bootstrap

Bootstrap es otra forma de validación del modelo. Obtuvimos que:

# Del modelo elegido 
coef.boot.2 <- function(data, indices) {
  d <- data[indices, ]
  fit <- glm(INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + impunidad + 
             transparencia.gobierno + corrupcion.municipio + desempeño.policia + 
             numero.acciones.part.ciud, 
             data = d, family = binomial)
  return(coef(fit))
}
set.seed(1)
boot.mod2 <- boot(data = eav23, statistic = coef.boot.2, R = 1000)
# De modelos alternativos
coef.boot.1 <- function(data, indices) {
  d <- data[indices, ]
  fit <- glm(INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + impunidad + 
             transparencia.gobierno + corrupcion.municipio + desempeño.policia + 
             numero.acciones.part.ciud+desempeño.ejercito, 
             data = d, family = binomial)
  return(coef(fit))
}
set.seed(1)
boot.mod1 <- boot(data = eav23, statistic = coef.boot.1, R = 1000)

coef.boot.3 <- function(data, indices) {
  d <- data[indices, ]
  fit <- glm(INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + 
             transparencia.gobierno + corrupcion.municipio + desempeño.policia + 
             numero.acciones.part.ciud, 
             data = d, family = binomial)
  return(coef(fit))
}
set.seed(1)
boot.mod3 <- boot(data = eav23, statistic = coef.boot.3, R = 1000)

boot.mod2
## 
## ORDINARY NONPARAMETRIC BOOTSTRAP
## 
## 
## Call:
## boot(data = eav23, statistic = coef.boot.2, R = 1000)
## 
## 
## Bootstrap Statistics :
##       original       bias    std. error
## t1* -1.9057012  0.008854964  0.39069233
## t2*  0.6862515  0.009886842  0.10940128
## t3*  0.5264673  0.002848164  0.07804771
## t4*  0.1875820 -0.001011585  0.05823672
## t5*  0.7986412 -0.004622961  0.12576930
## t6* -0.3103137 -0.003631236  0.07817644
## t7* -0.1023646 -0.001311760  0.03061966
## t8*  0.1434442 -0.001308157  0.04124938
boot.mod1
## 
## ORDINARY NONPARAMETRIC BOOTSTRAP
## 
## 
## Call:
## boot(data = eav23, statistic = coef.boot.1, R = 1000)
## 
## 
## Bootstrap Statistics :
##        original        bias    std. error
## t1* -1.52735266  0.0176188177  0.43704985
## t2*  0.64551045  0.0095717289  0.11148909
## t3*  0.48988797  0.0024595914  0.07990241
## t4*  0.22114361 -0.0004852337  0.06007460
## t5*  0.78177361 -0.0045756547  0.12648817
## t6* -0.28124905 -0.0033528178  0.07938433
## t7* -0.08083805 -0.0011217765  0.03245809
## t8*  0.14097969 -0.0013300166  0.04180969
## t9* -0.06910459 -0.0013607177  0.03172739
boot.mod3
## 
## ORDINARY NONPARAMETRIC BOOTSTRAP
## 
## 
## Call:
## boot(data = eav23, statistic = coef.boot.3, R = 1000)
## 
## 
## Bootstrap Statistics :
##       original       bias    std. error
## t1* -1.2646778  0.006246500  0.32868530
## t2*  0.7267838  0.009262144  0.10840960
## t3*  0.4704687  0.002390194  0.07506157
## t4*  0.8248235 -0.004913023  0.12520878
## t5* -0.2852973 -0.003198780  0.07630898
## t6* -0.1155383 -0.001189773  0.03049319
## t7*  0.1288133 -0.001142092  0.03953369

El modelo que presenta menos sesgo de los tres es el modelo 3. No obstante, no difiere mucho del modelo 2; por lo que, nos quedaremos con este último por lo visto con las demás validaciones.

Ridge y Lasso

Ridge y Lasso sirven para evaluar el desempeño del modelo escogido. En la prueba de Ridge obtuvimos que:

Ridge

library(glmnet)
## Loading required package: Matrix
## Loaded glmnet 4.1-8
# Convertir INSEGURIDAD a formato binario (0 y 1) para poderlo usar en Ridge y Lasso 
eav23$INSEGURIDAD <- as.numeric(eav23$INSEGURIDAD) 

# Crear la matriz de predictores
x <- model.matrix(INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + impunidad + 
                  transparencia.gobierno + corrupcion.municipio + desempeño.policia + 
                  numero.acciones.part.ciud + desempeño.ejercito, 
                  data = eav23)[, -1]
# Variable de respuesta
y <- eav23$INSEGURIDAD
inseguridad.test <- y[subset.test]



# Creamos una cuadrícula de valores que van desde λ = 10^10 a λ = 10^-2
grid <- 10^seq(10,-2,length=100)
ridge.mod <- glmnet(x,y,alpha=0,lambda=grid)

# Sacamos el mejor lambda. 
set.seed(1)
cv.out <- cv.glmnet(x[subset.train ,],y[subset.train],alpha=0)
bestlam.ridge <- cv.out$lambda.min
bestlam.ridge # Es 0.026
## [1] 0.02676585
# Predicción del modelo 
ridge.mod.prueba <- glmnet(x[subset.train,],y[subset.train],alpha=0,lambda=grid,thresh=1e-12)
ridge.pred <- predict(ridge.mod.prueba,s=bestlam.ridge,newx=x[subset.test,])
mean((ridge.pred-inseguridad.test)^2) # Tiene un MSE de 0.19. 
## [1] 0.199152
# Sacamos el valor de los coeficientes 
out <- glmnet(x,y,alpha=0)
predict(out,type="coefficients",s=bestlam.ridge)[1:8,]
##                   (Intercept) aprobacion.fiscaliaDesaprueba 
##                    1.23717525                    0.13004663 
##             corrupcion.estado                     impunidad 
##                    0.08448593                    0.04042216 
##      transparencia.gobiernoSi          corrupcion.municipio 
##                    0.15193714                   -0.04583154 
##             desempeño.policia     numero.acciones.part.ciud 
##                   -0.01716535                    0.02597797

Como se esperaba, ningún coeficiente de Ridge dio cero. Las variables significativas correspoderán a nuestro modelo final si es que Lasso no las elimina:

Lasso

Por otra parte, Lasso nos dio que:

cv.out.lasso <- cv.glmnet(x[subset.train,], y[subset.train], alpha = 1, family = "binomial")

# Obtener la mejor lambda para el modelo Lasso
bestlam_lasso <- cv.out.lasso$lambda.min
print(bestlam_lasso)
## [1] 0.0009181943
# Ajustar el modelo Lasso con la mejor lambda
lasso.mod <- glmnet(x[subset.train,], y[subset.train], alpha = 1, lambda = bestlam_lasso, family = "binomial")

# Realizar predicciones en el conjunto de prueba
lasso.mod.prueba <- glmnet(x[subset.train,],y[subset.train],alpha=1,lambda=grid,thresh=1e-12)
predictions_lasso <- predict(lasso.mod.prueba, s = bestlam_lasso, newx = x[subset.test,], type = "response")

mean((predictions_lasso-inseguridad.test)^2) # Tiene un MSE de 0.20. 
## [1] 0.2009367
# Sacamos el valor de los coeficientes 
out <- glmnet(x,y,alpha=1,lambda=grid)
lasso.coef <- predict(out,type="coefficients",s=bestlam_lasso)[1:8,]
lasso.coef
##                   (Intercept) aprobacion.fiscaliaDesaprueba 
##                    1.21397400                    0.12438728 
##             corrupcion.estado                     impunidad 
##                    0.06081279                    0.02911878 
##      transparencia.gobiernoSi          corrupcion.municipio 
##                    0.14756859                   -0.01472990 
##             desempeño.policia     numero.acciones.part.ciud 
##                   -0.01283495                    0.01906017
lasso.coef[lasso.coef!=0]
##                   (Intercept) aprobacion.fiscaliaDesaprueba 
##                    1.21397400                    0.12438728 
##             corrupcion.estado                     impunidad 
##                    0.06081279                    0.02911878 
##      transparencia.gobiernoSi          corrupcion.municipio 
##                    0.14756859                   -0.01472990 
##             desempeño.policia     numero.acciones.part.ciud 
##                   -0.01283495                    0.01906017

Como se aprecia, ningún coeficiente dio 0, es decir, todas son importantes para predecir la percepción de Inseguridad en el municipio. Dado que Ridge y Lasso nos ayudan a encontrar mejores predictores que best subsets porque se trata de una regresión logística, nos quedaremos con lo que estas dos funciones arrojaron (no obstante, se puede apreciar que son casi igual los predictores en las tres funciones).

Regresiones polinómicas

Se verá si se puede mejorar el accuracy del modelo agregando exponentes a algunas de las variables predictoras del modelo. Ahora, nuestro modelo dejará de ser lineal:

# Hacemos una regresión agregando exponentes  
eav23$INSEGURIDAD <- as.factor(eav23$INSEGURIDAD)
Reg.poli1<-glm(INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + impunidad + 
             transparencia.gobierno + corrupcion.municipio + poly(desempeño.policia,2) + 
             numero.acciones.part.ciud, 
             data = eav23, family = binomial)
Reg.poli2 <- glm(INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + impunidad + 
             transparencia.gobierno + corrupcion.municipio + poly(desempeño.policia,3) + 
             numero.acciones.part.ciud, 
             data = eav23, family = binomial)
Reg.poli3<- glm(INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + impunidad + 
             transparencia.gobierno + corrupcion.municipio + poly(desempeño.policia,3) + 
             poly(numero.acciones.part.ciud,2), 
             data = eav23, family = binomial)
# Hacemos una comparación Anova. 
anova(modelo2, Reg.poli1, Reg.poli2, Reg.poli3)
## Analysis of Deviance Table
## 
## Model 1: INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + impunidad + 
##     transparencia.gobierno + corrupcion.municipio + desempeño.policia + 
##     numero.acciones.part.ciud
## Model 2: INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + impunidad + 
##     transparencia.gobierno + corrupcion.municipio + poly(desempeño.policia, 
##     2) + numero.acciones.part.ciud
## Model 3: INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + impunidad + 
##     transparencia.gobierno + corrupcion.municipio + poly(desempeño.policia, 
##     3) + numero.acciones.part.ciud
## Model 4: INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + impunidad + 
##     transparencia.gobierno + corrupcion.municipio + poly(desempeño.policia, 
##     3) + poly(numero.acciones.part.ciud, 2)
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)    
## 1      2028     2376.9                         
## 2      2027     2360.7  1  16.1538 5.84e-05 ***
## 3      2026     2359.7  1   1.0714   0.3006    
## 4      2025     2359.3  1   0.3742   0.5407    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Basado en estos resultados, el Modelo 2, que incluye una transformación polinómica cuadrática de desempeño.policia, parece ser el más adecuado, ya que mejora significativamente el ajuste del modelo en comparación con el Modelo 1. Los otros cambios en el Modelo 3 y el Modelo 4 no proporcionan una mejora significativa en el ajuste del modelo.

Splines

Veremos si al hacer más flexible el modelo agregando splines aumenta su capacidad predictiva correcta:

# Cargar libreria 
library(splines)
library(car)
## Loading required package: carData
## 
## Attaching package: 'car'
## The following object is masked from 'package:boot':
## 
##     logit
## The following object is masked from 'package:dplyr':
## 
##     recode
# Ajustamos 3 modelos con splines
splines1<-glm(INSEGURIDAD ~ aprobacion.fiscalia+ 
                      bs(corrupcion.estado,3) + 
                      impunidad + 
                      transparencia.gobierno + 
                      corrupcion.municipio + 
                      desempeño.policia + 
                      numero.acciones.part.ciud, 
                      data = eav23, 
                      family = binomial) # Sólo con spline en corrupción estado
splines2<-glm(INSEGURIDAD ~ aprobacion.fiscalia+ 
                      bs(corrupcion.estado,3) + 
                      bs(impunidad, 3) + 
                      transparencia.gobierno + 
                      corrupcion.municipio + 
                      desempeño.policia + 
                      numero.acciones.part.ciud, 
                      data = eav23, 
                      family = binomial) # Con spline en corrupción a nivel estado e impunidad
splines3<-glm(INSEGURIDAD ~ aprobacion.fiscalia+ 
                      bs(corrupcion.estado,3) + 
                      bs(impunidad, 3) + 
                      transparencia.gobierno + 
                      corrupcion.municipio + 
                      desempeño.policia + 
                      numero.acciones.part.ciud, 
                      data = eav23, 
                      family = binomial) # Con spline en corrupción estado y municipio e impunidad. 

anova(Reg.poli1, splines1, splines2, splines3, test = "Chisq")
## Analysis of Deviance Table
## 
## Model 1: INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + impunidad + 
##     transparencia.gobierno + corrupcion.municipio + poly(desempeño.policia, 
##     2) + numero.acciones.part.ciud
## Model 2: INSEGURIDAD ~ aprobacion.fiscalia + bs(corrupcion.estado, 3) + 
##     impunidad + transparencia.gobierno + corrupcion.municipio + 
##     desempeño.policia + numero.acciones.part.ciud
## Model 3: INSEGURIDAD ~ aprobacion.fiscalia + bs(corrupcion.estado, 3) + 
##     bs(impunidad, 3) + transparencia.gobierno + corrupcion.municipio + 
##     desempeño.policia + numero.acciones.part.ciud
## Model 4: INSEGURIDAD ~ aprobacion.fiscalia + bs(corrupcion.estado, 3) + 
##     bs(impunidad, 3) + transparencia.gobierno + corrupcion.municipio + 
##     desempeño.policia + numero.acciones.part.ciud
##   Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
## 1      2027     2360.7                          
## 2      2026     2364.6  1  -3.8992              
## 3      2024     2339.5  2  25.1782 3.409e-06 ***
## 4      2024     2339.5  0   0.0000              
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

El mejor modelo lo dio el de 2 splines (uno en corrupción estado y otro en impunidad).

GAMs

library(gam)
## Loading required package: foreach
## Loaded gam 1.22-3
# Pondremos los splines donde en el pasado apartado salió mejor en la prueba ANOVA
modelo.gam <- gam(INSEGURIDAD ~ aprobacion.fiscalia + ns(corrupcion.estado,2) + ns(impunidad,3) +
                    transparencia.gobierno + corrupcion.municipio + desempeño.policia +
                    numero.acciones.part.ciud, 
                  data = eav23, family= binomial)

# Mostrar el resumen del modelo
summary(modelo.gam)
## 
## Call: gam(formula = INSEGURIDAD ~ aprobacion.fiscalia + ns(corrupcion.estado, 
##     2) + ns(impunidad, 3) + transparencia.gobierno + corrupcion.municipio + 
##     desempeño.policia + numero.acciones.part.ciud, family = binomial, 
##     data = eav23)
## Deviance Residuals:
##     Min      1Q  Median      3Q     Max 
## -2.0118 -0.8944 -0.5414  1.0494  2.2253 
## 
## (Dispersion Parameter for binomial family taken to be 1)
## 
##     Null Deviance: 2701.43 on 2035 degrees of freedom
## Residual Deviance: 2341.025 on 2025 degrees of freedom
## AIC: 2363.025 
## 
## Number of Local Scoring Iterations: 3 
## 
## Anova for Parametric Effects
##                             Df  Sum Sq Mean Sq  F value    Pr(>F)    
## aprobacion.fiscalia          1  101.92 101.920 102.8886 < 2.2e-16 ***
## ns(corrupcion.estado, 2)     2   57.57  28.787  29.0607 3.604e-13 ***
## ns(impunidad, 3)             3   48.81  16.269  16.4236 1.516e-10 ***
## transparencia.gobierno       1   49.41  49.412  49.8818 2.236e-12 ***
## corrupcion.municipio         1    4.63   4.633   4.6768 0.0306886 *  
## desempeño.policia            1   14.84  14.838  14.9793 0.0001121 ***
## numero.acciones.part.ciud    1   12.95  12.946  13.0691 0.0003075 ***
## Residuals                 2025 2005.94   0.991                       
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Árbol de Decisiones

El árbol de decisiones presenta de manera gráfica nuestro modelo. Su ventaja es de que es fácil de interpretar y explicar para aquellos que no saben de regresiones. Veremos si lo mejora de tal manera que sea la mejor manera de responder nuestra pregunta de investigación.

library(tree) 
tree.Inseguridad<-tree(INSEGURIDAD~aprobacion.fiscalia+corrupcion.estado+impunidad+transparencia.gobierno+corrupcion.municipio+desempeño.policia+numero.acciones.part.ciud, data=eav23) 
summary(tree.Inseguridad)
## 
## Classification tree:
## tree(formula = INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + 
##     impunidad + transparencia.gobierno + corrupcion.municipio + 
##     desempeño.policia + numero.acciones.part.ciud, data = eav23)
## Variables actually used in tree construction:
## [1] "transparencia.gobierno" "corrupcion.estado"     
## Number of terminal nodes:  3 
## Residual mean deviance:  1.217 = 2473 / 2033 
## Misclassification error rate: 0.3738 = 761 / 2036
tree.INSEG.ev<-tree(INSEGURIDAD~aprobacion.fiscalia+corrupcion.estado+impunidad+transparencia.gobierno+corrupcion.municipio+desempeño.policia+numero.acciones.part.ciud, data=eav23) 
tree.pred<-predict(tree.INSEG.ev,subset.test.df,type="class")
table(tree.pred,Inseguridad.test)
##          Inseguridad.test
## tree.pred  No  Si
##         1 207  52
##         2 172 180
(207+180)/(207+180+52+172) # La accuracy es de 63.33%. Veremos si mejora con el prunning.  
## [1] 0.6333879
# Podamos el árbol: 
set.seed(1)
cv.prune.inseg<- cv.tree(tree.Inseguridad, FUN=prune.misclass)
cv.prune.inseg
## $size
## [1] 3 2 1
## 
## $dev
## [1] 808 808 807
## 
## $k
## [1] -Inf    0   10
## 
## $method
## [1] "misclass"
## 
## attr(,"class")
## [1] "prune"         "tree.sequence"
# La desviación estándar que usaremos es la de 3 ramas, no difiere mucho de la de 1 pero explica mejor el modelo. 
# Como ya sabemos qué árbol es el mejor, lo podamos: 
prune.inseg<- prune.misclass(tree.Inseguridad, best=3)
# Ahora aplicamos al conjunto de prueba el árbol podado: 
tree.pred.pruned<-predict(prune.inseg, subset=subset.test, type="class")
summary(prune.inseg)
## 
## Classification tree:
## tree(formula = INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + 
##     impunidad + transparencia.gobierno + corrupcion.municipio + 
##     desempeño.policia + numero.acciones.part.ciud, data = eav23)
## Variables actually used in tree construction:
## [1] "transparencia.gobierno" "corrupcion.estado"     
## Number of terminal nodes:  3 
## Residual mean deviance:  1.217 = 2473 / 2033 
## Misclassification error rate: 0.3738 = 761 / 2036

Vemos que la tasa de error de clasificación es de 0.37. En este caso, el árbol tiene 3 nodos terminales. Se muestra qué variables se utilizaron para construir el árbol. En este caso, las variables “transparencia.gobierno” y “corrupcion.estado” fueron las que se utilizaron. Una tasa de error de clasificación del 37.38% indica que el modelo no clasifica correctamente un porcentaje significativo de las observaciones en los datos de entrenamiento. Esto sugiere que el modelo puede no estar capturando completamente la estructura subyacente de los datos o que podría estar sobreajustando los datos.

Vemos como queda nuestro árbol después de podar:

# Cargar las librerías necesarias
library(rpart)
library(rpart.plot)
library(RColorBrewer)

# Definir una paleta de colores
colors <- brewer.pal(3, "Set3")  # Puedes elegir otra paleta de colores de RColorBrewer

# Crear el modelo de árbol de decisión pero con rpart para después poderlo graficar de una manera más bonita
tree_model <- rpart(INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + 
                    impunidad + transparencia.gobierno + corrupcion.municipio + 
                    desempeño.policia + numero.acciones.part.ciud, 
                    data = eav23, method = "class", cp= 0.0033)

# Podamos el árbol para mejorar la precisión del modelo
prune_cp <- tree_model$cptable[which.min(tree_model$cptable[,"xerror"]), "CP"]
prune.inseg <- prune(tree_model, cp = prune_cp)

# Visualizar el árbol de decisión podado con colores
rpart.plot(prune.inseg,
           type = 3,            # Tipo de plot (3: gráfico de ramas anchas, que fue el que nos dio el prune que era el mejor modelo)
           extra = 106,         # Muestra información extra en los nodos (106: clase, probabilidad, % observaciones)
           fallen.leaves = TRUE, # Coloca las hojas en la parte inferior del gráfico
           box.palette = colors, # Paleta de colores para los nodos
           shadow.col = "gray",  # Color de sombra para los nodos
           cex = 0.8,            # Tamaño del texto
           main= "")  # Título del gráfico

# Ponemos el título del gráfico 
title(main = "Árbol de decisiones de Inseguridad", col.main = "deepskyblue4", font.main = 4)

summary(prune.inseg)
## Call:
## rpart(formula = INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + 
##     impunidad + transparencia.gobierno + corrupcion.municipio + 
##     desempeño.policia + numero.acciones.part.ciud, data = eav23, 
##     method = "class", cp = 0.0033)
##   n= 2036 
## 
##           CP nsplit rel error    xerror       xstd
## 1 0.05188067      0 1.0000000 1.0000000 0.02838763
## 2 0.04020752      2 0.8962387 0.9948119 0.02835863
## 3 0.02464332      3 0.8560311 0.8923476 0.02768190
## 4 0.00843061      4 0.8313878 0.8404669 0.02726082
## 
## Variable importance
## transparencia.gobierno    aprobacion.fiscalia              impunidad 
##                     37                     16                     13 
##      desempeño.policia   corrupcion.municipio      corrupcion.estado 
##                     13                     10                     10 
## 
## Node number 1: 2036 observations,    complexity param=0.05188067
##   predicted class=1  expected loss=0.3786837  P(node) =1
##     class counts:  1265   771
##    probabilities: 0.621 0.379 
##   left son=2 (882 obs) right son=3 (1154 obs)
##   Primary splits:
##       transparencia.gobierno splits as  LR,      improve=84.11307, (0 missing)
##       aprobacion.fiscalia    splits as  LR,      improve=67.38939, (0 missing)
##       desempeño.policia      < 7.5 to the right, improve=55.47480, (0 missing)
##       corrupcion.estado      < 2.5 to the left,  improve=40.25435, (0 missing)
##       impunidad              < 2.5 to the left,  improve=23.92856, (0 missing)
##   Surrogate splits:
##       desempeño.policia    < 7.5 to the right, agree=0.712, adj=0.334, (0 split)
##       aprobacion.fiscalia  splits as  LR,      agree=0.701, adj=0.311, (0 split)
##       corrupcion.municipio < 2.5 to the left,  agree=0.681, adj=0.263, (0 split)
##       corrupcion.estado    < 2.5 to the left,  agree=0.676, adj=0.253, (0 split)
##       impunidad            < 2.5 to the left,  agree=0.627, adj=0.139, (0 split)
## 
## Node number 2: 882 observations
##   predicted class=1  expected loss=0.2142857  P(node) =0.4332024
##     class counts:   693   189
##    probabilities: 0.786 0.214 
## 
## Node number 3: 1154 observations,    complexity param=0.05188067
##   predicted class=2  expected loss=0.4956672  P(node) =0.5667976
##     class counts:   572   582
##    probabilities: 0.496 0.504 
##   left son=6 (350 obs) right son=7 (804 obs)
##   Primary splits:
##       aprobacion.fiscalia  splits as  LR,      improve=10.936770, (0 missing)
##       impunidad            < 3.5 to the left,  improve= 9.444218, (0 missing)
##       corrupcion.estado    < 3.5 to the left,  improve= 9.039034, (0 missing)
##       desempeño.policia    < 8.5 to the right, improve= 8.603775, (0 missing)
##       corrupcion.municipio < 1.5 to the right, improve= 1.874868, (0 missing)
##   Surrogate splits:
##       numero.acciones.part.ciud < 7.5 to the right, agree=0.702, adj=0.017, (0 split)
##       desempeño.policia         < 9.5 to the right, agree=0.698, adj=0.006, (0 split)
## 
## Node number 6: 350 observations
##   predicted class=1  expected loss=0.4  P(node) =0.1719057
##     class counts:   210   140
##    probabilities: 0.600 0.400 
## 
## Node number 7: 804 observations,    complexity param=0.04020752
##   predicted class=2  expected loss=0.4502488  P(node) =0.3948919
##     class counts:   362   442
##    probabilities: 0.450 0.550 
##   left son=14 (257 obs) right son=15 (547 obs)
##   Primary splits:
##       impunidad                 < 2.5 to the left,  improve=9.151890, (0 missing)
##       corrupcion.estado         < 3.5 to the left,  improve=3.623714, (0 missing)
##       corrupcion.municipio      < 2.5 to the right, improve=3.545109, (0 missing)
##       numero.acciones.part.ciud < 0.5 to the left,  improve=2.122661, (0 missing)
##       desempeño.policia         < 8.5 to the right, improve=1.543722, (0 missing)
##   Surrogate splits:
##       desempeño.policia         < 8.5 to the right, agree=0.687, adj=0.019, (0 split)
##       numero.acciones.part.ciud < 3.5 to the right, agree=0.682, adj=0.004, (0 split)
## 
## Node number 14: 257 observations,    complexity param=0.02464332
##   predicted class=1  expected loss=0.4396887  P(node) =0.1262279
##     class counts:   144   113
##    probabilities: 0.560 0.440 
##   left son=28 (142 obs) right son=29 (115 obs)
##   Primary splits:
##       impunidad                 < 1.5 to the right, improve=8.5027320, (0 missing)
##       corrupcion.estado         < 3.5 to the left,  improve=5.4899670, (0 missing)
##       numero.acciones.part.ciud < 0.5 to the left,  improve=2.5240900, (0 missing)
##       desempeño.policia         < 3.5 to the left,  improve=2.1949560, (0 missing)
##       corrupcion.municipio      < 2.5 to the right, improve=0.7560333, (0 missing)
##   Surrogate splits:
##       corrupcion.estado         < 3.5 to the left,  agree=0.642, adj=0.200, (0 split)
##       corrupcion.municipio      < 2.5 to the right, agree=0.638, adj=0.191, (0 split)
##       desempeño.policia         < 6.5 to the left,  agree=0.599, adj=0.104, (0 split)
##       numero.acciones.part.ciud < 5.5 to the left,  agree=0.560, adj=0.017, (0 split)
## 
## Node number 15: 547 observations
##   predicted class=2  expected loss=0.3985375  P(node) =0.268664
##     class counts:   218   329
##    probabilities: 0.399 0.601 
## 
## Node number 28: 142 observations
##   predicted class=1  expected loss=0.3239437  P(node) =0.0697446
##     class counts:    96    46
##    probabilities: 0.676 0.324 
## 
## Node number 29: 115 observations
##   predicted class=2  expected loss=0.4173913  P(node) =0.0564833
##     class counts:    48    67
##    probabilities: 0.417 0.583
# Calculamos tasa de error de clasificación 
# Obtener las predicciones del modelo para los datos de prueba
predicciones <- predict(prune.inseg, newdata = subset.test.df, type = "class")

El gráfico del árbol podado nos dice que, transparencia.gobierno es la variable más influyente, seguida por aprobacion.fiscalia e impunidad y desempeño policía. Impunidad se desagrega más entre mayor o igual a 2 y menor a 2. Además, vemos la incorporación de corrupción estado como una rama secundaria.

Quienes piensan que no hay transparencia en el gobierno corresponden a 43% de las observaciones, es decir, 882. Los que si corresponden al restante 57% que se dividen en aprobación/desaprobación de la fiscalía. los que aprueban a la fiscalía a su vez se dividen en el desempeño a la policía mayor o igual a 9 y menor a 9. Los que pusieron un desempeño a la policía ≥ 9, son muy pocas observaciones. Corresponden al 2% del total. Por otra parte, el < 9, se divide en corrupción al estado mayor o igual a 4 (5% del total) y menor de 4 (10%).

Ahora, los que desaprueban a la fiscalía, se dividen en impunidad ≥ 3 (27% de las observaciones) y menor de 3, que se subdivide en impunidad ≥2 (7%) y menor a 2 (6%).

# Resumen del árbol
printcp(prune.inseg)
## 
## Classification tree:
## rpart(formula = INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + 
##     impunidad + transparencia.gobierno + corrupcion.municipio + 
##     desempeño.policia + numero.acciones.part.ciud, data = eav23, 
##     method = "class", cp = 0.0033)
## 
## Variables actually used in tree construction:
## [1] aprobacion.fiscalia    impunidad              transparencia.gobierno
## 
## Root node error: 771/2036 = 0.37868
## 
## n= 2036 
## 
##          CP nsplit rel error  xerror     xstd
## 1 0.0518807      0   1.00000 1.00000 0.028388
## 2 0.0402075      2   0.89624 0.99481 0.028359
## 3 0.0246433      3   0.85603 0.89235 0.027682
## 4 0.0084306      4   0.83139 0.84047 0.027261
# Contar el número de nodos
num_nodos <- nrow(prune.inseg$frame)
num_nodos
## [1] 9

Este árbol tiene 7 hojas, 13 nodos y 12 ramas. Las hojas en color azul (tienen el número 1) representan aquellos con percepción de seguridad y los morados (número 2) los de inseguridad. Se aprecia que los morados son aproximandamente 1/3 de las observaciones, lo que confirma nuestros modelos previos que clasificaban así mismo. Debajo del 1 (o 2, según corresponda el color y la percecpión de inseguridad predicha) en la hoja vemos un número con decimales este representa la pérdida esperada. Ésta se refiere a la proporción de observaciones en este nodo que no pertenecen a la clase predicha. Por ejemplo, en la primer hoja que es azul con “1” y una pérdida esperada de 0.21, significa que, este nodo predice la clase 1, y su pérdida esperada es la proporción de observaciones en este nodo que pertenecen a la clase 2.

Por último, vemos una mejora significativa en la precisión del árbol podado: Bajó la tasa de error. Ahora, tiene una tasa de error de clasificación del 37.86%. Veremos si se mejora con random forest:

Random Forest

# Cargar la librería randomForest
library(randomForest)
## randomForest 4.7-1.1
## Type rfNews() to see new features/changes/bug fixes.
## 
## Attaching package: 'randomForest'
## The following object is masked from 'package:ggplot2':
## 
##     margin
## The following object is masked from 'package:dplyr':
## 
##     combine
# Establecer la semilla para reproducibilidad
set.seed(1)
# Entrenar el modelo de Random Forest
rf_model <- randomForest(INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + 
                         impunidad + transparencia.gobierno + corrupcion.municipio + 
                         desempeño.policia + numero.acciones.part.ciud, 
                         data = eav23, mtry = 7, importance = TRUE)
# Mostrar el modelo
print(rf_model)
## 
## Call:
##  randomForest(formula = INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado +      impunidad + transparencia.gobierno + corrupcion.municipio +      desempeño.policia + numero.acciones.part.ciud, data = eav23,      mtry = 7, importance = TRUE) 
##                Type of random forest: classification
##                      Number of trees: 500
## No. of variables tried at each split: 7
## 
##         OOB estimate of  error rate: 33.74%
## Confusion matrix:
##     1   2 class.error
## 1 965 300   0.2371542
## 2 387 384   0.5019455
set.seed(1)  # Para reproducibilidad

# Entrenar el modelo
rf_model <- randomForest(INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + 
                         impunidad + transparencia.gobierno + corrupcion.municipio + 
                         desempeño.policia + numero.acciones.part.ciud, 
                         data = eav23, subset = subset.train)
# Realiza las predicciones
predicciones_rf <- predict(rf_model, newdata = subset.test.df)

# Calcular el MSE y generar el gráfico
mse <- mean((predicciones_rf - Inseguridad.test)^2)
## Warning in Ops.factor(predicciones_rf, Inseguridad.test): '-' not meaningful
## for factors
print(mse)
## [1] NA
# Calcular la importancia de las variables en el modelo de Random Forest
importancia <- importance(rf_model)

# Mostrar la importancia de las variables en el modelo
print(importancia)
##                           MeanDecreaseGini
## aprobacion.fiscalia               29.60044
## corrupcion.estado                 41.58494
## impunidad                         36.16317
## transparencia.gobierno            35.10102
## corrupcion.municipio              29.92165
## desempeño.policia                 69.03257
## numero.acciones.part.ciud         34.12673
# Graficar la importancia de las variables
varImpPlot(rf_model)

Random Forest generó 500 árboles usando 7 variables en cada uno. El OOB (Out-Of-Bag error) fue de 33.74%.Se aprecia que, desempeño de la policía fue la variable con mayor importancia en el modelo seguida por corrupción del Estado y la impunidad. 

Pruebas ANOVA

Una vez que hicimos estas formas posibles de mejorar nuestra predicción, las someteremos a prueba para ver cuál es la mejor para quedarnos con ella al final. Al final de cada apartado, seleccionamos un único modelo, por lo que sólo nos basaremos en el modelo seleccionado por apartado:

anova(modelo2, Reg.poli1, splines2, modelo.gam)
## Analysis of Deviance Table
## 
## Model 1: INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + impunidad + 
##     transparencia.gobierno + corrupcion.municipio + desempeño.policia + 
##     numero.acciones.part.ciud
## Model 2: INSEGURIDAD ~ aprobacion.fiscalia + corrupcion.estado + impunidad + 
##     transparencia.gobierno + corrupcion.municipio + poly(desempeño.policia, 
##     2) + numero.acciones.part.ciud
## Model 3: INSEGURIDAD ~ aprobacion.fiscalia + bs(corrupcion.estado, 3) + 
##     bs(impunidad, 3) + transparencia.gobierno + corrupcion.municipio + 
##     desempeño.policia + numero.acciones.part.ciud
## Model 4: INSEGURIDAD ~ aprobacion.fiscalia + ns(corrupcion.estado, 2) + 
##     ns(impunidad, 3) + transparencia.gobierno + corrupcion.municipio + 
##     desempeño.policia + numero.acciones.part.ciud
##   Resid. Df Resid. Dev Df Deviance  Pr(>Chi)    
## 1      2028     2376.9                          
## 2      2027     2360.7  1  16.1538 5.840e-05 ***
## 3      2024     2339.5  3  21.2789 9.213e-05 ***
## 4      2025     2341.0 -1  -1.5648     0.211    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

En la prueba ANOVA, el modelo que sale significativo de todos los hechos es el de splines, el cual tiene splines en corrupción e impunidad:

splines2<-glm(INSEGURIDAD ~ aprobacion.fiscalia+ bs(corrupcion.estado,3) + bs(impunidad, 3) + transparencia.gobierno + corrupcion.municipio + desempeño.policia + numero.acciones.part.ciud, data = eav23, family = binomial)

Conclusiones

Dado que el objeto de estudio era entender qué factores institucionales contribuyen a la percepción de inseguridad en una comunidad, recogimos los datos de la Encuesta de Cómo Vamos Nuevo León 2023 que hablaban sobre diferentes aspectos que creemos podrían influir en cómo las personas perciben la inseguridad.

Factores Significativos Evaluados

Hemos analizado varios factores:

  1. Aprobación de la Fiscalía: Las personas que desaprueban el trabajo de la fiscalía tienden a sentir más inseguridad.

  2. Corrupción del Estado: Hay una relación compleja, no lineal -modelada cúbicamente en el modelo-, entre la percepción de corrupción estatal y la inseguridad. Parte de esta relación sugiere que en algunos casos, cuando la percepción de corrupción es muy alta, la inseguridad percibida también aumenta significativamente.

  3. Transparencia del Gobierno: Curiosamente, aquellos que creen que el gobierno es transparente también tienden a sentirse más inseguros. Esto podría interpretarse de varias maneras, quizás porque la transparencia revela problemas que antes no se veían. Esto NO es una invitación a los gobiernos a ser menos abiertos, más bien, aunque puede aumentar la percepción de inseguridad en corto plazo, vuelve a los ciudadanos más críticos y por ende exigentes de políticas públicas en materia de seguridad que vuelva su entorno más seguro.

  4. Desempeño de la Policía: Las personas que creen que la policía está haciendo un buen trabajo tienden a sentirse más seguras. Curiosamente, salió significativa a diferencia de otros organismos de seguridad como fuerza civil, guardia nacional, etc.

  5. Número de Acciones de Participación Ciudadana: Mayor número de acciones de participación ciudadana está relacionado con una mayor percepción de inseguridad. Esto podría ser porque las acciones de participación ciudadana a menudo se inician en respuesta a problemas de inseguridad.

Contrastes por sexo:

splines.mujer<-glm(INSEGURIDAD ~ aprobacion.fiscalia+ 
                      bs(corrupcion.estado,3) + 
                      bs(impunidad, 3) + 
                      transparencia.gobierno + 
                      corrupcion.municipio + 
                      desempeño.policia + 
                      numero.acciones.part.ciud, 
                      data = eav23.mujer, 
                      family = binomial)

Factores Significativos Evaluados en mujeres

  1. Aprobación de la fiscalía: Quienes la desaprueban, se sienten más inseguras.
  2. Corrupción del estado: Relación positiva, a mayor corrupción, mayor percepción de inseguridad.
  3. Transparencia del gobierno: A mayor transparencia, mayor percepción.
  4. Desempeño policía: A mejor desempeño, menor percepción.
  5. Número de acciones ciudadanas: A mayor acciones, mayor percecpión.
splines.hombre<-glm(INSEGURIDAD ~ aprobacion.fiscalia+ 
                      bs(corrupcion.estado,3) + 
                      bs(impunidad, 3) + 
                      transparencia.gobierno + 
                      corrupcion.municipio + 
                      desempeño.policia + 
                      numero.acciones.part.ciud, 
                      data = eav23.hombre, 
                      family = binomial)

Factores Significativos Evaluados en hombres

  1. Aprobación de la fiscalía: Quienes la desaprueban, se sienten más inseguras.
  2. Corrupción del estado: Relación positiva, a mayor corrupción, mayor percepción de inseguridad.
  3. Transparencia del gobierno: A mayor transparencia, mayor percepción.
  4. Desempeño policía: A mejor desempeño, menor percepción.
  5. Número de acciones ciudadanas: A mayor acciones, mayor percecpión.

Los mismos predictores significativos en ambos sexos se repiten pero con distintos matices. Es curioso ver que las acciones ciudadanas tienen mayor peso en los hombres que en las mujeres. El predictor con más peso en hombres fue la corrupción del estado mientras que en las mujeres fue el de la transparencia del gobierno.

Conclusión

Este estudio nos ayuda a entender que la percepción de inseguridad está influenciada por una variedad de factores, tanto relacionados con la gobernanza y la justicia, como con la participación de la comunidad. Las intervenciones para mejorar la percepción de seguridad también deben englobar la perspectiva institucional. Pues, se debe recordar que, la percepción de inseguridad no se debe a un solo factor, sino a una combinación de varios aspectos del gobierno y la sociedad. Mejorar la percepción de seguridad requerirá abordar estos múltiples frentes de manera integrada.

Además de aplicar una perspectiva institucional, se debe ver con un enfoque de género, sabiendo que, aunque son los mismos factores institucionales que influyen en ambos sexos, lo hacen en distinto peso.

Recomendaciones

Recomendaciones a Cómo Vamos Nuevo León:

  1. Hacer más preguntas de factores institucionales: nos encontramos con el problema de que no había tantas preguntas que pudiéramos usar para el modelo. Algunas buenas preguntas podrían ser:
    1. ¿Cómo calificaría la rapidez y eficacia del sistema judicial en resolver casos de delitos?
    2. ¿Confía usted en la imparcialidad de los jueces y fiscales?
    3. ¿Ha observado usted colaboraciones efectivas entre instituciones para abordar problemas de seguridad en su área?
  2. No hacer tantas preguntas subsecuentes, tratar de capturar toda la información en una sola pregunta.
  3. Hay unas escalas que están a 5 niveles y otras a 4. Homologarlas todas.