1 Resumen

1.0.1 Modelo de Logit Adyacente

El Modelo de Logit Adyacente es una extensión de la regresión logística diseñada para analizar variables de respuesta con categorías ordinales. A diferencia de otros modelos ordinales, este enfoque compara categorías consecutivas, permitiendo estudiar cómo las variables explicativas influyen en la transición entre niveles adyacentes de la escala.

Si la variable respuesta posee categorías ordenadas
\[ 1 < 2 < 3 < \cdots < J, \]
el modelo estima \(J - 1\) ecuaciones, cada una correspondiente a la comparación entre dos categorías vecinas. La forma funcional del modelo para cada par \((j, j+1)\) es:

\[ \log\left(\frac{P(Y = j+1 \mid X)}{P(Y = j \mid X)}\right) = \alpha_j + \beta^\top X, \]

donde:
- \(\alpha_j\) es el intercepto asociado al punto de corte entre las categorías \(j\) y \(j+1\),
- \(\beta\) es el vector de coeficientes comunes para todas las transiciones,
- \(X\) representa las variables explicativas.

Este modelo es especialmente útil cuando interesa evaluar cómo ciertos factores afectan el paso de un nivel de satisfacción (o cualquier atributo ordinal) al siguiente, proporcionando una interpretación clara y detallada sobre los cambios entre categorías consecutivas.

2 Introducción

El objetivo de este análisis es evaluar el nivel de satisfacción que tienen los egresados de la Universidad del Norte respecto al acceso a oportunidades laborales después de su graduación. La variable de interés, denominada AOL (Acceso a Oportunidades Laborales), se encuentra estructurada en tres categorías ordinales:

  • Insatisfecho
  • Satisfecho
  • Muy satisfecho

Dado que estas categorías poseen un orden natural, es adecuado utilizar un enfoque estadístico que conserve esta jerarquía y permita modelar la transición entre niveles de satisfacción.

Para este propósito se emplea el Modelo de Logit Adyacente (Adjacent Category Logit Model), una técnica de regresión ordinal que compara categorías consecutivas de la variable respuesta. Si las categorías se representan como:

\[ 1 < 2 < 3 < \cdots < J, \]

el modelo estima \(J - 1\) ecuaciones del tipo:

\[ \log \left( \frac{P(Y = j + 1)}{P(Y = j)} \right) = \alpha_j + \beta^\top X, \]

donde cada ecuación evalúa la razón de probabilidades entre dos niveles adyacentes de satisfacción. Esto permite analizar cómo variables explicativas influyen en el paso de un nivel al siguiente.

En este estudio se consideran como predictores:

  • División Académica, asociada al programa de pregrado del egresado.
  • Estrato socioeconómico, registrado como variable numérica.
  • Situación laboral actual (Slaboral), categorizada como Activo o Inactivo.

El uso del Modelo de Logit Adyacente es especialmente apropiado porque permite interpretar los cambios entre categorías vecinas de satisfacción y detectar si factores académicos, socioeconómicos o laborales alteran significativamente la probabilidad de mejorar o empeorar el nivel de percepción sobre las oportunidades laborales posteriores al grado.

2.1 Objetivos

2.1.1 Objetivo General

Evaluar cómo factores académicos, socioeconómicos y laborales influyen en el nivel de satisfacción de los egresados de la Universidad del Norte respecto al acceso a oportunidades laborales después de su graduación, mediante la aplicación del Modelo de Logit Adyacente.

2.1.2 Objetivos Específicos

  1. Describir la distribución del nivel de satisfacción (AOL) en la población de egresados.
  2. Explorar la relación entre la satisfacción y variables explicativas como la División Académica, el Estrato socioeconómico y la Situación laboral actual.
  3. Ajustar un Modelo de Logit Adyacente que permita analizar comparaciones entre categorías consecutivas de satisfacción.
  4. Interpretar los coeficientes del modelo para determinar la influencia de cada predictor en las probabilidades de transición entre niveles adyacentes de satisfacción.
  5. Identificar los factores que aumentan o disminuyen la probabilidad de que un egresado se ubique en niveles superiores de satisfacción respecto a las oportunidades laborales.
  6. Generar conclusiones que permitan orientar decisiones institucionales sobre empleabilidad y bienestar de los egresados.

