Modelos lineales generalizados

Regresión binomial: Ejemplo: Ingreso a la escuela graduada




logo

Especialización en Estadística Aplicada

Roberto Trespalacios

Ejemplo donde se usa regresión logística (Binomial)

Ejemplo 1. Supongamos que estamos interesados en los factores que influyen en si un candidato político gana una elección. La variable de resultado (respuesta) es binaria (0/1); ganar o perder. Las variables de predicción de interés son la cantidad de dinero gastado en la campaña, la cantidad de tiempo dedicado a la campaña negativa y si el candidato es o no un titular.

Ejemplo 2. Un investigador estÔ interesado en cómo las variables, como el GRE (puntaje del examen de Graduados), el GPA (promedio de calificaciones) y el prestigio de la institución de pregrado, tienen efecto en la admisión a la escuela de postgrado. La variable de respuesta, admitir / no admitir, es una variable binaria.

Ejemplo: (Ingreso a la escuela graduada)

Para nuestro anÔlisis de datos a continuación, vamos a ampliar el ejemplo 2 sobre cómo ingresar a la escuela de postgrado.

La base de datos contiene 400 filas y 4 columnas(variables):

  • admisión (admit) variable que no dice 1 = si es admitido, 0 = no es admitido.
  • gre (gre) puntage en el examen general para ingreso a la escuela graduada (continua).
  • gpa (gpa) puntage promedio general el pregrado (continua).
  • rango (rank) de la escuela de pregrado de la cual proveiene el estudiante (categorica del 1 a 4).

Ejemplo: (Ingreso a la escuela graduada)

# Lee base de datos del sitio web
library(readr)
ingreso <- read_csv("~/Desktop/libro_glm/datos/ingreso.csv")
head(ingreso)
# A tibble: 6 x 5
     X1 admit   gre   gpa  rank
  <int> <int> <int> <dbl> <int>
1     1     0   380  3.61     3
2     2     1   660  3.67     3
3     3     1   800  4        1
4     4     1   640  3.19     4
5     5     0   520  2.93     4
6     6     1   760  3        2

Summary, desviación estandar de los datos y tabla de contingencia

summary(ingreso)
       X1            admit             gre             gpa       
 Min.   :  1.0   Min.   :0.0000   Min.   :220.0   Min.   :2.260  
 1st Qu.:100.8   1st Qu.:0.0000   1st Qu.:520.0   1st Qu.:3.130  
 Median :200.5   Median :0.0000   Median :580.0   Median :3.395  
 Mean   :200.5   Mean   :0.3175   Mean   :587.7   Mean   :3.390  
 3rd Qu.:300.2   3rd Qu.:1.0000   3rd Qu.:660.0   3rd Qu.:3.670  
 Max.   :400.0   Max.   :1.0000   Max.   :800.0   Max.   :4.000  
      rank      
 Min.   :1.000  
 1st Qu.:2.000  
 Median :2.000  
 Mean   :2.485  
 3rd Qu.:3.000  
 Max.   :4.000  
sapply(ingreso, sd)
         X1       admit         gre         gpa        rank 
115.6143013   0.4660867 115.5165364   0.3805668   0.9444602 

Observe que para la tabla de contingencia no deben haber datos fantantes

##  tabla de contingencia categorica two-way 
xtabs(~admit + rank, data = ingreso)
     rank
admit  1  2  3  4
    0 28 97 93 55
    1 33 54 28 12

Usando el modelo logit

ingreso$rank <- factor(ingreso$rank)
mod.logit <- glm(admit ~ gre + gpa + rank, data = ingreso, family = "binomial")
summary(mod.logit)

Call:
glm(formula = admit ~ gre + gpa + rank, family = "binomial", 
    data = ingreso)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.6268  -0.8662  -0.6388   1.1490   2.0790  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -3.989979   1.139951  -3.500 0.000465 ***
gre          0.002264   0.001094   2.070 0.038465 *  
gpa          0.804038   0.331819   2.423 0.015388 *  
rank2       -0.675443   0.316490  -2.134 0.032829 *  
rank3       -1.340204   0.345306  -3.881 0.000104 ***
rank4       -1.551464   0.417832  -3.713 0.000205 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 499.98  on 399  degrees of freedom
Residual deviance: 458.52  on 394  degrees of freedom
AIC: 470.52

Number of Fisher Scoring iterations: 4

