—————————————————————————-
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