##           used (Mb) gc trigger  (Mb) max used (Mb)
## Ncells  990494 52.9    1986712 106.2  1364417 72.9
## Vcells 1637523 12.5    8388608  64.0  2775590 21.2

INTRODUCCIÓN

La incidencia delictiva en una determinada región, si bien no está exenta de polémica en su uso, es un dato relevante en materia de prevención del lavado de dinero (PLD). Por un lado, todos los delitos que tengan un componente económico, para poder materializar este componente, en algún punto implican alguna actividad de LD. Por otra parte, se argumenta que en aquellas zonas en las que se comenta una mayor cantidad de delitos, existirá una mayor probabilidad o riesgo de que se cometa también el delito de lavado de dinero.

Desde luego, esto argumentos es necesario tomarlos con el debido cuidado. Las estadísticas de incidencia delictiva, por ejemplo, no incluyen únicamente delitos con componentes económicos (homicidio imprudencial, por ejemplo). Por otro lado, el dinero no necesariamente se lava en las zonas en las que se comete el delito precedente o predicado.

Otras consideraciones que es necesario tener se refieren al tratamiento a dar al dato de incidencia delictiva. ¿Qué zona será más relevante para determinar el riesgo? ¿Una zona en la que se comenten más delitos en términos absolutos o aquella en la que se comenten más delitos per cápita?

Finalmente, es necesario tomar en cuenta el origen de los datos. Este reporte se refiere a las cifras publicadas por el Secretariado Ejecutivo del Sistema Nacional de Seguridad Pública (SESNSP) y está compuesto por los delitos denunciados ante la autoridad. Es, por lo tanto, una cifra que 1) subregistra naturalmente el delito, pues no incluye (no tiene manera de hacerlo) al delito no denunciado o no perseguido (cifra negra) y 2) depende en gran medida de factores exógenos a la autoridad (por ejemplo, la confianza que la población tenga en el acto de denuncia o el temor de la población al mismo).

A pesar de lo señalado anteriormente, la incidencia delictiva no deja de ser un dato relevante y, al final, aclarar los dilemas al rededor de su uso no forma parte del alcance de este reporte que busca proporcionar un análisis descriptivo detallado de las cifras.

OBTENCIÓN DE LOS DATOS

Como ya se mencionó, los datos son publicados por el SESNSP, y son publicados en forma mensual (normalmente los días 20 de cada mes) en la página web del SESNSP por medio de 4 archivos en formato csv que contienen:

  • Cifras de incidencia delictiva federal;
  • Cifras de incidencia delictiva estatal;
  • Cifras de incidencia delictiva municipal;
  • Cifras de víctimas del fuero común.

Para la obtención de los datos “per capita” se utiliza el dato del número de personas de 18 años o más de las proyecciones de la población base elaboradas por el Consejo Nacional de Población.

n.mes <- 10

# Nombre del archivo que contiene los datos de las víctimas del fuero común.
# 
archivo.vfc <- 'IDVFC_NM_oct22.csv'

# Nombre del archivo que contiene los datos de la incidencia delictiva federal.
# 
archivo.if <- 'IDEFF_oct22.csv'

# Nombre del archivo que contiene los datos de la incidencia delictiva municipal.
# 
archivo.im <- 'IDM_NM_oct22.csv'

# Nombre del archivo que contiene los datos de la incidencia delictiva estatal.
# 
archivo.ie <- 'IDEFC_NM_oct22.csv'

# Nombre del archivo que contiene los datos de la población mayor de 18 de años 
# por estado.
#
poblacion.estatal <- 
  read.table(
    file = 'pob_mit_proyecciones.csv'
    , sep = ','
    # , encoding = 'ansi'
    , header = TRUE, 
    stringsAsFactors = FALSE
    )

poblacion.estatal <- 
  with(
    poblacion.estatal[which(poblacion.estatal$EDAD >= 18),],
    aggregate(
      x = list(POBLACION = POBLACION), 
      by = list(AÑO = AÑO, ENTIDAD = ENTIDAD), 
      FUN = sum))

poblacion.nacional <-
  poblacion.estatal[
    which(poblacion.estatal$ENTIDAD == 'República Mexicana'),]

# Población municipal mayor de 19 años CONAPO.
#
poblacion.municipal.1 <- 
  read.table(
    file = 'base_municipios_final_datos_01.csv', 
    sep = ',',
    # encoding = 'ansi',
    header = TRUE, 
    stringsAsFactors = FALSE)

poblacion.municipal.2 <- 
  read.table(
    file = 'base_municipios_final_datos_02.csv', 
    sep = ',',
    # encoding = 'ansi',
    header = TRUE, 
    stringsAsFactors = FALSE)

poblacion.municipal <- rbind(poblacion.municipal.1, poblacion.municipal.2)

excl.gpos.edad <- c('pobm_00_04', 'pobm_05_09', 'pobm_10_14', 'pobm_15_19')

poblacion.municipal <- 
  with(
    poblacion.municipal[
      which(!(poblacion.municipal$EDAD_QUIN %in% excl.gpos.edad)),],
    aggregate(
      x = list(POBLACION = POB), 
      by = 
        list(
          AÑO = AÑO, 
          CLAVE = CLAVE, 
          CLAVE_ENT = CLAVE_ENT, 
          NOM_ENT = NOM_ENT, 
          MUN = MUN), 
      FUN = sum))

# Nombre del archivo que contiene el catálogo de estados.
#
archivo.cat.estado <- 'cat_estado.xlsx'

archivo.cat.estado <- read.xlsx(xlsxFile = archivo.cat.estado)

# Datos auxiliares: vectores para la transformación del formato de las fechas.
#
mes <- 
  c(
    'ENERO', 
    'FEBRERO', 
    'MARZO', 
    'ABRIL', 
    'MAYO', 
    'JUNIO', 
    'JULIO', 
    'AGOSTO', 
    'SEPTIEMBRE', 
    'OCTUBRE', 
    'NOVIEMBRE', 
    'DICIEMBRE')

mes.2 <- 
  c(
    'Enero',
    'Febrero',
    'Marzo',
    'Abril',
    'Mayo',
    'Junio',
    'Julio',
    'Agosto',
    'Septiembre',
    'Octubre',
    'Noviembre',
    'Diciembre')

mes.indice <- c(1:12)

mes.dia <- c(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)

VÍCTIMAS DEL FUERO COMÚN

datos.vfc <- 
  read.table(
    file = archivo.vfc, 
    sep = ',', 
    header = TRUE, 
    stringsAsFactors = FALSE, 
    fileEncoding = 'latin1')

POR AÑO

Las siguientes tabla y gráficas muestran la evolución anual del total de víctimas.

datos.vfc$Total <- 
  rowSums(
    datos.vfc[,c('Enero',
                 'Febrero',
                 'Marzo',
                 'Abril',
                 'Mayo',
                 'Junio',
                 'Julio',
                 'Agosto',
                 'Septiembre',
                 'Octubre',
                 'Noviembre',
                 'Diciembre')],
    na.rm = TRUE)

datos.vfc.2 <- 
  with(
    datos.vfc, 
    aggregate(x = list(VICTIMAS = Total), by = list(AÑO = Año), FUN = sum))

datos.vfc.2 <- 
  merge(
    x = datos.vfc.2, 
    y = poblacion.nacional, 
    by.x = 'AÑO', 
    by.y = 'AÑO', 
    all.x = TRUE)

datos.vfc.2$VICTIMAS.PC <- 100000*datos.vfc.2$VICTIMAS/datos.vfc.2$POBLACION

datos.vfc.2$CAMBIO <- 0
datos.vfc.2$CAMBIO.2 <- 0

for (i in (min(datos.vfc.2$AÑO)+1):max(datos.vfc.2$AÑO)){
  
  datos.vfc.2$CAMBIO[datos.vfc.2$AÑO == i] <- 
    datos.vfc.2$VICTIMAS[datos.vfc.2$AÑO == i] -
    datos.vfc.2$VICTIMAS[datos.vfc.2$AÑO == (i - 1)]
  
  datos.vfc.2$CAMBIO.2[datos.vfc.2$AÑO == i] <- 
    datos.vfc.2$VICTIMAS.PC[datos.vfc.2$AÑO == i] -
    datos.vfc.2$VICTIMAS.PC[datos.vfc.2$AÑO == (i - 1)]
       
     }

Las gráficas muestran la serie de tiempo anual. En azul se señala la tendencia1 de la serie de tiempo y su correspondiente intervalo de confianza al 95%. La línea punteada en color rojo señala la cifra del año en curso “anualizada”.

datos.vfc.2 <- datos.vfc.2[order(datos.vfc.2$AÑO, decreasing = TRUE),]

datatable(
  data = datos.vfc.2[,-c(3:4)], 
  rownames = FALSE, 
  filter = 'top', 
  caption = 'Total de víctimas, víctimas por cada 100,000 personas mayores de 18 años y cambios anuales.',
  colnames = c('VICTIMAS PER CAPITA' = 'VICTIMAS.PC', 'CAMBIO PER CAPITA' = 'CAMBIO.2')) %>%
  formatCurrency(
    columns = 2:ncol(datos.vfc.2[,-c(3:4)]), currency = '', digits = 0)
temp <- 
  data.frame(
    AÑO = datos.vfc.2$AÑO[which(datos.vfc.2$AÑO == max(datos.vfc.2$AÑO) -1)],
    VICTIMAS = 
      datos.vfc.2$VICTIMAS[which(datos.vfc.2$AÑO == max(datos.vfc.2$AÑO) - 1)])

