11.1 Resultados categóricos ordinales
Los resultados categóricos ordenados, como las escalas de Likert, tienen un orden natural pero no un espaciado fijo. Los modelos de enlace acumulativo asumen que una variable latente continua se divide en categorías mediante umbrales.
11.1.1 El modelo de enlace acumulativo
La idea: existe una variable latente continua que determina la respuesta. La categoría observada se determina por dónde cae relativo a los puntos de corte :
donde es el predictor lineal. Los puntos de corte se estiman a partir de los datos.
# Ordered categorical (cumulative link) model
# Simulate Likert-scale data (1-7 response)
set.seed(42)
n <- 300
# Latent continuous variable
x <- runif(n, 0, 10)
phi <- -1 + 0.3 * x + rnorm(n, sd = 1)
# Cutpoints for 7 categories (6 cutpoints)
cutpoints <- c(-2, -1, 0, 1, 2, 3)
# Convert to ordered categories
y <- cut(phi, breaks = c(-Inf, cutpoints, Inf), labels = 1:7)
y <- as.numeric(as.character(y))
cat("Ordered categorical data:\n")
cat(" Categories:", paste(sort(unique(y)), collapse = ", "), "\n")
cat(" Distribution:", paste(table(y), collapse = ", "), "\n")
# Fit ordered logistic regression using MASS::polr
library(MASS)
m <- polr(factor(y) ~ x, method = "logistic")
cat("\nOrdered logistic regression:\n")
cat(" Coefficient:", round(coef(m)[1], 3), "\n")
cat(" Cutpoints:", round(m$zeta, 3), "\n")
# Predicted probabilities at x = 2, 5, 8
cat("\nPredicted probabilities:\n")
for (x_val in c(2, 5, 8)) {
pred <- predict(m, data.frame(x = x_val), type = "prob")
cat(sprintf(" x = %d: P(y=1)=%.3f P(y=4)=%.3f P(y=7)=%.3f\n",
x_val, pred[1], pred[4], pred[7]))
}11.1.2 Interpretación del modelo
El coeficiente nos dice cómo se desplaza la variable latente por unidad de aumento en . Un positivo significa que mayor desplaza la distribución hacia categorías más altas.
# Visualize the cumulative link model
set.seed(42)
n <- 300
x <- runif(n, 0, 10)
phi <- -1 + 0.3 * x + rnorm(n, sd = 1)
cutpoints <- c(-2, -1, 0, 1, 2, 3)
y <- as.numeric(cut(phi, breaks = c(-Inf, cutpoints, Inf), labels = 1:7))
library(MASS)
m <- polr(factor(y) ~ x, method = "logistic")
# Plot predicted category probabilities vs x
x_seq <- seq(0, 10, length.out = 200)
pred_matrix <- predict(m, data.frame(x = x_seq), type = "prob")
# Stacked area plot
par(mfrow = c(1, 1))
colors <- rainbow(7)
plot(NULL, xlim = c(0, 10), ylim = c(0, 1),
xlab = "x", ylab = "Probability",
main = "Cumulative link: category probabilities vs x")
for (k in 1:7) {
if (k == 1) {
polygon(c(x_seq, rev(x_seq)), c(pred_matrix[, k], rep(0, length(x_seq))),
col = adjustcolor(colors[k], 0.7), border = NA)
} else {
polygon(c(x_seq, rev(x_seq)),
c(rowSums(pred_matrix[, 1:k]), rev(rowSums(pred_matrix[, 1:(k-1)]))),
col = adjustcolor(colors[k], 0.7), border = NA)
}
}
legend("topright", legend = paste("y =", 1:7), fill = adjustcolor(colors, 0.7),
ncol = 4, cex = 0.8)
cat("As x increases, probability shifts toward higher categories.\n")
cat("The cutpoints determine where the shifts occur.\n")Las categorías ordenadas no son intervalos. Una escala de Likert de 1 a 7 parece números, pero la distancia entre 1 y 2 no es necesariamente la misma que entre 6 y 7. El modelo de enlace acumulativo respeta esto: asume solo el orden, no el espaciado. Los puntos de corte se estiman a partir de los datos, así que el modelo aprende dónde están las fronteras. Esto es más honesto que tratar las categorías ordenadas como números continuos, lo que asume espaciado igual — un supuesto rara vez justificado.
Resumen de la Sección 11.1
- Los resultados categóricos ordenados tienen orden pero no espaciado fijo.
- Modelo de enlace acumulativo: una variable latente se divide en categorías mediante umbrales.
- donde .
- El coeficiente desplaza la variable latente; los puntos de corte se estiman.
- Use
MASS::polr()para regresión logística ordenada en R.