# PAQUETES

library('Hmisc')  # harrell2020
library(DT)       # xie2020
library(reshape2) # wickham2007
library(foreign)  # rcoreteam2020b
library(scales)   # wickham2020
library(openxlsx)
library(knitr)    # xie2014

opts_chunk$set(warning = FALSE, error = FALSE, message = FALSE)

INTRODUCCIÓN

La Encuesta Nacional de Seguridad Pública Urbana (ENSU) es una encuesta levantada por Instituto Nacional de Estadística y Geografía (INEGI) en forma trimestral. El objetivo de la ENSU es generar información estadística sobre la percepción de la población acerca de la seguridad pública en las ciudades del país. En este sentido, la ENSU “[…] permite generar estimaciones para cada una de las 85 ciudades (algunas son zonas) de interés, referenciando al menos una ciudad por cada entidad federativa e incluyendo las 16 demarcaciones territoriales de la Ciudad de México” (Instituto Nacional de Estadistica y Geografia (2019b)).

La Encuesta Nacional de Seguridad Pública Urbana (ENSU) es una de las posibles fuentes de información pública que se pueden usar para medir indirectamente la incidencia o el riesgo de LD.

La ENSU es una encuesta trimestral, lo cual daría datos con mayor oportunidad que la ENVIPE, con la que está vinculada, al menos, de manera conceptual.

Uno de los problemas con la ENSU es su representatividad, ya que captura únicamente la percepción de las personas de las ciudades contempladas en la encuesta.

En el contenido, hay algunos puntos de interés:

  • Mide percepción de seguridad/inseguridad y es posible desglosarla por tipo de delito;
  • Mide percepción del desempeño de las autoridades;
  • Mide percepción de corrupción.

DATOS

El presente reporte incluye datos de la ENSU para:

  • 2016 1T, 2T, 3T y 4T
  • 2017 1T, 2T, 3T y 4T
  • 2018 1T, 2T, 3T y 4T
  • 2019 1T, 2T, 3T y 4T
  • 2020 1T, 2T, 3T y 4T
  • 2021 1T, 2T, 3T y 4T
  • 2022 1T, 2T, 3T y 4T

La próxima actualización de la ENSU, correspondiente al 2T del 2022 está programada para el 24 de julio del 2024.

CUESTIONARIO BASE

cat.noment <- read.xlsx(xlsxFile = 'catalogos.xlsx', sheet = 1)

# Lee los datos del cuestionario base.

datos.cb.2022.4 <- read.dbf(file = './dbf/ENSU_CB_1222.dbf', as.is = TRUE)
datos.cb.2022.3 <- read.dbf(file = './dbf/ENSU_CB_0922.dbf', as.is = TRUE)
datos.cb.2022.2 <- read.dbf(file = './dbf/ENSU_CB_0622.dbf', as.is = TRUE)
datos.cb.2022.1 <- read.dbf(file = './dbf/ENSU_CB_0322.dbf', as.is = TRUE)
datos.cb.2021.4 <- read.dbf(file = './dbf/ENSU_CB_1221.dbf', as.is = TRUE)
datos.cb.2021.3 <- read.dbf(file = './dbf/ENSU_CB_0921.dbf', as.is = TRUE)
datos.cb.2021.2 <- read.dbf(file = './dbf/ENSU_CB_0621.dbf', as.is = TRUE)
datos.cb.2021.1 <- read.dbf(file = './dbf/ENSU_CB_0321.dbf', as.is = TRUE)
datos.cb.2020.4 <- read.dbf(file = './dbf/ENSU_CB_1220.dbf', as.is = TRUE)
datos.cb.2020.3 <- 
  read.dbf(file = './dbf/ENSU_CB_sec1_2_3_0920.dbf', as.is = TRUE)