2.2 Formulación Matemática del Modelo

Sea \(Y\) una variable respuesta ordinal con categorías ordenadas:

\[ 1 < 2 < \cdots < J. \]

El Modelo de Logit Adyacente especifica, para cada par de categorías consecutivas \((j, j+1)\), la siguiente relación:

\[ \log \left( \frac{P(Y = j+1 \mid X)}{P(Y = j \mid X)} \right) = \alpha_j + \boldsymbol{\beta}^\top \mathbf{X}, \]

donde:

  • \(\alpha_j\) es el intercepto específico para la comparación \(j \leftrightarrow j+1\),
  • \(\boldsymbol{\beta}\) es el vector de coeficientes comunes a todas las ecuaciones (modelo paralelo),
  • \(\mathbf{X}\) es el vector de predictores.

2.3 Vector de parámetros logísticos

Si la variable \(Y\) tiene \(J\) categorías, entonces existen \(J - 1\) ecuaciones adyacentes.
Por tanto, el vector completo de parámetros logísticos se escribe como:

\[ \boldsymbol{\theta} = \begin{pmatrix} \alpha_1 \\ \alpha_2 \\ \vdots \\ \alpha_{J-1} \\ \boldsymbol{\beta} \end{pmatrix}. \]

Si \(\boldsymbol{\beta}\) tiene \(p\) coeficientes, entonces:

\[ \boldsymbol{\theta} \in \mathbb{R}^{(J-1) + p}. \]


2.4 Vector de estimadores

Los estimadores de máxima verosimilitud obtenidos del modelo se expresan como:

\[ \widehat{\boldsymbol{\theta}} = \begin{pmatrix} \widehat{\alpha}_1 \\ \widehat{\alpha}_2 \\ \vdots \\ \widehat{\alpha}_{J-1} \\ \widehat{\boldsymbol{\beta}} \end{pmatrix}. \]

Donde:

  • \(\widehat{\alpha}_j\) son los interceptos estimados para cada comparación adyacente,
  • \(\widehat{\boldsymbol{\beta}}\) es el vector de coeficientes estimados asociado a los predictores del modelo.

En el caso de tu análisis, con tres niveles de satisfacción (Insatisfecho, Satisfecho, Muy satisfecho), se tienen:

\[ J = 3, \quad J - 1 = 2 \text{ ecuaciones} \]

por lo que:

\[ \boldsymbol{\theta} = \begin{pmatrix} \alpha_1 \\ \alpha_2 \\ \beta_{\text{Division}} \\ \beta_{\text{Estrato}} \\ \beta_{\text{Slaboral}} \end{pmatrix}. \]

y su vector de estimadores:

\[ \widehat{\boldsymbol{\theta}} = \begin{pmatrix} \widehat{\alpha}_1 \\ \widehat{\alpha}_2 \\ \widehat{\beta}_{\text{Division}} \\ \widehat{\beta}_{\text{Estrato}} \\ \widehat{\beta}_{\text{Slaboral}} \end{pmatrix}. \]

3 Análisis

3.1 Descripción de la Base de Datos

La base de datos utilizada en este estudio corresponde a una muestra recopilada durante el año 2024, conformada por egresados de los últimos cinco años pertenecientes a los distintos programas de pregrado de la institución. El objetivo de esta recolección es obtener información actualizada sobre características académicas, laborales y de percepción de los egresados, permitiendo analizar su nivel de satisfacción y explorar factores asociados a sus resultados profesionales.

La información fue obtenida mediante el proceso institucional de seguimiento a egresados, utilizando criterios uniformes para todos los programas. La base de datos incluye variables de tipo sociodemográfico, académico y de percepción, entre ellas:

  • satisfacción con la formación recibida,
  • percepción de oportunidades laborales,
  • inserción en el mercado laboral,
  • y otros indicadores relevantes para la evaluación de calidad educativa.

