El presente informe tiene como objetivo analizar la satisfacción de los clientes con el tiempo de espera (SatisTime) en un contexto de filas de espera. La variable SatisTime es la variable dependiente, y se busca ajustar el mejor modelo estadístico que explique su comportamiento en función de las demás variables presentes en la base de datos Movi.xlsx.
El análisis permitirá identificar qué factores influyen más en la percepción de satisfacción y cómo las características de los clientes o del servicio se relacionan con la variable de interés.
La variable SatisTime permite estimar la probabilidad
acumulada de que un individuo se encuentre en una categoría de
satisfacción igual o menor a un cierto nivel, en función de las
variables predictoras disponibles. Este tipo de modelo considera una
escala latente subyacente que se proyecta en las categorías
observadas.
Matemáticamente, para un modelo ordinal, la probabilidad de que la variable respuesta \(Y\) se encuentre en una categoría \(k\) o menor, dado un conjunto de predictores \(X\), se define como:
\[ P(Y \le k \mid X) = \frac{\exp(\theta_k - X \beta)}{1 + \exp(\theta_k - X \beta)}, \quad k = 1,2 \]
donde \(\theta_k\) representa los umbrales que separan las categorías ordinales y \(\beta\) son los coeficientes de las variables predictoras.
Este enfoque permite estimar la influencia de cada predictor sobre la probabilidad de encontrarse en categorías más altas o bajas de satisfacción.
Con el objetivo de seleccionar el mejor conjunto de predictores, se aplicó un procedimiento de selección paso a paso basado en el criterio AIC (Akaike Information Criterion). Este criterio evalúa simultáneamente el ajuste del modelo y su complejidad, penalizando la inclusión de variables innecesarias. De esta manera, se busca un modelo parsimonioso que explique adecuadamente la satisfacción de los clientes, evitando sobreajuste y mejorando la interpretabilidad de los resultados.En teoría el AIC se define como:
\[ \text{AIC} = -2 \log(L) + 2p \]
donde \(L\) es la verosimilitud del modelo y \(p\) el número de parámetros incluidos. Este procedimiento busca un modelo parsimonioso, evitando sobreajuste.
Para ajustar el modelo más adecuado, se utilizó una regresión
ordinal, ya que la variable respuesta SatisTime es
ordinal y refleja niveles de satisfacción con un orden
natural (por ejemplo, baja, media y alta). Este tipo de modelo permite
estimar la probabilidad acumulada de que un individuo se encuentre en
una categoría de satisfacción mayor, considerando las variables
predictoras disponibles.
library(readxl)
library(MASS) # para polr (regresión ordinal)
library(dplyr)
## Warning: package 'dplyr' was built under R version 4.4.3
##
## Adjuntando el paquete: 'dplyr'
## The following object is masked from 'package:MASS':
##
## select
## 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(tidyr)
## Warning: package 'tidyr' was built under R version 4.4.1
# Cargar datos
datos <- read_excel("C:/Users/josep_o4goibb/Documents/2025-2/1- Cat Dat/11- Trabajo Final/Movi.xlsx")
# Revisar estructura
str(datos)
## tibble [207 × 10] (S3: tbl_df/tbl/data.frame)
## $ Per : chr [1:207] "E001" "E002" "E003" "E004" ...
## $ SatisTime : num [1:207] 3 1 1 3 3 2 2 1 3 3 ...
## $ Sexo : num [1:207] 1 1 1 1 1 2 1 1 2 1 ...
## $ Edad : num [1:207] 40 22 33 22 52 26 36 31 30 45 ...
## $ Victima Conflicto: num [1:207] 2 2 2 2 2 2 2 2 2 2 ...
## $ Vive En Bta : num [1:207] 1 1 1 1 1 1 1 2 1 1 ...
## $ Estrato : num [1:207] 1 1 2 1 3 3 3 3 1 3 ...
## $ Discapacidad : num [1:207] 2 2 2 2 1 2 2 2 2 2 ...
## $ Educacion : num [1:207] 3 3 4 4 3 5 4 5 5 3 ...
## $ Medio Tr : num [1:207] 3 3 4 3 5 4 3 3 4 4 ...
# Reemplazar valores -999 por NA
datos$Estrato[datos$Estrato == -999] <- NA
# Convertir variables categóricas
datos$Sexo <- as.factor(datos$Sexo)
datos$`Victima Conflicto` <- as.factor(datos$`Victima Conflicto`)
datos$`Vive En Bta` <- as.factor(datos$`Vive En Bta`)
datos$Discapacidad <- as.factor(datos$Discapacidad)
datos$`Medio Tr` <- as.factor(datos$`Medio Tr`)
# Revisar resumen de datos
summary(datos)
## Per SatisTime Sexo Edad Victima Conflicto
## Length:207 Min. :1.000 1:174 Min. :18.00 1: 16
## Class :character 1st Qu.:1.000 2: 33 1st Qu.:29.00 2:191
## Mode :character Median :2.000 Median :37.00
## Mean :2.203 Mean :39.53
## 3rd Qu.:3.000 3rd Qu.:49.00
## Max. :3.000 Max. :86.00
##
## Vive En Bta Estrato Discapacidad Educacion Medio Tr
## 1:178 Min. :1.00 1: 11 Min. :1.000 1:10
## 2: 29 1st Qu.:2.00 2:196 1st Qu.:3.000 2:13
## Median :2.00 Median :4.000 3:75
## Mean :2.53 Mean :3.932 4:90
## 3rd Qu.:3.00 3rd Qu.:5.000 5:19
## Max. :6.00 Max. :6.000
## NA's :7
Los umbrales estimados son -1.0460 para la categoría 1|2 y 0.1603 para la categoría 2|3. Estos valores se interpretan en una escala latente subyacente que representa la satisfacción de manera continua. El primer umbral indica el límite entre los niveles “bajo” y “medio”, mientras que el segundo umbral separa “medio” y “alto”. Los errores estándar y los valores t asociados muestran la precisión de estas estimaciones.
Los valores de Residual Deviance (425.5491) y AIC (429.5491) reflejan la calidad del ajuste del modelo nulo. Estos sirven como referencia para futuros modelos con predictores; un modelo que logre un AIC menor se consideraría mejor, pues indicaría que las variables incluidas aportan información relevante para explicar la satisfacción.
Las probabilidades predichas para cada observación muestran que todos los clientes tienen la misma distribución de probabilidades: aproximadamente 26% para baja, 28% para media y 46% para alta satisfacción. Esto se debe a que el modelo nulo no incorpora predictores, asignando probabilidades iguales a todos los individuos según la frecuencia global de cada categoría.
library(MASS) # para polr
library(dplyr)
# Convertir la variable respuesta a factor ordinal
datos$SatisTime <- factor(datos$SatisTime, ordered = TRUE)
# Crear un dataset solo con filas completas
datos_completos <- datos %>% na.omit()
# Ajustar modelo completo con todas las variables predictoras
modelo_completo <- polr(SatisTime ~ Sexo + Edad + `Victima Conflicto` +
`Vive En Bta` + Estrato + Discapacidad + Educacion + `Medio Tr`,
data = datos_completos, Hess = TRUE)
# Selección de variables paso a paso basada en AIC
modelo_optimo <- stepAIC(modelo_completo, direction = "both", trace = FALSE)
# Resumen del modelo final
summary(modelo_optimo)
## Call:
## polr(formula = SatisTime ~ 1, data = datos_completos, Hess = TRUE)
##
## No coefficients
##
## Intercepts:
## Value Std. Error t value
## 1|2 -1.0460 0.1612 -6.4884
## 2|3 0.1603 0.1419 1.1302
##
## Residual Deviance: 425.5491
## AIC: 429.5491
# Intervalos de confianza para los coeficientes
ci <- confint(modelo_optimo)
## Waiting for profiling to be done...
ci
## 2.5 % 97.5 %
# Probabilidades predichas (opcional)
predicciones <- predict(modelo_optimo, type = "probs")
head(predicciones)
## 1 2 3
## 1 0.26 0.28 0.46
## 2 0.26 0.28 0.46
## 3 0.26 0.28 0.46
## 4 0.26 0.28 0.46
## 5 0.26 0.28 0.46
## 6 0.26 0.28 0.46
El modelo ajustado corresponde al modelo nulo, ya
que no incluye ninguna variable predictora y solo estima los
umbrales que separan las categorías ordinales de
SatisTime.
Los umbrales estimados son -1.0460 para la categoría 1|2 y 0.1603 para la categoría 2|3. Estos valores se interpretan en una escala latente que representa la satisfacción de manera continua. El primer umbral indica el límite entre los niveles “bajo” y “medio”, mientras que el segundo umbral separa “medio” y “alto”. Los errores estándar y los valores t asociados muestran la precisión de estas estimaciones.
Los valores de Residual Deviance (425.5491) y AIC (429.5491) reflejan la calidad del ajuste del modelo nulo. Estos sirven como referencia para futuros modelos con predictores; un modelo con AIC menor indicaría que las variables incluidas aportan información relevante para explicar la satisfacción.
Las probabilidades predichas muestran que todos los clientes tienen la misma distribución: aproximadamente 26% para baja, 28% para media y 46% para alta satisfacción. Esto se debe a que el modelo nulo no incorpora predictores, asignando probabilidades iguales a todos los individuos según la frecuencia global de cada categoría.
library(ggplot2)
# 1. Gráfico de barras de la distribución de SatisTime
ggplot(datos_completos, aes(x = SatisTime)) +
geom_bar(fill = "#4C72B0") +
labs(title = "Distribución de la Satisfacción con el Tiempo de Espera",
x = "Nivel de satisfacción",
y = "Número de clientes") +
theme_minimal(base_size = 14)
# 2. Gráfico de probabilidades predichas por el modelo nulo
# Convertir predicciones a data frame para ggplot
pred_df <- as.data.frame(predicciones)
pred_df$Observacion <- 1:nrow(pred_df)
# Tomamos solo las primeras 50 observaciones para no saturar el gráfico
pred_df_long <- pred_df[1:50, ] %>%
tidyr::pivot_longer(cols = c("1","2","3"), names_to = "Nivel", values_to = "Probabilidad")
ggplot(pred_df_long, aes(x = Observacion, y = Probabilidad, color = Nivel)) +
geom_line(size = 1) +
geom_point() +
labs(title = "Probabilidades predichas de SatisTime según el modelo nulo",
x = "Observación",
y = "Probabilidad",
color = "Nivel de satisfacción") +
theme_minimal(base_size = 14)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
El gráfico del histograma, me muestra cuántos clientes se encuentran en cada nvel de satisfacción, permitiendo ver la distribución general.
El gráfico de las predicciones representa las probabilidades predichas por el modelo nulo paa las primeras 50 observaciones. Esto ilustra que el odelo nulo asigna probabilidades similares a todos, sin diferenciar entre individuos ( ya que no hay predictores)
Finalmente, el modelo nulo permitió visualizar la distribución general de la satisfacción en la muestra y funciona como una referencia inicial. La falta de predictores significativos sugiere que, con las variables disponibles, no es posible explicar de manera estadísticamente relevante las diferencias en la probabilidad de satisfacción entre los clientes, según el criterio AIC.