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.
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:
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:
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.
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.
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:
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}. \]
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:
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}. \]
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:
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:
| 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:
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
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:
# 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))
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
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.
# 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.
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
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.
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.
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:
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.