Interpretazione di un modello di regressione logistica con più predittori


12

Ho eseguito una regressione logistica multivariata con la variabile dipendente che Yè la morte in una casa di cura entro un certo periodo di ingresso e ho ottenuto i seguenti risultati (nota se le variabili iniziano in Aesso è un valore continuo mentre quelle che iniziano in Bsono categoriali):

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

Come puoi vedere, tutte le variabili sono "significative" in quanto i loro valori di p sono al di sotto della normale soglia di 0,05. Tuttavia, osservando i coefficienti, non sono sicuro di cosa fare di questi risultati. Sembra che sebbene queste variabili contribuiscano al modello, osservando i rapporti di probabilità, non sembrano avere davvero molto potere predittivo. Da notare che quando ho calcolato l'AUC, ho ottenuto circa 0,8.

Posso dire che questo modello è più efficace nel prevedere la mortalità (ad es. Prevedere che gli anziani vivranno oltre il periodo prescritto) rispetto alla previsione della mortalità?


4
Questo non è un modello "multivariato" poiché hai solo una variabile risultato / dipendente. Il montaggio di un modello con diversi predittori è chiamato regressione "multipla".
Gala,

Apprezzo molto i commenti e le risposte: darò sicuramente un'occhiata al pacchetto rms. Tuttavia, la mia domanda persiste ancora: la maggior parte dei rapporti di probabilità sono <1, ciò implicherebbe che quelle variabili in questo modello sono migliori nel prevedere il risultato?
Oort,

Risposte:


18

Suggerirei di usare l'eccellente pacchetto rms di Frank Harrell . Contiene molte funzioni utili per convalidare e calibrare il modello. Per quanto ne so, non è possibile valutare le prestazioni predittive esclusivamente sulla base dei coefficienti. Inoltre, suggerirei di utilizzare il bootstrap per convalidare il modello. L'AUC o indice di concordanza (c-index) è una misura utile della performance predittiva. Un indice c di è piuttosto alto ma, come in molti modelli predittivi, l'adattamento del tuo modello è probabilmente troppo ottimistico (eccesso di adattamento). Questo eccesso di ottimismo può essere valutato utilizzando bootstrap. Ma lasciami fare un esempio: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 

In basso si vedono i soliti coefficienti di regressione con corrispondenti valori . In alto a destra, vedi diversi indici di discriminazione. La denota il c-index (AUC), e c-index denota scissione casuale mentre un c-index denota perfetta previsione. è la correlazione di rango Somers tra le probabilità previste e le risposte osservate. ha una relazione semplice con l'indice c: . Un di verifica quando le previsioni del modello sono casuali e quando , il modello è perfettamente discriminante. In questo caso, l'indice c è0,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 che è leggermente migliore del caso ma un indice c è abbastanza buono per prevedere i risultati degli individui.>0.8

Come detto sopra, il modello è probabilmente troppo ottimistico. Ora usiamo bootstrap per quantificare l'ottimismo:

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

Concentriamoci sul che è in alto. La prima colonna indica l'indice originale, che era . La colonna chiamata indica la quantità di sovrastima stimata dal modello. La colonna è la stima originale meno l'ottimismo. In questo caso, il corretto in bias è un po 'più piccolo dell'originale. L'indice c corretto per polarizzazione (AUC) è . 0,3857 D x y c = 1 + D x yDxy0.3857optimismindex.correctedDxyc=1+Dxy2=0.6749

Possiamo anche calcolare una curva di calibrazione usando il ricampionamento:

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

Calibrazione LogReg

La trama fornisce alcune prove del fatto che i nostri modelli sono troppo adatti: il modello sottovaluta le basse probabilità e sopravvaluta le alte probabilità. C'è anche una sopravvalutazione sistematica intorno allo .0.3

La costruzione di modelli predittivi è un argomento importante e suggerisco di leggere gli appunti del corso di Frank Harrell .


5
Grazie mille per i meravigliosi esempi e rmsistruzioni per il pacchetto @COOLSerdash e Nick.
Frank Harrell,

Grazie mille per la tua risposta, mi ha anche aiutato molto! Ho una domanda veloce, cosa intendi per stima sistematica rispetto allo 0,3? E puoi per favore dare un'occhiata al mio grafico? s23.postimg.org/9cucdg6e3/calibration_curve.png Come devo interpretare questo risultato
CanCeylan,

2
@CanCeylan Nel mio grafico, c'è una piccola curva nella linea intorno a 0,3 (la linea va sotto la linea ideale). Per quanto riguarda il tuo grafico: aggiungi il tuo grafico alla domanda originale in modo che anche altri possano vederlo. Sembra che il tuo modello stia sottovalutando sistematicamente le probabilità su tutto lo spazio.
COOLSerdash,

@COOLSerdash grazie. Ho anche aggiornato la mia domanda. Ma da lì, come devo decidere se annullare il modello o usarlo? Poiché il valore c non è negativo (0,7755), l'errore assoluto medio (0,002) e l'errore quadrato medio (5e-05) sono così piccoli, ma il grafico di calibrazione sembra cattivo. \
CanCeylan il

@CanCeylan Grazie per aver aggiornato la tua domanda. Hm, non sono sicuro. Il diagramma di calibrazione non sembra troppo buono. Aspetterei più opinioni (da Frank Harrell o altri). Non mi sento abbastanza sicuro di dare una raccomandazione definitiva, scusa.
COOLSerdash,

6

Una nota sull'interpretazione dei coefficienti: ricorda che dipendono da come i predittori sono scritti come numeri. Quindi per le variabili continue dipendono dalle unità in cui vengono misurate; per i predittori categorici, lo schema di codifica. Non essere tentato di pensare che, diciamo, A9 sia "irrilevante" solo perché il suo coefficiente di 0,003453 è piccolo - A9 potrebbe variare su diversi ordini di grandezza in alcune popolazioni di interesse mentre gli altri predittori variano solo leggermente, o potrebbe essere facile da impostare su valori molto alti o bassi mentre gli altri sono difficili da cambiare molto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.