https://www.ine.gov.py/microdatos/register/EPCH_ANUAL/EPHC_2023_ANUAL/REG02_ANUAL_2023.csv
Demostrar que la probabilidad de estar desocupado de un joven en áreas urbanas en el sector no agrícola esta determinado por el nivel de estudios, el sexo, la edad y estado civil.
Situación de ocupación (PEAA) Nivel de estudios (añoest) Área de residencia (area) Sexo (P06) Edad (P02) Estado civil (P09) Rama de actividad (RAMA_PEA)
#install.packages("readr")
library("readr")
eph23=read.csv2("REG02_ANUAL_2023.csv", header=TRUE, sep=";", dec=",")
names(eph23)
## [1] "UPM" "NVIVI" "NHOGA" "TRIMESTRE" "AÑO"
## [6] "DPTO" "AREA" "L02" "P02" "P03"
## [11] "P04" "P04A" "P04B" "P05C" "P05P"
## [16] "P05M" "P06" "P08D" "P08M" "P08A"
## [21] "P09" "A01" "A01A" "A02" "A03"
## [26] "A04" "A04A" "A04B" "A05" "A07"
## [31] "A08" "A10" "A11A" "A11M" "A11S"
## [36] "A12" "A13REC" "A14REC" "A15" "A16"
## [41] "A17A" "A17M" "A17S" "A18" "B01REC"
## [46] "B02REC" "B03LU" "B03MA" "B03MI" "B03JU"
## [51] "B03VI" "B03SA" "B03DO" "B04" "B05"
## [56] "B06" "B07A" "B07M" "B07S" "B08"
## [61] "B09A" "B09M" "B09S" "B10" "B11"
## [66] "B12" "B12A" "B12B" "B12C" "B13"
## [71] "B14" "B15" "B16G" "B16U" "B16D"
## [76] "B16T" "B17" "B18AG" "B18AU" "B18BG"
## [81] "B18BU" "B19" "B20G" "B20U" "B20D"
## [86] "B20T" "B21" "B22" "B23" "B24"
## [91] "B25" "B26" "B271" "B272" "B28"
## [96] "B29" "B30" "B31" "C01REC" "C02REC"
## [101] "C03" "C04" "C05" "C06" "C07"
## [106] "C08" "C09" "C101" "C102" "C11G"
## [111] "C11U" "C11D" "C11T" "C12" "C13AG"
## [116] "C13AU" "C13BG" "C13BU" "C14" "C14A"
## [121] "C14B" "C14C" "C15" "C16REC" "C17REC"
## [126] "C18" "C18A" "C18B" "C19" "D01"
## [131] "D02" "D03" "D04" "D05" "E01A"
## [136] "E01B" "E01C" "E01D" "E01E" "E01F"
## [141] "E01G" "E01H" "E01I" "E01J" "E01K"
## [146] "E01L" "E01M" "ED01" "ED02" "ED03"
## [151] "ED0504" "ED06C" "ED08" "ED09" "ED10"
## [156] "ED11F1" "ED11F1A" "ED11GH1" "ED11GH1A" "S01A"
## [161] "S01B" "S02" "S03" "S03A" "S03B"
## [166] "S03C" "S04" "S05" "S06" "S07"
## [171] "S08" "S09" "CATE_PEA" "TAMA_PEA" "OCUP_PEA"
## [176] "RAMA_PEA" "HORAB" "HORABC" "HORABCO" "PEAD"
## [181] "PEAA" "TIPOHOGA" "FEX.2022" "NJEF" "NCON"
## [186] "NPAD" "NMAD" "añoest" "ra06ya09" "e01aimde"
## [191] "e01bimde" "e01cimde" "e01dde" "e01ede" "e01fde"
## [196] "e01gde" "e01hde" "e01ide" "e01jde" "e01kde"
## [201] "e01lde" "e01mde" "e01kjde" "e02bde" "ingrevasode"
## [206] "ipcm" "pobrezai" "pobnopoi" "quintili" "decili"
## [211] "quintiai" "decilai" "informalidad"
library("dplyr")
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# Seleccionar las columnas deseadas
variables <- c("PEAA", "RAMA_PEA", "P06", "P02", "AREA", "añoest", "P09")
# Seleccionar solo las columnas que existen en 'variables'
eph23selec <- eph23 %>%
select(any_of(variables))
names(eph23selec)
## [1] "PEAA" "RAMA_PEA" "P06" "P02" "AREA" "añoest" "P09"
#install.packages("tidyverse")
#install.packages("conflicted")
library("tidyverse")
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ forcats 1.0.0 ✔ stringr 1.5.1
## ✔ ggplot2 3.5.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.3 ✔ tidyr 1.3.1
## ✔ purrr 1.0.2
## ── 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("conflicted")
conflicts_prefer(dplyr::filter)
## [conflicted] Will prefer dplyr::filter over any other package.
eph23fil <- eph23selec %>%
filter(AREA==1 & (PEAA==1 | PEAA==2) & (P02>=14 & P02<=29) & RAMA_PEA!=1 & añoest != 99 )
table(eph23fil$P02, eph23fil$AREA)
##
## 1
## 14 42
## 15 75
## 16 103
## 17 148
## 18 257
## 19 326
## 20 357
## 21 372
## 22 383
## 23 421
## 24 405
## 25 415
## 26 447
## 27 454
## 28 457
## 29 450
eph23fil$PEAA <- factor(eph23fil$PEAA, levels = c(1, 2), labels = c("Ocupados", "Desocupados"))
tabla_PEAA <- table(eph23fil$PEAA, useNA = "ifany")
tabla_PEAA
##
## Ocupados Desocupados
## 4633 479
eph23fil$P06 <- factor(eph23fil$P06, levels = c(1, 6), labels = c("Hombres", "Mujeres"))
tabla_P06 <- table(eph23fil$P06, useNA = "ifany")
tabla_P06
##
## Hombres Mujeres
## 2733 2379
Solo dos niveles , con y sin estudios universitarios
tabla_añoest <- table(eph23fil$añoest, useNA = "ifany")
tabla_añoest
##
## 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
## 5 3 9 20 20 47 157 140 160 307 249 304 1773 363 425 314
## 16 17 18
## 395 358 63
# Categorizar añoest en dos niveles, mayor o igual a 12 "Con estudios universitarios", de 0 a 12 sin estudios universitarios y 99 no responde
library(dplyr)
# Crear la nueva variable 'nivelest2' categorizada
eph23fil <- eph23fil %>%
mutate(
conestuduniver = case_when(
añoest >= 13 & añoest < 99 ~ "Con estudios universitarios",
añoest >= 0 & añoest <= 12 ~ "Sin estudios universitarios",
añoest == 99 ~ "No responde",
TRUE ~ "Otro" # Manejo de valores inesperados
)
)
table(eph23fil$conestuduniver)
##
## Con estudios universitarios Sin estudios universitarios
## 1918 3194
tabla_estadocivil <- table(eph23fil$P09, useNA = "ifany")
tabla_estadocivil
##
## 1 2 3 4 5 6
## 250 1187 12 4 3655 4
#
# Casado 1
# Unido 2
# Separado 3
# Viudo 4
# Soltero 5
# Divorciado 6
# NR 9
# Categoriza P06 solo en es soltero, si y no. De modo que
# Crear la nueva variable es o no soltero
eph23fil <- eph23fil %>%
mutate(
essoltero = case_when(
P09 >= 1 & P09 <= 2 ~ "No es soltero",
TRUE ~ "Es soltero" # Manejo de valores inesperados
)
)
table(eph23fil$essoltero)
##
## Es soltero No es soltero
## 3675 1437
tabla_PEAAvsP06= table(eph23fil$P06, eph23fil$PEAA)
tabla_PEAAvsP06
##
## Ocupados Desocupados
## Hombres 2514 219
## Mujeres 2119 260
Prueba de independencia para PEAA vs Sexo
# Crear el gráfico de mosaico
mosaicplot(tabla_PEAAvsP06, main = "Mosaico de Estado Laboral por Sexo",
xlab = "Sexo", ylab = "Estado Laboral",
col = c("lightblue", "salmon"), shade = TRUE)
Prueba de Independencia Chi-Cuadrado
# Realizar la prueba de chi-cuadrado
chi_sq <- chisq.test(tabla_PEAAvsP06)
chi_sq
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tabla_PEAAvsP06
## X-squared = 12.392, df = 1, p-value = 0.0004311
Interpretación: La prueba de chi-cuadrado reveló una asociación significativa entre el sexo y el estado laboral, lo que sugiere diferencias en las tasas de empleo entre hombres y mujeres en el conjunto de datos analizado.
tabla_PEAAvsNIVELEST= table(eph23fil$conestuduniver, eph23fil$PEAA)
tabla_PEAAvsNIVELEST
##
## Ocupados Desocupados
## Con estudios universitarios 1788 130
## Sin estudios universitarios 2845 349
# Crear el gráfico de mosaico
mosaicplot(tabla_PEAAvsNIVELEST, main = "Mosaico de Estado Laboral por Nivel de estudios",
xlab = "Nivel de estudios", ylab = "Estado Laboral",
col = c("lightblue", "salmon"), shade = TRUE)
Prueba de Independencia Chi-Cuadrado
# Realizar la prueba de chi-cuadrado
chi_sq <- chisq.test(tabla_PEAAvsNIVELEST)
chi_sq
##
## Pearson's Chi-squared test with Yates' continuity correction
##
## data: tabla_PEAAvsNIVELEST
## X-squared = 23.804, df = 1, p-value = 1.067e-06
Interpretación
# Análisis de regresión logística para explicar la situaación de ocupación para los factores sexo (P06), con estudios unversitarios (conestuduniver) , el vivir no en pareja (essoltero)
# Cargar las librerías necesarias
library(dplyr) # Para manipulación de datos
library(ggplot2) # Para visualización (opcional)
library(pscl) # Para métricas de bondad de ajuste
## Classes and Methods for R originally developed in the
## Political Science Computational Laboratory
## Department of Political Science
## Stanford University (2002-2015),
## by and under the direction of Simon Jackman.
## hurdle and zeroinfl functions by Achim Zeileis.
# Ajustar el modelo de regresión logística binaria
modelo_logit <- glm(PEAA ~ P06 + conestuduniver + essoltero,
data = eph23fil,
family = binomial)
# Resumen del modelo
summary(modelo_logit)
##
## Call:
## glm(formula = PEAA ~ P06 + conestuduniver + essoltero, family = binomial,
## data = eph23fil)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -2.79904 0.11385 -24.586 < 2e-16
## P06Mujeres 0.46857 0.09846 4.759 1.94e-06
## conestuduniverSin estudios universitarios 0.62486 0.10913 5.726 1.03e-08
## essolteroNo es soltero -0.50904 0.11857 -4.293 1.76e-05
##
## (Intercept) ***
## P06Mujeres ***
## conestuduniverSin estudios universitarios ***
## essolteroNo es soltero ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 3179.8 on 5111 degrees of freedom
## Residual deviance: 3114.2 on 5108 degrees of freedom
## AIC: 3122.2
##
## Number of Fisher Scoring iterations: 5
# Interpretación de los coeficientes en términos de odds ratios
exp(coef(modelo_logit))
## (Intercept)
## 0.06086837
## P06Mujeres
## 1.59771177
## conestuduniverSin estudios universitarios
## 1.86798077
## essolteroNo es soltero
## 0.60107211
exp(confint(modelo_logit))
## Waiting for profiling to be done...
## 2.5 % 97.5 %
## (Intercept) 0.04848017 0.07576261
## P06Mujeres 1.31781278 1.93890649
## conestuduniverSin estudios universitarios 1.51226222 2.32035871
## essolteroNo es soltero 0.47419829 0.75513232
Gráfica
# Evaluación de la bondad de ajuste utilizando Pseudo R-squared
library(pscl)
pR2(modelo_logit)
## fitting null model for pseudo-r2
## llh llhNull G2 McFadden r2ML
## -1.557123e+03 -1.589925e+03 6.560444e+01 2.063130e-02 1.275142e-02
## r2CU
## 2.753195e-02
# Predicciones del modelo
eph23fil <- eph23fil %>%
mutate(
probabilidad = predict(modelo_logit, type = "response"),
prediccion = ifelse(probabilidad > 0.5, 1, 0)
)
# Visualización de las probabilidades predichas
ggplot(eph23fil, aes(x = probabilidad, fill = factor(PEAA))) +
geom_histogram(binwidth = 0.05, alpha = 0.7, position = "identity") +
theme_minimal() +
labs(title = "Distribución de Probabilidades Predichas",
x = "Probabilidad de Estar Ocupado",
y = "Frecuencia",
fill = "Ocupado") +
scale_fill_manual(values = c("red", "green"))
Interpretación final