Clase 01 de junio

Author

Daniela García

REGRESIÓN MÚLTIPLE CON VARIABLE DISCRETA ORDENADA

setwd(“C:/Users/Garciadaniel/Desktop/CLASE 01 DE JUNIO”)

Carga de librerías

install.packages(c(“officer”, “flextable”, “broom”))

library(MASS)

library(VGAM)

library(margins)

library(pROC)

library(ggplot2)

library(nnet)

library(haven)

library(modelsummary)

library(VGAM)

library(officer)

library(flextable)

library(broom)

library(Rchoice)

library(“foreign”)

library(“Rchoice”)

library(“msm”)

library(“car”)

Carga de base de datos

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

Análisis de Data

Visualización de primeras filas del dataset

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>, …

Distribución de variable dependiente

table(data$intensidad_dpp)

    1     2     3 
12828  1790  1833 
table(data$depresion_pp)

    0     1 
12828  3623 

Modelo con variable dependiente odenada

Ajuste del modelo logit ordenado

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/
logitord <- Rchoice(intensidad_dpp ~ lingrl + anios_esc + edad + t_hijos + etnia + area, 
                  data = data, 
                  na.action = na.omit, 
                  family = ordinal('logit'))

Resumen modelo logit ordenado

summary(logitord)

Model: ordinal
Model estimated on: dom. jun. 08 12:49:28 2025 

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


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

Coefficients:
           Estimate Std. Error z-value Pr(>|z|)    
kappa.1    0.822194   0.018816  43.697  < 2e-16 ***
constant  -2.352638   0.100572 -23.393  < 2e-16 ***
lingrl     0.001703   0.007114   0.239  0.81077    
anios_esc -0.009924   0.004865  -2.040  0.04136 *  
edad       0.034483   0.003190  10.810  < 2e-16 ***
t_hijos    0.039105   0.018717   2.089  0.03669 *  
etnia      0.344926   0.059842   5.764 8.22e-09 ***
area       0.118337   0.042259   2.800  0.00511 ** 
---
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: 129
Exit of MLE: successful convergence 

Análisis:

  1. El ingreso no tiene ninguna influencia sobre la depresión post parto, no hay evidencia estadística.

  2. Cuando aumentan los años de escolaridad, se reduce la probabilidad de sufrir de depresión, se desconoce la magnitud.

  3. La edad aumenta la probabilidad de sufrir depresión post parto.

  4. El número de hijos aumenta la probabilidad de sufrir depresión post parto.

  5. Las mujeres indígenas tienen mayor probabilidad de presentar depresión post parto.Similar a las mujeres de zonas rurales.

Se exportan los resultados a un documento Word

Resultados generales

library(modelsummary)
modelsummary(logitord, output = "modelo_logit_ord.docx")

Se incluye nivel de significancia (*)

library(modelsummary)
modelsummary(logitord, 
             output = "modelo_logit_ord2.docx", 
             stars = c('*' = .05, '**' = .01, '***' = .001))

Reporte incluyendo z-value (p value)

library(modelsummary)
modelsummary(logitord,
             output = "modelo_logit_ord3.docx",
             statistic = c("p.value" = "p = {p.value}{stars}"),
             stars = TRUE)

Reporte académico

library(modelsummary)
modelsummary(logitord,
             output = "modelo_logit_ord4.docx",
             statistic = "{statistic}",
             stars = TRUE)

En este último reporte se puede analizar:

RMSE: significa Root Mean Squared Error (Raíz del Error Cuadrático Medio). Es una métrica común para evaluar la precisión de modelos de predicción, especialmente en regresión. Más bajo = mejor. Un RMSE de 0 indica predicciones perfectas.

Este es más usual en casos de variables cuantitativas, para determinar la precisión lo hacemos con la matriz de confusión.

Criterio de información de Akaike (AIC) y criterio de Información Bayesiano (BIC)

AIC(logitord) 
[1] 22123.39
BIC(logitord)
[1] 22185.05

Ajuste del modelo probit ordenado

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

Resumen modelo probit ordenado