datos.cb.2020.1 <- read.dbf(file = './dbf/ENSU_CB_0320.dbf', as.is = TRUE)
datos.cb.2019.4 <- read.dbf(file = './dbf/ENSU_CB_1219.dbf', as.is = TRUE)
datos.cb.2019.3 <- read.dbf(file = './dbf/ENSU_CB_0919.dbf', as.is = TRUE)
datos.cb.2019.2 <- read.dbf(file = './dbf/ENSU_CB_0619.dbf', as.is = TRUE)
datos.cb.2019.1 <- read.dbf(file = './dbf/ENSU_CB_0319.dbf', as.is = TRUE)
datos.cb.2018.4 <- read.dbf(file = './dbf/ENSU_CB_1218.dbf', as.is = TRUE)
datos.cb.2018.3 <- read.dbf(file = './dbf/ENSU_CB_0918.dbf', as.is = TRUE)
datos.cb.2018.2 <- read.dbf(file = './dbf/ENSU_CB_0618.dbf', as.is = TRUE)
datos.cb.2018.1 <- read.dbf(file = './dbf/ENSU_CB_0318.dbf', as.is = TRUE)
datos.cb.2017.4 <- read.dbf(file = './dbf/ENSU_CB_1217.dbf', as.is = TRUE)
datos.cb.2017.3 <- read.dbf(file = './dbf/ENSU_CB_0917.dbf', as.is = TRUE)
datos.cb.2017.2 <- read.dbf(file = './dbf/ENSU_CB_0617.dbf', as.is = TRUE)
datos.cb.2017.1 <- read.dbf(file = './dbf/ENSU_CB_0317.dbf', as.is = TRUE)
datos.cb.2016.4 <- 
  read.dbf(file = './dbf/ENSU_CB_1216.dbf', as.is = TRUE) |>
  merge(y = cat.noment, all.x = TRUE)

datos.cb.2016.3 <- 
  read.dbf(file = './dbf/ENSU_CB_0916.dbf', as.is = TRUE) |>
  merge(y = cat.noment, all.x = TRUE)

datos.cb.2016.2 <- 
  read.dbf(file = './dbf/ENSU_CB_0616.dbf', as.is = TRUE) |>
  merge(y = cat.noment, all.x = TRUE)

datos.cb.2016.1 <- 
  read.dbf(file = './dbf/ENSU_CB_0316.dbf', as.is = TRUE) |>
  merge(y = cat.noment, all.x = TRUE)

# Viviendas.

datos.viv.2022.1 <- read.dbf(file = './dbf/ENSU_VIV_0322.dbf', as.is = TRUE)
datos.viv.2021.4 <- read.dbf(file = './dbf/ENSU_VIV_1221.dbf', as.is = TRUE)
datos.viv.2021.3 <- read.dbf(file = './dbf/ENSU_VIV_0921.dbf', as.is = TRUE)
datos.viv.2021.2 <- read.dbf(file = './dbf/ENSU_VIV_0621.dbf', as.is = TRUE)
datos.viv.2021.1 <- read.dbf(file = './dbf/ENSU_VIV_0321.dbf', as.is = TRUE)
datos.viv.2020.4 <- read.dbf(file = './dbf/ENSU_VIV_1220.dbf', as.is = TRUE)
datos.viv.2020.3 <- read.dbf(file = './dbf/ENSU_VIV_0920.dbf', as.is = TRUE)
# datos.viv.2020.2 <- read.dbf(file = './dbf/ENSU_VIV_0620.dbf', as.is = TRUE)
datos.viv.2020.1 <- read.dbf(file = './dbf/ENSU_VIV_0320.dbf', as.is = TRUE)
datos.viv.2019.4 <- read.dbf(file = './dbf/ENSU_VIV_1219.dbf', as.is = TRUE)
datos.viv.2019.3 <- read.dbf(file = './dbf/ENSU_VIV_0919.dbf', as.is = TRUE)
datos.viv.2019.2 <- read.dbf(file = './dbf/ENSU_VIV_0619.dbf', as.is = TRUE)

# Pega las fechas.
#
datos.cb.2022.4$Fecha <- '2022-12-31'
datos.cb.2022.3$Fecha <- '2022-09-30'
datos.cb.2022.2$Fecha <- '2022-06-30'
datos.cb.2022.1$Fecha <- '2022-03-31'
datos.cb.2021.4$Fecha <- '2021-12-31'
datos.cb.2021.3$Fecha <- '2021-09-30'
datos.cb.2021.2$Fecha <- '2021-06-30'
datos.cb.2021.1$Fecha <- '2021-03-31'
datos.cb.2020.4$Fecha <- '2020-12-31'
datos.cb.2020.3$Fecha <- '2020-09-30'
datos.cb.2020.1$Fecha <- '2020-03-31'
datos.cb.2019.4$Fecha <- '2019-12-31'
datos.cb.2019.3$Fecha <- '2019-09-30'
datos.cb.2019.2$Fecha <- '2019-06-30'
datos.cb.2019.1$Fecha <- '2019-03-31'
datos.cb.2018.4$Fecha <- '2018-12-31'
datos.cb.2018.3$Fecha <- '2018-09-30'
datos.cb.2018.2$Fecha <- '2018-06-30'
datos.cb.2018.1$Fecha <- '2018-03-31'
datos.cb.2017.4$Fecha <- '2017-12-31'
datos.cb.2017.3$Fecha <- '2017-09-30'
datos.cb.2017.2$Fecha <- '2017-06-30'
datos.cb.2017.1$Fecha <- '2017-03-31'
datos.cb.2016.4$Fecha <- '2016-12-31'
datos.cb.2016.3$Fecha <- '2016-09-30'
datos.cb.2016.2$Fecha <- '2016-06-30'
datos.cb.2016.1$Fecha <- '2016-03-31'