temp[2,] <- 
  c(
    datos.vfc.2$AÑO[which(datos.vfc.2$AÑO == max(datos.vfc.2$AÑO))],
    datos.vfc.2$VICTIMAS[
      which(datos.vfc.2$AÑO == max(datos.vfc.2$AÑO))]*12/n.mes)

ggplot(data = datos.vfc.2, mapping = aes(x = AÑO, y = VICTIMAS)) +
  geom_line(
    data = datos.vfc.2[which(datos.vfc.2$AÑO < max(datos.vfc.2$AÑO)),]) +
  geom_line(
    data = datos.vfc.2[which(datos.vfc.2$AÑO >= (max(datos.vfc.2$AÑO)-1)),]) +
  geom_line(
    data = temp,
    linetype = 'dotted',
    col = 'red') +
  geom_smooth(
    data = datos.vfc.2[which(datos.vfc.2$AÑO < max(datos.vfc.2$AÑO)),], 
    method = 'lm') +
  theme_minimal() +
  labs(
    title = 'Víctimas del fuero común',
    caption = paste0('Fecha de consulta: ', file.info(archivo.vfc)$ctime))

ggplot(data = datos.vfc.2, mapping = aes(x = AÑO, y = CAMBIO)) +
  geom_line(data = datos.vfc.2[which(datos.vfc.2$AÑO < max(datos.vfc.2$AÑO)),]) +
  geom_line(
    data = 
      datos.vfc.2[which(datos.vfc.2$AÑO >= (max(datos.vfc.2$AÑO)-1)),]) +
  geom_smooth(
    data = datos.vfc.2[which(datos.vfc.2$AÑO < max(datos.vfc.2$AÑO)),],
    method = 'lm') +
  theme_minimal() +
  labs(
    title = 
      'Variación nominal anual en el número total de víctimas del fuero
    común',
    caption = paste0('Fecha de consulta: ', file.info(archivo.vfc)$ctime))

temp <- datos.vfc.2[which(datos.vfc.2$AÑO >= (max(datos.vfc.2$AÑO)-1)),]

temp$VICTIMAS.PC[which(temp$AÑO == max(temp$AÑO))] <- 
  temp$VICTIMAS.PC[which(temp$AÑO == max(temp$AÑO))]*12/n.mes

ggplot(data = datos.vfc.2, mapping = aes(x = AÑO, y = VICTIMAS.PC)) +
  geom_line(
    data = datos.vfc.2[which(datos.vfc.2$AÑO < max(datos.vfc.2$AÑO)),]) +
  geom_line(
    data = 
      datos.vfc.2[which(datos.vfc.2$AÑO >= (max(datos.vfc.2$AÑO)-1)),]) +
  geom_line(
    data = temp, linetype = 'dotted', colour = 'red') +
  geom_smooth(
    data = datos.vfc.2[which(datos.vfc.2$AÑO < max(datos.vfc.2$AÑO)),], 
    method = 'lm') +
  theme_minimal() +
  labs(
    title = 
      'Víctimas del fuero común por cada 100,000 personas mayores de 18
    años',
    caption = paste0('Fecha de consulta: ', file.info(archivo.vfc)$ctime),
    ylab = 'VICTIMAS')

ggplot(data = datos.vfc.2, mapping = aes(x = AÑO, y = CAMBIO.2)) +
  geom_line(data = datos.vfc.2[which(datos.vfc.2$AÑO < max(datos.vfc.2$AÑO)),]) +
  geom_line(
    data = 
      datos.vfc.2[which(datos.vfc.2$AÑO >= (max(datos.vfc.2$AÑO)-1)),]) +
  geom_smooth(
    data = datos.vfc.2[which(datos.vfc.2$AÑO < max(datos.vfc.2$AÑO)),],
    method = 'lm') +
  theme_minimal() +
  labs(
    title = 'Variación nominal anual en el número total de víctimas del fuero común por cada \n 100,000 personas mayores de 18 años.',
    caption = paste0('Fecha de consulta: ', file.info(archivo.vfc)$ctime),
    ylab = 'CAMBIO')

POR AÑO Y ENTIDAD FEDERATIVA

datos.vfc.2.1 <- 
  with(
    datos.vfc, 
    aggregate(
      x = list(VICTIMAS = Total), 
      by = list(AÑO = Año, ENTIDAD = Entidad), 
      FUN = sum))


datos.vfc.2.1 <- 
  merge(
    x = datos.vfc.2.1, 
    y = archivo.cat.estado[, c('estado_3', 'estado_5')], 
    by.x = c('ENTIDAD'), 
    by.y = c('estado_3'), 
    all.x = TRUE)

datos.vfc.2.1 <- 
  merge(
    x = datos.vfc.2.1, 
    y = poblacion.estatal, 
    by.x = c('AÑO', 'estado_5'), 
    by.y = c('AÑO', 'ENTIDAD'), 
    all.x = TRUE)

datos.vfc.2.1$VICTIMAS.PC <- 
  100000 * datos.vfc.2$VICTIMAS / datos.vfc.2$POBLACION

datos.vfc.2.1$CAMBIO <- 0
datos.vfc.2.1$CAMBIO.2 <- 0

for (i in (min(datos.vfc.2.1$AÑO) + 1):max(datos.vfc.2.1$AÑO)){
  
  for (j in unique(datos.vfc.2.1$ENTIDAD)){
    
    datos.vfc.2.1$CAMBIO[
      which(datos.vfc.2.1$AÑO == i & datos.vfc.2.1$ENTIDAD == j)] <- 
      datos.vfc.2.1$VICTIMAS[
        which(datos.vfc.2.1$AÑO == i & datos.vfc.2.1$ENTIDAD == j)] -
      datos.vfc.2.1$VICTIMAS[
        which(datos.vfc.2.1$AÑO == (i - 1) & datos.vfc.2.1$ENTIDAD == j)]
    
    datos.vfc.2.1$CAMBIO.2[
      which(datos.vfc.2.1$AÑO == i & datos.vfc.2.1$ENTIDAD == j)] <- 
      datos.vfc.2.1$VICTIMAS.PC[
        which(datos.vfc.2.1$AÑO == i & datos.vfc.2.1$ENTIDAD == j)] -
      datos.vfc.2.1$VICTIMAS.PC[
        which(datos.vfc.2.1$AÑO == (i - 1) & datos.vfc.2.1$ENTIDAD == j)]
    
    }
  
}

datos.vfc.2.1 <- 
  melt(
    data = datos.vfc.2.1, 
    value.name = 'VALOR',
    variable.name = 'ESTADISTICA',
    id.vars = c('AÑO', 'ENTIDAD', 'estado_5'))

datos.vfc.2.1$ESTADISTICA <- as.character(datos.vfc.2.1$ESTADISTICA)

Total de víctimas por entidad federativa y año:

temp <- 
  dcast(
    data = datos.vfc.2.1[which(datos.vfc.2.1$ESTADISTICA == 'VICTIMAS'),], 
    formula = ENTIDAD ~ AÑO, 
    value.var = 'VALOR')

datatable(data = temp, rownames = FALSE) %>% 
  formatRound(columns = 2:ncol(temp), digits = 0)

MENSUAL

datos.vfc.5 <- 
  melt(
    data = datos.vfc, 
    id.vars = 1:9, 
    measure.vars = 10:21, 
    variable.name = 'MES',
    value.name = 'VICTIMAS')

datos.vfc.5$MES <- as.character(datos.vfc.5$MES)

datos.vfc.5$MES.2 <- 
  sapply(
    datos.vfc.5$MES, function(x){mes.indice[mes.2 == x]})

datos.vfc.5$MES.DIA <- sapply(datos.vfc.5$MES.2, function(x){mes.dia[x]})

datos.vfc.5$FECHA <- 
  as.Date(
    x = paste(
      datos.vfc.5[,1], 
      datos.vfc.5$MES.2, 
      datos.vfc.5$MES.DIA, 
      sep = '-'),
    format = '%Y-%m-%d')

datos.vfc.5 <- 
  with(
    datos.vfc.5, 
    aggregate(
      x = list(VICTIMAS = VICTIMAS), by = list(FECHA = FECHA), FUN = sum))

datos.vfc.5$CAMBIO <- 0

datos.vfc.5 <- datos.vfc.5[order(datos.vfc.5$FECHA, decreasing = TRUE),]

for (i in 1:(nrow(datos.vfc.5) - 1)){
  
  datos.vfc.5$CAMBIO[i] <- 
    datos.vfc.5$VICTIMAS[i] - datos.vfc.5$VICTIMAS[i + 1]
       
     }

datos.vfc.5$CAMBIO.PCTG <- 0

for (i in 1:(nrow(datos.vfc.5) - 1)){
  
  datos.vfc.5$CAMBIO.PCTG[i] <- 
    (datos.vfc.5$VICTIMAS[i] - datos.vfc.5$VICTIMAS[i + 1]) / 
    datos.vfc.5$VICTIMAS[i + 1]
       
     }

datos.vfc.5 <- datos.vfc.5[complete.cases(datos.vfc.5),]

La siguientes tabla y gráfica muestran la serie de tiempo del número de víctimas mensual. En azul se señala la tendencia2 de la serie de tiempo y su correspondiente intervalo de confianza al 95%. La línea punteada señala el periodo en curso.

datatable(
  data = datos.vfc.5, 
  rownames = FALSE, 
  filter = 'top', 
  caption = 'Total de víctimas y cambio en el total mensual.',
  colnames = c('CAMBIO %' = 'CAMBIO.PCTG')) %>%
  formatRound(columns = c('VICTIMAS', 'CAMBIO'), digits = 0) %>%
  formatPercentage(columns = 'CAMBIO %', digits = 2)
