La Encuesta Nacional de Victimización y Percepción sobre Seguridad Pública (ENVIPE) 2024 es la décima cuarta entrega de la serie estadística generada por el Subsistema Nacional de Información de Gobierno, Seguridad Pública e Impartición de Justicia (SNIGSPIJ), coordinada por el Instituto Nacional de Estadística y Geografía (INEGI). Con este proyecto se da continuidad a las temáticas abordadas en las ediciones anteriores de esta encuesta, cuyos resultados han sido declarados Información de Interés Nacional por la Junta de Gobierno del INEGI. (INEGI, 2024)
Para mayor información y descarga de datos, cuestionarios, etcétera visite el enlace: ENVIPE
library(readr) # Nos ayuda a leer archivos en formato Excellibrary(dplyr) # Permite el uso de pipes |> los que conectan funciones
Adjuntando el paquete: 'dplyr'
The following objects are masked from 'package:stats':
filter, lag
The following objects are masked from 'package:base':
intersect, setdiff, setequal, union
library(janitor) # Limpieza de columnas
Adjuntando el paquete: 'janitor'
The following objects are masked from 'package:stats':
chisq.test, fisher.test
library(srvyr) # Análisis de muestras complejas
Adjuntando el paquete: 'srvyr'
The following object is masked from 'package:stats':
filter
library(stringr) # Trabajar con cadenas de textosuppressPackageStartupMessages(library(here))
2. Lectura de archivos
Creamos una variable llamada df (dataframe) que contiene los datos de la tabla TPer_Vic2 que es la que contiene las variables para estimar la cantidad de hogares y víctimas. Al correr la función head() nos dará los primeros n registros que le pidamos, eso ayuda a visualizar si los datos se cargaron adecuadamente.
Warning: One or more parsing issues, call `problems()` on your data frame for details,
e.g.:
dat <- vroom(...)
problems(dat)
Rows: 89630 Columns: 150
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (36): ID_VIV, ID_HOG, ID_PER, UPM, VIV_SEL, HOGAR, RESUL_H, R_SEL, AREAM...
dbl (37): ...1, SEXO, EDAD, AP6_1_1, AP6_2, AP6_3, AP6_4_01, AP6_5_01, AP6_4...
lgl (77): AP6_10_2, AP6_11_1, AP6_12_1, AP6_13_1_1, AP6_13_1_2, AP6_13_1_3, ...
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
Mostramos el encabezado de las primeras filas.
kableExtra::kable(head(df , 3), caption ="Encabezado de las tres primeras filas.")
Encabezado de las tres primeras filas.
…1
ID_VIV
ID_HOG
ID_PER
UPM
VIV_SEL
HOGAR
RESUL_H
R_SEL
SEXO
EDAD
AREAM
CVE_ENT
NOM_ENT
CVE_MUN
NOM_MUN
AP6_1_1
AP6_1_2
AP6_2
AP6_3
AP6_4_01
AP6_5_01
AP6_6_01
AP6_4_02
AP6_5_02
AP6_6_02
AP6_4_03
AP6_6_03
AP6_4_04
AP6_6_04
AP6_7
AP6_8
AP6_9
AP6_10_1
AP6_10_2
AP6_11_1
AP6_12_1
AP6_13_1_1
AP6_13_1_2
AP6_13_1_3
AP6_13_1_4
AP6_11_2
AP6_12_2
AP6_13_2_1
AP6_13_2_2
AP6_13_2_3
AP6_13_2_4
AP6_11_3
AP6_12_3
AP6_13_3_1
AP6_13_3_2
AP6_13_3_3
AP6_13_3_4
AP6_11_4
AP6_12_4
AP6_13_4_1
AP6_13_4_2
AP6_13_4_3
AP6_13_4_4
AP6_11_5
AP6_12_5
AP6_13_5_1
AP6_13_5_2
AP6_13_5_3
AP6_13_5_4
AP6_11_6
AP6_12_6
AP6_13_6_1
AP6_13_6_2
AP6_13_6_3
AP6_13_6_4
AP6_11_7
AP6_12_7
AP6_13_7_1
AP6_13_7_2
AP6_13_7_3
AP6_13_7_4
AP6_14
AP6_15_1
AP6_15_2
AP6_16_1
AP6_17_1
AP6_18_1
AP6_16_2
AP6_17_2
AP6_18_2
AP6_16_3
AP6_17_3
AP6_18_3
AP6_16_4
AP6_17_4
AP6_18_4
AP6_16_5
AP6_17_5
AP6_18_5
AP6_16_6
AP6_17_6
AP6_18_6
AP6_16_7
AP6_17_7
AP6_18_7
AP6_19
AP6_20_1
AP6_20_2
AP6_21_1
AP6_22_1
AP6_21_2
AP6_22_2
AP6_21_3
AP6_22_3
AP6_21_4
AP6_22_4
AP6_21_5
AP6_22_5
AP6_21_6
AP6_22_6
AP6_21_7
AP6_22_7
AP7_1
AP7_2
AP7_3_05
AP7_4_05
AP7_3_06
AP7_4_06
AP7_3_07
AP7_4_07
AP7_3_08
AP7_4_08
AP7_3_09
AP7_4_09
AP7_3_10
AP7_4_10
AP7_3_11
AP7_4_11
AP7_3_12
AP7_4_12
AP7_3_13
AP7_4_13
AP7_3_14
AP7_4_14
AP7_3_15
AP7_4_15
FAC_HOG
FAC_ELE
FAC_HOG_AM
FAC_ELE_AM
DOMINIO
ESTRATO
EST_DIS
UPM_DIS
1
0806910.03
0806910.03.01
0806910.03.01.02
0806910
03
01
B
02
2
31
NA
08
CHIHUAHUA
037
JUAREZ
1
01
1
2
2
NA
NA
2
NA
NA
2
NA
2
NA
2
NA
2
2
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
2
2
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
2
2
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
2
2
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
000503
001005
NA
NA
U
4
141
003227
2
0805607.04
0805607.04.01
0805607.04.01.01
0805607
04
01
A
01
1
52
NA
08
CHIHUAHUA
037
JUAREZ
1
03
2
1
1
1
01
1
1
01
2
NA
2
NA
1
1
2
2
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
2
2
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
2
2
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
2
2
2
NA
2
NA
1
02
1
01
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
000369
001478
NA
NA
U
3
139
003131
3
0805737.02
0805737.02.01
0805737.02.01.01
0805737
02
01
B
01
1
75
NA
08
CHIHUAHUA
037
JUAREZ
1
01
2
2
2
NA
NA
2
NA
NA
2
NA
2
NA
2
NA
2
2
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
2
2
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
2
2
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
2
2
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
000322
000322
NA
NA
U
3
139
003143
3. Procesamiento de datos (Generales)
3.1. Limpiamos los nombres de las columnas, para poder estandarizar. Y cargamos el conjunto de datos de nuevo en la variable df. Observé que el factor de expansión del hogar viene en como tipo character para la base de 2024 por ello lo convierto a entero.
df <-clean_names(df)# Modificación del tipo de dato del factor de expansióndf$fac_hog <-as.integer(df$fac_hog)
Volvemos a mostrar los primeros registros para ver la modificación de nombre de las columnas.
Encabezado de las tres primeras filas.
x1
id_viv
id_hog
id_per
upm
viv_sel
hogar
resul_h
r_sel
sexo
edad
aream
cve_ent
nom_ent
cve_mun
nom_mun
ap6_1_1
ap6_1_2
ap6_2
ap6_3
ap6_4_01
ap6_5_01
ap6_6_01
ap6_4_02
ap6_5_02
ap6_6_02
ap6_4_03
ap6_6_03
ap6_4_04
ap6_6_04
ap6_7
ap6_8
ap6_9
ap6_10_1
ap6_10_2
ap6_11_1
ap6_12_1
ap6_13_1_1
ap6_13_1_2
ap6_13_1_3
ap6_13_1_4
ap6_11_2
ap6_12_2
ap6_13_2_1
ap6_13_2_2
ap6_13_2_3
ap6_13_2_4
ap6_11_3
ap6_12_3
ap6_13_3_1
ap6_13_3_2
ap6_13_3_3
ap6_13_3_4
ap6_11_4
ap6_12_4
ap6_13_4_1
ap6_13_4_2
ap6_13_4_3
ap6_13_4_4
ap6_11_5
ap6_12_5
ap6_13_5_1
ap6_13_5_2
ap6_13_5_3
ap6_13_5_4
ap6_11_6
ap6_12_6
ap6_13_6_1
ap6_13_6_2
ap6_13_6_3
ap6_13_6_4
ap6_11_7
ap6_12_7
ap6_13_7_1
ap6_13_7_2
ap6_13_7_3
ap6_13_7_4
ap6_14
ap6_15_1
ap6_15_2
ap6_16_1
ap6_17_1
ap6_18_1
ap6_16_2
ap6_17_2
ap6_18_2
ap6_16_3
ap6_17_3
ap6_18_3
ap6_16_4
ap6_17_4
ap6_18_4
ap6_16_5
ap6_17_5
ap6_18_5
ap6_16_6
ap6_17_6
ap6_18_6
ap6_16_7
ap6_17_7
ap6_18_7
ap6_19
ap6_20_1
ap6_20_2
ap6_21_1
ap6_22_1
ap6_21_2
ap6_22_2
ap6_21_3
ap6_22_3
ap6_21_4
ap6_22_4
ap6_21_5
ap6_22_5
ap6_21_6
ap6_22_6
ap6_21_7
ap6_22_7
ap7_1
ap7_2
ap7_3_05
ap7_4_05
ap7_3_06
ap7_4_06
ap7_3_07
ap7_4_07
ap7_3_08
ap7_4_08
ap7_3_09
ap7_4_09
ap7_3_10
ap7_4_10
ap7_3_11
ap7_4_11
ap7_3_12
ap7_4_12
ap7_3_13
ap7_4_13
ap7_3_14
ap7_4_14
ap7_3_15
ap7_4_15
fac_hog
fac_ele
fac_hog_am
fac_ele_am
dominio
estrato
est_dis
upm_dis
1
0806910.03
0806910.03.01
0806910.03.01.02
0806910
03
01
B
02
2
31
NA
08
CHIHUAHUA
037
JUAREZ
1
01
1
2
2
NA
NA
2
NA
NA
2
NA
2
NA
2
NA
2
2
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
2
2
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
2
2
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
2
2
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
503
001005
NA
NA
U
4
141
003227
2
0805607.04
0805607.04.01
0805607.04.01.01
0805607
04
01
A
01
1
52
NA
08
CHIHUAHUA
037
JUAREZ
1
03
2
1
1
1
01
1
1
01
2
NA
2
NA
1
1
2
2
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
2
2
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
2
2
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
2
2
2
NA
2
NA
1
02
1
01
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
369
001478
NA
NA
U
3
139
003131
3
0805737.02
0805737.02.01
0805737.02.01.01
0805737
02
01
B
01
1
75
NA
08
CHIHUAHUA
037
JUAREZ
1
01
2
2
2
NA
NA
2
NA
NA
2
NA
2
NA
2
NA
2
2
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
2
2
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
2
2
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
NA
2
2
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
2
NA
322
000322
NA
NA
U
3
139
003143
4. Procesamiento de datos (Para responder nuestra pregunta)
4.1. Podemos filtrar solo las columnas necesarias. Para ello necesitamos tener el diseño muestral estrato y upm: estratoest_disupm_dis los factores de expansión para la estimación fac_hog y fac_ele 4.2. Necesitamos las variables que contienen la pregunta que queremos responder entonces, filtremos. Creamos un vector que tiene el nombre de las variables que necesitamos desl muestreo y auxiliares
vars <-c('id_viv','id_hog', 'upm', 'cve_ent', # Variables de identificación y geográficas'estrato', 'est_dis', 'fac_hog', 'fac_ele', # Variables del diseño muestral'ap6_5_01', 'ap6_5_02') # Variables auxiliares para el filtrado o procesamiento (saber si los bienes perdidos eran del hogar)
Creamos otro vector que tiene el nombre de las variables que contienen nuestras preguntas. Estos pasos no son estrictamente de esta manera.
preg <-c('AP6_4_01', # Sobre el Robo total de vehículo (automóvil, camioneta o camión)'AP6_4_02', # Sobre el Robo de accesorios, refacciones o herramientas de vehículos (automóvil, camioneta, camión)#'AP6_4_03', # Sobre la Pinta de barda o grafiti en su casa, *NO* se debe incluir (con base en la documentación de la encuesta)'AP6_4_04' , # Si Alguien entró a su casa o departamento sin permiso mediante el uso de la fuerza y robó o intentó robar algo'AP6_7') # Alguno del grupo B (personales) )
Delitos del grupo B
05 Robo o asalto en la calle o en el transporte público (incluye robo en banco o cajero automático)
06 Robo en forma distinta a la anterior
07 Alguien usó su chequera, número de tarjeta o cuenta bancaria sin su permiso para realizar cargos o para extraer dinero de sus cuentas (fraude bancario) o le dio dinero falso
08 Entregó dinero por un producto o un servicio que no recibió conforme a lo acordado (fraude al consumidor)
09 Amenazas, presiones o engaños para exigirle dinero o bienes; o para que hiciera algo o dejara de hacerlo (extorsión)
10 Amenazas verbales de alguien plenamente identificado o por escrito hacia su persona diciendo que le va a causar un daño a usted, a su familia, a sus bienes o su trabajo
11 Alguien sólo por actitud abusiva o por una discusión lo(a) golpeó generándole una lesión física (moretones, fracturas, cortadas, etcétera)
12 Lo secuestraron para exigir dinero o bienes
13 Alguien en contra de su voluntad lo(a) agredió mediante hostigamiento o intimidación sexual, manoseo, exhibicionismo o intento de violación
14 Fue obligado(a) mediante violencia física o amenaza por alguien conocido o desconocido a tener una actividad sexual no deseada (violación sexual)
15 Otros delitos distintos a los anteriores
Procesamientos NO necesarios, es la forma en la que resolví el ejercicio. Tú puedes resolverlo de otra manera :)
preg1 <-tolower(preg) # Para filtrar deben estar en minúsculasvfilt <-c(vars, preg1) # Se juntan en un solo vectorpreg <- preg1 # Utilizo una variable dummypreg <-paste0(preg, '_r') # Genero un nombre dummy para procesamientosprint(preg)
Filtremos el dataframe usando los nombres de variables separados.
df_vict <- df |>select( all_of(vfilt))
Comencemos a preguntarle cosas a la base de datos.
¿Cuántos hogares se estiman en Mexico?
Para responder, podemos simplemente sumar los factores de expansión de hogar fac_hog y no debemos filtrar ni agregar ya que queremos saber a nivel nacional esta estimación.
hog <-sum(df_vict$fac_hog, na.rm = T)hog_mx <- hog # Me llevaré este valor para un cálculo más adelanteprint(paste0('Se estiman ' , round(hog/1000000, 2) , ' millones de hogares en México en 2024'))
[1] "Se estiman 38.56 millones de hogares en México en 2024"
Y bien, de esos Hogares ¿Cuántos se estima que fueron victimizados en 2024 en Mexico?
Planteamiento: Necesito saber quiénes respondieron que Sí les ocurrió durante 2024 alguna conducta de las tarjetas A y B (delitos en hogares o personales) ya sea a alguien de su hogar o a quienes respondieron.
Restricciones: En los delitos de Robo de vehículo y Robo parcial de vehículo debemos confirmar que estos pertenecían al hogar.
Debido esa pregunta se divide en varias columnas en la base de datos como vimos en el filtro, crearé una variable dummy que guarde los resultados de cada pregunta. Solo necesito saber por ahora si respondió Sí a alguna.
En mi caso, decidí crear una función que nos ayude a codificar las variables DRY (don’t repeat yourself), esto con la finalidad de crear una nueva variable dummy y así estimar lo que necesitamos.
Crear la función para recodificar las respuestas de las tarjetas A y B
recodifica <-function(x) { r <-ifelse(x ==1, 1, 0)return(r)}
Recodificar y crear variables auxiliares
df_salida <- df_vict |># A la base de datos filtrada le aplico los procesamientos y creamos una nueva variable# Comienzo a generar variables dummy que guarden el resultdo de la respuestamutate ( ap6_4_01_r =ifelse( ap6_4_01 ==1& ap6_5_01 ==1,1,0 ), # En Robo de vehículo debemos confirmar si era del hogar o no.ap6_4_02_r =ifelse( ap6_4_02 ==1& ap6_5_02 ==1,1,0 ), # En Robo parcial de vehículo debemos confirmar si era del hogar o no.#ap6_4_03_r = recodifica(ap6_4_03), # No debemos incluir las pintas a bardasap6_4_04_r =recodifica(ap6_4_04), ap6_7_r =recodifica(ap6_7),vic_res =rowSums( dplyr::across(all_of (preg) )), # Hago la suma de todas mis variables dummyvic_hog =ifelse(vic_res >0, 1, 0 ), # Si alguna es mayor a cero, significa que al menos en una respondieron que sí, de otro modo quedan como ceros vic_hog_est = vic_hog * fac_hog) # Podemos probar a estimar con los factores de expansión
Veamos qué pasa si sumamos los datos ya ponderados por su factor de expansión. Obtenemos la estimación puntual de Víctimas en Hogares
A continuación, creamos un objeto de diseño muestral para poder realizar cálculos de muestras complejas desde la biblioteca srvyr
dis_muest <- df_salida |># A la tabla de la nueva variable le aplicamos las funciones necesarias para crear el objeto de diseño muestralas_survey_design(ids= upm, # Indicamos cuáles son los identificadores de las Unidades Primarias de Muestreostrata= est_dis, # Indicamos el estrato al cuál pertenecen esas UPMsweights= fac_hog) # Indicamos cuál es la variable que guarda los pesos o factores de expansión
Respondamos de una buena vez cuántos hogares fueron vćtimas de algún delito en 2024. Recuerda leer muy bien el documento sobre el diseño muestral para entender mejor tus resultados.
hog_vict <- dis_muest |># A nuestro objeto de diseño muestral le aplicamos funciones que calcularn lo que necesitamos #group_by() |> # Esta función más adelante la usaremos para agrupar por otras variables, por ahora se queda comentada.# Vamos a realizar un sumariosummarise( vic_hogar =survey_total( vic_hog , # Utilizamos la variable dummy, que nos indica si fuero víctimas de al menos algún delito.vartype =c("cv", "ci"), # Qué quiero que nos regrese además de las estimaciones. Requiero el coeficiente de variación y los intervalos de confianza level=0.9) # Necesito indicarle a qué nivel de confianza se deben crear los intervalos. ) # Me llevo la estimación puntual para luego realizar otros cálculoshog_vic <- hog_vict$vic_hogarhog_vict |> kableExtra::kable() # Ponemos guapa a la tabla
vic_hogar
vic_hogar_cv
vic_hogar_low
vic_hogar_upp
10609475
0.0085137
10460891
10758059
Conclusiones
Sabemos que se estiman 38,560,539 Hogares en México y que de ellos, 10,609,475 tuvieron en 2022 al menos una víctima. Entonces, si hacemos el cálculo:
prop_hv <- hog_vic / hog_mx print(prop_hv)
[1] 0.2751381
Recuerda que sí lo multiplicas por 100 tienes un porcentaje, que algunas veces de acuerdo a su forma de cálculo pueden representar algún tipo de indicador epidemiológico.
porc_hv <- prop_hv *100print(paste0( 'Durante 2024 se estimaron ', round(hog/1000000, 2) , ' millones de hogares en México, de los cuales se estima que hubo ', round(hog_vic/1000000, 2) , ' hogares víctima, lo que significa que en un ', round (porc_hv,2), ' % de los hogares al menos una persona integrante fue víctima de un delito.' ))
[1] "Durante 2024 se estimaron 38.56 millones de hogares en México, de los cuales se estima que hubo 10.61 hogares víctima, lo que significa que en un 27.51 % de los hogares al menos una persona integrante fue víctima de un delito."
En la imagen se pueden contrastar los resultados.
Diapositiva de la presentación ejecutiva del INEGI