summary(probitord)

Model: ordinal
Model estimated on: dom. jun. 08 12:49:34 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 

Reporte resultados del modelo

library(modelsummary)
modelsummary(probitord,
             output = "modelo_probitord_ord4.docx",
             statistic = "{statistic}",
             stars = TRUE)

Comando para reportar resultados en un mismo documento

library(modelsummary)
modelsummary(list("Logit" = logitord, "Probit" = probitord),
             output = "modelos_logit_probit.docx",
             stars = TRUE)

Criterio de información de Akaike (AIC) y criterio de Información Bayesiano (BIC)

AIC(probitord) 
[1] 22109.98
BIC(probitord)
[1] 22171.64

Comparación AIC - BIC de ambos modelos

aic_logit_ord <- AIC(logitord)
aic_probit_ord <- AIC(probitord)
bic_logit_ord <- BIC(logitord)
bic_probit_ord <- BIC(probitord)

Resultados

cat("AIC Logit Ordenado:", aic_logit_ord, " | AIC Probit Ordenado:", aic_probit_ord, "\n")
AIC Logit Ordenado: 22123.39  | AIC Probit Ordenado: 22109.98 
cat("BIC Logit Ordenado:", bic_logit_ord, " | BIC Probit Ordenado:", bic_probit_ord, "\n")
BIC Logit Ordenado: 22185.05  | BIC Probit Ordenado: 22171.64 

Conclusión: El modelo con menor AIC/BIC es el preferido, ya que tiene mejor ajuste.En este caso, el modelo probit ordenado es el mejor.

Cálculo de efectos marginales modelo logit

X <- cbind(1, logitord$mf[, -1])
coeficientes<- logitord$coefficients
coeficientes_1<- coeficientes[2:8]

Producto cruzado por los coeficientes

ai <- crossprod(t(X), coeficientes_1) 

Derivada

deriv1<-mean(dnorm(ai)) 

Variable ingreso

library(msm)
gamma_hatq1_1 <- coeficientes_1["lingrl"]
AME_hat_q1lc_1   <- round(mean(dnorm(ai)) * (gamma_hatq1_1),3);AME_hat_q1lc_1
lingrl 
     0 
AME_hat_q1lc_se_1 <-  round(deltamethod(~ deriv1 * x1, coef(logitord), vcov(logitord), ses =  TRUE),3);AME_hat_q1lc_se_1 
[1] 0.003
AME_hat_q1lc_cil_1 <-  round(c(AME_hat_q1lc_1 - 1.96 * AME_hat_q1lc_se_1),3);AME_hat_q1lc_cil_1
lingrl 
-0.006 
AME_hat_q1lc_ciu_1 <-  round(c(AME_hat_q1lc_1 + 1.96 * AME_hat_q1lc_se_1),3);AME_hat_q1lc_ciu_1
lingrl 
 0.006 
AME_hat_q1lc_pr_1 <-  round(2 * pnorm(-abs(AME_hat_q1lc_1/AME_hat_q1lc_se_1)),3);AME_hat_q1lc_pr_1
lingrl 
     1 
AME_hat_q1lc_star_1<- " "  
lingrl_q1<-cbind(AME_hat_q1lc_1,AME_hat_q1lc_star_1, AME_hat_q1lc_se_1,AME_hat_q1lc_pr_1,AME_hat_q1lc_cil_1,AME_hat_q1lc_ciu_1)

Variable escolaridad

library(msm)
gamma_hatq2_2 <- coeficientes_1["anios_esc"]
AME_hat_q2lc_2   <- round(mean(dnorm(ai)) * (gamma_hatq2_2),3);AME_hat_q2lc_2
anios_esc 
   -0.002 
AME_hat_q2lc_se_2 <-  round(deltamethod(~ deriv1 * x2, coef(logitord), vcov(logitord), ses =  TRUE),3);AME_hat_q2lc_se_2 
[1] 0.018
AME_hat_q2lc_cil_2 <-  round(c(AME_hat_q2lc_2 - 1.96 * AME_hat_q2lc_se_2),3);AME_hat_q2lc_cil_2
anios_esc 
   -0.037 