3.2 Población, Muestra y Procedimiento de Recolección

El presente estudio se llevó a cabo con base en la población total de 11.657 egresados que obtuvieron su título de pregrado entre el segundo semestre de 2019 y el primer semestre de 2024, distribuidos en las distintas divisiones académicas de la institución. Esta población se resume en la siguiente tabla:

3.2.1 Distribución de la población de egresados por división académica

División Graduados
Arquitectura y Diseños 822
DCPRI 1,199
División de Humanidades 2,037
División de Ingenierías 3,330
División Salud 1,370
Escuela de Negocio 2,445
Otras 454
Total 11,657

Para el estudio se obtuvo una muestra de 1.926 egresados, seleccionados a partir del marco poblacional descrito y posteriormente clasificados según la división académica de su programa de pregrado. La recolección de la información se realizó mediante un método mixto, combinando:

  • Envió de encuestas por correo electrónico, y
  • Aplicación de encuestas vía llamadas telefónicas,

con el propósito de aumentar la cobertura y representatividad de los egresados contactados.

Con este tamaño muestral, y considerando la población total, el estudio alcanza un nivel de confianza del 95% y un margen de error aproximado de ±5%, lo que garantiza una capacidad adecuada de inferencia estadística y robustez en la estimación de patrones de satisfacción de los egresados.

La información recolectada permite el análisis de la variable principal de interés, la Satisfacción con las oportunidades laborales (AOL), junto con variables explicativas como la División académica, la Situación laboral actual (Slaboral) y el Estrato socioeconómico.

# Instalación y librerías
library(VGAM)
## Warning: package 'VGAM' was built under R version 4.4.3
## Cargando paquete requerido: stats4
## Cargando paquete requerido: splines
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
## 
## Adjuntando el paquete: 'dplyr'
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.4.3
library(readr)
## Warning: package 'readr' was built under R version 4.4.3
# Exploración inicial de los datos
datos_e <- read_csv("https://raw.githubusercontent.com/tuliorozco/applied-statistics/refs/heads/main/data/P_final_estrato.csv")
## Rows: 1925 Columns: 5
## ── Column specification ────────────────────────────────────────────────────────
## Delimiter: ","
## chr (3): AOL, Division, Slaboral
## dbl (2): Id, Estrato
## 
## ℹ Use `spec()` to retrieve the full column specification for this data.
## ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
head(datos_e)
## # A tibble: 6 × 5
##      Id AOL          Division   Estrato Slaboral
##   <dbl> <chr>        <chr>        <dbl> <chr>   
## 1     1 Insatisfecho DCPRI            6 Activo  
## 2     2 Insatisfecho DCPRI            3 Inactivo
## 3     3 Insatisfecho OTRAS            4 Activo  
## 4     4 Insatisfecho INGENIERÍA       1 Inactivo
## 5     5 Insatisfecho NEGOCIOS         4 Activo  
## 6     6 Insatisfecho NEGOCIOS         4 Activo

3.3 Descripción de las Variables

La base de datos contiene un conjunto de variables sociodemográficas, académicas y laborales que permiten caracterizar a los egresados y analizar sus niveles de satisfacción. A continuación se presenta una descripción general de las principales variables incluidas:

  • SituacionLaboral (Slaboral): Categoría que identifica la situación laboral actual (empleado, independiente, desempleado, etc.).
  • Estrato: Estrato socioeconómico reportado.
  • AOL: Nivel de satisfacción frente a las oportunidades laborales.
  • Division: División académica a la que pertenece el programa del egresado.
# Variable respuesta ordenada correctamente
datos_e$AOL <- factor(datos_e$AOL,
                      levels = c("Insatisfecho", "Satisfecho", "Muy_satisfecho"),
                      ordered = TRUE)

# División académica (nominal)
datos_e$Division <- factor(datos_e$Division)

# Estrato socioeconomico
datos_e$Estrato <- factor(datos_e$Estrato)