ggplot(data = datos.vfc.5, mapping = aes(x = FECHA, y = VICTIMAS)) +
  geom_line(
    data = datos.vfc.5[which(datos.vfc.5$FECHA < max(datos.vfc.5$FECHA)),]) +
  geom_line(
    data = datos.vfc.5[which(datos.vfc.5$FECHA >= (max(datos.vfc.5$FECHA) - 31)),],
    linetype = 'dotted') +
  geom_smooth(
    data = datos.vfc.5[which(datos.vfc.5$FECHA < max(datos.vfc.5$FECHA)),], 
    method = 'lm') +
  theme_minimal() +
  labs(
    title = 'Total mensual de víctimas del fuero común',
    caption = paste0('Fecha de consulta: ', file.info(archivo.vfc)$ctime))

La variación nominal mensual media histórica (línea azul en la gráfica siguiente) corresponde a 104.37 víctimas al mes (lo que corresponde a una tasa de crecimiento mensual promedio del 0.67%.

ggplot(data = datos.vfc.5, mapping = aes(x = FECHA, y = CAMBIO)) +
  geom_line(
    data = datos.vfc.5[which(datos.vfc.5$FECHA < max(datos.vfc.5$FECHA)),]) +
  geom_line(
    data = datos.vfc.5[which(datos.vfc.5$FECHA >= (max(datos.vfc.5$FECHA) - 31)),],
    linetype = 'dotted') +
  geom_smooth(
    data = datos.vfc.5[which(datos.vfc.5$FECHA < max(datos.vfc.5$FECHA)),], 
    method = 'lm') +
  theme_minimal() +
  labs(
    title = 'Variación nominal mensual en el número total de víctimas del fuero común',
    caption = paste0('Fecha de consulta: ', file.info(archivo.vfc)$ctime))

MENSUAL POR ENTIDAD FEDERATIVA

POR DELITO

Tipos de delito capturados en la información de víctimas:

tipos.delito <-
  aggregate(
    x = list(VÍCTIMAS = datos.vfc$Total), 
    by = list(DELITO = datos.vfc$Subtipo.de.delito), 
    FUN = sum)

datatable(data = tipos.delito, rownames = FALSE) %>%
  formatRound(columns = 2, digits = 0)
ggplot(data = tipos.delito, mapping = aes(x = DELITO, y = VÍCTIMAS)) +
  geom_col() +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

DELITOS DE ALTO IMPACTO

Para fines de este documento, se consideran como delitos de alto impacto:

kableExtra::kable(x = dai, format = 'pandoc', row.names = FALSE, col.names = '')
Homicidio doloso
Tráfico de menores
Trata de personas
Feminicidio
Secuestro

HOMICIDIO DOLOSO

La base de datos registra un total histórico de 2.31753^{5} víctimas de homicidio doloso.

POR AÑO
temp <- 
  with(
    datos.vfc[
      which(
        datos.vfc$Subtipo.de.delito == 'Homicidio doloso'),], 
    aggregate(
      x = list(VICTIMAS = Total), 
      by = list(AÑO = Año), FUN = sum))

temp$CAMBIO <- 0

for (i in (min(temp$AÑO)+1):max(temp$AÑO)){
  
  temp$CAMBIO[temp$AÑO == i] <- 
    temp$VICTIMAS[temp$AÑO == i] -
    temp$VICTIMAS[temp$AÑO == (i - 1)]
  
  temp$CAMBIO.PCT[temp$AÑO == i] <- 
    100*(temp$VICTIMAS[temp$AÑO == i] -
    temp$VICTIMAS[temp$AÑO == (i - 1)]) /
    temp$VICTIMAS[temp$AÑO == (i - 1)]
       
     }

temp <- temp[order(temp$AÑO, decreasing = TRUE),]

datatable(
  data = temp, 
  rownames = FALSE,
  colnames = c('CAMBIO %' = 'CAMBIO.PCT')) %>%
  formatCurrency(columns = 2:3, currency = '', digits = 0) %>%
  formatRound(columns = 4)
ggplot(data = temp, mapping = aes(x = AÑO, y = VICTIMAS)) +
  geom_line() +
  geom_smooth(
    data = temp[which(temp$AÑO < max(temp$AÑO)),], 
    method = 'lm') +
  theme_minimal() +
  labs(
    title = 'Número total de víctimas de homicidio doloso.',
    caption = paste0('Fecha de consulta: ', file.info(archivo.vfc)$ctime))

TRÁFICO DE PERSONAS

El total de víctimas de tráfico de personas se obtiene aquí como la suma de las víctimas de “Tráfico de menores” y “Trata de personas”.

POR AÑO
datos.vfc.3 <- 
  with(
    datos.vfc[
      which(
        datos.vfc$Subtipo.de.delito %in% 
          c('Tráfico de menores', 'Trata de personas')),], 
    aggregate(
      x = list(VICTIMAS = Total), 
      by = list(AÑO = Año), FUN = sum))

datos.vfc.3$CAMBIO <- 0

for (i in (min(datos.vfc.3$AÑO)+1):max(datos.vfc.3$AÑO)){
  
  datos.vfc.3$CAMBIO[datos.vfc.3$AÑO == i] <- 
    datos.vfc.3$VICTIMAS[datos.vfc.3$AÑO == i] -
    datos.vfc.3$VICTIMAS[datos.vfc.3$AÑO == (i - 1)]
       
     }

datos.vfc.3 <- datos.vfc.3[order(datos.vfc.3$AÑO, decreasing = TRUE),]

datatable(
  data = datos.vfc.3, rownames = FALSE, filter = 'top') %>%
  formatCurrency(columns = 2:3, currency = '', digits = 0)
ggplot(data = datos.vfc.3, mapping = aes(x = AÑO, y = VICTIMAS)) +
  geom_line() +
  theme_minimal() +
  labs(
    title = 'Número total de víctimas de tráfico de personas por año.',
    caption = paste0('Fecha de consulta: ', file.info(archivo.vfc)$ctime))

ggplot(data = datos.vfc.3, mapping = aes(x = AÑO, y = CAMBIO)) +
  geom_line() +
  theme_minimal() +
  labs(
    title = 'Variación anual en el número total de víctimas de tráfico de personas.',
    caption = paste0('Fecha de consulta: ', file.info(archivo.vfc)$ctime))

POR SEXO
temp <- 
  with(
    datos.vfc[
      which(
        datos.vfc$Subtipo.de.delito %in% 
          c('Tráfico de menores', 'Trata de personas')
        )
      , 
      ] 
    , aggregate(
      x = list(VICTIMAS = Total)
      , by = list(SEXO = Sexo), FUN = sum
      )
    )

temp$`%` <- temp$VICTIMAS/sum(temp$VICTIMAS)

datatable(
  data = temp
  , rownames = FALSE
  , caption = 'Histórico de víctimas de tráfico de personas por sexo.'
  ) %>% 
  formatRound(columns = 2, digits = 0) %>%
  formatPercentage(columns = 3, digits = 2)
temp$label <- 
  paste(
    comma(x = temp$VICTIMAS, accuracy = 1)
    , percent(x = temp$`%`, prefix = '(', suffix = '%)', accuracy = 0.01)
    )

temp$SEXO <- 
  factor(
    x = temp$SEXO
    , levels = temp$SEXO[order(temp$VICTIMAS, decreasing = TRUE)]
    , ordered = TRUE
    )

ggplot(data = temp, mapping = aes(x = SEXO, y = `%`*100)) +
  geom_col() +
  geom_text(mapping = aes(label = label), vjust = 1.5, color = 'white') +
  theme_minimal() +
  labs(
    title = 'Víctimas de tráfico de personas por sexo (histórico).'
    , caption = paste0('Fecha de consulta: ', file.info(archivo.vfc)$ctime)) +
  ylab(label = '%')

POR ESTADO
datos.vfc.4 <- 
  with(
    datos.vfc[
      which(
        datos.vfc$Subtipo.de.delito %in% 
          c('Tráfico de menores', 'Trata de personas')),], 
    aggregate(
      x = list(VICTIMAS = Total), 
      by = list(ESTADO = Entidad), FUN = sum))

# datos.vfc.4 <-
#     merge(
#         x = datos.vfc.4, 
#         y = poblacion.estatal, 
#         by.x = 'ESTADO', 
#         by.y = 'estado', 
#         all.x = TRUE)
# 
# datos.vfc.4$VICTIMAS.PC <- 
#     10000 * datos.vfc.4$VICTIMAS / datos.vfc.4$inegi_poblacion_18_mas

datos.vfc.4 <- datos.vfc.4[order(datos.vfc.4$VICTIMAS, decreasing = TRUE),]

datatable(
  data = datos.vfc.4[, c(1, 2)], 
  rownames = FALSE, 
  colnames = 
    c(
      'ESTADO' = 'ESTADO', 
      'VICTIMAS' = 'VICTIMAS'),
  filter = 'top', 
  caption = 
    paste0(
      'Total histórico de víctimas de trata de personas por estado. Fecha de consulta: ',
      file.info(archivo.if)$ctime)) %>%
  formatCurrency(columns = 2, currency = '', digits = 0)

FEMINICIDIO

La base de datos de víctimas del fuero común registra un total de 6510 víctimas de feminicidio a la fecha.

POR AÑO
temp <- 
  with(
    datos.vfc[
      which(
        datos.vfc$Subtipo.de.delito == 'Feminicidio'),], 
    aggregate(
      x = list(VICTIMAS = Total), 
      by = list(AÑO = Año), FUN = sum))

temp$CAMBIO <- 0

for (i in (min(temp$AÑO)+1):max(temp$AÑO)){
  
  temp$CAMBIO[temp$AÑO == i] <- 
    temp$VICTIMAS[temp$AÑO == i] -
    temp$VICTIMAS[temp$AÑO == (i - 1)]
       
     }

temp <- temp[order(temp$AÑO, decreasing = TRUE),]

datatable(
  data = temp, rownames = FALSE, filter = 'top') %>%
  formatCurrency(columns = 2:3, currency = '', digits = 0)
ggplot(data = temp, mapping = aes(x = AÑO, y = VICTIMAS)) +
  geom_line() +
  theme_minimal() +
  labs(
    title = 'Número total de víctimas de feminicidio por año.',
    caption = paste0('Fecha de consulta: ', file.info(archivo.vfc)$ctime))

POR ESTADO
temp <- 
  with(
    datos.vfc[
      which(
        datos.vfc$Subtipo.de.delito == 'Feminicidio'),], 
    aggregate(
      x = list(VICTIMAS = Total), 
      by = list(ESTADO = Entidad), FUN = sum))

temp <- temp[order(temp$VICTIMAS, decreasing = TRUE),]

datatable(
  data = temp[, c(1, 2)], 
  rownames = FALSE, 
  colnames = 
    c(
      'ESTADO' = 'ESTADO', 
      'VICTIMAS' = 'VICTIMAS'),
  filter = 'top', 
  caption = 
    paste0(
      'Total histórico de víctimas de feminicidio por estado. Fecha de consulta: ',
      file.info(archivo.if)$ctime)) %>%
  formatCurrency(columns = 2, currency = '', digits = 0)

SECUESTRO

POR AÑO
datos.vfc.3 <- 
  with(
    datos.vfc[
      which(
        datos.vfc$Subtipo.de.delito %in% 
          c('Secuestro')),], 
    aggregate(
      x = list(VICTIMAS = Total), 
      by = list(AÑO = Año), FUN = sum))

datos.vfc.3$CAMBIO <- 0

for (i in (min(datos.vfc.3$AÑO)+1):max(datos.vfc.3$AÑO)){
  
  datos.vfc.3$CAMBIO[datos.vfc.3$AÑO == i] <- 
    datos.vfc.3$VICTIMAS[datos.vfc.3$AÑO == i] -
    datos.vfc.3$VICTIMAS[datos.vfc.3$AÑO == (i - 1)]
       
     }

datos.vfc.3 <- datos.vfc.3[order(datos.vfc.3$AÑO, decreasing = TRUE),]

datatable(
  data = datos.vfc.3, rownames = FALSE, filter = 'top') %>%
  formatCurrency(columns = 2:3, currency = '', digits = 0)
ggplot(data = datos.vfc.3, mapping = aes(x = AÑO, y = VICTIMAS)) +
  geom_line() +
  theme_minimal() +
  labs(
    title = 'Número total de víctimas de secuestro por año.',
    caption = paste0('Fecha de consulta: ', file.info(archivo.vfc)$ctime))

ggplot(data = datos.vfc.3, mapping = aes(x = AÑO, y = CAMBIO)) +
  geom_line() +
  theme_minimal() +
  labs(
    title = 'Variación anual en el número total de víctimas de secuestro.',
    caption = paste0('Fecha de consulta: ', file.info(archivo.vfc)$ctime))

POR SEXO
temp <- 
  with(
    datos.vfc[
      which(
        datos.vfc$Subtipo.de.delito %in% 
          c('Secuestro')
        )
      , 
      ] 
    , aggregate(
      x = list(VICTIMAS = Total)
      , by = list(SEXO = Sexo), FUN = sum
      )
    )

temp$`%` <- temp$VICTIMAS/sum(temp$VICTIMAS)

datatable(
  data = temp
  , rownames = FALSE
  , caption = 'Histórico de víctimas de secuestro por sexo.'
  ) %>% 
  formatRound(columns = 2, digits = 0) %>%
  formatPercentage(columns = 3, digits = 2)
temp$label <- 
  paste(
    comma(x = temp$VICTIMAS, accuracy = 1)
    , percent(x = temp$`%`, prefix = '(', suffix = '%)', accuracy = 0.01)
    )

temp$SEXO <- 
  factor(
    x = temp$SEXO
    , levels = temp$SEXO[order(temp$VICTIMAS, decreasing = TRUE)]
    , ordered = TRUE
    )

ggplot(data = temp, mapping = aes(x = SEXO, y = `%`*100)) +
  geom_col() +
  geom_text(mapping = aes(label = label), vjust = 1.5, color = 'white') +
  theme_minimal() +
  labs(
    title = 'Víctimas de secuestro por sexo (histórico).'
    , caption = paste0('Fecha de consulta: ', file.info(archivo.vfc)$ctime)) +
  ylab(label = '%')

POR ESTADO
datos.vfc.4 <- 
  with(
    datos.vfc[
      which(
        datos.vfc$Subtipo.de.delito %in% 
          c('Secuestro')),], 
    aggregate(
      x = list(VICTIMAS = Total), 
      by = list(ESTADO = Entidad), FUN = sum))

datos.vfc.4 <- datos.vfc.4[order(datos.vfc.4$VICTIMAS, decreasing = TRUE),]

datatable(
  data = datos.vfc.4[, c(1, 2)], 
  rownames = FALSE, 
  colnames = 
    c(
      'ESTADO' = 'ESTADO', 
      'VICTIMAS' = 'VICTIMAS'),
  filter = 'top', 
  caption = 
    paste0(
      'Total histórico de víctimas de secuestro por estado. Fecha de consulta: ',
      file.info(archivo.if)$ctime)) %>%
  formatCurrency(columns = 2, currency = '', digits = 0)

POR DELITO Y SEXO

temp <-
  aggregate(
    x = list(VÍCTIMAS = datos.vfc$Total), 
    by = list(DELITO = datos.vfc$Subtipo.de.delito, SEXO = datos.vfc$Sexo), 
    FUN = sum)

temp$SEXO <- toupper(temp$SEXO)

temp <- dcast(data = temp, formula = DELITO ~ SEXO, fill = 0, value.var = 'VÍCTIMAS')


datatable(data = temp, rownames = FALSE) %>%
  formatRound(columns = 2:ncol(temp), digits = 0)

POR ENTIDAD FEDERATIVA

temp <- 
  melt(
    data = datos.vfc, 
    id.vars = 3, 
    measure.vars = 22,
    value.name = 'VICTIMAS')


temp <- 
  with(
    temp, 
    aggregate(
      x = list(VICTIMAS = VICTIMAS), by = list(ENTIDAD = Entidad), FUN = sum))

temp <- temp[order(temp$VICTIMAS, decreasing = TRUE), ]

temp$ENTIDAD <- factor(x = temp$ENTIDAD, levels = temp$ENTIDAD[order(temp$VICTIMAS, decreasing = TRUE)], ordered = TRUE)

datatable(
  data = temp,
  rownames = FALSE,
  caption = 'Número histórico de víctimas del fuero común por entidad federativa.'
) %>%
  formatRound(columns = 2, digits = 0)
ggplot(data = temp, mapping = aes(x = ENTIDAD, y = VICTIMAS)) +
  geom_col(fill = NA, color = 'black') +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

POR SEXO

temp <- datos.vfc[, c('Sexo', 'Total')]

temp <- 
  aggregate(
    x = list(VÍCTIMAS = temp$Total), by = list(SEXO = temp$Sexo), FUN = sum
    )

datatable(data = temp, rownames = FALSE, caption = 'Total histórico de víctimas por sexo.') %>% formatRound(columns = 2, digits = 0)

POR RANGO DE EDAD

temp <- datos.vfc[, c('Rango.de.edad', 'Total')]

temp <- 
  aggregate(
    x = list(VÍCTIMAS = temp$Total)
    , by = list(EDAD = temp$Rango.de.edad)
    , FUN = sum
    )

temp$EDAD <- 
  factor(
    x = temp$EDAD
    , levels = 
      c(
        "Menores de edad (0-17)"
        , "Adultos (18 y más)"
        , "No especificado"
        , "No identificado"
        )
    , ordered = TRUE
    )

datatable(
  data = temp
  , rownames = FALSE
  , caption = 'Total histórico de víctimas por rango de edad.'
  ) %>% 
  formatRound(columns = 2, digits = 0)
ggplot(data = temp) +
  aes(x = EDAD, y = VÍCTIMAS) +
  geom_col() +
  theme_minimal() +
  labs(title = 'Total histórico de víctimas por rango de edad.')

INCIDENCIA DELICTIVA FEDERAL

datos.if <- 
  read.table(
    file = archivo.if, 
    sep = ',',
    header = TRUE, 
    fileEncoding = 'latin1')
datos.if.2 <- 
  melt(
    data = datos.if, 
    id.vars = 1:6, 
    measure.vars = 7:18, 
    variable.name = 'MES',
    value.name = 'DELITOS')

datos.if.2$MES.2 <- sapply(datos.if.2$MES, function(x){mes.indice[mes == x]})

datos.if.2$MES.DIA <- sapply(datos.if.2$MES.2, function(x){mes.dia[x]})

datos.if.2$FECHA <- 
  as.Date(
    x = paste(
      datos.if.2[,1], 
      datos.if.2$MES.2, 
      datos.if.2$MES.DIA, 
      sep = '-'),
    format = '%Y-%m-%d')

Total de delitos registrados: 1,031,082

datatable(
  data = data.frame(unique(datos.if.2$TIPO)), 
  rownames = FALSE,
  colnames = c('DELITO' = 1))

POR FECHA

POR AÑO

datos.if.3 <- 
  aggregate(
    x = list(DELITOS = datos.if.2$DELITOS), 
    by = list(FECHA = datos.if.2$FECHA), 
    FUN = sum)

# --------------------------------------------------------------- 2020.07.22 ECG
#
datos.if.5 <- 
  aggregate(
    x = list(DELITOS = datos.if.2$DELITOS), 
    by = list(FECHA = datos.if.2$AÑO), 
    FUN = sum,
    na.rm = TRUE)

datos.if.5$CAMBIO <- 0
datos.if.5$CAMBIO.PCT <- 0

for (i in (min(datos.if.5$FECHA)+1):max(datos.if.5$FECHA)){
    
    datos.if.5$CAMBIO[datos.if.5$FECHA == i] <- 
        datos.if.5$DELITOS[datos.if.5$FECHA == i] -
        datos.if.5$DELITOS[datos.if.5$FECHA == (i - 1)]
    
    datos.if.5$CAMBIO.PCT[datos.if.5$FECHA == i] <- 
        (datos.if.5$DELITOS[datos.if.5$FECHA == i] -
        datos.if.5$DELITOS[datos.if.5$FECHA == (i - 1)]) /
        datos.if.5$DELITOS[datos.if.5$FECHA == (i - 1)]
        
    }

datos.if.5 <- datos.if.5[,c('FECHA', 'DELITOS', 'CAMBIO', 'CAMBIO.PCT')]

# Agrega la población nacional del año.
#
datos.if.5 <- 
  merge(
    x = datos.if.5, 
    y = poblacion.nacional, 
    by.x = 'FECHA',
    by.y = 'AÑO',
    all.x = TRUE)

datos.if.5$DELITOS.2 <- 100000 * datos.if.5$DELITOS / datos.if.5$POBLACION

datos.if.5 <- datos.if.5[order(datos.if.5$FECHA, decreasing = TRUE), ]

datos.if.5$CAMBIO.PC <- 0
datos.if.5$CAMBIO.PC.PCT <- 0

for (i in (min(datos.if.5$FECHA)+1):max(datos.if.5$FECHA)){
    
    datos.if.5$CAMBIO.PC[datos.if.5$FECHA == i] <- 
        datos.if.5$DELITOS.2[datos.if.5$FECHA == i] -
        datos.if.5$DELITOS.2[datos.if.5$FECHA == (i - 1)]
    
    datos.if.5$CAMBIO.PC.PCT[datos.if.5$FECHA == i] <- 
        (datos.if.5$DELITOS.2[datos.if.5$FECHA == i] -
        datos.if.5$DELITOS.2[datos.if.5$FECHA == (i - 1)]) /
        datos.if.5$DELITOS.2[datos.if.5$FECHA == (i - 1)]
        
}

datatable(
    data = datos.if.5[, c(1:4, 7:9)], 
    rownames = FALSE, 
    colnames = c(
        'FECHA' = 'FECHA', 
        'DELITOS' = 'DELITOS', 
        'CAMBIO NOMINAL' = 'CAMBIO', 
        'CAMBIO %' = 'CAMBIO.PCT',
        'DELITOS PER CAPITA' = 'DELITOS.2',
        'CAMBIO NOMINAL PC' = 'CAMBIO.PC', 
        'CAMBIO % PC' = 'CAMBIO.PC.PCT')) %>%
    formatRound(columns = c(2, 3), digits = 0) %>%
    formatPercentage(columns = c(4, 7)) %>%
    formatRound(columns = c(5, 6), digits = 2)
ggplot(
  data = datos.if.5, 
  mapping = 
    aes(x = as.Date(as.character(FECHA), format = '%Y'), y = DELITOS)) +
  geom_line() +
  geom_vline(
    xintercept = as.Date('2018-11-30'), colour = 'red') +
  geom_vline(
    xintercept = as.Date('2020-03-31'), colour = 'yellow') +
  theme_minimal() +
  labs(
    title = 'Incidencia delictiva per capita anual a nivel federal',
    caption = paste0('Fecha de consulta: ', file.info(archivo.if)$ctime),
    x = 'AÑO',
    y = 'DELITOS')

ggplot(
  data = datos.if.5, 
  mapping = 
    aes(x = as.Date(as.character(FECHA), format = '%Y'), y = DELITOS.2)) +
  geom_line() +
  geom_vline(
    xintercept = as.Date('2018-11-30'), colour = 'red') +
  geom_vline(
    xintercept = as.Date('2020-03-31'), colour = 'yellow') +
  theme_minimal() +
  labs(
    title = 'Incidencia delictiva per capita anual a nivel federal',
    caption = paste0('Fecha de consulta: ', file.info(archivo.if)$ctime),
    x = 'AÑO',
    y = 'DELITOS PER CAPITA')

POR MES

temp <- datos.if.3[complete.cases(datos.if.3),]

temp <- temp[order(temp$FECHA, decreasing = TRUE),]

datatable(data = temp, rownames = FALSE) %>%
  formatRound(columns = 2, digits = 0)
ggplot(data = datos.if.3, mapping = aes(x = FECHA, y = DELITOS)) +
  geom_line() +
  geom_vline(
    xintercept = as.Date('2018-11-30'), colour = 'red') +
  geom_vline(
    xintercept = as.Date('2020-03-31'), colour = 'yellow') +
  theme_minimal() +
  labs(
    title = 'Incidencia delictiva mensual a nivel federal',
    caption = paste0('Fecha de consulta: ', file.info(archivo.if)$ctime))

POR AÑO Y TIPO DE DELITO

datos.if.4 <- 
  with(
    datos.if.2, 
    aggregate(
      x = list(DELITOS = DELITOS), 
      by = list(AÑO = AÑO, TIPO = TIPO), 
      FUN = sum,
      na.rm = TRUE))

datos.if.4 <- 
  dcast(
    data = datos.if.4, 
    TIPO ~ AÑO, 
    fun.aggregate = sum,
    fill = 0, 
    value.var = 'DELITOS')

datos.if.4 <- 
  cbind(
    datos.if.4, 
    data.frame('Total' = rowSums(x = datos.if.4[, 2:ncol(datos.if.4)])))

datos.if.4 <- 
  rbind(
    datos.if.4,
    data.frame(
      TIPO = 'Total', t(colSums(datos.if.4[, -1])), check.names = FALSE))

datatable(
  data = datos.if.4, 
  filter = 'top', 
  rownames = FALSE, 
  options = list(scrollX = TRUE)) %>%
  formatCurrency(columns = 2:ncol(datos.if.4), currency = '', digits = 0)

POR ENTIDAD FEDERATIVA

La siguiente tabla muestra el número de delitos históricamente capturados, por entidad federativa, en las estadísticas del fuero federal:

temp <- 
  with(datos.if.2[!is.na(datos.if.2$DELITOS),],
       aggregate(
         x = list(DELITOS = DELITOS), 
         by = list(ENTIDAD = ENTIDAD),
         FUN = sum,
         na.omit = TRUE))

datatable(
    data = temp, 
    filter = 'top', 
    colnames = 
      c(
        'ENTIDAD' = 'ENTIDAD', 
        'DELITOS' = 'DELITOS'),
    rownames = FALSE) %>%
  formatRound(columns = c('DELITOS'), digits = 0)
ggplot(data = temp, mapping = aes(x = ENTIDAD, y = DELITOS)) +
  geom_col() +
  theme_minimal() +
  labs(
    x = 'MUNICIPIO',
    caption = 'Total de delitos del fuero federal registrados históricamente por entidad federativa.') + 
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

INCIDENCIA DELICTIVA ESTATAL

datos.ie <- 
  read.table(
    file = archivo.ie, sep = ',', header = TRUE, stringsAsFactors = FALSE, 
    fileEncoding = 'latin1')

datos.ie[,(ncol(datos.ie)-11):ncol(datos.ie)] <- 
  sapply(
    datos.ie[,(ncol(datos.ie)-11):ncol(datos.ie)], 
    gsub, 
    pattern = ',', 
    replacement = '')

for (i in (ncol(datos.ie)-11):ncol(datos.ie)){
  
  datos.ie[,i] <-
    as.numeric(datos.ie[,i])
  
  }
datos.ie.2 <- 
  melt(
    data = datos.ie, 
    id.vars = 1:(ncol(datos.ie)-12), 
    measure.vars = (ncol(datos.ie)-11):ncol(datos.ie), 
    variable.name = 'MES',
    value.name = 'DELITOS')

datos.ie.2$MES <- as.character(datos.ie.2$MES)

datos.ie.2 <- datos.ie.2[datos.ie.2$MES != 'Total',]

datos.ie.2$MES.2 <- 
  sapply(datos.ie.2$MES, FUN = function(x){mes.indice[mes == toupper(x)]})

datos.ie.2$MES.DIA <- sapply(datos.ie.2$MES.2, function(x){mes.dia[x]})

datos.ie.2$FECHA <- 
  as.Date(
    x = paste(datos.ie.2$Año, datos.ie.2$MES.2, datos.ie.2$MES.DIA, sep = '-'),
    format = '%Y-%m-%d')
# _______________________________________________________________ 2020.06.19 ECG
# Agrega la población estatal.
#
datos.ie.2 <-
    merge(
        x = datos.ie.2, 
        y = poblacion.estatal, 
        by.x = c('Entidad', 'Año'), 
        by.y = c('ENTIDAD', 'AÑO'), 
        all.x = TRUE)

datos.ie.2$DELITOS.PC <- 
    10000 * datos.ie.2$DELITOS / datos.ie.2$POBLACION

# ______________________________________________________________________________

Total de delitos registrados: 15,108,298

POR AÑO

datos.ie.8 <- 
  aggregate(
    x = list(DELITOS = as.numeric(as.character(datos.ie.2$DELITOS))), 
    by = list(FECHA = factor(format(datos.ie.2$FECHA, '%Y'))), 
    FUN = sum,
    na.rm = TRUE)

datos.ie.8 <- datos.ie.8[!is.na(datos.ie.8$DELITOS),]

datos.ie.8 <- datos.ie.8[order(datos.ie.8$FECHA, decreasing = TRUE),]

datos.ie.8$FECHA <- as.numeric(as.character(datos.ie.8$FECHA))

datos.ie.8$POBLACION <- 
  poblacion.nacional$POBLACION[
    match(x = datos.ie.8$FECHA, table = poblacion.nacional$AÑO)
    ]

datos.ie.8$`DELITOS PER CAPITA` <- 10000*datos.ie.8$DELITOS/datos.ie.8$POBLACION

temp <- 
  data.frame(
    FECHA = datos.ie.8$FECHA[which(datos.ie.8$FECHA == max(datos.ie.8$FECHA) -1)],
    DELITOS = 
      datos.ie.8$DELITOS[which(datos.ie.8$FECHA == max(datos.ie.8$FECHA) - 1)])

temp[2,] <- 
  c(
    FECHA = datos.ie.8$FECHA[which(datos.ie.8$FECHA == max(datos.ie.8$FECHA))],
    DELITOS = 
      datos.ie.8$DELITOS[which(datos.ie.8$FECHA == max(datos.ie.8$FECHA))]*12/n.mes)

datatable(data = datos.ie.8[, -3], rownames = FALSE) %>%
  formatRound(columns = 2, digits = 0) %>%
  formatRound(columns = 3, digits = 2)
ggplot(data = datos.ie.8, mapping = aes(x = FECHA, y = DELITOS, group = 1)) +
  geom_line() +
  geom_line(
    data = temp,
    linetype = 'dotted',
    col = 'red') +
  geom_smooth(
    data = datos.ie.8[which(datos.ie.8$FECHA < max(datos.ie.8$FECHA)),], 
    method = 'lm') +
  theme_minimal() +
  labs(
    title = 'Incidencia delictiva total anual a nivel estatal', 
    caption = paste0('Fecha de consulta: ', file.info(archivo.ie)$ctime))

temp <- 
  data.frame(
    FECHA = datos.ie.8$FECHA[which(datos.ie.8$FECHA == max(datos.ie.8$FECHA) -1)],
    `DELITOS PER CAPITA` = 
      datos.ie.8$`DELITOS PER CAPITA`[which(datos.ie.8$FECHA == max(datos.ie.8$FECHA) - 1)]
    , check.names = FALSE
    )

temp[2,] <- 
  c(
    FECHA = datos.ie.8$FECHA[which(datos.ie.8$FECHA == max(datos.ie.8$FECHA))],
    `DELITOS PER CAPITA` = 
      datos.ie.8$`DELITOS PER CAPITA`[which(datos.ie.8$FECHA == max(datos.ie.8$FECHA))]*12/n.mes)

ggplot(
  data = datos.ie.8
  , mapping = aes(x = FECHA, y = `DELITOS PER CAPITA`, group = 1)
  ) +
  geom_line() +
  geom_line(
    data = temp,
    linetype = 'dotted',
    col = 'red') +
  geom_smooth(
    data = datos.ie.8[which(datos.ie.8$FECHA < max(datos.ie.8$FECHA)),], 
    method = 'lm') +
  theme_minimal() +
  labs(
    title = 'Incidencia delictiva per capita anual a nivel estatal', 
    caption = paste0('Fecha de consulta: ', file.info(archivo.ie)$ctime))

POR MES

datos.ie.3 <- 
  aggregate(
    x = list(DELITOS = as.numeric(as.character(datos.ie.2$DELITOS))), 
    by = list(FECHA = datos.ie.2$FECHA), 
    FUN = sum)

datos.ie.3 <- datos.ie.3[!is.na(datos.ie.3$DELITOS),]

datatable(
  data = datos.ie.3[order(datos.ie.3$FECHA, decreasing = TRUE),], 
  rownames = FALSE) %>%
  formatRound(columns = 2, digits = 0)
ggplot(data = datos.ie.3, mapping = aes(x = FECHA, y = DELITOS)) +
  geom_line() +
  geom_vline(
    xintercept = as.Date('2018-11-30'), colour = 'red') +
  geom_vline(
    xintercept = as.Date('2020-03-31'), colour = 'yellow') +
  theme_minimal() +
  labs(
    title = 'Incidencia delictiva a nivel estatal', 
    caption = paste0('Fecha de consulta: ', file.info(archivo.ie)$ctime))

POR MES Y TIPO DE DELITO

# Por bien jurídico.
# 
datos.ie.6 <- 
  with(
    subset(x = datos.ie.2), 
    aggregate(
      x = list(DELITOS = as.numeric(as.character(DELITOS))), 
      by = list(FECHA = FECHA, BIEN = Bien.jurídico.afectado), 
      FUN = sum))

datos.ie.6 <- datos.ie.6[!is.na(datos.ie.6$DELITOS),]

datos.ie.6 <- datos.ie.6[datos.ie.6$FECHA >= (max(datos.ie.6$FECHA) - 720),]

datos.ie.6 <- 
  dcast(
    data = datos.ie.6, 
    BIEN ~ FECHA, 
    fun.aggregate = sum,
    fill = 0, 
    value.var = 'DELITOS')

datos.ie.4 <- 
  with(
    subset(x = datos.ie.2), 
    aggregate(
      x = list(DELITOS = as.numeric(as.character(DELITOS))), 
      by = list(FECHA = FECHA, SUBTIPO = Subtipo.de.delito), 
      FUN = sum))

datos.ie.4 <- 
  merge(
    x = datos.ie.4, 
    y = datos.ie.3, 
    by.x = 'FECHA', 
    by.y = 'FECHA', 
    all.x = TRUE)

names(datos.ie.4)[3:4] <- c('DELITOS', 'TOTAL')

datos.ie.4$PCTG <- 100 * datos.ie.4$DELITOS / datos.ie.4$TOTAL

datos.ie.4 <- 
  melt(
    data = datos.ie.4, 
    id.vars = 1:2, 
    measure.vars = c(3,5), 
    variable.name = 'AGREGADO',
    value.name = 'VALOR')

Tipos de delito considerados en los registros:

datatable(
  data = unique(datos.ie[order(datos.ie$Bien.jurídico.afectado),c('Bien.jurídico.afectado', 'Tipo.de.delito', 'Subtipo.de.delito')]),
  rownames = FALSE,
  colnames = c('BIEN JURÍDICO' = 1, 'TIPO DE DELITO' = 2, 'SUBTIPO' = 3))

DELITOS DE ALTO IMPACTO

A continuación se presentan las series de tiempo del número de delitos y como porcentaje del total de delitos para cada categoría de delitos de alto impacto.

HOMICIDIO DOLOSO
datos.ie.9 <- 
  dcast(
    data = datos.ie.4[datos.ie.4$SUBTIPO == 'Homicidio doloso',], 
    formula = FECHA ~ AGREGADO, 
    value.var = 'VALOR')

datos.ie.9$PCTG <- datos.ie.9$PCTG / 100

datos.ie.9 <- datos.ie.9[order(datos.ie.9$FECHA, decreasing = TRUE),]

datos.ie.9 <- datos.ie.9[complete.cases(datos.ie.9),]

datatable(data = datos.ie.9, rownames = FALSE) %>%
  formatRound(columns = 'DELITOS', digits = 0) %>%
  formatPercentage(columns = 'PCTG', digits = 2)
ggplot(
  data = datos.ie.4[datos.ie.4$SUBTIPO == 'Homicidio doloso',], 
  mapping = aes(x = FECHA, y = VALOR, )) +
  facet_grid(facets = AGREGADO ~ ., scales = 'free') +
  geom_line() +
  theme_minimal() +
  geom_vline(
    xintercept = as.Date('2018-11-30'), colour = 'red')  +
  geom_vline(
    xintercept = as.Date('2020-03-31'), colour = 'yellow') +
  labs(
    title = 'Homicidio doloso a nivel estatal', 
    subtitle = paste0('Fecha de consulta: ',
                      file.info(archivo.ie)$ctime))

FEMINICIDIO
ggplot(
  data = datos.ie.4[datos.ie.4$SUBTIPO == 'Feminicidio',], 
  mapping = aes(x = FECHA, y = VALOR, )) +
  facet_grid(facets = AGREGADO ~ ., scales = 'free') +
  geom_line() +
  theme_minimal() +
  geom_vline(
    xintercept = as.Date('2018-11-30'), colour = 'red') +
  geom_vline(
    xintercept = as.Date('2020-03-31'), colour = 'yellow') +
  labs(
    title = 'Feminicidio a nivel estatal', 
    subtitle = paste0('Fecha de consulta: ',
                      file.info(archivo.ie)$ctime))

SECUESTRO
ggplot(
  data = datos.ie.4[datos.ie.4$SUBTIPO == 'Secuestro',], 
  mapping = aes(x = FECHA, y = VALOR, )) +
  facet_grid(facets = AGREGADO ~ ., scales = 'free') +
  geom_line() +
  theme_minimal() +
  geom_vline(
    xintercept = as.Date('2018-11-30'), colour = 'red') +
  geom_vline(
    xintercept = as.Date('2020-03-31'), colour = 'yellow') +
  labs(
    title = 'Secuestro a nivel estatal', 
    subtitle = paste0('Fecha de consulta: ',
                      file.info(archivo.ie)$ctime))

POR ENTIDAD FEDERATIVA

La siguiente tabla muestra el número de delitos históricamente capturados, por entidad federativa, en las estadísticas del SESNSP:

# REVISAR ESTA TABLA, NO HACE SENTIDO SUMAR LOS DELITOS.PC. ADEMÁS, SE ESTÁ USANDO EN EL PROYECTO DE LA ENCIG, PERO NO INCLUYE EL AÑO.

datos.ie.7 <- 
  with(datos.ie.2[!is.na(datos.ie.2$DELITOS.PC),],
       aggregate(
         x = list(DELITOS = DELITOS, DELITOS.PC = DELITOS.PC), 
         by = list(ENTIDAD = Entidad),
         FUN = sum,
         na.omit = TRUE))

datatable(
    data = datos.ie.7, 
    filter = 'top', 
    colnames = 
      c(
        'ENTIDAD' = 'ENTIDAD', 
        'DELITOS' = 'DELITOS', 
        'DELITOS PER CAPITA' = 'DELITOS.PC'),
    rownames = FALSE) %>%
    formatRound(columns = c('DELITOS PER CAPITA')) %>%
    formatRound(columns = c('DELITOS'), digits = 0)
write.table(
  x = datos.ie.7, file = 'incidencia_delictiva_estatal_pc.txt', sep = '|')

POR ENTIDAD FEDERATIVA Y AÑO

Total de delitos anuales registrados por entidad federativa:

# Calcula la incidencia delictiva estatal total por estado y por año.
# 
datos.ie.5 <- 
  with(datos.ie.2[!is.na(datos.ie.2$DELITOS),],
       aggregate(
         x = list(DELITOS = DELITOS), 
         by = list(AÑO = Año, ENTIDAD = Entidad),
         FUN = sum,
         na.omit = TRUE))

datos.ie.6 <- 
  dcast(
    data = datos.ie.5, formula = ENTIDAD ~ AÑO, value.var = 'DELITOS', fill = 0)

datatable(data = datos.ie.6, rownames = FALSE) %>%
  formatCurrency(
    columns  = 2:ncol(datos.ie.6),
    currency = "",
    interval = 3,
    digits = 0,
    mark = ',',
    dec.mark = '.')
write.table(
  x = datos.ie.6, file = 'incidencia_delictiva_estatal.txt', sep = '|')

INCIDENCIA DELICTIVA MUNICIPAL

No se presenta aquí el análisis del total de la incidencia delictiva municipal ya que coincide con los datos presentados a nivel estatal.

datos.im <- 
  read.table(
    file = archivo.im, sep = ',', header = TRUE, stringsAsFactors = FALSE, 
    fileEncoding = 'latin1')
datos.im.2 <- 
  melt(
    data = datos.im, 
    id.vars = 1:(ncol(datos.im)-12), 
    measure.vars = (ncol(datos.im)-11):ncol(datos.im), 
    variable.name = 'MES',
    value.name = 'DELITOS')

datos.im.2$MES.2 <- sapply(toupper(datos.im.2$MES), grep, pattern = , x = mes)

datos.im.2$MES.DIA <- sapply(datos.im.2$MES.2, function(x){mes.dia[x]})

datos.im.2$FECHA <- 
  as.Date(
    x = paste(datos.im.2$Año, datos.im.2$MES.2, datos.im.2$MES.DIA, sep = '-'),
    format = '%Y-%m-%d')

POR MUNICIPIO

Total de delitos históricamente registrados por municipio:

# Calcula la incidencia delictiva municipal total por municipio y por año.
# 
temp <- 
  with(datos.im.2[!is.na(datos.im.2$DELITOS),],
       aggregate(
         x = list(DELITOS = DELITOS), 
         by = 
           list(
             ENTIDAD = Entidad, 
             MUNICIPIO = Municipio),
         FUN = sum,
         na.omit = TRUE))

temp <- temp[order(temp[,'DELITOS'], decreasing = TRUE),]

datatable(
  data = temp, 
  rownames = FALSE, 
  filter = 'top', 
  caption = 'Total de delitos por municipio.') %>%
  formatRound(
    columns  = 3,
    digits = 0)
temp <- temp[order(temp$DELITOS, decreasing = TRUE),]

temp$MUNICIPIO.2 <- 
  factor(
    x = paste(temp$ENTIDAD, temp$MUNICIPIO, sep = ", "), 
    levels = paste(temp$ENTIDAD, temp$MUNICIPIO, sep = ", "), 
    ordered = TRUE)

temp <- head(x = temp, n = 15)

ggplot(data = temp, mapping = aes(x = MUNICIPIO.2, y = DELITOS)) +
  geom_col() +
  theme_minimal() +
  labs(
    x = 'MUNICIPIO',
    caption = 'Total de delitos del fuero común registrados históricamente por municipio. Top 15.') + 
  theme(axis.text.x = element_text(angle = 90, hjust = 1))

POR MUNICIPIO Y AÑO

# Calcula la incidencia delictiva municipal total por municipio y por año.
# 
datos.im.5 <- 
  with(datos.im.2[!is.na(datos.im.2$DELITOS),],
       aggregate(
         x = list(DELITOS = DELITOS), 
         by = list(AÑO = Año, 
                   CVE_ENTIDAD = Clave_Ent,
                   ENTIDAD = Entidad, 
                   MUNICIPIO = Municipio, 
                   CLAVE = Cve..Municipio),
         FUN = sum,
         na.omit = TRUE))

datos.im.6 <- 
  dcast(
    data = datos.im.5, 
    formula = ENTIDAD + MUNICIPIO ~ AÑO, 
    value.var = 'DELITOS', 
    fill = 0)

datos.im.6 <- datos.im.6[order(datos.im.6[,'2020'], decreasing = TRUE),]

datatable(
  data = datos.im.6, 
  rownames = FALSE, 
  filter = 'top', 
  caption = 'Total de delitos por municipio y año.') %>%
  formatCurrency(
    columns  = 3:ncol(datos.im.6),
    currency = "",
    interval = 3,
    digits = 0,
    mark = ',',
    dec.mark = '.')

Por cada 10,000 personas mayores de 19 años:

# Calcula la incidencia delictiva per capita total municipal por municipio y por
# año.
# 
datos.im.7 <- 
  merge(
    x = datos.im.5,
    y = poblacion.municipal[, c(1, 2, 3, 6)],
    by.x = c('CVE_ENTIDAD', 'CLAVE', 'AÑO'), 
    by.y = c('CLAVE_ENT', 'CLAVE', 'AÑO'), 
    all.x = TRUE)

datos.im.7$DELITOS.PC <- 10000 * datos.im.7$DELITOS / datos.im.7$POBLACION

write.table(
  x = datos.im.7, 
  file = 'incidencia_delictiva_municipal_pc.txt', 
  sep = '|', 
  row.names = FALSE, 
  fileEncoding = 'UTF-8')

# describe(datos.im.7$DELITOS.PC)

ggplot(data = datos.im.7, mapping = aes(y = DELITOS.PC)) +
  geom_boxplot() + 
  ylab(label = 'Delitos PC') +
  theme_minimal()

datos.im.8 <- 
  dcast(
    data = datos.im.7, 
    formula = ENTIDAD + MUNICIPIO ~ AÑO, 
    value.var = 'DELITOS.PC', 
    fill = 0)

datos.im.8 <- datos.im.8[order(datos.im.8[,'2020'], decreasing = TRUE),]

datatable(
  data = datos.im.8, 
  rownames = FALSE, 
  filter = 'top', 
  caption = 'Delitos totales por cada 10,000 personas mayores de 19 años por municipio y año.') %>%
  formatCurrency(
    columns  = 3:ncol(datos.im.8),
    currency = "",
    interval = 3,
    digits = 2,
    mark = ',',
    dec.mark = '.')

ANEXO: ANÁLISIS DESCRIPTIVO DE LOS DATOS.

file.info(archivo.vfc)
# describe(datos.vfc)
file.info(archivo.if)
# describe(datos.if)
file.info(archivo.ie)
# describe(datos.ie)
file.info(archivo.im)
# describe(datos.im)
# Inventario de variables:
#
# datos.ie, datos.ie.2, datos.ie.3, datos.ie.4, datos.ie.5, datos.ie.6, 
# datos.ie.7, datos.ie.8, datos.vfc, datos.vfc.2, datos.vfc.3, datos.vfc.4

ANEXO: POBLACIÓN POR ESTADO

ANEXO: APUNTES DE LA LITERATURA

Greenberg (2001)

“Podría cuestionarse si es realmente posible para una tasa de criminalidad el ser una instancia de una caminata aleatoria. La varianza de una caminata aleatoria incrementa sin límite en el tiempo, y esto parece implausible para la criminalidad. Es poco realista, sin embargo, que el mismo proceso generador responsable de los cambios temporales en los delitos continúe sin cambios por siempre. Una caminata aleatoria parece ajustarse bien a estas ofensas para el medio siglo para el que tenemos datos. Cambios en las causas del delito (incluyendo estrategias de control social) o en la fuerza de sus efectos podrían cambiar la estructura de la serie de la tasa de criminalidad en el futuro.”

“Before proceeding to discuss cointegration, it is worth reflecting on the theoretical importance of the finding that crime rates appear to be realizations of a unit root process. This means that there are no effective social processes tending to reduce crime rates if they grow too large or to increase them if they fall too low. Instead, they bounce about randomly, uninfluenced by the instantaneous level of crime, and without tending to return to an equilibrium level.”

ANEXO: TOTAL DE DELITOS POR AÑO

# Total anual de delitos del fuero federal.
#
temp <- datos.if.5[, c('FECHA', 'DELITOS')]

# Total anual de delitos del fuero estatal.
#
temp <- rbind(temp, datos.ie.8[, c('FECHA', 'DELITOS')])

# Suma por año.
#
temp <- 
  aggregate(
    x = list(DELITOS = temp$DELITOS), 
    by = list(FECHA = temp$FECHA), 
    FUN = sum)

# Guarda resultados.
#
write.table(
  x = temp, 
  file = 'incidencia_delictiva_total_anual.txt', 
  sep = '|', 
  row.names = FALSE, 
  fileEncoding = 'UTF-8')

ANEXO: RESULTADOS DE LOS MODELOS AJUSTADOS

TENDENCIA DE LA SERIE DE TIEMPO DEL TOTAL ANUAL DE VÍCTIMAS

NÚMERO DE VÍCTIMAS

datos.vfc.2$AÑO.2 <- 
  as.Date(paste0(datos.vfc.2$AÑO, '-01-01'), format = '%Y-%m-%d')

model <- 
  lm(
    VICTIMAS ~ AÑO.2, 
    data = datos.vfc.2[which(datos.vfc.2$AÑO < max(datos.vfc.2$AÑO)),])

summary(model)
## 
## Call:
## lm(formula = VICTIMAS ~ AÑO.2, data = datos.vfc.2[which(datos.vfc.2$AÑO < 
##     max(datos.vfc.2$AÑO)), ])
## 
## Residuals:
##      7      6      5      4      3      2      1 
##   1252 -17658  20830   1096   1697  -9254   2035 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)  
## (Intercept) -56171.61  117742.34  -0.477   0.6534  
## AÑO.2           21.32       6.71   3.178   0.0246 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 12970 on 5 degrees of freedom
## Multiple R-squared:  0.6688, Adjusted R-squared:  0.6026 
## F-statistic:  10.1 on 1 and 5 DF,  p-value: 0.0246

VARIACIÓN ANUAL

model <- 
  lm(
    CAMBIO ~ AÑO.2, 
    data = datos.vfc.2[which(datos.vfc.2$AÑO < max(datos.vfc.2$AÑO)),])

summary(model)
## 
## Call:
## lm(formula = CAMBIO ~ AÑO.2, data = datos.vfc.2[which(datos.vfc.2$AÑO < 
##     max(datos.vfc.2$AÑO)), ])
## 
## Residuals:
##        7        6        5        4        3        2        1 
##  16442.9 -39738.7  19717.4    615.4  13423.4  -7600.2  -2860.2 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)
## (Intercept) -52708.077 202374.139  -0.260    0.805
## AÑO.2            3.381     11.533   0.293    0.781
## 
## Residual standard error: 22290 on 5 degrees of freedom
## Multiple R-squared:  0.0169, Adjusted R-squared:  -0.1797 
## F-statistic: 0.08593 on 1 and 5 DF,  p-value: 0.7812

TENDENCIA DE LA SERIE DE TIEMPO DEL TOTAL MENSUAL DE VÍCTIMAS

NÚMERO DE VÍCTIMAS

model <- 
  lm(
    VICTIMAS ~ FECHA, 
    data = datos.vfc.5[which(datos.vfc.5$FECHA < max(datos.vfc.5$FECHA)),])

summary(model)
## 
## Call:
## lm(formula = VICTIMAS ~ FECHA, data = datos.vfc.5[which(datos.vfc.5$FECHA < 
##     max(datos.vfc.5$FECHA)), ])
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -6409.1 -1492.6   230.9  1384.8  5658.9 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept) -1.123e+04  4.870e+03  -2.305   0.0234 *  
## FECHA        2.133e+00  2.723e-01   7.833 8.49e-12 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 2146 on 91 degrees of freedom
## Multiple R-squared:  0.4027, Adjusted R-squared:  0.3961 
## F-statistic: 61.35 on 1 and 91 DF,  p-value: 8.494e-12

