library(ggplot2)
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
library(haven)
library(haven)
Casen_2017 <- read_dta("C:/Users/anavc/OneDrive/Escritorio/Casen 2017.dta")
View(Casen_2017)
dataset <- Casen_2017%>%
select(e6a, edad, ch1)%>%
sample_n(size = 5000)%>%
na.omit()
names(dataset) <- c("Educacion", "Edad", "Ocupacion")
head(dataset)
## # A tibble: 6 × 3
## Educacion Edad Ocupacion
## <dbl+lbl> <dbl> <dbl+lbl>
## 1 7 [Educación Básica] 7 4 [Menores …
## 2 7 [Educación Básica] 11 4 [Menores …
## 3 4 [Prekinder/Kinder (Transición menor y Transición Mayor)] 6 4 [Menores …
## 4 11 [Educación Media Técnica Profesional] 44 2 [Patrón o…
## 5 9 [Educación Media Científico-Humanista] 15 3 [Familiar…
## 6 2 [Sala cuna] 1 4 [Menores …
## 1- COMPROBAR LOS SUPUESTO DE NORMALIDAD Y HOMOGENEIDAD
# Realizar la prueba de normalidad para cada variable
resultados_shapiro <- sapply(dataset, function(x) shapiro.test(x)$p.value)
# Verificar los resultados
resultados_shapiro
## Educacion Edad Ocupacion
## 1.074636e-80 1.019581e-30 3.203250e-59
# Realizar la prueba de homogeneidad de varianzas para todas las variables
resultados_bartlett <- bartlett.test(dataset[, c("Educacion", "Edad", "Ocupacion")], dataset$Ocupacion)
# Verificar los resultados
resultados_bartlett
##
## Bartlett test of homogeneity of variances
##
## data: dataset[, c("Educacion", "Edad", "Ocupacion")]
## Bartlett's K-squared = 28143, df = 2, p-value < 2.2e-16
#### No se cumple la normalidad, por que no se cumple una distribucion normal y tampoco se cumple la homogeneidad, ya que la varianza entre las variables no son iguales. Es por esto que vamos a utilizar los modelos de logit y probit.
# Creación del rango etario
dataset$edad_cat <- cut(dataset$Edad, breaks = 3, labels = c("joven", "adulto", "mayor"))
# Convertir variables categóricas a factor
dataset$Educacion <- factor(dataset$Educacion)
dataset$edad_cat <- factor(dataset$edad_cat)
# Crear una nueva columna en el dataframe llamada "posgrado", la cual será dicotómica
dataset$Ocupacion <- ifelse(dataset$Ocupacion == 1 , 1, 0)
dataset$Ocupacion <- factor(dataset$Ocupacion)
summary(dataset)
## Educacion Edad Ocupacion edad_cat
## 9 :1339 Min. : 0.00 0:3450 joven :2242
## 7 :1248 1st Qu.:19.00 1:1550 adulto:2055
## 15 : 388 Median :37.00 mayor : 703
## 11 : 377 Mean :37.91
## 14 : 282 3rd Qu.:55.00
## 6 : 272 Max. :96.00
## (Other):1094
# Ajustar modelo logit
modelo_logit <- glm(Ocupacion ~ edad_cat + Educacion , family = binomial(link = "logit"), data = dataset)
# Ajustar modelo probit
modelo_probit <- glm(Ocupacion ~ edad_cat + Educacion , family = binomial(link = "probit"), data = dataset)
# Resumen de los modelos
summary(modelo_logit)
##
## Call:
## glm(formula = Ocupacion ~ edad_cat + Educacion, family = binomial(link = "logit"),
## data = dataset)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.0006 -0.8362 -0.5585 1.1006 2.9275
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -3.58196 0.38572 -9.287 < 2e-16 ***
## edad_catadulto 0.96088 0.07324 13.120 < 2e-16 ***
## edad_catmayor -0.68923 0.16758 -4.113 3.91e-05 ***
## Educacion2 0.58623 1.09489 0.535 0.592355
## Educacion3 -12.98410 288.87150 -0.045 0.964149
## Educacion4 -12.99467 217.84757 -0.060 0.952434
## Educacion5 0.10248 1.10124 0.093 0.925857
## Educacion6 1.26319 0.46822 2.698 0.006978 **
## Educacion7 1.80276 0.39211 4.598 4.27e-06 ***
## Educacion8 1.83405 0.48263 3.800 0.000145 ***
## Educacion9 2.60677 0.39008 6.683 2.35e-11 ***
## Educacion10 2.11432 0.59212 3.571 0.000356 ***
## Educacion11 2.80435 0.40019 7.008 2.42e-12 ***
## Educacion12 3.09464 0.42789 7.232 4.75e-13 ***
## Educacion13 3.55110 0.40939 8.674 < 2e-16 ***
## Educacion14 2.61266 0.40651 6.427 1.30e-10 ***
## Educacion15 3.40027 0.40008 8.499 < 2e-16 ***
## Educacion16 4.47711 0.77837 5.752 8.83e-09 ***
## Educacion17 3.61869 0.52258 6.925 4.37e-12 ***
## Educacion99 2.83689 0.67936 4.176 2.97e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 6191.0 on 4999 degrees of freedom
## Residual deviance: 5123.3 on 4980 degrees of freedom
## AIC: 5163.3
##
## Number of Fisher Scoring iterations: 15
summary(modelo_probit)
##
## Call:
## glm(formula = Ocupacion ~ edad_cat + Educacion, family = binomial(link = "probit"),
## data = dataset)
##
## Deviance Residuals:
## Min 1Q Median 3Q Max
## -2.0119 -0.8558 -0.5363 1.0987 2.9982
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -1.96212 0.16813 -11.670 < 2e-16 ***
## edad_catadulto 0.60260 0.04399 13.698 < 2e-16 ***
## edad_catmayor -0.32249 0.09241 -3.490 0.000483 ***
## Educacion2 0.29373 0.49776 0.590 0.555126
## Educacion3 -3.43425 72.84592 -0.047 0.962398
## Educacion4 -3.46080 54.90775 -0.063 0.949743
## Educacion5 -0.05354 0.52277 -0.102 0.918427
## Educacion6 0.59722 0.21499 2.778 0.005471 **
## Educacion7 0.85418 0.17287 4.941 7.77e-07 ***
## Educacion8 0.87706 0.22824 3.843 0.000122 ***
## Educacion9 1.35475 0.17183 7.884 3.17e-15 ***
## Educacion10 1.06182 0.30331 3.501 0.000464 ***
## Educacion11 1.47719 0.18052 8.183 2.77e-16 ***
## Educacion12 1.65631 0.20353 8.138 4.03e-16 ***
## Educacion13 1.91941 0.18784 10.218 < 2e-16 ***
## Educacion14 1.35970 0.18513 7.344 2.07e-13 ***
## Educacion15 1.82955 0.18034 10.145 < 2e-16 ***
## Educacion16 2.47585 0.42673 5.802 6.56e-09 ***
## Educacion17 1.96043 0.27054 7.246 4.28e-13 ***
## Educacion99 1.48950 0.38272 3.892 9.95e-05 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 6191.0 on 4999 degrees of freedom
## Residual deviance: 5116.2 on 4980 degrees of freedom
## AIC: 5156.2
##
## Number of Fisher Scoring iterations: 15
# Comprobación de multicolinealidad (criterio vif < 10)
library(faraway)
vif(modelo_logit)
## edad_catadulto edad_catmayor Educacion2 Educacion3 Educacion4
## 6.492136e+00 1.696758e+01 2.506860e+01 5.678367e+06 5.603400e+06
## Educacion5 Educacion6 Educacion7 Educacion8 Educacion9
## 2.415779e+01 5.638608e+01 1.439883e+02 3.323369e+01 1.491799e+02
## Educacion10 Educacion11 Educacion12 Educacion13 Educacion14
## 1.253111e+01 5.582405e+01 2.179232e+01 3.829317e+01 4.397182e+01
## Educacion15 Educacion16 Educacion17 Educacion99
## 5.728591e+01 7.855729e+00 1.056736e+01 6.443295e+00
vif(modelo_probit)
## edad_catadulto edad_catmayor Educacion2 Educacion3 Educacion4
## 2.342507e+00 5.158827e+00 5.181185e+00 3.610976e+05 3.559701e+05
## Educacion5 Educacion6 Educacion7 Educacion8 Educacion9
## 5.443829e+00 1.188826e+01 2.798725e+01 7.432372e+00 2.894794e+01
## Educacion10 Educacion11 Educacion12 Educacion13 Educacion14
## 3.287993e+00 1.135939e+01 4.930638e+00 8.061409e+00 9.120340e+00
## Educacion15 Educacion16 Educacion17 Educacion99
## 1.163910e+01 2.361122e+00 2.832234e+00 2.044869e+00
# Comprobación de la normalidad de los residuos
residuos_logit <- residuals(modelo_logit, type = "pearson")
residuos_probit <- residuals(modelo_probit, type = "pearson")
shapiro.test(residuos_logit)
##
## Shapiro-Wilk normality test
##
## data: residuos_logit
## W = 0.88031, p-value < 2.2e-16
shapiro.test(residuos_probit)
##
## Shapiro-Wilk normality test
##
## data: residuos_probit
## W = 0.87574, p-value < 2.2e-16
# Comprobación de la homocedasticidad
library(lmtest)
## Loading required package: zoo
##
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
##
## as.Date, as.Date.numeric
bptest(modelo_logit)
##
## studentized Breusch-Pagan test
##
## data: modelo_logit
## BP = 1122.4, df = 19, p-value < 2.2e-16
bptest(modelo_probit)
##
## studentized Breusch-Pagan test
##
## data: modelo_probit
## BP = 1122.4, df = 19, p-value < 2.2e-16
# Cargar paquete pROC
library(pROC)
## Type 'citation("pROC")' for a citation.
##
## Attaching package: 'pROC'
## The following objects are masked from 'package:stats':
##
## cov, smooth, var
# Evaluación de la bondad de ajuste utilizando la curva ROC
roc_logit <- roc(dataset$Ocupacion, fitted(modelo_logit))
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
roc_probit <- roc(dataset$Ocupacion, fitted(modelo_probit))
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
# Mostrar el área bajo la curva (AUC) para cada modelo
cat("AUC del modelo logit:", auc(roc_logit), "\n")
## AUC del modelo logit: 0.7674855
cat("AUC del modelo probit:", auc(roc_probit), "\n")
## AUC del modelo probit: 0.7657415
library(ggplot2)
library(pROC)
# Calcular las curvas ROC de los modelos
roc_logit <- roc(dataset$Ocupacion, modelo_logit$fitted.values)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
roc_probit <- roc(dataset$Ocupacion, modelo_probit$fitted.values)
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
# Crear un dataframe con los valores de las curvas ROC
df_roc_logit <- data.frame(fpr = roc_logit$specificities, tpr = roc_logit$sensitivities, model = "Logit")
df_roc_probit <- data.frame(fpr = roc_probit$specificities, tpr = roc_probit$sensitivities, model = "Probit")
df_roc <- rbind(df_roc_logit, df_roc_probit)
# Graficar las curvas ROC utilizando ggplot2
ggplot(df_roc, aes(x = fpr, y = tpr, color = model)) +
geom_line() +
geom_abline(intercept = 0, slope = 1, linetype = "dashed") +
ggtitle("Curvas ROC de los modelos logit y probit") +
xlab("Tasa de falsos positivos") +
ylab("Tasa de verdaderos positivos")

# Comparación de modelos
logLik(modelo_logit)
## 'log Lik.' -2561.66 (df=20)
logLik(modelo_probit)
## 'log Lik.' -2558.12 (df=20)
# Comparar los modelos utilizando anova()
resultado <- anova(modelo_logit, modelo_probit, test = "Chisq")
# Imprimir el resultado
print(resultado)
## Analysis of Deviance Table
##
## Model 1: Ocupacion ~ edad_cat + Educacion
## Model 2: Ocupacion ~ edad_cat + Educacion
## Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1 4980 5123.3
## 2 4980 5116.2 0 7.0794
##ANALISIS: Con los resultados de los obtenido podemos concluir que el ser asalariado en Chile está relacionado con el nivel de educación y el rango etario. Esto debido a que los modelos logit y probit muestran que la educación y el rango etario tienen un efecto significativo en la probabilidad de ser asalariado.