reactivos.cb <- c('Fecha', 'NOM_ENT','BP1_1', 'FAC_SEL')

datos.cb <- 
  rbind(
    datos.cb.2022.4[,reactivos.cb], 
    datos.cb.2022.3[,reactivos.cb], 
    datos.cb.2022.2[,reactivos.cb], 
    datos.cb.2022.1[,reactivos.cb], 
    datos.cb.2021.4[,reactivos.cb], 
    datos.cb.2021.3[,reactivos.cb], 
    datos.cb.2021.2[,reactivos.cb], 
    datos.cb.2021.1[,reactivos.cb], 
    datos.cb.2020.4[,reactivos.cb], 
    datos.cb.2020.3[,reactivos.cb], 
    datos.cb.2020.1[,reactivos.cb], 
    datos.cb.2019.4[,reactivos.cb],
    datos.cb.2019.3[,reactivos.cb],
    datos.cb.2019.2[,reactivos.cb],
    datos.cb.2019.1[,reactivos.cb],
    datos.cb.2018.4[,reactivos.cb],
    datos.cb.2018.3[,reactivos.cb],
    datos.cb.2018.2[,reactivos.cb],
    datos.cb.2018.1[,reactivos.cb],
    datos.cb.2017.4[,reactivos.cb],
    datos.cb.2017.3[,reactivos.cb],
    datos.cb.2017.2[,reactivos.cb]
    , datos.cb.2017.1[,reactivos.cb]
    , datos.cb.2016.4[,reactivos.cb]
    , datos.cb.2016.3[,reactivos.cb]
    , datos.cb.2016.2[,reactivos.cb]
    , datos.cb.2016.1[,reactivos.cb]
    ) 
# Limpia los nombres de los estados.
#
original <- c("Ciudad de México", "México", "Nuevo León", "Michoacán de Ocampo", "Querétaro", "San Luis Potosí", "Yucatán")

corregido <- c("Ciudad de Mexico", "Mexico", "Nuevo Leon", "Michoacan de Ocampo", "Queretaro", "San Luis Potosi", "Yucatan")

datos.cb$NOM_ENT[which(datos.cb$NOM_ENT %in% original)] <- 
  unlist(
    lapply(
      X = datos.cb$NOM_ENT[which(datos.cb$NOM_ENT %in% original)],
      FUN = 
        function(cadena){
          corregido[grep(pattern = paste0("^", cadena, "$"), x = original)]}))

datos.cb$NOM_ENT <- toupper(datos.cb$NOM_ENT)
datos.cb$NOM_ENT <- gsub(pattern = 'Á', replacement = 'A', x = datos.cb$NOM_ENT)
datos.cb$NOM_ENT <- gsub(pattern = 'É', replacement = 'E', x = datos.cb$NOM_ENT)
datos.cb$NOM_ENT <- gsub(pattern = 'Í', replacement = 'I', x = datos.cb$NOM_ENT)
datos.cb$NOM_ENT <- gsub(pattern = 'Ó', replacement = 'O', x = datos.cb$NOM_ENT)

1. EN TÉRMINOS DE DELINCUENCIA, CONSIDERA QUE VIVIR EN SU CIUDAD ES:

La siguiente tabla muestra el número de respuestas por cada opción de respuesta por periodo:

d.bp1.1 <- datos.cb[,c('Fecha','BP1_1')]

d.bp1.1$Fecha <- as.Date(d.bp1.1$Fecha, format = '%Y-%m-%d')

d.bp1.1$aux <- 1