str(datos_e)
## spc_tbl_ [1,925 × 5] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
##  $ Id      : num [1:1925] 1 2 3 4 5 6 7 8 9 10 ...
##  $ AOL     : Ord.factor w/ 3 levels "Insatisfecho"<..: 1 1 1 1 1 1 1 1 1 1 ...
##  $ Division: Factor w/ 7 levels "AD","DCPRI","HUMANIDADES",..: 2 2 6 4 5 5 2 2 2 5 ...
##  $ Estrato : Factor w/ 6 levels "1","2","3","4",..: 6 3 4 1 4 4 5 5 4 3 ...
##  $ Slaboral: chr [1:1925] "Activo" "Inactivo" "Activo" "Inactivo" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   Id = col_double(),
##   ..   AOL = col_character(),
##   ..   Division = col_character(),
##   ..   Estrato = col_double(),
##   ..   Slaboral = col_character()
##   .. )
##  - attr(*, "problems")=<externalptr>
ggplot(datos_e, aes(x = AOL)) +
  geom_bar(aes(y = (..count..) / sum(..count..)),
           fill = "steelblue") +
  geom_text(
    aes(label = scales::percent((..count..) / sum(..count..), accuracy = 1),
        y = ((..count..) / sum(..count..)) + 0.02),
    stat = "count"
  ) +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  labs(title = "Distribución porcentual de satisfacción sobre oportunidades laborales",
       x = "Nivel de satisfacción",
       y = "Porcentaje") +
  theme_minimal()
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.

# Gráfico exploratorio 2: Satisfacción por División Académica
df_prop <- datos_e %>%
  group_by(Division, AOL) %>%
  summarise(n = n(), .groups = "drop") %>%
  group_by(Division) %>%
  mutate(prop = n / sum(n))

ggplot(df_prop, aes(x = Division, y = prop, fill = AOL)) +
  geom_col(position = "fill") +
  geom_text(aes(label = scales::percent(prop, accuracy = 1)),
            position = position_fill(vjust = 0.5),
            color = "black",
            size = 3) +
  labs(title = "Proporción de satisfacción por División Académica",
       x = "División",
       y = "Proporción") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  scale_fill_brewer(palette = "Blues") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

# Gráfico exploratorio 3: Satisfacción por Estrato

df_prop_est <- datos_e %>%
  group_by(Estrato, AOL) %>%
  summarise(n = n(), .groups = "drop") %>%
  group_by(Estrato) %>%
  mutate(prop = n / sum(n))

ggplot(df_prop_est, aes(x = factor(Estrato), y = prop, fill = AOL)) +
  geom_col(position = "fill") +
  geom_text(aes(label = scales::percent(prop, accuracy = 1)),
            position = position_fill(vjust = 0.5),
            color = "black",
            size = 3) +
  labs(title = "Proporción de satisfacción por Estrato socioeconómico",
       x = "Estrato",
       y = "Porcentaje") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  scale_fill_brewer(palette = "Blues") +
  theme_minimal()

df_prop_sl <- datos_e %>%
  group_by(Slaboral, AOL) %>%
  summarise(n = n(), .groups = "drop") %>%
  group_by(Slaboral) %>%
  mutate(prop = n / sum(n))

# Gráfico exploratorio 4: Satisfacción según Situación Laboral
ggplot(df_prop_sl, aes(x = Slaboral, y = prop, fill = AOL)) +
  geom_col(position = position_dodge(width = 0.9)) +
  geom_text(aes(label = scales::percent(prop, accuracy = 1)),
            position = position_dodge(width = 0.9),
            vjust = -0.3,
            color = "black",
            size = 3) +
  labs(title = "Satisfacción según situación laboral actual",
       x = "Situación laboral",
       y = "Porcentaje") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1),
                     limits = c(0, 1)) +
  scale_fill_brewer(palette = "Blues") +
  theme_minimal()

# Gráfico exploratorio 5: Situación laboral - División

df_prop_SL_D <- datos_e %>%
  group_by(Division, Slaboral) %>%
  summarise(n = n(), .groups = "drop") %>%
  group_by(Division) %>%
  mutate(prop = n / sum(n))

