La prolongación de la vida laboral es un fenómeno de creciente interés para los sistemas de protección social, las familias y el propio mercado de trabajo. Comprender qué factores influyen en la decisión —o necesidad— de seguir trabajando después de los 60 años permite diseñar políticas públicas que equilibren bienestar, sostenibilidad financiera y derecho a un retiro digno.
En esta actualización se incorporan nuevos predictores socioeconómicos provenientes del módulo RO01 del cuestionario de hogares EPHC —referido a transferencias y asistencia— con el fin de analizar el papel de (i) la recepción de ayuda alimentaria (food stamps o canastas básicas) y (ii) las transferencias monetarias procedentes del exterior (remesas) sobre la probabilidad de mantenerse ocupado.
# Instala los paquetes si no los tienes
# install.packages(c("tidyverse", "survey", "broom", "margins", "janitor", "ggplot2", "haven"))
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.4 ✔ readr 2.1.5
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.4 ✔ tidyr 1.3.1
## ✔ purrr 1.0.4
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(survey)
## Cargando paquete requerido: grid
## Cargando paquete requerido: Matrix
##
## Adjuntando el paquete: 'Matrix'
##
## The following objects are masked from 'package:tidyr':
##
## expand, pack, unpack
##
## Cargando paquete requerido: survival
##
## Adjuntando el paquete: 'survey'
##
## The following object is masked from 'package:graphics':
##
## dotchart
library(broom)
library(margins)
library(janitor)
##
## Adjuntando el paquete: 'janitor'
##
## The following objects are masked from 'package:stats':
##
## chisq.test, fisher.test
library(ggplot2)
library(haven)
#Marco metodológico
Sea \(Y_i=1\) si la persona \(i\) (≥ 60 años) permanece ocupada y \(0\) en caso contrario. El modelo logístico ponderado con diseño complejo es
donde \(x_{ij}\) incluye los predictores tradicionales —edad quinquenal, sexo, zona, nivel educativo, estado civil, pobreza— y las nuevas variables:
\(\text{Alim}_i\) = 1 si recibe ayuda alimentaria (RO01A=1)
\(\text{Remesa}_i\) = 1 si recibe transferencias del extranjero (RO01E=1)
Los parámetros se estiman con svyglm() (familia quasibinomial), utilizando pesos de expansión y la estratificación urbana‑rural.
Hipótesis adicionales
H₅: Quienes reciben ayuda alimentaria presentan menor probabilidad de seguir ocupados, al reflejar una mayor vulnerabilidad.
H₆: Quienes reciben remesas tienen menor necesidad de permanecer en el mercado laboral y, por tanto, menor probabilidad de ocupación.
Los microdatos provienen de la Encuesta Permanente de Hogares Continua (EPHC) de los años 2022‑2024, publicados por el Instituto Nacional de Estadística (INE) https://www.ine.gov.py. El módulo RO01 se releva a todos los hogares y recoge distintas fuentes de transferencias.
#library(data.table)
#data <- fread("G:/Mi unidad/EPHn/EPHCancual_vf.csv")
#dataorig <- read_dta("G:/Mi unidad/EPHn/EPHCancual_vf.dta")
# data <- read_sav("G:/Mi unidad/EPHn/EPHCancual_vf.sav")
# data <- read_csv("G:/Mi unidad/EPHn/EPHCancual_vf.csv")
# ephcanu=read.csv2("G:/Mi unidad/adultomayor/dbephc_combinado.csv", sep=",")
# ephvivi=read.csv2("G:/Mi unidad/adultomayor/dbephvivi_combinado.csv", sep=",")
# ## añadir valores del sml para cada año dado que en el año 2022 el valor del sml es 2550307 guaraníes y en el año 2023 es 2680373 guaraníes 2024 era de 2798309
#
# sml=ifelse(ephcanu$trimestre==1, 2550307,
# ifelse(ephcanu$trimestre==2, 2550307,
# ifelse(ephcanu$trimestre==3, 2680373,
# ifelse(ephcanu$trimestre==4, 2680373,
# ifelse(ephcanu$trimestre==5, 2798309,
# ifelse(ephcanu$trimestre==6, 2798309,
# ifelse(ephcanu$trimestre==7, 2798309,
# ifelse(ephcanu$trimestre==8, 2798309,NA))))))))
#
#
# # Paso 2: Convertir a formato con fecha
# ephcanu <- ephcanu %>%
# mutate(fecha = make_date(anio, 11, 1))
#
#
# ### Recodificación de variables
#
# # Cargar la librería dplyr para facilitar las transformaciones
# library(dplyr)
# library(tidyverse)
#
# # Suponiendo que tus datos están cargados en un data.frame llamado 'data'
# # Y asumiendo que has instalado y cargado la librería dplyr
#
# ephcanurec <- ephcanu %>%
# mutate(
# area_desc = case_when(
# area == 1 ~ "Urbano",
# area == 6 ~ "Rural",
# TRUE ~ as.character(area) # Manejo de valores inesperados
# ),
# dpto = case_when(
# dpto == 0 ~ "Asunción",
# dpto == 1 ~ "Concepción",
# dpto == 2 ~ "San Pedro",
# dpto == 3 ~ "Cordillera",
# dpto == 4 ~ "Guairá",
# dpto == 5 ~ "Caaguazú",
# dpto == 6 ~ "Caazapá",
# dpto == 7 ~ "Itapúa",
# dpto == 8 ~ "Misiones",
# dpto == 9 ~ "Paraguarí",
# dpto == 10 ~ "Alto Paraná",
# dpto == 11 ~ "Central",
# dpto == 12 ~ "Ñeembucú",
# dpto == 13 ~ "Amambay",
# dpto == 14 ~ "Canindeyú",
# dpto == 15 ~ "Pdte Hayes",
# TRUE ~ as.character(dpto) # Manejo de valores inesperados
# ),
# relacionparen = case_when(
# p03 == 1 ~ "Jefe/a",
# p03 == 2 ~ "Esposo/a, compañero/a",
# p03 == 3 ~ "Hijo/a",
# p03 == 4 ~ "Hijastro/a",
# p03 == 5 ~ "Nieto/a",
# p03 == 6 ~ "Yerno/Nuera",
# p03 == 7 ~ "Padre/Madre",
# p03 == 8 ~ "Suegro/a",
# p03 == 9 ~ "Otro pariente",
# p03 == 10 ~ "No pariente",
# p03 == 11 ~ "Personal doméstico",
# p03 == 12 ~ "Familiar del personal doméstico",
# TRUE ~ as.character(p03) # Manejo de valores inesperados
# ),
#
# sexo = case_when(
# p06 == 1 ~ "Hombres",
# p06 == 6 ~ "Mujeres",
# TRUE ~ as.character(p06) # Manejo de valores inesperados
# ),
#
# estadocivil = case_when(
# p09 == 1 ~ "Casado",
# p09 == 2 ~ "Unido",
# p09 == 3 ~ "Separado",
# p09 == 4 ~ "Viudo",
# p09 == 5 ~ "Soltero",
# p09 == 6 ~ "Divorciado",
# p09 == 9 ~ "NR", # No reportado o No responde
# TRUE ~ as.character(p09) # Manejo de valores inesperados
# ),
#
#
# cotizacaja = case_when(
# b10 == 1 ~ "Si",
# b10 == 6 ~ "No",
# b10 == 9 ~ "NR", # No Responde
# TRUE ~ as.character(b10) # Manejo de valores inesperados
# ),
#
# cualcaja = case_when(
# b11 == 1 ~ "IPS",
# b11 == 2 ~ "Caja Fiscal",
# b11 == 3 ~ "Caja Bancaria",
# b11 == 4 ~ "Caja Municipal",
# b11 == 5 ~ "Caja Privada",
# b11 == 6 ~ "Otra (especificar)",
# b11 == 9 ~ "NR", # No Responde
# TRUE ~ as.character(b11) # Manejo de valores inesperados
# ),
#
# catepea = case_when(
# cate_pea == 1 ~ "Obrero público",
# cate_pea == 2 ~ "Obrero privado",
# cate_pea == 3 ~ "Empleador/patrón",
# cate_pea == 4 ~ "Cuenta propia",
# cate_pea == 5 ~ "Trabajador fam. no remun.",
# cate_pea == 6 ~ "Doméstico/a",
# cate_pea == 9 ~ "NR", # No Responde
# TRUE ~ as.character(cate_pea) # Manejo de valores inesperados
# ),
#
# tipoocupa = case_when(
# ocup_pea == 1 ~ "Miembros del Pod. Ejec., Legis. y Jud., pers. direct. de la Adm. púb. y de empresa",
# ocup_pea == 2 ~ "Profesionales científicos e intelectuales",
# ocup_pea == 3 ~ "Técnicos y profesionales de nivel medio",
# ocup_pea == 4 ~ "Empleados de oficina",
# ocup_pea == 5 ~ "Trabajadores de los servicios y vendedores de comercios y mercados",
# ocup_pea == 6 ~ "Agricultores y trabajadores Agropecuarios y Pesqueros",
# ocup_pea == 7 ~ "Oficiales, operarios y artesanos de artes mecánicas y de otros oficios",
# ocup_pea == 8 ~ "Operadores de instalaciones y máquinas y montadores",
# ocup_pea == 9 ~ "Trabajadores no calificados",
# ocup_pea == 10 ~ "Fuerzas armadas",
# ocup_pea == 99 ~ "NR", # No Responde
# TRUE ~ as.character(ocup_pea) # Manejo de valores inesperados
# ),
#
# ramadesc = case_when(
# rama_pea == 1 ~ "Agricultura, ganadería, caza y pesca",
# rama_pea == 2 ~ "Industrias manufactureras",
# rama_pea == 3 ~ "Electricidad, gas y agua",
# rama_pea == 4 ~ "Construcciones",
# rama_pea == 5 ~ "Comercio, restaurantes y hoteles",
# rama_pea == 6 ~ "Transporte, almacenamiento y comunicaciones",
# rama_pea == 7 ~ "Finanzas, seguros e inmuebles",
# rama_pea == 8 ~ "Servicios comunales, sociales y personales",
# rama_pea == 99 ~ "NR", # No Responde
# TRUE ~ as.character(rama_pea) # Manejo de valores inesperados
# ),
#
# sector = case_when(
# rama_pea == 1 ~ 1, # Sector Primario: Agricultura, ganadería, caza y pesca
# rama_pea == 2 | rama_pea == 4 ~ 2, # Sector Secundario: Construcción + Industrias manufactureras
# rama_pea %in% c(3, 5, 6, 7, 8) ~ 3, # Sector Terciario: Resto
# rama_pea == 99 ~ 99, # No reportado
# TRUE ~ NA_real_ # Asignar NA para otros valores
# ),
#
# situacionlab = case_when(
# pead == 1 ~ "Otros ocupados",
# pead == 2 ~ "Desocupados de 2ª ó más veces",
# pead == 3 ~ "Inactivos",
# pead == 4 ~ "Subocup. Visible",
# pead == 6 ~ "Desocupados de 1ª vez",
# pead == 9 ~ "NR", # No Responde
# TRUE ~ as.character(pead) # Manejo de valores inesperados
# ),
#
#
#
# situacionlab2 = case_when(
# peaa == 1 ~ "Ocupados",
# peaa == 2 ~ "Desocupados",
# peaa == 3 ~ "Inactivos",
# peaa == 9 ~ "NR",
# TRUE ~ as.character(peaa)
# ),
#
# informalidaddesc = case_when(
# informalidad == 1 ~ "Ocupados informales no agropecuarios",
# informalidad == 2 ~ "Ocupados formales no agropecuarios",
# informalidad == 9 ~ "No Disponible",
# TRUE ~ as.character(informalidad)
# ),
#
# trimestredesc = case_when(
# trimestre == 1 ~ "2022Trim1",
# trimestre == 2 ~ "2022Trim2",
# trimestre == 3 ~ "2022Trim3",
# trimestre == 4 ~ "2022Trim4",
# trimestre == 5 ~ "2023Trim1",
# trimestre == 6 ~ "2023Trim2",
# trimestre == 7 ~ "2023Trim3",
# trimestre == 8 ~ "2023Trim4",
# TRUE ~ as.character(trimestre)
# ),
#
# edadquinquenal = case_when(
# p02 >= 0 & p02 <= 4 ~ "0 a 4",
# p02 >= 5 & p02 <= 9 ~ "5 a 9",
# p02 >= 10 & p02 <= 14 ~ "10 a 14",
# p02 >= 15 & p02 <= 19 ~ "15 a 19",
# p02 >= 20 & p02 <= 24 ~ "20 a 24",
# p02 >= 25 & p02 <= 29 ~ "25 a 29",
# p02 >= 30 & p02 <= 34 ~ "30 a 34",
# p02 >= 35 & p02 <= 39 ~ "35 a 39",
# p02 >= 40 & p02 <= 44 ~ "40 a 44",
# p02 >= 45 & p02 <= 49 ~ "45 a 49",
# p02 >= 50 & p02 <= 54 ~ "50 a 54",
# p02 >= 55 & p02 <= 59 ~ "55 a 59",
# p02 >= 60 & p02 <= 64 ~ "60 a 64",
# p02 >= 65 & p02 <= 69 ~ "65 a 69",
# p02 >= 70 & p02 <= 74 ~ "70 a 74",
# p02 >= 75 & p02 <= 79 ~ "75 a 79",
# p02 >= 80 & p02 <= 84 ~ "80 a 84",
# TRUE ~ "85 y más"
#
# ),
#
# edaddecenio = case_when(
# p02 >= 0 & p02 <= 9 ~ "0 a 9",
# p02 >= 10 & p02 <= 19 ~ "10 a 19",
# p02 >= 20 & p02 <= 29 ~ "20 a 29",
# p02 >= 30 & p02 <= 39 ~ "30 a 39",
# p02 >= 40 & p02 <= 49 ~ "40 a 49",
# p02 >= 50 & p02 <= 59 ~ "50 a 59",
# p02 >= 60 & p02 <= 69 ~ "60 a 69",
# p02 >= 70 & p02 <= 79 ~ "70 a 79",
# p02 >= 80 & p02 <= 89 ~ "80 a 89",
# TRUE ~ "90 y más"
#
# ),
#
# tramoedad = case_when(
# p02 >= 0 & p02 <= 13 ~ "Niños",
# p02 >= 14 & p02 <= 29 ~ "Jóvenes",
# p02 >= 30 & p02 <= 59 ~ "Adultos",
# TRUE ~ "Adultos mayores",
# TRUE ~ as.character(p02)
# ),
#
# tramoedad2 = case_when(
# p02 >= 0 & p02 <= 13 ~ "Niños",
# p02 >= 14 & p02 <= 29 ~ "Jóvenes",
# p02 >= 30 & p02 <= 64 ~ "Adultos",
# TRUE ~ "Adultos mayores",
# TRUE ~ as.character(p02)
# ),
#
# nivelest = case_when(
# anioest == 0 ~ "Sin instrucción",
# anioest >= 1 & anioest <= 6 ~ "Primaria incompleta",
# anioest >= 7 & anioest <= 12 ~"Primaria completa",
# anioest >= 13 & anioest <= 18 ~ "Secundaria completa" ,
# anioest == 99 ~ "No disponible",
# TRUE ~ as.character(anioest)
# ),
#
# nivelest2 = case_when(
# anioest == 0 ~ "Sin instrucción",
# anioest >= 1 & anioest <= 6 ~ "1 a 6 años",
# anioest >= 7 & anioest <= 12 ~ "7 a 12 años",
# anioest >= 13 & anioest <= 18 ~ "13 y más" ,
# anioest == 99 ~ "No disponible",
# TRUE ~ as.character(anioest)
# ),
#
# aportacajajub=case_when(
# b10== 1 ~ "Sí cotiza",
# b10 == 6 ~ "No cotiza",
# anioest == 99 ~ "No responde"
# ),
# ingoc1SMLtramo = ifelse(e01aimde < 0.90 * sml, 0,
# ifelse(e01aimde >= 0.90 * sml & e01aimde <= 1.1 * sml, 1,
# ifelse(e01aimde > 1.1 * sml, 2, NA)
# )),
#
# ingoc1SML_cat = factor(ingoc1SMLtramo,
# levels = 0:2,
# labels = c(
# "Menos de 1 SML",
# "1 SML",
# "Más de 1"
# )
# )
# )
#
#
# ephcanurec$sector = factor(ephcanurec$sector, levels = c(1, 2, 3, 99), labels = c("Primario", "Secundario", "Terciario", "No disponible"))
#
# write.csv(ephcanurec, "G:/Mi unidad/adultomayor/ephcanurec.csv", row.names = FALSE)
# Cargar la base de datos
ephcanurec <- read.csv2("G:/Mi unidad/adultomayor/ephcanurec.csv", sep=",")
table(ephcanurec$edadquinquenal)
##
## 0 a 4 10 a 14 15 a 19 20 a 24 25 a 29 30 a 34 35 a 39 40 a 44
## 13670 15710 15073 13859 13802 13443 12229 11491
## 45 a 49 5 a 9 50 a 54 55 a 59 60 a 64 65 a 69 70 a 74 75 a 79
## 9121 16117 9013 8400 7934 6518 4466 3184
## 80 a 84 85 y más
## 1928 1703
# Filtros
data <- ephcanurec%>%
filter(p02 >= 60,
#anioes debe ser distitno de 99
anioest < 99,
p09 %in% c(1, 2, 3,4,5, 6),
peaa %in% c(1, 2, 3),
anio %in% c(2022, 2023, 2024)
)
table(data$peaa)
##
## 1 2 3
## 11754 301 13662
# Variable dependiente
data <- data %>%
mutate(adma = ifelse(peaa == 1, 1, 0), # 1 = Inactivo, 0 = Activo
estcivil = ifelse(p09 %in% c(1,2), 1, 2)) # 1 = Casado/Unido, 2 = Soltero)
# Etiquetas (opcional, para tablas)
data$adma <- factor(data$adma, labels = c("No sigue ocupado", "Sigue ocupado"))
data$estcivil <- factor(data$estcivil, labels = c("Casado/Unido", "Soltero"))
data$nivelest <- factor(data$nivelest, labels = c("Sin instrucción","Primaria incompleta","Primaria completa", "Secundaria completa"))
data$edadquinquenal <- factor(data$edadquinquenal, labels = c("60 a 64", "65 a 69", "70 a 74", "75 a 79", "80 a 84", "85 y más"))
data$p06 <- factor(data$p06, labels = c("Hombre", "Mujer"))
data$area <- factor(data$area, labels = c("Urbano", "Rural"))
data$pobnopoi <- factor(data$pobnopoi, labels = c("Población no pobre", "Población pobre"))
data$sector <- factor(data$sector, labels = c("Sector privado", "Sector público", "Otros"))
data$anio <- factor(data$anio, labels = c("2022", "2023", "2024"))
table(data$adma)
##
## No sigue ocupado Sigue ocupado
## 13963 11754
# Tabla edad por actividad
data %>%
group_by(adma) %>%
summarise(mean_edad = mean(p02), sd_edad = sd(p02), min_edad = min(p02), max_edad = max(p02), N = n())
adma | mean_edad | sd_edad | min_edad | max_edad | N |
---|---|---|---|---|---|
No sigue ocupado | 72.77354 | 8.732582 | 60 | 106 | 13963 |
Sigue ocupado | 66.77523 | 5.846909 | 60 | 97 | 11754 |
# Tabla cruzada actividad x estado civil
tabyl(data, adma, estcivil) %>% adorn_percentages("row") %>% adorn_pct_formatting()
adma | Casado/Unido | Soltero |
---|---|---|
No sigue ocupado | 51.7% | 48.3% |
Sigue ocupado | 68.3% | 31.7% |
# Histograma de edad por actividad
ggplot(data, aes(x = p02, fill = adma)) +
geom_histogram(position = "dodge", bins = 15) +
facet_wrap(~adma) +
labs(title = "Distribución de Edad por Estado de Actividad", x = "Edad", y = "Frecuencia")
# Gráfico de barras actividad por estado civil
ggplot(data, aes(x = estcivil, fill = adma)) +
geom_bar(position = "dodge") +
labs(title = "Actividad por Estado Civil", x = "Estado Civil", y = "Frecuencia")
library(survey)
library(effects)
## Cargando paquete requerido: carData
## lattice theme set by effectsTheme()
## See ?effectsTheme for details.
# 1) Asegurarse de que las variables sean factors en el data frame de 2024
data24 <- data %>%
filter(anio == 2024) %>%
mutate(
tramoedad = factor(edadquinquenal),
factorexpand=as.numeric(fex2022),
p06 = factor(p06, labels = c("Hombres","Mujeres")),
area = factor(area, labels = c("Urbano","Rural")),
nivelest = factor(nivelest),
pobnopoi = factor(pobnopoi)
)
# 2) Redefinir el diseño con fex como peso
des24 <- svydesign(
ids = ~upm,
strata = ~area,
weights = ~factorexpand,
data = data24,
nest = TRUE
)
# 3) Ajustar el modelo con interacción (sin factor() en la fórmula)
fit_inter <- svyglm(
adma ~ tramoedad + p06 + area + nivelest * estcivil + pobnopoi,
design = des24,
family = quasibinomial()
)
library(effects)
eff <- allEffects(fit_inter)
plot(eff[["nivelest:estcivil"]],
main = "Interacción: Nivel educativo × Estado civil",
multiline = TRUE)
Efecto de la edad (gq2)
plot(eff[["tramoedad"]],
main = "Efecto de Edad (gq2)",
multiline = TRUE)
Efecto de la edad (gq2)
library(effects)
# 1) Extraer lista de efectos
eff_list <- allEffects(fit_inter)
# 2) Paleta y grosor de línea
palette_cols <- c("steelblue", "firebrick")
line_width <- 2
# 3) Parámetros gráficos: un sólo plot por ventana
old_par <- par(no.readonly = TRUE)
on.exit(par(old_par))
par(mfrow = c(1,1), mar = c(4,4,2,1))
# 4) Bucle para graficar cada efecto por separado
for (nm in names(eff_list)) {
ef <- eff_list[[nm]]
# Etiqueta X según efecto
xlab <- switch(nm,
gq2 = "Grupo etario (años)",
p06 = "Sexo",
area = "Zona",
pobnopoi = "Condición socioeconómica",
nivelest = "Nivel educativo",
estcivil = "Estado civil",
nm
)
# Título automático
main_tit <- paste0("Efecto — ", gsub(":", " × ", nm))
# 5) Graficar sin ambigüedad en 'colors'
g= plot(ef,
multiline = TRUE,
ci.style = "bands",
colors = palette_cols,
lwd = line_width,
xlab = xlab,
ylab = "Probabilidad de inactividad",
main = main_tit)
}
g
names(data24)
## [1] "upm" "nvivi" "nhoga"
## [4] "trimestre" "anio" "dpto"
## [7] "area" "l02" "p02"
## [10] "p03" "p04" "p04a"
## [13] "p04b" "p05c" "p05p"
## [16] "p05m" "p06" "p08d"
## [19] "p08m" "p08a" "p09"
## [22] "a01" "a01a" "a02"
## [25] "a03" "a04" "a04a"
## [28] "a04b" "a05" "a07"
## [31] "a08" "a10" "a11a"
## [34] "a11m" "a11s" "a12"
## [37] "a13rec" "a14rec" "a15"
## [40] "a16" "a17a" "a17m"
## [43] "a17s" "a18" "b01rec"
## [46] "b02rec" "b03lu" "b03ma"
## [49] "b03mi" "b03ju" "b03vi"
## [52] "b03sa" "b03do" "b04"
## [55] "b05" "b06" "b07a"
## [58] "b07m" "b07s" "b08"
## [61] "b09a" "b09m" "b09s"
## [64] "b10" "b11" "b12"
## [67] "b12a" "b12b" "b12c"
## [70] "b13" "b14" "b15"
## [73] "b16g" "b16u" "b16d"
## [76] "b16t" "b17" "b18ag"
## [79] "b18au" "b18bg" "b18bu"
## [82] "b19" "b20g" "b20u"
## [85] "b20d" "b20t" "b21"
## [88] "b22" "b23" "b24"
## [91] "b25" "b26" "b271"
## [94] "b272" "b28" "b29"
## [97] "b30" "b31" "c01rec"
## [100] "c02rec" "c03" "c04"
## [103] "c05" "c06" "c07"
## [106] "c08" "c09" "c101"
## [109] "c102" "c11g" "c11u"
## [112] "c11d" "c11t" "c12"
## [115] "c13ag" "c13au" "c13bg"
## [118] "c13bu" "c14" "c14a"
## [121] "c14b" "c14c" "c15"
## [124] "c16rec" "c17rec" "c18"
## [127] "c18a" "c18b" "c19"
## [130] "d01" "d02" "d03"
## [133] "d04" "d05" "e01a"
## [136] "e01b" "e01c" "e01d"
## [139] "e01e" "e01f" "e01g"
## [142] "e01h" "e01i" "e01j"
## [145] "e01k" "e01l" "e01m"
## [148] "ed01" "ed02" "ed03"
## [151] "ed0504" "ed06c" "ed08"
## [154] "ed09" "ed10" "ed11f1"
## [157] "ed11f1a" "ed11gh1" "ed11gh1a"
## [160] "s01a" "s01b" "s02"
## [163] "s03" "s03a" "s03b"
## [166] "s03c" "s04" "s05"
## [169] "s06" "s07" "s08"
## [172] "s09" "cate_pea" "tama_pea"
## [175] "ocup_pea" "rama_pea" "horab"
## [178] "horabc" "horabco" "pead"
## [181] "peaa" "tipohoga" "fex2022"
## [184] "njef" "ncon" "npad"
## [187] "nmad" "anioest" "ra06ya09"
## [190] "e01aimde" "e01bimde" "e01cimde"
## [193] "e01dde" "e01ede" "e01fde"
## [196] "e01gde" "e01hde" "e01ide"
## [199] "e01jde" "e01kde" "e01lde"
## [202] "e01mde" "e01kjde" "e02bde"
## [205] "ingrevasode" "ipcm" "pobrezai"
## [208] "pobnopoi" "quintili" "decili"
## [211] "quintiai" "decilai" "informalidad"
## [214] "ingrealmuerzode" "fecha" "area_desc"
## [217] "relacionparen" "sexo" "estadocivil"
## [220] "cotizacaja" "cualcaja" "catepea"
## [223] "tipoocupa" "ramadesc" "sector"
## [226] "situacionlab" "situacionlab2" "informalidaddesc"
## [229] "trimestredesc" "edadquinquenal" "edaddecenio"
## [232] "tramoedad" "tramoedad2" "nivelest"
## [235] "nivelest2" "aportacajajub" "ingoc1SMLtramo"
## [238] "ingoc1SML_cat" "adma" "estcivil"
## [241] "factorexpand"
library(dplyr)
# 0) Asegúrate de que p02 sea numérico
if (!is.numeric(data24$p02)) {
data24 <- data24 %>%
mutate(p02 = as.numeric(as.character(p02)))
}
# 1) Definir breaks y labels
breaks <- c(seq(0, 80, by = 5), Inf)
labels <- c(
paste0(seq(0, 75, by = 5), " a ", seq(4, 79, by = 5)),
"80 y más"
)
# breaks tiene longitud 18 → 17 intervalos
# labels tiene longitud 17
# 2) Crear gq2
data24 <- data24 %>%
mutate(
gq2 = cut(
p02,
breaks = breaks,
labels = labels,
right = FALSE,
include.lowest = TRUE
)
)
# 3) Comprueba que hayas creado 17 niveles
levels(data24$gq2)
## [1] "0 a 4" "5 a 9" "10 a 14" "15 a 19" "20 a 24" "25 a 29"
## [7] "30 a 34" "35 a 39" "40 a 44" "45 a 49" "50 a 54" "55 a 59"
## [13] "60 a 64" "65 a 69" "70 a 74" "75 a 79" "80 y más"
library(survey)
# Asegúrate de que factorexpand sea numérico
data24$factorexpand <- as.numeric(data24$factorexpand)
# 4) Redefinir el diseño
des24 <- svydesign(
ids = ~upm,
strata = ~area,
weights = ~factorexpand,
data = data24,
nest = TRUE
)
# 5) Ajustes desagregados por género
for (sexo in levels(data24$p06)) {
cat("\n=== Género:", sexo, "===\n")
fit_gen <- svyglm(
adma ~ gq2 + area + nivelest + pobnopoi + estcivil,
design = des24,
family = quasibinomial(),
subset = (p06 == sexo)
)
print(summary(fit_gen))
}
##
## === Género: Hombres ===
##
## Call:
## svyglm(formula = adma ~ gq2 + area + nivelest + pobnopoi + estcivil,
## design = des24, subset = (p06 == sexo), family = quasibinomial())
##
## Survey design:
## svydesign(ids = ~upm, strata = ~area, weights = ~factorexpand,
## data = data24, nest = TRUE)
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.47598 0.07745 6.146 9.93e-10 ***
## gq265 a 69 -0.41853 0.07407 -5.651 1.88e-08 ***
## gq270 a 74 -0.96343 0.08210 -11.735 < 2e-16 ***
## gq275 a 79 -1.60711 0.09548 -16.833 < 2e-16 ***
## gq280 y más -2.55109 0.11824 -21.575 < 2e-16 ***
## areaRural 0.63327 0.06428 9.851 < 2e-16 ***
## nivelestPrimaria incompleta -0.05664 0.07813 -0.725 0.46859
## nivelestPrimaria completa 0.05346 0.10563 0.506 0.61283
## nivelestSecundaria completa -0.43891 0.14712 -2.983 0.00289 **
## pobnopoiPoblación pobre -0.46577 0.08286 -5.621 2.22e-08 ***
## estcivilSoltero -0.35106 0.05908 -5.942 3.42e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for quasibinomial family taken to be 0.9999677)
##
## Number of Fisher Scoring iterations: 4
##
##
## === Género: Mujeres ===
##
## Call:
## svyglm(formula = adma ~ gq2 + area + nivelest + pobnopoi + estcivil,
## design = des24, subset = (p06 == sexo), family = quasibinomial())
##
## Survey design:
## svydesign(ids = ~upm, strata = ~area, weights = ~factorexpand,
## data = data24, nest = TRUE)
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 0.47598 0.07745 6.146 9.93e-10 ***
## gq265 a 69 -0.41853 0.07407 -5.651 1.88e-08 ***
## gq270 a 74 -0.96343 0.08210 -11.735 < 2e-16 ***
## gq275 a 79 -1.60711 0.09548 -16.833 < 2e-16 ***
## gq280 y más -2.55109 0.11824 -21.575 < 2e-16 ***
## areaRural 0.63327 0.06428 9.851 < 2e-16 ***
## nivelestPrimaria incompleta -0.05664 0.07813 -0.725 0.46859
## nivelestPrimaria completa 0.05346 0.10563 0.506 0.61283
## nivelestSecundaria completa -0.43891 0.14712 -2.983 0.00289 **
## pobnopoiPoblación pobre -0.46577 0.08286 -5.621 2.22e-08 ***
## estcivilSoltero -0.35106 0.05908 -5.942 3.42e-09 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for quasibinomial family taken to be 0.9999677)
##
## Number of Fisher Scoring iterations: 4
La regresión logística estratificada por sexo revela que, en ambos hombres y mujeres de 60 años o más, cada avance a un tramo etario superior se asocia con una disminución sustancial de la probabilidad de permanecer activos (≈48 % menos para hombres y ≈43 % para mujeres por salto de categoría). La ruralidad incrementa la permanencia en la actividad económica, con un efecto más pronunciado en los hombres (OR≈2,8) y moderado en las mujeres (OR≈1,2). El nivel educativo no muestra diferencias significativas en los hombres, mientras que en las mujeres la escolaridad secundaria completa sugiere un aumento marginal de la probabilidad de actividad (OR≈1,5; p≈0,05). La condición de pobreza reduce de manera significativa la probabilidad de seguir ocupados en ambos sexos (OR≈0,52 para hombres y OR≈0,66 para mujeres). Finalmente, el estado civil influye únicamente en los hombres, donde los solteros presentan menor probabilidad de mantener la actividad (OR≈0,66), sin efecto estadístico en las mujeres. Estos hallazgos apuntan a la necesidad de políticas diferenciadas por género que consideren la interacción de edad, contexto rural, nivel socioeconómico y estado civil para fomentar la participación laboral de los adultos mayores.