AME_hat_q2lc_ciu_2 <-  round(c(AME_hat_q2lc_2 + 1.96 * AME_hat_q2lc_se_2),3);AME_hat_q2lc_ciu_2
anios_esc 
    0.033 
AME_hat_q2lc_pr_2 <-  round(2 * pnorm(-abs(AME_hat_q2lc_2/AME_hat_q2lc_se_2)),3);AME_hat_q2lc_pr_2
anios_esc 
    0.912 
AME_hat_q2lc_star_2<- " "  
anios_esc_q2<-cbind(AME_hat_q2lc_2,AME_hat_q2lc_star_2, AME_hat_q2lc_se_2,AME_hat_q2lc_pr_2,AME_hat_q2lc_cil_2,AME_hat_q2lc_ciu_2)

Variable edad

library(msm)
gamma_hatq3_3 <- coeficientes_1["edad"]
AME_hat_q3lc_3   <- round(mean(dnorm(ai)) * (gamma_hatq3_3),3);AME_hat_q3lc_3
 edad 
0.006 
AME_hat_q3lc_se_3 <-  round(deltamethod(~ deriv1 * x3, coef(logitord), vcov(logitord), ses =  TRUE),3);AME_hat_q3lc_se_3 
[1] 0.001
AME_hat_q3lc_cil_3 <-  round(c(AME_hat_q3lc_3 - 1.96 * AME_hat_q3lc_se_3),3);AME_hat_q3lc_cil_3
 edad 
0.004 
AME_hat_q3lc_ciu_3 <-  round(c(AME_hat_q3lc_3 + 1.96 * AME_hat_q3lc_se_3),3);AME_hat_q3lc_ciu_3
 edad 
0.008 
AME_hat_q3lc_pr_3 <-  round(2 * pnorm(-abs(AME_hat_q3lc_3/AME_hat_q3lc_se_3)),3);AME_hat_q3lc_pr_3
edad 
   0 
AME_hat_q3lc_star_3<- "*** "  
edad_q3<-cbind(AME_hat_q3lc_3,AME_hat_q3lc_star_3, AME_hat_q3lc_se_3,AME_hat_q3lc_pr_3,AME_hat_q3lc_cil_3,AME_hat_q3lc_ciu_3)

Variable hijos

library(msm)
gamma_hatq4_4 <- coeficientes_1["t_hijos"]
AME_hat_q4lc_4   <- round(mean(dnorm(ai)) * (gamma_hatq4_4),3);AME_hat_q4lc_4
t_hijos 
  0.007 
AME_hat_q4lc_se_4 <-  round(deltamethod(~ deriv1 * x4, coef(logitord), vcov(logitord), ses =  TRUE),3);AME_hat_q4lc_se_4 
[1] 0.001
AME_hat_q4lc_cil_4 <-  round(c(AME_hat_q4lc_4 - 1.96 * AME_hat_q4lc_se_4),3);AME_hat_q4lc_cil_4
t_hijos 
  0.005 
AME_hat_q4lc_ciu_4 <-  round(c(AME_hat_q4lc_4 + 1.96 * AME_hat_q4lc_se_4),3);AME_hat_q4lc_ciu_4
t_hijos 
  0.009 
AME_hat_q4lc_pr_4 <-  round(2 * pnorm(-abs(AME_hat_q4lc_4/AME_hat_q4lc_se_4)),3);AME_hat_q4lc_pr_4
t_hijos 
      0 
AME_hat_q4lc_star_4<- "*** "  
t_hijos_q4<-cbind(AME_hat_q4lc_4,AME_hat_q4lc_star_4, AME_hat_q4lc_se_4,AME_hat_q4lc_pr_4,AME_hat_q4lc_cil_4,AME_hat_q4lc_ciu_4)

Variable etnia