t.bp1.1_2 <- 
  aggregate(
    x = list(Frecuencia = d.bp1.1$aux), 
    by = list(Fecha = d.bp1.1$Fecha, Respuesta = d.bp1.1$BP1_1), 
    FUN = sum)

t.bp1.1_3 <- 
  aggregate(
    x = list(Frecuencia.Total = d.bp1.1$aux), 
    by = list(Fecha = d.bp1.1$Fecha), 
    FUN = sum)

t.bp1.1_2 <- merge(x = t.bp1.1_2, y = t.bp1.1_3)

t.bp1.1 <- 
  dcast(
    data = as.data.frame(table(d.bp1.1$Fecha, d.bp1.1$BP1_1)), 
    formula = Var1 ~ Var2, 
    fill = 0, value.var = 'Freq')

t.bp1.1 <- t.bp1.1[order(t.bp1.1$Var1, decreasing = TRUE), ]

datatable(
  data = t.bp1.1, 
  colnames = c('Periodo' = 1, 'Seguro' = 2, 'Inseguro' = 3, 'No sabe' = 4), 
  rownames = FALSE) %>%
  formatRound(columns = 2:4, digits = 0)

Con base en las respuestas recibidas, entonces, a nivel nacional y para las ciudades de interés capturadas en la ENSU, ¿cómo percibe la población urbana la vida en sus ciudades? La tabla siguiente muestra la evolución en el tiempo de la estimación de la percepción de seguridad urbana a nivel nacional.

d.1.1.1 <- 
  datos.cb[,c('Fecha','BP1_1', 'FAC_SEL')] |> 
  transform(FAC_SEL = as.numeric(FAC_SEL))

d.1.1.1.1 <- 
  dcast(
    data = d.1.1.1, 
    formula = Fecha ~ BP1_1, 
    value.var = 'FAC_SEL', 
    fun.aggregate = sum)

d.1.1.1.1[, 2:4] <- 
  t(sapply(X = as.data.frame(t(d.1.1.1.1[, 2:4])), FUN = function(x){x/sum(x)}))

d.1.1.1.1 <- d.1.1.1.1[order(d.1.1.1.1[,1], decreasing = TRUE),]

datatable(
  data = d.1.1.1.1, 
  colnames = c('Periodo' = 1, 'Seguro' = 2, 'Inseguro' = 3, 'No sabe' = 4), 
  rownames = FALSE) %>%
  formatPercentage(columns = 2:4, digits = 2)
# Guarda la tabla con la estimación histórica de la percepción de seguridad ur-
# bana a nivel nacional.
#
write.table(
  x = d.1.1.1.1, 
  file = 'ensu_1.txt', 
  sep = '|', 
  fileEncoding = 'UTF-8', 
  row.names = FALSE)

d.1.1.1.2 <- 
  aggregate(
    x = list(FAC_SEL = d.1.1.1$FAC_SEL), 
    by = list(Fecha = d.1.1.1$Fecha, BP1_1 = d.1.1.1$BP1_1),
    FUN = sum)

d.1.1.1.3 <- 
  aggregate(
    x = list(FAC_TOTAL = d.1.1.1$FAC_SEL), 
    by = list(Fecha = d.1.1.1$Fecha),
    FUN = sum)

d.1.1.1.2 <- merge(x = d.1.1.1.2, y = d.1.1.1.3, all.x = TRUE)

d.1.1.1.2$Proporción <- 100 * d.1.1.1.2$FAC_SEL / d.1.1.1.2$FAC_TOTAL

d.1.1.1.2$BP1_1 <- factor(d.1.1.1.2$BP1_1)

d.1.1.1.2$Fecha <- as.Date(d.1.1.1.2$Fecha, format = '%Y-%m-%d')

ggplot(
  data = d.1.1.1.2, mapping = aes(x = Fecha, y = Proporción, colour = BP1_1)) +
  geom_line() +
  theme_minimal() +
  labs(
    title = 'Percepción de seguridad en términos de delincuencia',
    subtitle = 'ENSU, Cuestionario base, Sección 1, pregunta 1, estimación nacional',
    color = 'Respuesta') +
  xlab(label = 'Respuesta (1 = Seguro; 2 = Inseguro; 9 = No sabe)') +
  ylab(label = 'Porcentaje')