Comentarios del summary del modelo logit

  • En el resultado anterior, lo primero que vemos es la llamada, esto es R recordĆ”ndonos cuĆ”l fue el modelo que ejecutamos, quĆ© opciones especificamos, etc.
  • Luego vemos los residuales de desviación, que son una medida del ajuste del modelo. Esta parte del resultado muestra la distribución de los residuos de desviación para casos individuales utilizados en el modelo. A continuación discutimos cómo usar resĆŗmenes de la estadĆ­stica de la desviación para evaluar el ajuste del modelo.
  • La siguiente parte del resultado muestra los coeficientes, sus errores estĆ”ndar, la estadĆ­stica z (a veces llamada estadĆ­stica z de Wald) y los p-valores asociados.
  • Tanto gre como gpa son estadĆ­sticamente significativos, al igual que los tres tĆ©rminos para rank. Los coeficientes de regresión logĆ­stica dan el cambio en las probabilidades del logaritmo (log odds) del resultado para un aumento de una unidad en la variable predictora.
    • Por cada cambio de unidades en gre, las probabilidades log de admisión (versus no admisión) aumentan en 0.002.
    • Para un aumento de una unidad en gpa, las probabilidades de registro (log odds) de admisión a la escuela de posgrado aumenta en 0.804.
    • Las variables indicadoras de rango tienen una interpretación ligeramente diferente. Por ejemplo, haber asistido a una institución de pregrado con un rank de 2, frente a una institución con un rank de 1, cambia las probabilidades de registro (log odds) de admisión en -0.675.

Comentarios del summary del modelo logit

  • Debajo de la tabla de coeficientes se encuentran los Ć­ndices de ajuste, incluidos los residuales nulos y de desviación y el AIC. MĆ”s adelante mostramos un ejemplo de cómo puede usar estos valores para ayudar a evaluar el ajuste del modelo.
  • Podemos usar la función confint para obtener intervalos de confianza para las estimaciones de los coeficientes. Tenga en cuenta que para los modelos logĆ­sticos, los intervalos de confianza se basan en la función de verosimilitud de registro logarĆ­tmico (log odd).
  • TambiĆ©n podemos obtener CI basados solo en los errores estĆ”ndar usando el mĆ©todo predeterminado.

Intervalos de confianza IC estimados con log-likelihood

confint(mod.logit)
                    2.5 %       97.5 %
(Intercept) -6.2716202334 -1.792547080
gre          0.0001375921  0.004435874
gpa          0.1602959439  1.464142727
rank2       -1.3008888002 -0.056745722
rank3       -2.0276713127 -0.670372346
rank4       -2.4000265384 -0.753542605

IC estimados con errores estandar

confint.default(mod.logit)
                    2.5 %       97.5 %
(Intercept) -6.2242418514 -1.755716295
gre          0.0001202298  0.004408622
gpa          0.1536836760  1.454391423
rank2       -1.2957512650 -0.055134591
rank3       -2.0169920597 -0.663415773
rank4       -2.3703986294 -0.732528724

Test de Wald

  • Podemos probar un efecto general de rango usando la función wald.test de la librerĆ­a aod. El orden en que los coeficientes se dan en la tabla de coeficientes es el mismo que el orden de los tĆ©rminos en el modelo.
  • Esto es importante porque la función wald.test se refiere a los coeficientes por su orden en el modelo.
  • La función wald.test tiene los parĆ”metros siguientes.
    • b suministra los coeficientes
    • Sigma proporciona la matriz de covarianza de varianza de los tĆ©rminos de error,
  • Finalmente, Terms le dicen a R quĆ© tĆ©rminos del modelo deben probarse, en este caso, los tĆ©rminos 4, 5 y 6 son los tres tĆ©rminos para los niveles de rango
library("aod")
wald.test(b = coef(mod.logit), Sigma = vcov(mod.logit), Terms = 4:6)
Wald test:
----------

Chi-squared test:
X2 = 20.9, df = 3, P(> X2) = 0.00011

Comentarios del test de Wald

l <- cbind(0, 0, 0, 1, -1, 0)
wald.test(b = coef(mod.logit), Sigma = vcov(mod.logit), L = l)
Wald test:
----------

Chi-squared test:
X2 = 5.5, df = 1, P(> X2) = 0.019
  • El estadĆ­stico de prueba de chi-cuadrado de 20.9, con tres grados de libertad se asocia con un p-valor de 0.00011, lo que indica que el efecto general del rango es estadĆ­sticamente significativo.
  • TambiĆ©n podemos probar hipótesis adicionales sobre las diferencias en los coeficientes para los diferentes niveles de rango.
  • A continuación, probamos que el coeficiente para rank = 2 es igual al coeficiente para rank = 3.
  • La primera lĆ­nea de código a continuación crea un vector l que define la prueba que queremos realizar.
  • En este caso, queremos probar la diferencia (resta) de los tĆ©rminos para rank = 2 y rank = 3 (es decir, los tĆ©rminos 4 y 5 en el modelo).
  • Para contrastar estos dos tĆ©rminos, multiplicamos uno por 1 y el otro por -1.
  • Los otros tĆ©rminos en el modelo no estĆ”n involucrados en la prueba, por lo que se multiplican por 0.
  • La segunda lĆ­nea de código a continuación usa L = l para decirle a R que deseamos basar la prueba en el vector l (en lugar de usar los tĆ©rminos opción como hicimos anteriormente).
  • El estadĆ­stico de prueba de chi-cuadrado de 5.5 con 1 gl se asocia con un p-valor= 0.019, lo que indica que la diferencia entre el coeficiente para el rango = 2 y el coeficiente para el rango = 3 es estadĆ­sticamente significativa.