ggplot(df_prop_SL_D, aes(x = Division, y = prop, fill = Slaboral)) +
  geom_col(position = "fill") +
  geom_text(aes(label = scales::percent(prop, accuracy = 1)),
            position = position_fill(vjust = 0.5),
            color = "black",
            size = 3) +
  labs(title = "Proporción de Situación laboral por División Académica",
       x = "División",
       y = "Proporción") +
  scale_y_continuous(labels = scales::percent_format(accuracy = 1)) +
  scale_fill_brewer(palette = "Blues") +
  theme_minimal() +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

3.4 Ajuste del Modelo Logit Adyacente

Ahora se ajusta un modelo Logit Adyacente usando la función vglm() de R.

# Ajuste del modelo con la variable Estrato
modelo_comp <- vglm(AOL ~ Division + Slaboral + Estrato,
                    family = acat(parallel = TRUE),
                    data = datos_e)

# Ver resumen del modelo
summary(modelo_comp)
## 
## Call:
## vglm(formula = AOL ~ Division + Slaboral + Estrato, family = acat(parallel = TRUE), 
##     data = datos_e)
## 
## Coefficients: 
##                     Estimate Std. Error z value Pr(>|z|)    
## (Intercept):1        0.41300    0.14844   2.782 0.005399 ** 
## (Intercept):2        0.25878    0.14395   1.798 0.072225 .  
## DivisionDCPRI        0.05859    0.12796   0.458 0.647044    
## DivisionHUMANIDADES  0.10049    0.12296   0.817 0.413796    
## DivisionINGENIERÍA   0.40793    0.11758   3.470 0.000521 ***
## DivisionNEGOCIOS     0.52284    0.11806   4.429 9.48e-06 ***
## DivisionOTRAS       -0.10423    0.13762  -0.757 0.448806    
## DivisionSALUD        0.83403    0.15213   5.482 4.20e-08 ***
## SlaboralInactivo    -0.32491    0.07627  -4.260 2.04e-05 ***
## Estrato2             0.01917    0.12277   0.156 0.875938    
## Estrato3            -0.08498    0.11249  -0.755 0.450005    
## Estrato4             0.08819    0.11529   0.765 0.444270    
## Estrato5            -0.06284    0.13624  -0.461 0.644609    
## Estrato6             0.20602    0.14927   1.380 0.167533    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Names of linear predictors: loglink(P[Y=2]/P[Y=1]), loglink(P[Y=3]/P[Y=2])
## 
## Residual deviance: 3758.625 on 3836 degrees of freedom
## 
## Log-likelihood: -1879.312 on 3836 degrees of freedom
## 
## Number of Fisher scoring iterations: 4 
## 
## No Hauck-Donner effect found in any of the estimates
## 
## 
## Exponentiated coefficients:
##       DivisionDCPRI DivisionHUMANIDADES  DivisionINGENIERÍA    DivisionNEGOCIOS 
##           1.0603405           1.1057101           1.5037021           1.6868177 
##       DivisionOTRAS       DivisionSALUD    SlaboralInactivo            Estrato2 
##           0.9010153           2.3025882           0.7225933           1.0193516 
##            Estrato3            Estrato4            Estrato5            Estrato6 
##           0.9185346           1.0922002           0.9390913           1.2287773
# Ajuste del modelo sin la variable Estrato - parallel = True
modelo_acat <- vglm(AOL ~ Division + Slaboral,
                    family = acat(parallel = TRUE),
                    data = datos_e)