VARIACIÓN MENSUAL

model <- 
  lm(
    CAMBIO ~ FECHA, 
    data = datos.vfc.5[which(datos.vfc.5$FECHA < max(datos.vfc.5$FECHA)),])

summary(model)
## 
## Call:
## lm(formula = CAMBIO ~ FECHA, data = datos.vfc.5[which(datos.vfc.5$FECHA < 
##     max(datos.vfc.5$FECHA)), ])
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
##  -7329  -1388   -119   1213   6095 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)
## (Intercept)  384.49928 4604.12233   0.084    0.934
## FECHA         -0.01612    0.25745  -0.063    0.950
## 
## Residual standard error: 2029 on 91 degrees of freedom
## Multiple R-squared:  4.309e-05,  Adjusted R-squared:  -0.01095 
## F-statistic: 0.003921 on 1 and 91 DF,  p-value: 0.9502

BITÁCORA

2021.03.23

2021.02.22

  • Se agrega la tendencia en la serie de tiempo anual de víctimas.

2021.02.04:

  • Gráfica de la serie de tiempo anual de víctimas de tráfico de personas.

2021.01.20:

  • Se cambia la referencia de la población a las proyecciones anuales de CONAPO.
  • Se agrega la tabla de delitos por cada 10,000 personas mayores de 19 años a nivel municipal.

