## 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
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.
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:
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)
datos.vfc <-
read.table(
file = archivo.vfc,
sep = ',',
header = TRUE,
stringsAsFactors = FALSE,
fileEncoding = 'latin1')
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')
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)
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))
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))
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 |
La base de datos registra un total histórico de 2.31753^{5} víctimas de homicidio doloso.
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))
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”.
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))
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 = '%')
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)
La base de datos de víctimas del fuero común registra un total de 6510 víctimas de feminicidio a la fecha.
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))
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)
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))
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 = '%')
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)
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)
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))
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)
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.')
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))
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')
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))
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)
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))
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
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))
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 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))
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.
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))
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))
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))
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 = '|')
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 = '|')
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')
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))
# 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 = '.')
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
“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.”
# 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')
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
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
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
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
2021.03.23
2021.02.22
2021.02.04:
2021.01.20:
2020.11.23:
2020.08.26:
2020.07.22:
2020.06.22:
Revisar datos de población municipal: León, GTO vs Cuauhtémoc, CDMX
En series de tiempo:
Incidencia delictiva total anual ajustada por población mayor de 18 años.
Cuadro: serie de tiempo de total de delitos por entidad por mes, últimos 24 meses.
Cuadro: serie de tiempo variación nominal de delitos por entidad por mes, últimos 24 meses.
Cuadro: serie de tiempo variación porcentual de delitos por entidad por mes, últimos 24 meses.
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:
Contrastar con CNSPF
En las series de tiempo:
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)
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.↩︎
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.↩︎