Interpretar un modelo de regresión logística con múltiples predictores

12

Realicé una regresión logística multivariada con la variable dependiente que Yes la muerte en un hogar de ancianos dentro de un cierto período de entrada y obtuve los siguientes resultados (tenga en cuenta que si las variables comienzan en Aella es un valor continuo mientras que las que comienzan Bson categóricas):

Call:
glm(Y ~ A1 + B2 + B3 + B4 + B5 + A6 + A7 + A8 + A9, data=mydata, family=binomial)
Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-1.0728  -0.2167  -0.1588  -0.1193   3.7788  

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept)  20.048631  6.036637   3.321 0.000896 ***
A1           0.051167   0.016942   3.020 0.002527 ** 
B2          -0.664940   0.304299  -2.185 0.028878 *  
B3          -2.825281   0.633072  -4.463 8.09e-06 ***
B4          -2.547931   0.957784  -2.660 0.007809 ** 
B5          -2.862460   1.385118  -2.067 0.038774 *  
A6          -0.129808   0.041286  -3.144 0.001666 ** 
A7           0.020016   0.009456   2.117 0.034276 *  
A8          -0.707924   0.253396  -2.794 0.005210 ** 
A9           0.003453   0.001549   2.229 0.025837 *  
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1   1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 485.10  on 2206  degrees of freedom
Residual deviance: 417.28  on 2197  degrees of freedom
AIC: 437.28

Number of Fisher Scoring iterations: 7

 (Intercept)           A1           B2           B3           B4           B5           A6           A7           A8           A9 
5.093426e+08 1.052499e+00 5.143045e-01 5.929197e-02 7.824340e-02 5.712806e-02 8.782641e-01 1.020218e+00 4.926657e-01 1.003459e+00 

                   2.5 %       97.5 %
(Intercept) 3.703525e+03 7.004944e+13
A1          1.018123e+00 1.088035e+00
B2          2.832698e-01 9.337710e-01
B3          1.714448e-02 2.050537e-01
B4          1.197238e-02 5.113460e-01
B5          3.782990e-03 8.627079e-01
A6          8.099945e-01 9.522876e-01
A7          1.001484e+00 1.039302e+00
A8          2.998207e-01 8.095488e-01
A9          1.000416e+00 1.006510e+00

Como puede ver, todas las variables son "significativas" porque sus valores de p están por debajo del umbral habitual de 0.05. Sin embargo, mirando los coeficientes, no estoy muy seguro de qué hacer con estos resultados. Parece que a pesar de que estas variables contribuyen al modelo, observando las razones de posibilidades, no parecen tener realmente mucho poder predictivo. Es de destacar que cuando calculé el AUC, obtuve aproximadamente 0.8.

¿Puedo decir que este modelo es mejor para predecir la mortalidad (por ejemplo, para predecir que las personas mayores vivirán más allá del período prescrito) en comparación con la predicción de mortalidad?

oort
fuente
44
Este no es un modelo "multivariado" ya que solo tiene una variable de resultado / dependiente. Ajustar un modelo con varios predictores se llama regresión "múltiple".
Gala
Realmente aprecio los comentarios y las respuestas: definitivamente echaré un vistazo al paquete rms. Sin embargo, mi pregunta aún persiste: la mayoría de los odds ratios son <1, ¿implicaría que esas variables en este modelo son mejores para predecir el resultado?
desde el

Respuestas:

18

Te sugiero que uses el excelente paquete rms de Frank Harrell . Contiene muchas funciones útiles para validar y calibrar su modelo. Hasta donde sé, no se puede evaluar el rendimiento predictivo únicamente en función de los coeficientes. Además, te sugiero que uses el bootstrap para validar el modelo. El AUC o índice de concordancia (índice c) es una medida útil del rendimiento predictivo. Un índice c de es bastante alto, pero como en muchos modelos predictivos, el ajuste de su modelo es probablemente demasiado optimista (sobreajuste). Este exceso de optimismo se puede evaluar usando bootstrap. Pero déjame darte un ejemplo:0.8

#-----------------------------------------------------------------------------
# Load packages
#-----------------------------------------------------------------------------

library(rms)

#-----------------------------------------------------------------------------
# Load data
#-----------------------------------------------------------------------------

mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv")

mydata$rank <- factor(mydata$rank)

#-----------------------------------------------------------------------------
# Fit logistic regression model
#-----------------------------------------------------------------------------

mylogit <- lrm(admit ~ gre + gpa + rank, x=TRUE, y=TRUE, data = mydata)
mylogit

                      Model Likelihood     Discrimination    Rank Discrim.    
                         Ratio Test            Indexes          Indexes       
Obs           400    LR chi2      41.46    R2       0.138    C       0.693    
 0            273    d.f.             5    g        0.838    Dxy     0.386    
 1            127    Pr(> chi2) <0.0001    gr       2.311    gamma   0.387    
max |deriv| 2e-06                          gp       0.167    tau-a   0.168    
                                           Brier    0.195                     

          Coef    S.E.   Wald Z Pr(>|Z|)
Intercept -3.9900 1.1400 -3.50  0.0005  
gre        0.0023 0.0011  2.07  0.0385  
gpa        0.8040 0.3318  2.42  0.0154  
rank=2    -0.6754 0.3165 -2.13  0.0328  
rank=3    -1.3402 0.3453 -3.88  0.0001  
rank=4    -1.5515 0.4178 -3.71  0.0002 