ggplot(data = d.1.1.1.2, mapping = aes(x = Fecha, y = Proporción)) +
  facet_grid(rows = BP1_1 ~ ., scales = 'free') +
  geom_line() +
  theme_minimal() +
  labs(
    title = 'Percepción de seguridad en términos de delincuencia',
    subtitle = 'ENSU, Cuestionario base, Sección 1, pregunta 1, estimación nacional') +
  xlab(label = 'Respuesta (1 = Seguro; 2 = Inseguro; 9 = No sabe)') +
  ylab(label = 'Porcentaje')

Las siguientes tabla y gráficas describen el comportamiento histórico de la percepción de seguridad urbana a nivel nacional:

print(summary(d.1.1.1.1[,2:4]))
##        1                2                9            
##  Min.   :0.2302   Min.   :0.6424   Min.   :0.0005582  
##  1st Qu.:0.2557   1st Qu.:0.6700   1st Qu.:0.0016741  
##  Median :0.2782   Median :0.7194   Median :0.0023430  
##  Mean   :0.2885   Mean   :0.7090   Mean   :0.0025049  
##  3rd Qu.:0.3278   3rd Qu.:0.7431   3rd Qu.:0.0032567  
##  Max.   :0.3537   Max.   :0.7681   Max.   :0.0060705
d.1.2 <- melt(data = d.1.1.1.1, value.name = 'Porcentaje', variable.name = 'Respuesta', id.vars = 'Fecha')

ggplot(data = d.1.2, mapping = aes(x = Respuesta, y = Porcentaje)) +
  geom_boxplot() +
  theme_minimal()

ggplot(
  data = d.1.2[which(d.1.2$Respuesta == "1"),], 
  mapping = aes(x = Respuesta, y = Porcentaje)) +
  geom_boxplot() +
  theme_minimal()

ggplot(
  data = d.1.2[which(d.1.2$Respuesta == "2"),], 
  mapping = aes(x = Respuesta, y = Porcentaje)) +
  geom_boxplot() +
  theme_minimal()

POR ESTADO

Nuevamente, para las ciudades de interés capturadas por la ENSU, por entidad federativa, ¿cómo percibe la población urbana la vida en sus ciudades?

d.2 <- 
  datos.cb[,c('Fecha', 'NOM_ENT','BP1_1', 'FAC_SEL')] |> 
  transform(FAC_SEL = as.numeric(FAC_SEL))

d.2 <- 
  dcast(
    data = d.2, 
    formula = Fecha + NOM_ENT ~ BP1_1, 
    value.var = 'FAC_SEL', 
    fun.aggregate = sum)

d.2$Fecha <- as.Date(x = d.2$Fecha)

d.2[, 3:5] <- 
  t(sapply(X = as.data.frame(t(d.2[, 3:5])), FUN = function(x){x/sum(x)}))

d.2 <- d.2[order(d.2$Fecha, decreasing = TRUE),]

datatable(
  data = d.2, 
  colnames = 
    c('Periodo' = 1, 'Estado' = 2, 'Seguro' = 3, 'Inseguro' = 4, 'No sabe' = 5), 
  rownames = FALSE,
  filter = 'top') %>%
  formatPercentage(columns = 3:5, digits = 2)
ggplot(data = d.2, mapping = aes(x = NOM_ENT, y = `2`)) +
  geom_boxplot() +
  geom_hline(yintercept = mean(d.2$`2`), colour = 'red') +
  labs(x = 'ENTIDAD', y = 'INSEGURO') +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, vjust = 0.5, hjust = 1))

Máxima percepción de inseguridad en la encuesta más reciente
El estado con la mayor percepción de inseguridad en la última encuesta levantada (2022-12-31) es ZACATECAS, observándose un 94.64% de la población percibió como insegura la vida en su ciudad. Las gráficas siguientes muestran el comportamiento histórico de la percepción de la seguridad de la vida en las ciudades en ZACATECAS.
entidad <- 
  d.2$NOM_ENT[
    which(
      d.2[which(d.2$Fecha == max(d.2$Fecha)), 4] == 
        max(d.2[which(d.2$Fecha == max(d.2$Fecha)), 4])
      )
    ]

temp <- d.2[which(d.2$NOM_ENT == entidad), ]

pend.1 <- lm(formula = `1` ~ Fecha, data = temp)

pend.1 <- pend.1$coefficients[2]

pend.2 <- lm(formula = `2` ~ Fecha, data = temp)

pend.2 <- pend.2$coefficients[2]