2020.11.23:

  • Cifras de víctimas de tráfico de personas.

2020.08.26:

  • Se agrega el cuadro y la gráfica de la serie de tiempo del total de delitos a nivel estatal por año.

2020.07.22:

  • Se agrega el cuadro del total de delitos federales por año.

2020.06.22:

  • Se agrega el cuadro de delitos por cada 10,000 habitantes mayores de 18 de años por entidad federativa.

PENDIENTES

  • Revisar datos de población municipal: León, GTO vs Cuauhtémoc, CDMX

  • En series de tiempo:

    • Variación mensual (anual, según corresponda)
    • Variación como % del periodo inmediato anterior.
  • Incidencia delictiva total anual ajustada por población mayor de 18 años.

    • Municipal
  • Cuadro: serie de tiempo de total de delitos por entidad por mes, últimos 24 meses.

    • Estados
    • Municipios (top 10)
  • Cuadro: serie de tiempo variación nominal de delitos por entidad por mes, últimos 24 meses.

    • Estados
    • Municipios (top 10)
  • Cuadro: serie de tiempo variación porcentual de delitos por entidad por mes, últimos 24 meses.

    • Estados
    • Municipios (top 10)
  • Formato: pies de gráfica y de tabla.

  • Estimación del dato anual corriente (multiplicación)

  • Series per capita.

  • Cuadro del número de delitos por cada 10,000 habitantes mayores de 18 años por estado por año.

  • Análisis de la serie de tiempo espacial:

    • Pregunta: ¿existe un efecto estacional del delito?
  • Contrastar con CNSPF

  • En las series de tiempo:

    • Terminar de leer Greenberg (2001)
    • ¿cambios de tendencia?
    • ¿Es una serie estacionaria?
    • Tendencias a partir de la entrada de la nueva administración.
  • En las series de tiempo mensuales sí se puede incluir el último mes, aunque se podría considerar calcular el intervalo predictivo.

  • Gráfica de la serie de tiempo del cambio porcentual mensual en el número de víctimas.

  • Homicidio culposo: correlación con homicidio doloso; serie de tiempo de la correlación, cambios de media; tendencia de la serie de tiempo del homicidio culposo.

  • ¿Existe un efecto estacional en la serie mensual del número de víctimas total?

  • Tráfico de personas X edad

    • Tráfico de personas X edad X año

    • Tráfico de personas X edad X mes

    • Tráfico de personas x sexo X edad

      • Tráfico de personas x sexo X edad X año

      • Tráfico de personas x sexo X edad X mes

    • Ver Feehs and Wheeler (2021)