# Ver resumen del modelo
summary(modelo_acat)
## 
## Call:
## vglm(formula = AOL ~ Division + Slaboral, family = acat(parallel = TRUE), 
##     data = datos_e)
## 
## Coefficients: 
##                     Estimate Std. Error z value Pr(>|z|)    
## (Intercept):1        0.43249    0.11342   3.813 0.000137 ***
## (Intercept):2        0.28598    0.10708   2.671 0.007571 ** 
## DivisionDCPRI        0.04695    0.12742   0.368 0.712529    
## DivisionHUMANIDADES  0.08562    0.12246   0.699 0.484476    
## DivisionINGENIERÍA   0.39047    0.11679   3.343 0.000828 ***
## DivisionNEGOCIOS     0.51376    0.11772   4.364 1.28e-05 ***
## DivisionOTRAS       -0.12850    0.13642  -0.942 0.346209    
## DivisionSALUD        0.80799    0.15136   5.338 9.38e-08 ***
## SlaboralInactivo    -0.32047    0.07573  -4.232 2.32e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Names of linear predictors: loglink(P[Y=2]/P[Y=1]), loglink(P[Y=3]/P[Y=2])
## 
## Residual deviance: 3766.644 on 3841 degrees of freedom
## 
## Log-likelihood: -1883.322 on 3841 degrees of freedom
## 
## Number of Fisher scoring iterations: 4 
## 
## No Hauck-Donner effect found in any of the estimates
## 
## 
## Exponentiated coefficients:
##       DivisionDCPRI DivisionHUMANIDADES  DivisionINGENIERÍA    DivisionNEGOCIOS 
##           1.0480704           1.0893885           1.4776712           1.6715569 
##       DivisionOTRAS       DivisionSALUD    SlaboralInactivo 
##           0.8794108           2.2434018           0.7258088
# Ajuste del modelo sin la variable Estrato - parallel = false
modelo_acat_f <- vglm(AOL ~ Division + Slaboral,
                    family = acat(parallel = FALSE),
                    data = datos_e)


summary(modelo_acat_f)
## 
## Call:
## vglm(formula = AOL ~ Division + Slaboral, family = acat(parallel = FALSE), 
##     data = datos_e)
## 
## Coefficients: 
##                       Estimate Std. Error z value Pr(>|z|)    
## (Intercept):1          0.22018    0.20530   1.072 0.283515    
## (Intercept):2          0.44929    0.17838   2.519 0.011776 *  
## DivisionDCPRI:1        0.05086    0.27116   0.188 0.851217    
## DivisionDCPRI:2        0.04058    0.23446   0.173 0.862600    
## DivisionHUMANIDADES:1  0.34025    0.26103   1.303 0.192414    
## DivisionHUMANIDADES:2 -0.12105    0.22247  -0.544 0.586376    
## DivisionINGENIERÍA:1   0.69265    0.25679   2.697 0.006990 ** 
## DivisionINGENIERÍA:2   0.17759    0.20699   0.858 0.390915    
## DivisionNEGOCIOS:1     0.78317    0.26227   2.986 0.002826 ** 
## DivisionNEGOCIOS:2     0.32608    0.20638   1.580 0.114101    
## DivisionOTRAS:1       -0.28484    0.28551  -0.998 0.318438    
## DivisionOTRAS:2        0.02277    0.25973   0.088 0.930148    
## DivisionSALUD:1        0.65671    0.35234   1.864 0.062345 .  
## DivisionSALUD:2        0.83784    0.25213   3.323 0.000891 ***
## SlaboralInactivo:1     0.01371    0.16278   0.084 0.932856    
## SlaboralInactivo:2    -0.57444    0.13188  -4.356 1.33e-05 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Names of linear predictors: loglink(P[Y=2]/P[Y=1]), loglink(P[Y=3]/P[Y=2])
## 
## Residual deviance: 3753.119 on 3834 degrees of freedom
## 
## Log-likelihood: -1876.559 on 3834 degrees of freedom
## 
## Number of Fisher scoring iterations: 4 
## 
## No Hauck-Donner effect found in any of the estimates
## 
## 
## Exponentiated coefficients:
##       DivisionDCPRI:1       DivisionDCPRI:2 DivisionHUMANIDADES:1 
##             1.0521752             1.0414110             1.4052932 
## DivisionHUMANIDADES:2  DivisionINGENIERÍA:1  DivisionINGENIERÍA:2 
##             0.8859935             1.9990145             1.1943382 
##    DivisionNEGOCIOS:1    DivisionNEGOCIOS:2       DivisionOTRAS:1 
##             2.1883895             1.3855295             0.7521336 
##       DivisionOTRAS:2       DivisionSALUD:1       DivisionSALUD:2 
##             1.0230289             1.9284387             2.3113740 
##    SlaboralInactivo:1    SlaboralInactivo:2 
##             1.0138087             0.5630187

