—————————————————————————-

MRLO: SIMULACIÓN DE DATOS Y PREDICCIÓN DE SATISFACIÓN

—————————————————————————-

PASO 01: SIMULAR LOS DATOS

Cargar Paquetes

library(MASS)  # Para la función polr
library(dplyr)
## 
## 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

Fijar Semilla para Reproductibilidad

set.seed(123)

Datos

n <- 100
horas <- runif(n, 1, 6)  # Horas entre 1 y 6

Generar la Variable Satisfacción Ordinal según un Modelo Logístico Ordinal

Definimos Coeficientes

beta <- 0.8
theta <- c(2.5, 4.0)  # Umbrales (baja/media y media/alta)

Calcular Probabilidades Acumuladas

z1 <- theta[1] - beta * horas
z2 <- theta[2] - beta * horas

p1 <- 1 / (1 + exp(-z1))  # P(satisfacción ≤ baja)
p2 <- 1 / (1 + exp(-z2))  # P(satisfacción ≤ media)

Probabilidades Individuales

prob_baja <- p1
prob_media <- p2 - p1
prob_alta <- 1 - p2

Asignar Nivel de Satisfacción Aleatoriamente según Probabilidades

satisfaccion <- mapply(function(p1, p2, p3) {
  sample(c("baja", "media", "alta"), size = 1, prob = c(p1, p2, p3))
}, prob_baja, prob_media, prob_alta)

Crear el Dataframe

datos <- data.frame(
  horas = horas,
  satisfaccion = ordered(satisfaccion, levels = c("baja", "media", "alta"))
)
head(datos)

PASO 02: AJUSTAR EL MODELO LOGÍSTICO ORDINAL - MLO

Ajustar el Modelo

modelo <- polr(satisfaccion ~ horas, data = datos, Hess = TRUE)
summary(modelo)
## Call:
## polr(formula = satisfaccion ~ horas, data = datos, Hess = TRUE)
## 
## Coefficients:
##        Value Std. Error t value
## horas 0.7996     0.1626   4.918
## 
## Intercepts:
##            Value  Std. Error t value
## baja|media 2.5138 0.6002     4.1880 
## media|alta 3.9809 0.6862     5.8012 
## 
## Residual Deviance: 184.8776 
## AIC: 190.8776

PASO 03: INTERPRETAR RESULTADOS

Resumen de Coeficientes y Cálculo de P-valores

coefs <- coef(summary(modelo))
p <- pnorm(abs(coefs[, "t value"]), lower.tail = FALSE) * 2
cbind(coefs, "p value" = p)
##                Value Std. Error  t value      p value
## horas      0.7995604  0.1625810 4.917920 8.746852e-07
## baja|media 2.5138220  0.6002393 4.188033 2.813828e-05
## media|alta 3.9809368  0.6862275 5.801191 6.584549e-09

PASO 04: PREDECIR PARA UN CASO

Predecir Probabilidades para una Nueva Observación (04 horas)

nuevo <- data.frame(horas = 4)
predict(modelo, newdata = nuevo, type = "probs")
##      baja     media      alta 
## 0.3352756 0.3509851 0.3137393