Odds-ratios de los coeficientes e intervalos

  • Podemos hacer exp de los coeficientes e interpretarlos como odds-ratios.
  • Podemos usar la misma lógica para obtener odds ratios y sus intervalos de confianza, exponiendo los intervalos de confianza desde antes.
  • Para ponerlo todo en una tabla, usamos cbind para enlazar los coeficientes y los intervalos de confianza en sentido de columna.
## odds ratios and 95% CI
exp(cbind(OR = coef(mod.logit), confint(mod.logit)))
                   OR       2.5 %    97.5 %
(Intercept) 0.0185001 0.001889165 0.1665354
gre         1.0022670 1.000137602 1.0044457
gpa         2.2345448 1.173858216 4.3238349
rank2       0.5089310 0.272289674 0.9448343
rank3       0.2617923 0.131641717 0.5115181
rank4       0.2119375 0.090715546 0.4706961

Ahora podemos decir que para un aumento de una unidad en gpa, las probabilidades (odds) de ser admitido en la escuela de postgrado (versus no ser admitido) aumentan en un factor de 2.23.

Creación de nuevos datos predichos

Comenzaremos por calcular la probabilidad de admisión prevista en cada valor de rango, manteniendo gre y gpa en sus medios. Primero creamos y vemos el marco de datos.

newdata1 <- with(ingreso, data.frame(gre = mean(gre), gpa = mean(gpa), rank = factor(1:4)))

## datos newdata1
newdata1
    gre    gpa rank
1 587.7 3.3899    1
2 587.7 3.3899    2
3 587.7 3.3899    3
4 587.7 3.3899    4

agreguemos ahora el valor de la probabilidad predicha para cada rango

newdata1$rankP <- predict(mod.logit, newdata = newdata1, type = "response")
newdata1
    gre    gpa rank     rankP
1 587.7 3.3899    1 0.5166016
2 587.7 3.3899    2 0.3522846
3 587.7 3.3899    3 0.2186120
4 587.7 3.3899    4 0.1846684

Creación de mÔs datos predichos

  • En el resultado anterior, vemos que la probabilidad prevista de ser aceptado en un programa de postgrado es de 0.52 para estudiantes de las instituciones de pregrado de mayor prestigio (rango = 1) y 0.18 para estudiantes de las instituciones de menor rango (rango = 4), con gre y gpa por sus medios.
  • Podemos hacer algo muy similar para crear una tabla de probabilidades predichas que varĆ­e el valor de gre y rank. Vamos a trazarlos, por lo que crearemos 100 valores de gre entre 200 y 800, en cada valor de rango (es decir, 1, 2, 3 y 4).
newdata2 <- with(ingreso, data.frame(gre = rep(seq(from = 200, to = 800, length.out = 100),
    4), gpa = mean(gpa), rank = factor(rep(1:4, each = 100))))

Datos predichos con sus intervalos de confianza

newdata3 <- cbind(newdata2, predict(mod.logit, newdata = newdata2, type = "link",
    se = TRUE))
newdata3 <- within(newdata3, {
    PredictedProb <- plogis(fit)
    LL <- plogis(fit - (1.96 * se.fit))
    UL <- plogis(fit + (1.96 * se.fit))
})

## veamos aldunas lineas de los datos
head(newdata3)
       gre    gpa rank        fit    se.fit residual.scale        UL
1 200.0000 3.3899    1 -0.8114870 0.5147714              1 0.5492064
2 206.0606 3.3899    1 -0.7977632 0.5090986              1 0.5498513
3 212.1212 3.3899    1 -0.7840394 0.5034491              1 0.5505074
4 218.1818 3.3899    1 -0.7703156 0.4978239              1 0.5511750
5 224.2424 3.3899    1 -0.7565919 0.4922237              1 0.5518545
6 230.3030 3.3899    1 -0.7428681 0.4866494              1 0.5525464
         LL PredictedProb
1 0.1393812     0.3075737
2 0.1423880     0.3105042
3 0.1454429     0.3134499
4 0.1485460     0.3164108
5 0.1516973     0.3193867
6 0.1548966     0.3223773

GrƔfica de modelo logit

También puede ser útil usar grÔficos de probabilidades pronosticadas para comprender y / o presentar el modelo. Utilizaremos el paquete ggplot2 para graficar. A continuación hacemos una grÔfica con las probabilidades predichas e intervalos de confianza del 95%.

library("ggplot2")
p <- ggplot(newdata3, aes(x = gre, y = PredictedProb)) + geom_ribbon(aes(ymin = LL,
        ymax = UL, fill = rank), alpha = 0.2) + geom_line(aes(colour = rank),
        size = 1)+
        theme(text=element_text(size = 20))
p

plot of chunk unnamed-chunk-17