3.4.1 Prueba de Razón de Verosimilitud (Likelihood Ratio Test)

lrtest(modelo_comp, modelo_acat)
## Likelihood ratio test
## 
## Model 1: AOL ~ Division + Slaboral + Estrato
## Model 2: AOL ~ Division + Slaboral
##    #Df  LogLik Df  Chisq Pr(>Chisq)
## 1 3836 -1879.3                     
## 2 3841 -1883.3  5 8.0194     0.1552

Para evaluar si la inclusión de la variable Estrato mejora significativamente el ajuste del modelo, se compararon los siguientes modelos anidados:

  • Modelo 1 (Completo):
    \[ \text{AOL} \sim \text{Division} + \text{Slaboral} + \text{Estrato} \]

  • Modelo 2 (Reducido):
    \[ \text{AOL} \sim \text{Division} + \text{Slaboral} \]

El test LRT analiza si la reducción en la log-verosimilitud al eliminar la variable Estrato es estadísticamente significativa.

Resultados:

Modelo Df LogLik
Modelo 1 3836 -1879.3
Modelo 2 3841 -1883.3

La diferencia en log-verosimilitud fue:

\[ \chi^2 = 8.02,\quad \text{gl} = 5,\quad p = 0.1552 \]

Interpretación:

El valor p = 0.1552 indica que no existe evidencia estadísticamente significativa para afirmar que el estrato socioeconómico mejora el ajuste del modelo.

En consecuencia, desde una perspectiva estadística, se podría trabajar con el modelo reducido, ya que eliminar Estrato no empeora significativamente el ajuste.

3.4.2 Prueba de Razón de Verosimilitudes para el supuesto de paralelismo

# Cálculo del estadístico de la prueba de razón de verosimilitudes
LRT_G <- deviance(modelo_acat) - deviance(modelo_acat_f)
# Grados de libertad (df)
df <- df.residual(modelo_acat) - df.residual(modelo_acat_f)
# p-valor del test LRT
p_value <- pchisq(LRT_G, df = df, lower.tail = FALSE)

data.frame(
  Estadistico_LRT = LRT_G,
  df = df,
  p_value = p_value
)
##   Estadistico_LRT df    p_value
## 1         13.5256  7 0.06029173

En el análisis se empleó un Modelo de Logit Adyacente con pendiente paralela (parallel = TRUE) para estudiar los factores asociados al nivel de satisfacción (AOL) con las oportunidades laborales percibidas por los egresados.

Se contrastaron dos modelos:

\[ H_0: \text{Las pendientes son paralelas (modelo restringido)} \\ H_1: \text{Las pendientes no son paralelas (modelo no restringido)} \]

Conclusión: El p-valor obtenido (0.0603) es mayor que 0.05, por lo que no se rechaza la hipótesis nula de que las pendientes son paralelas entre ecuaciones adyacentes.

El supuesto de paralelismo se cumple y el modelo con pendientes paralelas es adecuado.

3.4.3 Supuesto Independencia de las observaciones

Se evaluó si existía dependencia entre las observaciones debido a la estructura por División.
Se calculó la media de la variable dependiente (AOL) para cada División, encontrando que todas presentan el mismo valor promedio (AOL = 2). Esto implica ausencia total de variación entre grupos.

Dado que la varianza entre divisiones es igual a cero, la estimación del ICC no es posible (modelo singular), lo que indica que no existe dependencia agrupada.

Conclusión: El supuesto de independencia se cumple.

library(car)
## Warning: package 'car' was built under R version 4.4.3
## Cargando paquete requerido: carData
## 
## Adjuntando el paquete: 'car'
## The following object is masked from 'package:dplyr':
## 
##     recode
## The following object is masked from 'package:VGAM':
## 
##     logit
X <- model.matrix(~ Division + Slaboral, data = datos_e)[, -1]  # quitar intercepto

