Gustavo Martínez-Valdes
2022-06-17
El objetivo de la sesión consiste en revisar las características básicas de un modelo de regresión logística ordinal.
Los temas a tratar en la presentación son:
Los modelos de regresión permiten identificar la magnitud del efecto de una variable explicativa (\(X\)) sobre una variable explicada (\(Y\)).
Ámbito de los modelos en el que la variable explicada (\(Y\)) es de corte categórica.
Utilidad del modelo: aplicación cuando la variable \(Y\) es medida en una escala ordinal.
Los resultados de estos modelos se arrojan en probabilidades acumuladas de las categorías de \(Y\).
Los modelos logit ordinales son un punto intermedio entre los modelos logit binomiales y los modelos de regresión lineal (OLS).
Supuesto básico de estos modelos:
A medida que una variable \(X\) se incrementa, esto resulta en un cambio hacia cualquiera de las categorías en los extremos de las respuestas ordinales de \(Y\).
## [1] "en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/C"
Primer requisito para el uso de este tipo de modelos:
La variable explicada (\(Y\)) es de tipo categórica, medida en escala ordinal.
Características de una variable ordinal:
Muchas de las variables utilizadas en las Ciencias Sociales son de tipo ordinal.
¿Se les ocurren ejemplos de variables ordinales?
Ejemplos de este tipo de variables se encuentran en el libro de códigos de la base de datos de Latinobarómetro.
Libro de códigos de Latinobarómetro 2018.
¿Cuál de las variables está en escala nominal y cuál en escala ordinal?
Por ejemplo: A partir de la siguiente tabla se pueden calcular las probabilidades por categoría o marginales, así como probabilidades acumuladas de categorías.
## P13STGBS.A Grado de satisfacción con el funcionamiento de la democracia
## Frequency Percent Valid Percent
## 1 1376 6.811 7.093
## 2 3615 17.892 18.634
## 3 8879 43.947 45.768
## 4 5530 27.371 28.505
## NA's 804 3.979
## Total 20204 100.000 100.000
Probabilidades por categoría:
\(P(Y=1) = \frac{n_1}{n} = 7.093\%\)
\(P(Y=2) = \frac{n_2}{n} = 18.634\%\)
\(P(Y=3) = \frac{n_3}{n} = 45.768\%\)
\(P(Y=4) = \frac{n_4}{n} = 1 - P(Y \leq 3) = 28.505\%\)
Probabilidades acumuladas de categorías:
\(P(Y \leq 1) = \frac{n_1}{n} = 7.093\%\)
\(P(Y \leq 2) = \frac{n_1 + n_2}{n} = 7.093 + 18.634 = 25.727\%\)
\(P(Y \leq 3) = \frac{n_1 + n_2 + n_3}{n} = 7.093 + 18.634 + 45.768 = 71.495\%\)
\(P(Y \leq 4) = \frac{n_1 + n_2 + n_3 + n_4}{n} = 7.093 + 18.634 + 45.768 + 28.505 = 100\%\)
Ecuación:
\[L_k(X) = log\left(\frac{F_k(X)}{1-F_k(X)}\right) = \alpha_k - \beta_1X1 - ...-\beta_kX_k\]
Razón del signo negativo en la ecuación:
Es importante tener en cuenta que la variable explicada (\(Y\)) es de corte categórico y en escala de medida ordinal.
Este tipo de variable son reconocidas como del tipo factor en R.
Variables de interés:
Revisión de la estructura de cada variable:
## tibble [20,204 × 2] (S3: tbl_df/tbl/data.frame)
## $ P13STGBS.A: dbl+lbl [1:20204] 3, 4, 3, 3, 3, 3, 3, 4, 3, 4, 4, 2, 4, 1, 3, 3, 2, 2...
## ..@ label : chr "P13STGBS.A Grado de satisfacción con el funcionamiento de la democracia"
## ..@ format.spss : chr "F2.0"
## ..@ display_width: int 2
## ..@ labels : Named num [1:8] -4 -3 -2 -1 1 2 3 4
## .. ..- attr(*, "names")= chr [1:8] "No preguntada" "No aplicable" "No responde" "No sabe" ...
## $ P13STGBS.B: dbl+lbl [1:20204] 4, 4, 2, 3, 3, 3, 4, 4, 3, 4, 4, 3, 4, ...
## ..@ label : chr "P13STGBS.B Satisfacción con el funcionamiento de la economía en (país)"
## ..@ format.spss : chr "F2.0"
## ..@ display_width: int 2
## ..@ labels : Named num [1:9] -5 -4 -3 -2 -1 1 2 3 4
## .. ..- attr(*, "names")= chr [1:9] "Missing; no disponible" "No preguntado" "No aplicable" "No contesta" ...
## - attr(*, "label")= chr "filelabel"
factor(). Aquí también se cambiaron los nombres de las variables para facilitar su manejo.## Factor w/ 4 levels "1","2","3","4": 3 4 3 3 3 3 3 4 3 4 ...
## Factor w/ 4 levels "1","2","3","4": 4 4 2 3 3 3 4 4 3 4 ...
as.ordered().## Ord.factor w/ 4 levels "1"<"2"<"3"<"4": 3 4 3 3 3 3 3 4 3 4 ...
rev dentro del comando levels().datos $ y <- factor(datos $ y, levels = rev(levels(datos $ y)))
datos $ x1 <- factor(datos $ x1, levels = rev(levels(datos $ x1)))
str(datos $ y)## Ord.factor w/ 4 levels "4"<"3"<"2"<"1": 2 1 2 2 2 2 2 1 2 1 ...
## Factor w/ 4 levels "4","3","2","1": 1 1 3 2 2 2 1 1 2 1 ...
Ahora es importante revisar la distribución de las variables.
## y x1
## 4 :5530 4 :7283
## 3 :8879 3 :9005
## 2 :3615 2 :2561
## 1 :1376 1 : 766
## NA's: 804 NA's: 589
##
## 4 3 2 1
## 4 4442 833 139 42
## 3 1976 6136 564 122
## 2 495 1382 1538 134
## 1 174 466 262 443
##
## Pearson's Chi-squared test
##
## data: tabla1
## X-squared = 12905, df = 9, p-value < 2.2e-16
La realización de un modelo de regresión logístico ordinal se impelmenta con el comando polr()(proportional ordinal logistic regression), que es parte de la libraría MASS().
La estructura del comando en R se parece a la de los modelos de regresión lineal (OLS).
modelo1 <- polr(y ~ x1, data = datos, Hess = TRUE, na.action = na.omit, method = "logistic")
summary(modelo1)## Call:
## polr(formula = y ~ x1, data = datos, na.action = na.omit, Hess = TRUE,
## method = "logistic")
##
## Coefficients:
## Value Std. Error t value
## x13 2.191 0.03610 60.68
## x12 3.790 0.05146 73.65
## x11 5.335 0.08875 60.11
##
## Intercepts:
## Value Std. Error t value
## 4|3 0.4170 0.0248 16.7957
## 3|2 3.2473 0.0364 89.1130
## 2|1 5.1950 0.0478 108.7592
##
## Residual Deviance: 37845.35
## AIC: 37857.35
## (1056 observations deleted due to missingness)
Una de las limitaciones del comando polr() es que no arroja los valores del “p-value”, para ello se deben calcular aparte.
tabla_c <- coef(summary(modelo1))
p <- pnorm(abs(tabla_c[, "t value"]), lower.tail = FALSE) * 2
tabla_c <- cbind(tabla_c, "p value" = p)
tabla_c## Value Std. Error t value p value
## x13 2.1907172 0.03610285 60.67989 0.000000e+00
## x12 3.7902175 0.05146493 73.64661 0.000000e+00
## x11 5.3348968 0.08875338 60.10922 0.000000e+00
## 4|3 0.4169645 0.02482561 16.79574 2.622166e-63
## 3|2 3.2473122 0.03644038 89.11302 0.000000e+00
## 2|1 5.1949565 0.04776567 108.75920 0.000000e+00
Así se crea una tabla con los resultados del modelo1 en el que se añadió una columna con los valores del “p-value”.
Asimismo también se pueden calcular los intevalos de confianza para los coeficientes de regresión \(\beta\), para lo que se usa el comando confint().
## Waiting for profiling to be done...
## 2.5 % 97.5 %
## x13 2.120509 2.262061
## x12 3.690218 3.891991
## x11 5.160619 5.508597
Es importante recordar que estos modelos crearán varias ecuaciones de regresión, según la cantidad de \(Y_{k-1}\) categorías.
Ecuaciones: \(logit(\hat{P}(Y \leq 4)) = 0.42 - (2.19*x1_{k=3}) - (3.79*x1_{k=2}) - (5.33*x1_{k=1})\) \(logit(\hat{P}(Y \leq 3)) = 3.25 - (2.19*x1_{k=3}) - (3.79*x1_{k=2}) - (5.33*x1_{k=1})\) \(logit(\hat{P}(Y \leq 2)) = 5.19 - (2.19*x1_{k=3}) - (3.79*x1_{k=2}) - (5.33*x1_{k=1})\)
Interpretación de los coeficientes de regresión (\(\beta\)) en unidades logarítmicas.
Las unidades logarítmicas se pueden transformar en unidades probabilísticas o porcentuales, lo que facilita su interpretación.
## x13 x12 x11
## 8.941624 44.266025 207.451341
exp()), estos se arrojan en razones de probabilidades (odds ratio) o momios de probabilidad. Y, a su vez, estos pueden ser transformados a porcentajes posteriormente.## x13 x12 x11
## 794.1624 4326.6025 20645.1341
Además de ayudar a medir el efecto de la variable explicativa sobre la variable explicada, en términos probabilísticos, estos modelos también permiten predecir las probabilidades de cada caso para ubicarse dentro de cada una de las categorías de \(Y\).
Para el cálculo de las probabilidades esperadas, se utiliza el comando predict().
## 4 3 2 1
## 1 0.60 0.36 0.03 0.01
## 2 0.60 0.36 0.03 0.01
## 3 0.03 0.33 0.44 0.20
## 4 0.15 0.60 0.21 0.05
## 5 0.15 0.60 0.21 0.05
data frame, así como las probabilidades esperadas para ubicarse en cada uno de las categorías de \(Y\).Con el fin de evaluar la bondad de ajuste del modelo diseñado, comúnmente se revisan la matriz de confusión y el tamaño de error del modelo.
##
## pred1 4 3 2 1
## 4 4442 1976 495 174
## 3 833 6136 1382 466
## 2 139 564 1538 262
## 1 42 122 134 443
El supuesto de la matriz de confusión consiste en que si todos los casos fueran bien clasificados por el modelo, entonces estos se ubicarían en la diagonal descendente de la tabla (donde se intersectan las celdas 4-4, 3-3, 2-2, 1-1).
Los casos que se ubican fuera de dicha diagonal, son casos que el modelo clasificó mal. Estos son errores del modelo.
La medición del tamó de error del modelo se calcula a partir de conocer el porcentaje de casos que se ubicaron por fuera de la diagonal de la matriz de confusión.
## [1] 0.344109
¿Este tamaño de error es aceptable o no?
¿dudas o comentarios?