(Máximo 2 párrafos) Síntesis de la pregunta de investigación.
Resumen breve de la metodología utilizada.
Principales 3-5 hallazgos y recomendaciones clave.
¿Cómo impacta el género, estado civil, nivel de escolaridad y ocupación actual de los participantes en el tipo de taller cursado observada en los macro centros comunitarios de Nuevo León desde 2017-2025?
General: Analizar cómo influyen el género, estado civil, nivel de escolaridad y ocupación actual de los participantes en la elección de talleres ofrecidos en los macrocentros comunitarios de Nuevo León entre 2017 y 2025, identificando patrones asociados a la segregación ocupacional por género.
Específicos: - Describir las características sociodemográficas (género, estado civil, nivel educativo y ocupación) de los participantes en los talleres de los macrocentros comunitarios.
Examinar la relación entre el género y la elección de talleres para identificar posibles tendencias de segregación ocupacional.
Analizar cómo el nivel educativo, el estado civil y la ocupación actual influyen en la elección del tipo de taller cursado.
Determinar qué tipo de talleres presentan una distribución más equitativa entre géneros y cuáles refuerzan estereotipos ocupacionales.
Proponer estrategias para promover una participación más equitativa en los talleres, reduciendo la segregación ocupacional por género.
# Librerías que vamos a usar
library(readxl) # para leer Excel
library(janitor) # para limpiar nombres de columnas
library(dplyr) # para manipular datos
library(stringr) # para texto (mayúsculas, etc.)
library(mice)
library(stringi)
# Función: si encuentra el primer nombre de la lista en el df, lo renombra
renombrar_primera_coincidencia <- function(df, nuevo_nombre, candidatos) {
for (c in candidatos) {
if (c %in% names(df)) {
names(df)[names(df) == c] <- nuevo_nombre
break
}
}
df
}
# Función principal de estandarización de nombres
estandarizar_nombres <- function(df) {
df <- df |> clean_names() # nombres tipo snake_case
# Socio-demográficas
df <- renombrar_primera_coincidencia(
df,
"genero",
c("x1_cual_es_su_genero", "sexo", "genero", "cual_es_su_genero")
)
df <- renombrar_primera_coincidencia(
df,
"edad",
c("edad", "x2_cuantos_anos_cumplidos_tiene", "cuantos_anos_cumplidos_tiene")
)
df <- renombrar_primera_coincidencia(
df,
"estado_civil",
c("x3_actualmente_cual_es_su_estado_civil", "estado_civil", "actualmente_cual_es_su_estado_civil")
)
df <- renombrar_primera_coincidencia(
df,
"escolaridad",
c("x4_cual_es_su_maximo_nivel_de_escolaridad_alcanzado_al_dia_de_hoy",
"escolaridad_actual", "escolaridad", "cual_es_su_maximo_nivel_de_escolaridad_alcanzado_al_dia_de_hoy")
)
df <- renombrar_primera_coincidencia(
df,
"ocupacion",
c("x5_a_que_se_dedica_actualmente_puede_seleccionar_una_o_mas_opciones",
"a_que_se_dedica_actualmente", "a_que_se_dedica_actualmente_puede_seleccionar_una_o_mas_opciones")
)
df <- renombrar_primera_coincidencia(
df,
"taller",
c("curso_o_taller_que_cursa_o_termino",
"curso_taller",
"curso_o_taller",
"taller",
"nombre_del_taller")
)
df <- renombrar_primera_coincidencia(
df,
"centro_comunitario",
c("centro_comunitario")
)
df <- renombrar_primera_coincidencia(
df,
"la_calidad_y_cantidad_de_materiales_y_equipo_utilizados_en_el_curso_o_taller",
c("calidad_y_cantidad_de_materiales_y_equipo_utilizados_en_el_curso_o_taller", "la_calidad_y_cantidad_de_materiales_y_equipo_utilizados_en_el_curso_o_taller"))
df <- renombrar_primera_coincidencia(
df,
"el_contenido_o_temas_del_curso_o_taller",
c("contenido_o_temas_del_curso_o_taller", "el_contenido_o_temas_del_curso_o_taller"))
df <- renombrar_primera_coincidencia(
df,
"trato_recibido_por_el_personal_que_labora_en_el_centro_comunitario",
c("trato_y_o_información_brindada_por_el_personal_que_labora_en_el_centro_comunitario", "el_trato_y_o_información_brindada_por_el_personal_que_labora_en_el_centro_comunitario", "trato_recibido_por_el_personal_que_labora_en_el_centro_comunitario"))
# Preguntas abiertas
df <- renombrar_primera_coincidencia(
df,
"comentario_curso",
c("comentarios_sobre_el_curso_o_taller_que_recibio",
"comentarios_sobre_el_curso_taller_que_recibio")
)
df <- renombrar_primera_coincidencia(
df,
"curso_de_interes",
c("si_tiene_algun_otro_curso_o_taller_que_le_interesaria_tomar_que_no_se_ofrece_en_el_centro_comunitario_favor_de_mencionarlo",
"x10_si_tiene_algun_otro_curso_o_taller_que_le_interesaria_tomar_que_no_se_ofrece_en_el_centro_comunitario_favor_de_mencionarlo")
)
df <- renombrar_primera_coincidencia(
df,
"otro_taller_menciona",
c("en_caso_de_elegir_otro_menciona_el_taller_al_que_asistes", "otro_taller_que_haya_tomado_en_el_trimestre_coloque_un_cero_si_no_tomo_otro_taller")
)
df <- renombrar_primera_coincidencia(
df,
"aprendizajes_aplicaciones",
c("lo_que_usted_aprendio_en_el_curso_o_taller_en_donde_lo_aplicaria", "x6_lo_que_usted_aprendio_en_el_curso_taller_en_que_ambito_de_su_vida_lo_aplicaria_puede_marcar_hasta_dos_opciones", "lo_que_usted_aprendio_en_el_curso_taller_en_que_ambito_de_su_vida_lo_aplicaria_puede_marcar_hasta_dos_opciones")
)
df <- renombrar_primera_coincidencia(
df,
"sugerencia_general",
c("otras_sugerencia_u_opiniones_que_permitan_mejorar_los_servicios_brindados_en_el_centro_comunitario",
"sugerencia_o_comentario_que_nos_permita_mejorar_el_taller_o_eventos_a_los_que_asistio_opcional")
)
return(df)
}
Aplicar la estandarización a todas las bases
ruta <- ruta <- "C:/Users/maxcu/R/R studio/Nueva carpeta/Bases de datos_CC_SII/Bases de datos_CC_SII"
archivo_2017_4t <- list.files(ruta, pattern = "4T 2017", full.names = TRUE)
archivo_2018_4t <- list.files(ruta, pattern = "4T 2018", full.names = TRUE)
archivo_2019_4t <- list.files(ruta, pattern = "4T 2019", full.names = TRUE)
archivo_2020_4t <- list.files(ruta, pattern = "4T 2020", full.names = TRUE)
archivo_2021_4t <- list.files(ruta, pattern = "4T 2021", full.names = TRUE)
archivo_2022_1t <- list.files(ruta, pattern = "1T 2022", full.names = TRUE)
archivo_2024_2t <- list.files(ruta, pattern = "2T 2024", full.names = TRUE)
archivo_2024_3t <- list.files(ruta, pattern = "3T 2024", full.names = TRUE)
archivo_2024_4t <- list.files(ruta, pattern = "4T 2024", full.names = TRUE)
archivo_2025_1t <- list.files(ruta, pattern = "1T 2025", full.names = TRUE)
archivo_2025_2t <- list.files(ruta, pattern = "2T 2025", full.names = TRUE)
# Ahora leemos cada archivo usando esos paths
bd_2017_4t <- readxl::read_excel(archivo_2017_4t, col_types = "text") |>
estandarizar_nombres() |>
dplyr::mutate(anio_trimestre = "2017_Q4")
bd_2018_4t <- readxl::read_excel(archivo_2018_4t, col_types = "text") |>
estandarizar_nombres() |>
dplyr::mutate(anio_trimestre = "2018_Q4")
bd_2019_4t <- readxl::read_excel(archivo_2019_4t, col_types = "text") |>
estandarizar_nombres() |>
dplyr::mutate(anio_trimestre = "2019_Q4")
bd_2020_4t <- readxl::read_excel(archivo_2020_4t, col_types = "text") |>
estandarizar_nombres() |>
dplyr::mutate(anio_trimestre = "2020_Q4")
bd_2021_4t <- readxl::read_excel(archivo_2021_4t, col_types = "text") |>
estandarizar_nombres() |>
dplyr::mutate(anio_trimestre = "2021_Q4")
bd_2022_1t <- readxl::read_excel(archivo_2022_1t, col_types = "text") |>
estandarizar_nombres() |>
dplyr::mutate(anio_trimestre = "2022_Q1")
bd_2024_2t <- readxl::read_excel(archivo_2024_2t, col_types = "text") |>
estandarizar_nombres() |>
dplyr::mutate(anio_trimestre = "2024_Q2")
bd_2024_3t <- readxl::read_excel(archivo_2024_3t, col_types = "text") |>
estandarizar_nombres() |>
dplyr::mutate(anio_trimestre = "2024_Q3")
bd_2024_4t <- readxl::read_excel(archivo_2024_4t, col_types = "text") |>
estandarizar_nombres() |>
dplyr::mutate(anio_trimestre = "2024_Q4")
bd_2025_1t <- readxl::read_excel(archivo_2025_1t, col_types = "text") |>
estandarizar_nombres() |>
dplyr::mutate(anio_trimestre = "2025_Q1")
bd_2025_2t <- readxl::read_excel(archivo_2025_2t, col_types = "text") |>
estandarizar_nombres() |>
dplyr::mutate(anio_trimestre = "2025_Q2")
df_all <- dplyr::bind_rows(
bd_2017_4t,
bd_2018_4t,
bd_2019_4t,
bd_2020_4t,
bd_2021_4t,
bd_2022_1t,
bd_2024_2t,
bd_2024_3t,
bd_2024_4t,
bd_2025_1t,
bd_2025_2t
)
Dejar sólo la información de los macrocentros de Nuevo León
macro_centros <- c("ALLENDE","SAN BERNABE","INDEPENDENCIA","LA ALIANZA","MONTE KRISTAL","SANTA FE")
df_macro <- df_all |>
dplyr::mutate(centro_comunitario = stringr::str_to_upper(centro_comunitario)) |>
dplyr::filter(centro_comunitario %in% macro_centros)
Variables de interés para pregunta de investigación
# Vector con las variables que necesitas
vars_interes <- c(
"anio_trimestre",
"centro_comunitario",
"genero",
"estado_civil",
"escolaridad",
"ocupacion",
"edad",
"taller",
"aprendizajes_aplicaciones"
,
# Variables de satisfacción (si decides mantenerlas)
"el_conocimiento_del_tallerista_o_instructor_sobre_el_tema_del_curso_taller",
"el_contenido_o_temas_del_curso_taller",
"trato_recibido_por_el_personal_que_labora_en_el_centro_comunitario",
# Variables abiertas
"comentario_curso",
"curso_de_interes",
"otro_taller_menciona",
"sugerencia_general"
)
# Filtrar solo esas columnas
df_macro <- df_macro |>
dplyr::select(any_of(vars_interes))
Convertir variables numéricas a numéricas
# Convertir edad y las 5 variables de satisfacción a numéricas
df_macro <- df_macro |>
mutate(
edad = as.numeric(edad),
el_conocimiento_del_tallerista_o_instructor_sobre_el_tema_del_curso_taller =
as.numeric(el_conocimiento_del_tallerista_o_instructor_sobre_el_tema_del_curso_taller),
el_contenido_o_temas_del_curso_taller =
as.numeric(el_contenido_o_temas_del_curso_taller),
trato_recibido_por_el_personal_que_labora_en_el_centro_comunitario =
as.numeric(trato_recibido_por_el_personal_que_labora_en_el_centro_comunitario)
)
Revisión de NA
na_summary <- df_macro |>
summarise(across(everything(), ~sum(is.na(.))))
na_summary
## # A tibble: 1 × 16
## anio_trimestre centro_comunitario genero estado_civil escolaridad ocupacion
## <int> <int> <int> <int> <int> <int>
## 1 0 0 0 0 1521 0
## # ℹ 10 more variables: edad <int>, taller <int>,
## # aprendizajes_aplicaciones <int>,
## # el_conocimiento_del_tallerista_o_instructor_sobre_el_tema_del_curso_taller <int>,
## # el_contenido_o_temas_del_curso_taller <int>,
## # trato_recibido_por_el_personal_que_labora_en_el_centro_comunitario <int>,
## # comentario_curso <int>, curso_de_interes <int>, otro_taller_menciona <int>,
## # sugerencia_general <int>
Como taller y escolaridad tienen pocos NA, se ha decidido eliminar esas observaciones.
df_macro <- df_macro |> filter(!is.na(taller))
df_macro <- df_macro |> filter(!is.na(escolaridad))
Dado que las otras variables (de preguntas no textuales, tienen demasiados NA, estas se dejarán sin borrarse, sin embargo, no son fundamentales para el modelo, sólo para ver los estadísticos generales, entonces no debería afectar más)
Estandarización de las variables
df_macro <- df_macro |>
mutate(
genero = stri_trans_general(genero, "Latin-ASCII") |> tolower(),
estado_civil = stri_trans_general(estado_civil, "Latin-ASCII") |> tolower(),
escolaridad = stri_trans_general(escolaridad, "Latin-ASCII") |> tolower()
)
Estandarización de estado civil
df_macro <- df_macro |>
mutate(
estado_civil = case_when(
estado_civil %in% c("soltero","soltero(a)") ~ "Soltero(a)",
estado_civil %in% c("casado","casado(a)") ~ "Casado(a)",
estado_civil %in% c("divorciado","divorciado(a)") ~ "Divorciado(a)",
estado_civil %in% c("viudo","viudo(a)") ~ "Viudo(a)",
estado_civil %in% c("separado","separado(a)","esta separado(a)") ~ "Separado(a)",
estado_civil %in% c("union libre","vive en union libre") ~ "Unión libre",
TRUE ~ estado_civil
)
)
Creación de nueva variable tipo de taller en base a taller
df_macro <- df_macro |>
mutate(
taller = taller |>
stringi::stri_trans_general("Latin-ASCII") |>
tolower() |>
trimws(),
tipo_taller = case_when(
# DEPORTIVO
str_detect(taller, "zumba|acondicionamiento|fitness|gimnasio|gimnasia|karate|tae|kick|box|lucha|futbol|voleibol|basquet|atletismo|paratenis|tochito|tenis de mesa|pilates|yoga|aerobics|acrobacia|jumping") ~ "deportivo",
# OFICIO
str_detect(taller, "cocina|repost|pastel|panader|chocolat|salsas|cheese|mesa de postres|dulces regionales|norestense|decoracion|belleza|unas|barber|peluquer|corte|confeccion|carpinter|electric|mecanic|refriger|soldadur|manualidad|tejid|macrame|joyer|bisuter|drapeado|sandalias|serigraf|jabones|velas|globoflex|pasta flexible|huerto|jardiner|herbolar|articulos|figuras") ~ "oficio",
# COMPUTACIÓN
str_detect(taller, "excel|word|power point|office|comput|informat|scratch|programacion|redes sociales|inclusion digital|google apps|mantenimiento y reparacion de computadoras") ~ "computacion",
# EDUCACIÓN
str_detect(taller, "ingles|lectura|escritura|lecto|apoyo escolar|tareas|educacion|estimulacion temprana|senas|alfabet|matematicas|lego|uanl|semestre|universidad ciudadana|licenciatura|maestria|prepa|bachillerato|inea") ~ "educacion",
# SALUD
str_detect(taller, "primeros auxilios|nutricion|medicina tradicional|autocuidado|rehabilitacion|masajes|jugos nutritivos") ~ "salud",
# PSICOLOGÍA
str_detect(taller, "psicolog|emocional|arteterapia|intervencion psicologica") ~ "psicologia",
# COMUNIDAD
str_detect(taller, "comunidad|lider|participacion|entre mujeres|club|voluntariado|tareas|educando con amor|ong") ~ "comunidad",
# CULTURAL
str_detect(taller, "pintura|dibujo|arte|plasticas|artesan|teatro|musica|guitarra|piano|acordeon|canto|danza|cineclub|ensamble") ~ "cultural",
TRUE ~ "otro"
))
df_macro <- df_macro |>
mutate(
ocupacion_limpia = ocupacion |>
stringi::stri_trans_general("Latin-ASCII") |>
tolower() |>
trimws(),
ocupacion_categoria = case_when(
# MENOR DE EDAD
str_detect(ocupacion_limpia,
"bebe|bebé|nina|nino|niñ|independiente menor|kider|kinder|preescolar|primaria|2 anos|3 anos|4 anos|5 anos|6 anos|7 anos|8 anos") ~
"menor_de_edad",
# CUIDADO / DISCAPACIDAD
str_detect(ocupacion_limpia,
"limitacion|discapacidad|impide trabajar|cuido|cuidar|cuidando|cuida a mi") ~
"cuidado_de_familia",
# ESTUDIANTE
str_detect(ocupacion_limpia,
"estudiante|estudiando|prepa|preparatoria|secundaria|universidad|bachillerato|acabo de terminar prepa|escolar") ~
"estudiante",
# BUSCANDO TRABAJO
str_detect(ocupacion_limpia,
"buscando trabajo|desocupado") ~
"buscando_trabajo",
# JUBILADO / PENSIONADO
str_detect(ocupacion_limpia,
"pensionad|jubilad") ~
"jubilado_pensionado",
# NEGOCIO PROPIO / EMPRENDIMIENTO
str_detect(ocupacion_limpia,
"auto empleo|negocio propio|negocios propios|por mi cuenta|emprend") ~
"negocio_propio",
# HOGAR / AMA DE CASA
str_detect(ocupacion_limpia,
"ama de casa|amadecasa|ama casa|al hogar|hogar|quehaceres|estoy en mi casa|^casa$") ~
"hogar",
# EMPLEO (formal/informal)
str_detect(ocupacion_limpia,
"trabaj|emplead|comerciante|repostera|maestra|artesana|banquetes|asociacion") ~
"empleo",
# SIN ACTIVIDAD CLARA / NULO
str_detect(ocupacion_limpia,
"^nada$|^na$|^0$|^\\.$|^lo$") ~
"otro",
# DEFAULT
TRUE ~ "otro"
)
)
Convertir variables character a factor
df_macro <- df_macro |>
mutate(
genero = as.factor(genero),
estado_civil = as.factor(estado_civil),
escolaridad = as.factor(escolaridad),
ocupacion_categoria = as.factor(ocupacion_categoria),
taller_categoria = as.factor(tipo_taller),
centro_comunitario = as.factor(centro_comunitario),
anio_trimestre = as.factor(anio_trimestre)
)
df_comentario_curso <- df_macro |>
select(anio_trimestre, centro_comunitario, tipo_taller, comentario_curso) |>
filter(!is.na(comentario_curso) & comentario_curso != "")
df_curso_de_interes <- df_macro |>
select(anio_trimestre, centro_comunitario, tipo_taller, curso_de_interes) |>
filter(!is.na(curso_de_interes) & curso_de_interes != "")
df_otro_taller_menciona <- df_macro |>
select(anio_trimestre, centro_comunitario, tipo_taller, otro_taller_menciona) |>
filter(!is.na(otro_taller_menciona) & otro_taller_menciona != "")
df_sugerencia_general <- df_macro |>
select(anio_trimestre, centro_comunitario, tipo_taller, sugerencia_general) |>
filter(!is.na(sugerencia_general) & sugerencia_general != "")
df_taller <- df_macro |>
select(anio_trimestre, centro_comunitario, tipo_taller, taller) |>
filter(!is.na(taller) & taller != "")
Eliminar variables que ya no se necesitan
df_macro <- df_macro |>
select(
-comentario_curso,
-curso_de_interes,
-otro_taller_menciona,
-sugerencia_general,
-ocupacion_limpia
)
Conteo general
n_total <- nrow(df_macro)
Conteo general
n_total
## [1] 11863
Frecuencias absolutas de variables categóricas
cat("GENERO\n")
## GENERO
print(table(df_macro$genero))
##
## femenino masculino prefiero no decirlo
## 9263 2587 13
cat("\n\n")
cat("ESTADO CIVIL\n")
## ESTADO CIVIL
print(table(df_macro$estado_civil))
##
## Casado(a) Divorciado(a) Separado(a) Soltero(a) Unión libre
## 4876 361 279 4873 1106
## Viudo(a)
## 368
cat("\n\n")
cat("ESCOLARIDAD\n")
## ESCOLARIDAD
print(table(df_macro$escolaridad))
##
## carrera tecnica o comercial completa carrera tecnica o comercial incompleta
## 1000 235
## ninguno normal completa
## 174 140
## normal incompleta posgrado completo
## 14 97
## posgrado incompleto preescolar o kinder completo
## 39 123
## preescolar o kinder incompleto preparatoria o bachillerato completo
## 168 1701
## preparatoria o bachillerato incompleto primaria completa
## 1042 676
## primaria incompleta secundaria completa
## 1411 2926
## secundaria incompleta universidad completa
## 771 982
## universidad incompleta
## 364
cat("\n\n")
cat("CENTRO COMUNITARIO\n")
## CENTRO COMUNITARIO
print(table(df_macro$centro_comunitario))
##
## ALLENDE INDEPENDENCIA LA ALIANZA MONTE KRISTAL SAN BERNABE
## 494 815 1693 2094 5068
## SANTA FE
## 1699
cat("\n\n")
cat("TIPO DE TALLER\n")
## TIPO DE TALLER
print(table(df_macro$tipo_taller))
##
## computacion comunidad cultural deportivo educacion oficio
## 414 67 475 3931 1660 3437
## otro psicologia salud
## 1437 386 56
cat("\n\n")
cat("OCUPACION CATEGORIA\n")
## OCUPACION CATEGORIA
print(table(df_macro$ocupacion_categoria))
##
## buscando_trabajo cuidado_de_familia empleo estudiante
## 531 69 1903 3767
## hogar jubilado_pensionado menor_de_edad negocio_propio
## 4572 480 44 47
## otro
## 450
cat("\n\n")
Frecuencias relativas
cat("GENERO\n")
## GENERO
prop.table(table(df_macro$genero))
##
## femenino masculino prefiero no decirlo
## 0.780831156 0.218073000 0.001095844
cat("\n\n")
cat("ESTADO CIVIL\n")
## ESTADO CIVIL
prop.table(table(df_macro$estado_civil))
##
## Casado(a) Divorciado(a) Separado(a) Soltero(a) Unión libre
## 0.41102588 0.03043075 0.02351850 0.41077299 0.09323105
## Viudo(a)
## 0.03102082
cat("\n\n")
cat("ESCOLARIDAD\n")
## ESCOLARIDAD
prop.table(table(df_macro$escolaridad))
##
## carrera tecnica o comercial completa carrera tecnica o comercial incompleta
## 0.084295709 0.019809492
## ninguno normal completa
## 0.014667453 0.011801399
## normal incompleta posgrado completo
## 0.001180140 0.008176684
## posgrado incompleto preescolar o kinder completo
## 0.003287533 0.010368372
## preescolar o kinder incompleto preparatoria o bachillerato completo
## 0.014161679 0.143387002
## preparatoria o bachillerato incompleto primaria completa
## 0.087836129 0.056983900
## primaria incompleta secundaria completa
## 0.118941246 0.246649246
## secundaria incompleta universidad completa
## 0.064991992 0.082778387
## universidad incompleta
## 0.030683638
cat("\n\n")
cat("TIPO DE TALLER\n")
## TIPO DE TALLER
prop.table(table(df_macro$tipo_taller))
##
## computacion comunidad cultural deportivo educacion oficio
## 0.034898424 0.005647813 0.040040462 0.331366433 0.139930878 0.289724353
## otro psicologia salud
## 0.121132934 0.032538144 0.004720560
cat("\n\n")
cat("OCUPACION CATEGORIA\n")
## OCUPACION CATEGORIA
prop.table(table(df_macro$ocupacion_categoria))
##
## buscando_trabajo cuidado_de_familia empleo estudiante
## 0.044761022 0.005816404 0.160414735 0.317541937
## hogar jubilado_pensionado menor_de_edad negocio_propio
## 0.385399983 0.040461940 0.003709011 0.003961898
## otro
## 0.037933069
cat("\n\n")
Sección crítica donde se explica explícitamente cuáles resultados técnicos (ej. un coeficiente, un clúster o un tópico) y cómo estos, sustentan las recomendaciones que se presentarán al socio formador.