library(msm)
gamma_hatq5_5 <- coeficientes_1["etnia"]
AME_hat_q5lc_5   <- round(mean(dnorm(ai)) * (gamma_hatq5_5),3);AME_hat_q5lc_5
etnia 
0.061 
AME_hat_q5lc_se_5 <-  round(deltamethod(~ deriv1 * x5, coef(logitord), vcov(logitord), ses =  TRUE),3);AME_hat_q5lc_se_5 
[1] 0.001
AME_hat_q5lc_cil_5 <-  round(c(AME_hat_q5lc_5 - 1.96 * AME_hat_q5lc_se_5),3);AME_hat_q5lc_cil_5
etnia 
0.059 
AME_hat_q5lc_ciu_5 <-  round(c(AME_hat_q5lc_5 + 1.96 * AME_hat_q5lc_se_5),3);AME_hat_q5lc_ciu_5
etnia 
0.063 
AME_hat_q5lc_pr_5 <-  round(2 * pnorm(-abs(AME_hat_q5lc_5/AME_hat_q5lc_se_5)),3);AME_hat_q5lc_pr_5
etnia 
    0 
AME_hat_q5lc_star_5<- "*** "  
etnia_q5<-cbind(AME_hat_q5lc_5,AME_hat_q5lc_star_5, AME_hat_q5lc_se_5,AME_hat_q5lc_pr_5,AME_hat_q5lc_cil_5,AME_hat_q5lc_ciu_5)

Variable área

library(msm)
gamma_hatq6_6 <- coeficientes_1["area"]
AME_hat_q6lc_6   <- round(mean(dnorm(ai)) * (gamma_hatq6_6),3);AME_hat_q6lc_6
 area 
0.021 
AME_hat_q6lc_se_6 <-  round(deltamethod(~ deriv1 * x6, coef(logitord), vcov(logitord), ses =  TRUE),3);AME_hat_q6lc_se_6 
[1] 0.003
AME_hat_q6lc_cil_6 <-  round(c(AME_hat_q6lc_6 - 1.96 * AME_hat_q6lc_se_6),3);AME_hat_q6lc_cil_6
 area 
0.015 
AME_hat_q6lc_ciu_6 <-  round(c(AME_hat_q6lc_6 + 1.96 * AME_hat_q6lc_se_6),3);AME_hat_q6lc_ciu_6
 area 
0.027 
AME_hat_q6lc_pr_6 <-  round(2 * pnorm(-abs(AME_hat_q6lc_6/AME_hat_q6lc_se_6)),3);AME_hat_q6lc_pr_6
area 
   0 
AME_hat_q6lc_star_6<- "*** "  
area_q6<-cbind(AME_hat_q6lc_6,AME_hat_q6lc_star_6, AME_hat_q6lc_se_6,AME_hat_q6lc_pr_6,AME_hat_q6lc_cil_6,AME_hat_q6lc_ciu_6)

Resultados

resultados_ame<-rbind(lingrl_q1,anios_esc_q2, edad_q3, t_hijos_q4,etnia_q5,area_q6);resultados_ame
          AME_hat_q1lc_1 AME_hat_q1lc_star_1 AME_hat_q1lc_se_1
lingrl    "0"            " "                 "0.003"          
anios_esc "-0.002"       " "                 "0.018"          
edad      "0.006"        "*** "              "0.001"          
t_hijos   "0.007"        "*** "              "0.001"          
etnia     "0.061"        "*** "              "0.001"          
area      "0.021"        "*** "              "0.003"          
          AME_hat_q1lc_pr_1 AME_hat_q1lc_cil_1 AME_hat_q1lc_ciu_1
lingrl    "1"               "-0.006"           "0.006"           
anios_esc "0.912"           "-0.037"           "0.033"           
edad      "0"               "0.004"            "0.008"           
t_hijos   "0"               "0.005"            "0.009"           
etnia     "0"               "0.059"            "0.063"           
area      "0"               "0.015"            "0.027"           

Se exportan los efectos a archivo Excel

write.csv2(resultados_ame,file="ame_logitord.csv")

Matriz de Confusión y Exactitud del Modelo

Se obtienen predicciones del modelo logit ordenado

