Deber 5

Author

Leslie

Leer los datos (ajustar la ruta del archivo)

library(haven)
data <- read_dta("Data1_R.dta")
View(data)

Ver las primeras filas

head(data)
# A tibble: 6 × 50
  area       empleo          region   edad t_hijos nac_vivo_murieron mortinato_2
  <dbl+lbl>  <dbl+lbl>       <dbl+l> <dbl>   <dbl> <dbl+lbl>         <dbl+lbl>  
1 1 [Urbano] 1 [Trabajó al … 1 [Sie…    19       1 0 [No]            0 [No]     
2 1 [Urbano] 0 [No trabajó]  1 [Sie…    23       1 0 [No]            0 [No]     
3 1 [Urbano] 1 [Trabajó al … 1 [Sie…    38       5 0 [No]            0 [No]     
4 1 [Urbano] 0 [No trabajó]  1 [Sie…    18       1 0 [No]            0 [No]     
5 1 [Urbano] 0 [No trabajó]  1 [Sie…    21       1 0 [No]            0 [No]     
6 1 [Urbano] 1 [Trabajó al … 1 [Sie…    22       1 0 [No]            0 [No]     
# ℹ 43 more variables: depresion_pp <dbl+lbl>, intensidad_dpp <dbl+lbl>,
#   etnia <dbl+lbl>, f2_s2_216_1 <dbl+lbl>, f2_s2_216_2 <dbl>,
#   f2_s2_218_1_a <dbl+lbl>, tiempo_dpp <dbl+lbl>, f2_s5_504a_1 <dbl+lbl>,
#   f2_s5_504b_1 <dbl+lbl>, f2_s5_504c_1 <dbl+lbl>, f2_s5_504d_1 <dbl+lbl>,
#   f2_s5_504e_1 <dbl+lbl>, f2_s5_504f_1 <dbl+lbl>, f2_s5_504g_1 <dbl+lbl>,
#   f2_s5_504h_1 <dbl+lbl>, f2_s5_504i_1 <dbl+lbl>, f2_s5_504j_1 <dbl+lbl>,
#   f2_s5_504k_1 <dbl+lbl>, est_civil <dbl+lbl>, q_usted <dbl+lbl>, …

Revisar estructura de los datos

str(data)

##Ejemplo 1: Modelo con variable dependiente odenada

library("Rchoice")
Cargando paquete requerido: Formula
Cargando paquete requerido: maxLik
Cargando paquete requerido: miscTools

Please cite the 'maxLik' package as:
Henningsen, Arne and Toomet, Ott (2011). maxLik: A package for maximum likelihood estimation in R. Computational Statistics 26(3), 443-458. DOI 10.1007/s00180-010-0217-1.

If you have questions, suggestions, or comments regarding the 'maxLik' package, please use a forum or 'tracker' at maxLik's R-Forge site:
https://r-forge.r-project.org/projects/maxlik/
probitord <- Rchoice(intensidad_dpp ~ lingrl + anios_esc + edad + t_hijos + etnia + area, 
                  data = data, 
                  na.action = na.omit, 
                  family = ordinal('probit'))
summary(probitord)

Model: ordinal
Model estimated on: ju. jun. 05 G-InnoVa 21:39:42 2025 

Call:
Rchoice(formula = intensidad_dpp ~ lingrl + anios_esc + edad + 
    t_hijos + etnia + area, data = data, na.action = na.omit, 
    family = ordinal("probit"), method = "bfgs")


Frequencies of categories:
y
     1      2      3 
0.7798 0.1088 0.1114 
The estimation took: 0h:0m:1s 

Coefficients:
           Estimate Std. Error z-value Pr(>|z|)    
kappa.1    0.454873   0.010062  45.205  < 2e-16 ***
constant  -1.404867   0.057158 -24.579  < 2e-16 ***
lingrl     0.001106   0.004054   0.273   0.7850    
anios_esc -0.006361   0.002774  -2.293   0.0218 *  
edad       0.020295   0.001839  11.037  < 2e-16 ***
t_hijos    0.023193   0.010864   2.135   0.0328 *  
etnia      0.196005   0.034697   5.649 1.61e-08 ***
area       0.071133   0.023881   2.979   0.0029 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Optimization of log-likelihood by BFGS maximization
Log Likelihood: -11050
Number of observations: 16451
Number of iterations: 82
Exit of MLE: successful convergence 

Analisis

El modelo Probit Ordenado presenta valores de AIC y BIC menores en comparación con el modelo Logit Ordenado, lo que indica un mejor ajuste estadístico, aunque la diferencia es leve. Por lo tanto, el modelo Probit Ordenado es preferible para estos datos.

Ajustar modelo Probit Ordenado

probitord <- Rchoice(intensidad_dpp ~ lingrl + anios_esc + edad + t_hijos + etnia + area, 
                    data = data, 
                    na.action = na.omit, 
                    family = ordinal('probit'))
summary(probitord)

Model: ordinal
Model estimated on: ju. jun. 05 G-InnoVa 21:39:43 2025 

Call:
Rchoice(formula = intensidad_dpp ~ lingrl + anios_esc + edad + 
    t_hijos + etnia + area, data = data, na.action = na.omit, 
    family = ordinal("probit"), method = "bfgs")


Frequencies of categories:
y
     1      2      3 
0.7798 0.1088 0.1114 
The estimation took: 0h:0m:1s 

Coefficients:
           Estimate Std. Error z-value Pr(>|z|)    
kappa.1    0.454873   0.010062  45.205  < 2e-16 ***
constant  -1.404867   0.057158 -24.579  < 2e-16 ***
lingrl     0.001106   0.004054   0.273   0.7850    
anios_esc -0.006361   0.002774  -2.293   0.0218 *  
edad       0.020295   0.001839  11.037  < 2e-16 ***
t_hijos    0.023193   0.010864   2.135   0.0328 *  
etnia      0.196005   0.034697   5.649 1.61e-08 ***
area       0.071133   0.023881   2.979   0.0029 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Optimization of log-likelihood by BFGS maximization
Log Likelihood: -11050
Number of observations: 16451
Number of iterations: 82
Exit of MLE: successful convergence 
library(modelsummary)
modelsummary(probitord,
             output = "modelo_probitord_ord4.docx",
             statistic = "{statistic}",
             stars = TRUE)
AIC(probitord)
[1] 22109.98
BIC(probitord)
[1] 22171.64

Analisis Se puede evidenciar que el modelo Probit es estadísticamente superior al Logit Ordenado, aunque la diferencia es leve, indiando finalmente que el probit ordenado tiene un mejor ajuste y es el mejor

Efectos marginales

X <- cbind(1, probitord$mf[, -1])
coeficientes<-  probitord$coefficients
coeficientes_1<- coeficientes[2:8]
ai <- crossprod(t(X), coeficientes_1)

Matriz de Confusión y Exactitud del Modelo

pred_probit_ord <- crossprod(t(X), coeficientes_1)
pred_clases <- apply(pred_probit_ord, 1, which.max)
real_clases <- as.numeric(data$intensidad_dpp)

Crear matriz de confusión

conf_matrix <- table(Predicho = pred_clases, Real = real_clases)
print(conf_matrix)
        Real
Predicho     1     2     3
       1 12828  1790  1833

Calcular exactitud del modelo

exactitud <- round(sum(diag(conf_matrix)) / sum(conf_matrix), 4)
cat("Exactitud del modelo Probit Ordenado:", exactitud, "\n")
Exactitud del modelo Probit Ordenado: 0.7798 

Analisis

En base a lo modelos ejecutados logit y probit se ha evidenciado que ambos poseen una exactitud predictiva de un 77.98% , este resultado es debido a que ambos modelos son muy similares en forma, por lo que en muchos conjuntos de datos tienden a producir resultados casi equivalentes, finalmente se concluye que los dos modelos confirman los mismos patrones y aportan resultados consistentes, lo que refuerza la solidez de los resultados.