# Crear un data.frame de predictores
preds <- as.data.frame(X)

# Función para calcular VIF por variable manualmente
calc_vif <- function(df){
  vif_vals <- numeric(ncol(df))
  names(vif_vals) <- colnames(df)
  
  for (i in seq_along(df)) {
    model <- lm(df[[i]] ~ ., data = df[-i])
    r2 <- summary(model)$r.squared
    vif_vals[i] <- 1 / (1 - r2)
  }
  
  return(vif_vals)
}

vif_manual <- calc_vif(preds)
vif_manual
##       DivisionDCPRI DivisionHUMANIDADES  DivisionINGENIERÍA    DivisionNEGOCIOS 
##            2.028764            2.221185            2.661267            2.712787 
##       DivisionOTRAS       DivisionSALUD    SlaboralInactivo 
##            1.773395            1.868838            1.009231

3.4.4 Ausencia de multicolinealidad

La función vif() no es compatible con objetos vglm, por lo que se realizó una estimación manual de los VIF ajustando modelos lineales auxiliares.

Todos los VIF se encuentran por debajo de 5 y muy por debajo del umbral crítico de 10.

Conclusión: No existe multicolinealidad problemática entre los predictores.

3.4.5 Ausencia de separación perfecta

OR <- exp(coef(modelo_acat))
OR
##       (Intercept):1       (Intercept):2       DivisionDCPRI DivisionHUMANIDADES 
##           1.5410929           1.3310657           1.0480704           1.0893885 
##  DivisionINGENIERÍA    DivisionNEGOCIOS       DivisionOTRAS       DivisionSALUD 
##           1.4776712           1.6715569           0.8794108           2.2434018 
##    SlaboralInactivo 
##           0.7258088

Conclusión: Estos valores son finitos y no presentan magnitudes extremas, lo cual indica estabilidad en la estimación.

El supuesto de ausencia de separación perfecta se cumple en este modelo, por lo que los estimadores logísticos son estables y las inferencias basadas en ellos son válidas.

4 Resultados

4.0.1 Resultados del modelo ACAT

Se ajustó un modelo de regresión logística ordinal de categoría adyacente (ACAT) para evaluar los factores asociados con la satisfacción de los usuarios (AOL) en función de la división académica y la situación laboral. La variable respuesta fue tratada como ordinal con niveles: Insatisfecho, Satisfecho y Muy Satisfecho.

Previo al análisis, se verificaron los supuestos del modelo, incluyendo la paralelismo de las líneas (líneas paralelas) mediante un test de razón de verosimilitudes, el cual arrojó un p-valor = 0.0603, indicando que el supuesto se cumple. Por lo tanto, el modelo con líneas paralelas (modelo_acat) es adecuado para describir la relación entre los predictores y la satisfacción de los usuarios.

Los coeficientes exponentiados (OR) permiten interpretar la influencia de cada variable independiente:

  • Las divisiones Negocios (OR = 1.67), Salud (OR = 2.24) y Ingeniería (OR = 1.48) presentan un efecto positivo y significativo, indicando que los usuarios de estas divisiones tienen mayor probabilidad de reportar niveles más altos de satisfacción en comparación con la categoría de referencia.
  • Las divisiones DCPRI, Humanidades y Otras no muestran un efecto significativo (OR cercano a 1).
  • Los usuarios inactivos laboralmente presentan menor probabilidad de estar en niveles superiores de satisfacción en comparación con los activos (OR = 0.73), mostrando un efecto negativo de la inactividad.

5 Conclusiones

5.0.1 Conclusión

El análisis mediante el modelo ACAT muestra que la división académica y la situación laboral están significativamente asociadas con la satisfacción de los usuarios. Los usuarios de Ingeniería, Negocios y Salud tienen mayor probabilidad de reportar niveles altos de satisfacción, mientras que los inactivos presentan menor probabilidad de encontrarse en niveles superiores de satisfacción. Estos resultados permiten interpretar confiablemente el efecto de estas variables sobre la satisfacción.