pred_logit_ord <- crossprod(t(X), coeficientes_1)

Se convierten las probabilidades en categorías predichas (tomando la categoría con mayor probabilidad)

pred_clases <- apply(pred_logit_ord, 1, which.max)

Matriz de confusión

conf_matrix <- table(Predicho = pred_clases, Real = as.numeric(data$intensidad_dpp))

Mostramos la matriz de confusión

print(conf_matrix)
        Real
Predicho     1     2     3
       1 12828  1790  1833

Calcular exactitud del modelo

exactitud <- sum(diag(conf_matrix)) / sum(conf_matrix)
cat("Exactitud del modelo Logit Ordenado:", exactitud, "\n")
Exactitud del modelo Logit Ordenado: 0.7797702 

Cálculo de efectos marginales modelo probit

Y <- cbind(1, probitord$mf[, -1])
coeficientes_probit<- probitord$coefficients
coeficientes_2<- coeficientes_probit[2:8]

Producto cruzado por los coeficientes

ai_p <- crossprod(t(Y), coeficientes_2) 

Derivada

deriv2<-mean(dnorm(ai_p)) 

Variable ingreso

library(msm)
gamma_hatq1_7 <- coeficientes_2["lingrl"]
AME_hat_q1lc_7   <- round(mean(dnorm(ai_p)) * (gamma_hatq1_7),3);7
[1] 7
AME_hat_q1lc_se_7 <-  round(deltamethod(~ deriv2 * x1, coef(probitord), vcov(probitord), ses =  TRUE),3);AME_hat_q1lc_se_7 
[1] 0.003
AME_hat_q1lc_cil_7 <-  round(c(AME_hat_q1lc_7 - 1.96 * AME_hat_q1lc_se_7),3);AME_hat_q1lc_cil_7
lingrl 
-0.006 
AME_hat_q1lc_ciu_7 <-  round(c(AME_hat_q1lc_7 + 1.96 * AME_hat_q1lc_se_7),3);AME_hat_q1lc_ciu_7
lingrl 
 0.006 
AME_hat_q1lc_pr_7 <-  round(2 * pnorm(-abs(AME_hat_q1lc_7/AME_hat_q1lc_se_7)),3);AME_hat_q1lc_pr_7
lingrl 
     1 
AME_hat_q1lc_star_7<- " "  
lingrl_q7<-cbind(AME_hat_q1lc_7,AME_hat_q1lc_star_7, AME_hat_q1lc_se_7,AME_hat_q1lc_pr_7,AME_hat_q1lc_cil_7,AME_hat_q1lc_ciu_7)

Variable escolaridad

library(msm)
gamma_hatq2_7 <- coeficientes_2["anios_esc"]
AME_hat_q2lc_7   <- round(mean(dnorm(ai_p)) * (gamma_hatq2_7),3);AME_hat_q2lc_7
anios_esc 
   -0.002 
AME_hat_q2lc_se_7 <-  round(deltamethod(~ deriv2 * x2, coef(probitord), vcov(probitord), ses =  TRUE),3);AME_hat_q2lc_se_7 
[1] 0.017
AME_hat_q2lc_cil_7 <-  round(c(AME_hat_q2lc_7 - 1.96 * AME_hat_q2lc_se_7),3);AME_hat_q2lc_cil_7
anios_esc 
   -0.035 
AME_hat_q2lc_ciu_7 <-  round(c(AME_hat_q2lc_7 + 1.96 * AME_hat_q2lc_se_7),3);AME_hat_q2lc_ciu_7
anios_esc 
    0.031 
AME_hat_q2lc_pr_7 <-  round(2 * pnorm(-abs(AME_hat_q2lc_7/AME_hat_q2lc_se_7)),3);AME_hat_q2lc_pr_7
anios_esc 
    0.906 
AME_hat_q2lc_star_7<- " "  
anios_esc_q7<-cbind(AME_hat_q2lc_7,AME_hat_q2lc_star_7, AME_hat_q2lc_se_7,AME_hat_q2lc_pr_7,AME_hat_q2lc_cil_7,AME_hat_q2lc_ciu_7)