En la parte inferior, verá los coeficientes de regresión habituales con los valores correspondientes . En la esquina superior derecha, verá varios índices de discriminación. El denota el índice c (AUC), y un índice c de denota división aleatoria mientras que un índice c de denota predicción perfecta. es la correlación de rango Somers entre las probabilidades predichas y las respuestas observadas. tiene una relación simple con el índice c: . Un de ocurre cuando las predicciones del modelo son aleatorias y cuando , el modelo discrimina perfectamente. En este caso, el índice c es0.5 1 D x y D x y D x y = 2 ( c - 0.5 ) D x y 0 D x y = 1 0.693 > 0.8pC0.51DxyDxyDxyDxy=2(c0.5)Dxy0Dxy=10.693 que es ligeramente mejor que el azar, pero un índice c de es lo suficientemente bueno como para predecir los resultados de los individuos.>0.8

Como se dijo anteriormente, el modelo es probablemente demasiado optimista. Ahora usamos bootstrap para cuantificar el optimismo:

#-----------------------------------------------------------------------------
# Validate model using bootstrap
#-----------------------------------------------------------------------------

my.valid <- validate(mylogit, method="boot", B=1000)
my.valid

          index.orig training    test optimism index.corrected    n
Dxy           0.3857   0.4033  0.3674   0.0358          0.3498 1000
R2            0.1380   0.1554  0.1264   0.0290          0.1090 1000
Intercept     0.0000   0.0000 -0.0629   0.0629         -0.0629 1000
Slope         1.0000   1.0000  0.9034   0.0966          0.9034 1000
Emax          0.0000   0.0000  0.0334   0.0334          0.0334 1000
D             0.1011   0.1154  0.0920   0.0234          0.0778 1000
U            -0.0050  -0.0050  0.0015  -0.0065          0.0015 1000
Q             0.1061   0.1204  0.0905   0.0299          0.0762 1000
B             0.1947   0.1915  0.1977  -0.0062          0.2009 1000
g             0.8378   0.9011  0.7963   0.1048          0.7331 1000
gp            0.1673   0.1757  0.1596   0.0161          0.1511 1000

Concentrémonos en el que está en la parte superior. La primera columna denota el índice original, que era . La columna llamada indica la cantidad de sobreestimación estimada por el modelo. La columna es la estimación original menos el optimismo. En este caso, el corregido por sesgo es un poco más pequeño que el original. El índice c corregido por sesgo (AUC) es . 0.3857 D x y c = 1 + D x yDxy0.3857optimismindex.correctedDxyc=1+Dxy2=0.6749

También podemos calcular una curva de calibración usando remuestreo:

#-----------------------------------------------------------------------------
# Calibration curve using bootstrap
#-----------------------------------------------------------------------------

my.calib <- calibrate(mylogit, method="boot", B=1000)

par(bg="white", las=1)
plot(my.calib, las=1)

n=400   Mean absolute error=0.016   Mean squared error=0.00034
0.9 Quantile of absolute error=0.025

Calibración LogReg

El gráfico proporciona alguna evidencia de que nuestros modelos están sobreajustados: el modelo subestima las bajas probabilidades y sobreestima las altas probabilidades. También hay una sobreestimación sistemática alrededor de .0.3

La construcción de modelos predictivos es un gran tema y sugiero leer las notas del curso de Frank Harrell .

COOLSerdash
fuente
55
Muchas gracias por los maravillosos ejemplos y rmsprocedimientos para el paquete @COOLSerdash y Nick.
Frank Harrell
Muchas gracias por tu respuesta, ¡también me ayudó mucho! Tengo una pregunta rápida, ¿qué quieres decir con sobreestimación sistemática alrededor de 0.3? ¿Y puedes echar un vistazo a mi gráfico? s23.postimg.org/9cucdg6e3/calibration_curve.png ¿Cómo debo interpretar esta salida?
CanCeylan
2
@CanCeylan En mi gráfico, hay una pequeña curva en la línea alrededor de 0.3 (la línea va debajo de la línea ideal). Con respecto a su gráfico: agregue su gráfico a su pregunta original para que otros también puedan verlo. Parece que su modelo está subestimando las probabilidades sistemáticamente en todo el espacio.
COOLSerdash
@ COOLSerdash gracias. También he actualizado mi pregunta. Pero a partir de ahí, ¿cómo debo decidir si cancelar el modelo o usarlo? Como el valor de c no es malo (0.7755), el error absoluto medio (0.002) y el error cuadrático medio (5e-05) son muy pequeños, pero el gráfico de calibración parece malo. \
CanCeylan
@CanCeylan Gracias por actualizar tu pregunta. Hm, no estoy seguro. El diagrama de calibración no se ve muy bien. Esperaría más opiniones (de Frank Harrell u otros). No me siento lo suficientemente seguro como para dar una recomendación definitiva, lo siento.
COOLSerdash
6

Una nota sobre la interpretación de los coeficientes: recuerde que dependen de cómo se escriben los predictores como números. Entonces, para variables continuas dependen de las unidades en las que se miden; para predictores categóricos, el esquema de codificación. No se tiente a pensar que, digamos, A9 no es "importante" simplemente porque su coeficiente de 0.003453 es pequeño: A9 puede variar en varios órdenes de magnitud en alguna población de interés, mientras que los otros predictores varían solo ligeramente, o puede ser fácil de configurar en valores muy altos o bajos, mientras que los demás son difíciles de cambiar mucho.

Scortchi - Restablece a Monica
fuente