REFERENCIAS

“Fallas de Origen 2020: Índice de Confiabilidad de La Estadística Criminal.” 2021. México Evalua.
Feehs, Kyleigh, and Alyssa Currier Wheeler. 2021. “2020 Federal Human Trafficking Report.” Human Trafficking Institute.
Greenberg, David F. 2001. “Time Series Analysis of Crime Rates.” Journal of Quantitative Criminology 17 (4, Special Issue: time series analysis of unemployment and crime rates): 291–327.
Harrell Jr, Frank E, with contributions from Charles Dupont, and many others. 2020. Hmisc: Harrell Miscellaneous. https://CRAN.R-project.org/package=Hmisc.
R Core Team. 2020. R: A Language and Environment for Statistical Computing. Vienna, Austria: R Foundation for Statistical Computing. https://www.R-project.org/.
Schauberger, Philipp, and Alexander Walker. 2020. Openxlsx: Read, Write and Edit Xlsx Files. https://CRAN.R-project.org/package=openxlsx.
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, Joe Cheng, and Xianying Tan. 2020. DT: A Wrapper of the JavaScript Library ’DataTables’. https://CRAN.R-project.org/package=DT.

  1. La tendencia (determinista) es ajustada utilizando un modelo lineal (\(y_i = \alpha + \beta * i + \epsilon\)). La tendencia se añade únicamente a manera de referencia, el modelo y los supuestos no han sido validados.↩︎

  2. La tendencia (determinista) es ajustada utilizando un modelo lineal (\(y_i = \alpha + \beta * i + \epsilon\)). La tendencia se añade únicamente a manera de referencia, el modelo y los supuestos no han sido validados.↩︎