Variable edad

library(msm)
gamma_hatq3_7 <- coeficientes_2["edad"]
AME_hat_q3lc_7  <- round(mean(dnorm(ai_p)) * (gamma_hatq3_7),3);AME_hat_q3lc_7
 edad 
0.006 
AME_hat_q3lc_se_7 <-  round(deltamethod(~ deriv2 * x3, coef(probitord), vcov(probitord), ses =  TRUE),3);AME_hat_q3lc_se_7
[1] 0.001
AME_hat_q3lc_cil_7 <-  round(c(AME_hat_q3lc_7 - 1.96 * AME_hat_q3lc_se_7),3);AME_hat_q3lc_cil_7
 edad 
0.004 
AME_hat_q3lc_ciu_7 <-  round(c(AME_hat_q3lc_7 + 1.96 * AME_hat_q3lc_se_7),3);AME_hat_q3lc_ciu_7
 edad 
0.008 
AME_hat_q3lc_pr_7 <-  round(2 * pnorm(-abs(AME_hat_q3lc_7/AME_hat_q3lc_se_7)),3);AME_hat_q3lc_pr_7
edad 
   0 
AME_hat_q3lc_star_7<- "*** "  
edad_q7<-cbind(AME_hat_q3lc_7,AME_hat_q3lc_star_7, AME_hat_q3lc_se_7,AME_hat_q3lc_pr_7,AME_hat_q3lc_cil_7,AME_hat_q3lc_ciu_7)

Variable hijos

library(msm)
gamma_hatq4_7 <- coeficientes_2["t_hijos"]
AME_hat_q4lc_7  <- round(mean(dnorm(ai_p)) * (gamma_hatq4_7),3);AME_hat_q4lc_7
t_hijos 
  0.007 
AME_hat_q4lc_se_7 <-  round(deltamethod(~ deriv2 * x4, coef(probitord), vcov(probitord), ses =  TRUE),3);AME_hat_q4lc_se_7
[1] 0.001
AME_hat_q4lc_cil_7 <-  round(c(AME_hat_q4lc_7 - 1.96 * AME_hat_q4lc_se_7),3);AME_hat_q4lc_cil_7
t_hijos 
  0.005 
AME_hat_q4lc_ciu_7 <-  round(c(AME_hat_q4lc_7 + 1.96 * AME_hat_q4lc_se_7),3);AME_hat_q4lc_ciu_7
t_hijos 
  0.009 
AME_hat_q4lc_pr_7 <-  round(2 * pnorm(-abs(AME_hat_q4lc_7/AME_hat_q4lc_se_7)),3);AME_hat_q4lc_pr_7
t_hijos 
      0 
AME_hat_q4lc_star_7<- "*** "  
t_hijos_q7<-cbind(AME_hat_q4lc_7,AME_hat_q4lc_star_7, AME_hat_q4lc_se_7,AME_hat_q4lc_pr_7,AME_hat_q4lc_cil_7,AME_hat_q4lc_ciu_7)

Variable etnia

library(msm)
gamma_hatq5_7 <- coeficientes_2["etnia"]
AME_hat_q5lc_7  <- round(mean(dnorm(ai_p)) * (gamma_hatq5_7),3);AME_hat_q5lc_7
etnia 
0.057 
AME_hat_q5lc_se_7 <-  round(deltamethod(~ deriv2 * x5, coef(probitord), vcov(probitord), ses =  TRUE),3);AME_hat_q5lc_se_7
[1] 0.001
AME_hat_q5lc_cil_7 <-  round(c(AME_hat_q5lc_7 - 1.96 * AME_hat_q5lc_se_7),3);AME_hat_q5lc_cil_7
etnia 
0.055 
AME_hat_q5lc_ciu_7 <-  round(c(AME_hat_q5lc_7 + 1.96 * AME_hat_q5lc_se_7),3);AME_hat_q5lc_ciu_7
etnia 
0.059 
AME_hat_q5lc_pr_7 <-  round(2 * pnorm(-abs(AME_hat_q5lc_7/AME_hat_q5lc_se_7)),3);AME_hat_q5lc_pr_7
etnia 
    0 