tabla <- 
  data.frame(
    Seguro = 
      c(min(temp$`1`), mean(temp$`1`), max(temp$`1`), sd(temp$`1`), pend.1)
    , Inseguro = 
      c(min(temp$`2`), mean(temp$`2`), max(temp$`2`), sd(temp$`2`), pend.2)
    )

tabla <- t(tabla)

datatable(
  data = tabla
  , colnames = c('Min', 'Max', 'Media', 'SD', 'Tendencia')
  , caption = 
    paste0(
      'Estadísticas descriptivas de percepción de seguridad urbana histórica: '
      , entidad
      )
  ) %>% 
  formatPercentage(columns = 1:4, digits = 2)
ggplot(
  data = temp, mapping = aes(x = Fecha, y = `2`)) +
  geom_line() +
  geom_smooth(method = 'lm', se = FALSE) + 
  theme_minimal() +
  labs(
    title = 'Percepción de seguridad en términos de delincuencia',
    subtitle = 
      paste0(
        'ENSU, Cuestionario base, Sección 1, pregunta 1, estimación estatal: ', 
        entidad)) +
  xlab(label = 'Respuesta 2 = Inseguro') +
  ylab(label = 'Estimación')

ggplot(
  data = temp, mapping = aes(x = Fecha, y = `1`)) +
  geom_line() +
  geom_smooth(method = 'lm', se = FALSE) + 
  theme_minimal() +
  labs(
    title = 'Percepción de seguridad en términos de delincuencia',
    subtitle = 
      paste0(
        'ENSU, Cuestionario base, Sección 1, pregunta 1, estimación estatal: ', 
        entidad)) +
  xlab(label = 'Respuesta 1 = Seguro') +
  ylab(label = 'Estimación')

Máxima percepción de inseguridad histórica
El estado con la máxima percepción de inseguridad histórica es TABASCO, en 2017-09-30, periodo en el que un 98.43% de la población percibe como insegura la vida en su ciudad. Las gráficas siguientes muestran el comportamiento histórico de la percepción de la seguridad de la vida en las ciudades en TABASCO.
entidad <- d.2$NOM_ENT[which(d.2[, 4] == max(d.2[, 4]))]

d.3 <- d.2[which(d.2$NOM_ENT == entidad), ]

pend.1 <- lm(formula = `1` ~ Fecha, data = d.3)

pend.1 <- pend.1$coefficients[2]

pend.2 <- lm(formula = `2` ~ Fecha, data = d.3)

pend.2 <- pend.2$coefficients[2]

tabla <- 
  data.frame(
    Seguro = c(min(d.3$`1`), mean(d.3$`1`), max(d.3$`1`), sd(d.3$`1`), pend.1)
    , Inseguro = c(min(d.3$`2`), mean(d.3$`2`), max(d.3$`2`), sd(d.3$`2`), pend.2)
    )

tabla <- t(tabla)

datatable(
  data = tabla
  , colnames = c('Min', 'Max', 'Media', 'SD', 'Tendencia')
  , caption = 
    paste0(
      'Estadísticas descriptivas de percepción de seguridad urbana histórica: '
      , entidad
      )
  ) %>% 
  formatPercentage(columns = 1:4, digits = 2)
ggplot(
  data = d.3, mapping = aes(x = Fecha, y = `2`)) +
  geom_line() +
  geom_smooth(method = 'lm', se = FALSE) + 
  theme_minimal() +
  labs(
    title = 'Percepción de seguridad en términos de delincuencia',
    subtitle = 
      paste0(
        'ENSU, Cuestionario base, Sección 1, pregunta 1, estimación estatal: ', 
        entidad)) +
  xlab(label = 'Respuesta 2 = Inseguro') +
  ylab(label = 'Estimación')

ggplot(
  data = d.3, mapping = aes(x = Fecha, y = `1`)) +
  geom_line() +
  geom_smooth(method = 'lm', se = FALSE) + 
  theme_minimal() +
  labs(
    title = 'Percepción de seguridad en términos de delincuencia',
    subtitle = 
      paste0(
        'ENSU, Cuestionario base, Sección 1, pregunta 1, estimación estatal: ', 
        entidad)) +
  xlab(label = 'Respuesta 1 = Seguro') +
  ylab(label = 'Estimación')

Mínima percepción de inseguridad histórica
Por otra parte, el estado con la menor percepción de inseguridad histórica es YUCATAN, en 2019-12-31, periodo en el que un 18.93% de la población percibió como insegura la vida en su ciudad. Las gráficas siguientes muestran el comportamiento histórico de la percepción de la seguridad de la vida en las ciudades en YUCATAN.
entidad <- d.2$NOM_ENT[which(d.2[, 4] == min(d.2[, 4]))]