AME_hat_q5lc_star_7<- "*** "  
etnia_q7<-cbind(AME_hat_q5lc_7,AME_hat_q5lc_star_7, AME_hat_q5lc_se_7,AME_hat_q5lc_pr_7,AME_hat_q5lc_cil_7,AME_hat_q5lc_ciu_7)

Variable área

library(msm)
gamma_hatq6_7 <- coeficientes_2["area"]
AME_hat_q6lc_7  <- round(mean(dnorm(ai_p)) * (gamma_hatq6_7),3);AME_hat_q6lc_7
 area 
0.021 
AME_hat_q6lc_se_7 <-  round(deltamethod(~ deriv2 * x6, coef(probitord), vcov(probitord), ses =  TRUE),3);AME_hat_q6lc_se_7
[1] 0.003
AME_hat_q6lc_cil_7 <-  round(c(AME_hat_q6lc_7 - 1.96 * AME_hat_q6lc_se_7),3);AME_hat_q6lc_cil_7
 area 
0.015 
AME_hat_q6lc_ciu_7 <-  round(c(AME_hat_q6lc_7 + 1.96 * AME_hat_q6lc_se_7),3);AME_hat_q6lc_ciu_7
 area 
0.027 
AME_hat_q6lc_pr_7 <-  round(2 * pnorm(-abs(AME_hat_q6lc_7/AME_hat_q6lc_se_7)),3);AME_hat_q6lc_pr_7
area 
   0 
AME_hat_q6lc_star_7<- "*** "  
area_q7<-cbind(AME_hat_q6lc_7,AME_hat_q6lc_star_7, AME_hat_q6lc_se_7,AME_hat_q6lc_pr_7,AME_hat_q6lc_cil_7,AME_hat_q6lc_ciu_7)

Resultados

resultados_ame_probit<-rbind(lingrl_q7,anios_esc_q7, edad_q7, t_hijos_q7,etnia_q7,area_q7);resultados_ame_probit
          AME_hat_q1lc_7 AME_hat_q1lc_star_7 AME_hat_q1lc_se_7
lingrl    "0"            " "                 "0.003"          
anios_esc "-0.002"       " "                 "0.017"          
edad      "0.006"        "*** "              "0.001"          
t_hijos   "0.007"        "*** "              "0.001"          
etnia     "0.057"        "*** "              "0.001"          
area      "0.021"        "*** "              "0.003"          
          AME_hat_q1lc_pr_7 AME_hat_q1lc_cil_7 AME_hat_q1lc_ciu_7
lingrl    "1"               "-0.006"           "0.006"           
anios_esc "0.906"           "-0.035"           "0.031"           
edad      "0"               "0.004"            "0.008"           
t_hijos   "0"               "0.005"            "0.009"           
etnia     "0"               "0.055"            "0.059"           
area      "0"               "0.015"            "0.027"           

Se exportan los efectos a archivo Excel

write.csv2(resultados_ame_probit,file="ame_probitord.csv")

Matriz de Confusión y Exactitud del Modelo

Se obtienen predicciones del modelo logit ordenado

pred_probit_ord <- crossprod(t(Y), coeficientes_2)

Se convierten las probabilidades en categorías predichas (tomando la categoría con mayor probabilidad)

pred_clases_p <- apply(pred_probit_ord, 1, which.max)

Matriz de confusión

conf_matrix_p <- table(Predicho = pred_clases_p, Real = as.numeric(data$intensidad_dpp))

Mostramos la matriz de confusión

print(conf_matrix_p)
        Real
Predicho     1     2     3
       1 12828  1790  1833

Calcular exactitud del modelo

exactitud_probit <- sum(diag(conf_matrix_p)) / sum(conf_matrix_p)
cat("Exactitud del modelo Probit Ordenado:", exactitud_probit, "\n")
Exactitud del modelo Probit Ordenado: 0.7797702