d.4 <- d.2[which(d.2$NOM_ENT == entidad), ]

pend.1 <- lm(formula = `1` ~ Fecha, data = d.4)

pend.1 <- pend.1$coefficients[2]

pend.2 <- lm(formula = `2` ~ Fecha, data = d.4)

pend.2 <- pend.2$coefficients[2]

tabla <- 
  data.frame(
    Seguro = c(min(d.4$`1`), mean(d.4$`1`), max(d.4$`1`), sd(d.4$`1`), pend.1)
    , Inseguro = c(min(d.4$`2`), mean(d.4$`2`), max(d.4$`2`), sd(d.4$`2`), pend.2)
    )

tabla <- t(tabla)

datatable(
  data = tabla
  , colnames = c('Min', 'Max', 'Media', 'SD', 'Tendencia')
  , caption = 
    paste0(
      'Estadísticas descriptivas de percepción de seguridad urbana histórica: '
      , entidad
      )
  ) %>% 
  formatPercentage(columns = 1:4, digits = 2)
ggplot(
  data = d.4, mapping = aes(x = Fecha, y = `2`)) +
  geom_line() +
  geom_smooth(method = 'lm', se = FALSE) + 
  theme_minimal() +
  labs(
    title = 'Percepción de seguridad en términos de delincuencia',
    subtitle = 
      paste0(
        'ENSU, Cuestionario base, Sección 1, pregunta 1, estimación estatal: ', 
        entidad)) +
  xlab(label = 'Respuesta 2 = Inseguro') +
  ylab(label = 'Estimación')

ggplot(
  data = d.4, mapping = aes(x = Fecha, y = `1`)) +
  geom_line() +
  geom_smooth(method = 'lm', se = FALSE) + 
  theme_minimal() +
  labs(
    title = 'Percepción de seguridad en términos de delincuencia',
    subtitle = 
      paste0(
        'ENSU, Cuestionario base, Sección 1, pregunta 1, estimación estatal: ', 
        entidad)) +
  xlab(label = 'Respuesta 1 = Seguro') +
  ylab(label = 'Estimación')

REFERENCIAS

Harrell Jr, Frank E, with contributions from Charles Dupont, and many others. 2020. Hmisc: Harrell Miscellaneous. https://CRAN.R-project.org/package=Hmisc.
Instituto Nacional de Estadistica y Geografia. 2019a. “Encuesta Nacional de Seguridad Publica Urbana 04 - 2019: Cuestionario Principal.” Edited by Instituto Nacional de Estadistica y Geografia.
———. 2019b. Encuesta Nacional de Seguridad Publica Urbana 2019: Diseño Muestral. Edited by Instituto Nacional de Estadistica y Geografia.
———. 2019c. Encuesta Nacional de Seguridad Publica Urbana 2019: Marco Conceptual. Edited by Instituto Nacional de Estadistica y Geografia.
Instituto Nacional de Estadística y Geografía. 2020. Encuesta Nacional de Seguridad Pública Urbana 2020: Primer Trimestre, Estructura de La Base de Datos. Edited by Instituto Nacional de Estadística y Geografía.
R Core Team. 2020a. Foreign: Read Data Stored by ’Minitab’, ’s’, ’SAS’, ’SPSS’, ’Stata’, ’Systat’, ’Weka’, ’dBase’, ... https://CRAN.R-project.org/package=foreign.
———. 2020b. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.
Wickham, Hadley. 2007. “Reshaping Data with the reshape Package.” Journal of Statistical Software 21 (12): 1–20. http://www.jstatsoft.org/v21/i12/.
Wickham, Hadley, and Dana Seidel. 2020. Scales: Scale Functions for Visualization. https://CRAN.R-project.org/package=scales.
Xie, Yihui. 2014. “Knitr: A Comprehensive Tool for Reproducible Research in R.” In Implementing Reproducible Computational Research, edited by Victoria Stodden, Friedrich Leisch, and Roger D. Peng. Chapman; Hall/CRC. http://www.crcpress.com/product/isbn/9781466561595.
Xie, Yihui, Joe Cheng, and Xianying Tan. 2020. DT: A Wrapper of the JavaScript Library ’DataTables’. https://CRAN.R-project.org/package=DT.