Regressione logistica con spline di regressione in R


12

Ho sviluppato un modello di regressione logistica basato su dati retrospettivi di un database nazionale sui traumi di trauma cranico nel Regno Unito. Il risultato chiave è la mortalità a 30 giorni (indicata come misura "Sopravvivere"). Altre misure con prove pubblicate di effetti significativi sugli esiti in studi precedenti includono:

Year - Year of procedure = 1994-2013
Age - Age of patient = 16.0-101.5
ISS - Injury Severity Score = 0-75
Sex - Gender of patient = Male or Female
inctoCran - Time from head injury to craniotomy in minutes = 0-2880 (After 2880 minutes is defined as a separate diagnosis)

Usando questi modelli, data la variabile dipendente dicotomica, ho costruito una regressione logistica usando lrm.

Il metodo di selezione delle variabili del modello era basato sulla letteratura clinica esistente che modella la stessa diagnosi. Tutti sono stati modellati con un adattamento lineare ad eccezione della ISS che è stata modellata tradizionalmente attraverso polinomi frazionari. Nessuna pubblicazione ha identificato interazioni significative note tra le variabili di cui sopra.

Su consiglio di Frank Harrell, ho proceduto all'uso delle spline di regressione per modellare la ISS (ci sono vantaggi di questo approccio evidenziato nei commenti seguenti). Il modello è stato quindi pre-specificato come segue:

rcs.ASDH<-lrm(formula = Survive ~ Age + GCS + rcs(ISS) +
    Year + inctoCran + oth, data = ASDH_Paper1.1, x=TRUE, y=TRUE)

I risultati del modello sono stati:

> rcs.ASDH

Logistic Regression Model

lrm(formula = Survive ~ Age + GCS + rcs(ISS) + Year + inctoCran + 
    oth, data = ASDH_Paper1.1, x = TRUE, y = TRUE)

                      Model Likelihood     Discrimination    Rank Discrim.    
                         Ratio Test            Indexes          Indexes       
Obs          2135    LR chi2     342.48    R2       0.211    C       0.743    
 0            629    d.f.             8    g        1.195    Dxy     0.486    
 1           1506    Pr(> chi2) <0.0001    gr       3.303    gamma   0.487    
max |deriv| 5e-05                          gp       0.202    tau-a   0.202    
                                           Brier    0.176                     

          Coef     S.E.    Wald Z Pr(>|Z|)
Intercept -62.1040 18.8611 -3.29  0.0010  
Age        -0.0266  0.0030 -8.83  <0.0001 
GCS         0.1423  0.0135 10.56  <0.0001 
ISS        -0.2125  0.0393 -5.40  <0.0001 
ISS'        0.3706  0.1948  1.90  0.0572  
ISS''      -0.9544  0.7409 -1.29  0.1976  
Year        0.0339  0.0094  3.60  0.0003  
inctoCran   0.0003  0.0001  2.78  0.0054  
oth=1       0.3577  0.2009  1.78  0.0750  

Ho quindi usato la funzione di calibrazione nel pacchetto rms per valutare l'accuratezza delle previsioni dal modello. Sono stati ottenuti i seguenti risultati:

plot(calibrate(rcs.ASDH, B=1000), main="rcs.ASDH")

Curve di calibrazione Bootstrap penalizzate per overfitting

Dopo il completamento della progettazione del modello, ho creato il seguente grafico per dimostrare l'effetto dell'Anno dell'incidente sulla sopravvivenza, basando i valori della mediana in variabili continue e la modalità in variabili categoriali:

ASDH <- Predict(rcs.ASDH, Year=seq(1994,2013,by=1),Age=48.7,ISS=25,inctoCran=356,Other=0,GCS=8,Sex="Male",neuroYN=1,neuroFirst=1)
Probabilities <- data.frame(cbind(ASDH$yhat,exp(ASDH$yhat)/(1+exp(ASDH$yhat)),exp(ASDH$lower)/(1+exp(ASDH$lower)),exp(ASDH$upper)/(1+exp(ASDH$upper))))
names(Probabilities) <- c("yhat","p.yhat","p.lower","p.upper")
ASDH<-merge(ASDH,Probabilities,by="yhat")
plot(ASDH$Year,ASDH$p.yhat,xlab="Year",ylab="Probability of Survival",main="30 Day Outcome Following Craniotomy for Acute SDH by Year", ylim=range(c(ASDH$p.lower,ASDH$p.upper)),pch=19)
arrows(ASDH$Year,ASDH$p.lower,ASDH$Year,ASDH$p.upper,length=0.05,angle=90,code=3)

Il codice sopra riportato ha prodotto il seguente output:

Andamento dell'anno con inferiore e superiore

Le mie restanti domande sono le seguenti:

1. Interpretazione spline - Come posso calcolare il valore p per le spline combinate per la variabile complessiva?


4
Bel lavoro. Per visualizzare l'effetto dell'Anno, suggerisco di impostare le altre variabili sui valori predefiniti (mediana per continuo, modalità per categoriale) e variare Anno sull'asse x, ad es plot(Predict(rcs.ASDH, Year)). Puoi far variare le altre variabili, creando curve diverse, facendo cose come plot(Predict(rcs.ASDH, Year, age=c(25, 35))).
Frank Harrell,

1
Non so perché, ma in letteratura non ho visto molti esempi di curve di calibrazione corrette in bias. Sembra una buona idea
Charles

1
Per testare l'associazione complessiva con più test df, utilizzare anova(rcs.ASDH).
Frank Harrell,

Risposte:


8

χ2

Due modi consigliati per valutare l'adattamento del modello sono:

  1. Bootstrap curva di calibrazione non parametrica (es. * Loess) corretta per eccesso di adattamento per verificare l'accuratezza assoluta delle previsioni
  2. χ2

Ci sono alcuni vantaggi delle spline di regressione rispetto ai polinomi frazionari, tra cui:

  1. 0
  2. Non devi preoccuparti dell'origine di un predittore. I PQ ipotizzano che lo zero sia un'origine "magica" per i predittori, mentre le spline di regressione sono invarianti a spostare un predittore di una costante.

Per ulteriori informazioni sulle spline di regressione, sulla linearità e sulla valutazione dell'additività, consultare le mie dispense su http://biostat.mc.vanderbilt.edu/CourseBios330 e la funzione del rmspacchetto R. rcsPer le curve di calibrazione bootstrap penalizzate per overfitting vedere la rms calibratefunzione.


Ho cercato di pre-specificare il modello nella creazione di un modello completo con tutte le variabili clinicamente disponibili, incluso inizialmente e con rilevanza nota per la variabile di diagnosi e risultato. Erano tutte variabili lineari continue o dicotomiche ad eccezione della ISS che gli studi precedenti avevano identificato possono essere modellati con polinomi frazionari. Il metodo che ho usato per sviluppare il modello credo sia coerente con il "Multivariate Model-Building" di Willi Sauerbrei. Forse potrei usare il tuo pacchetto rms in R per valutare la bontà globale di adattamento? In tal caso, quale formula consiglieresti?
Dan Fountain

Ho ampliato la mia risposta per affrontarne alcune.
Frank Harrell,

Potresti consigliare pacchetti per l'esecuzione di 1 e 2 per valutare l'adattamento del modello? Potrei usare la funzione validate in rms? In termini di spline di regressione, ho letto i tuoi appunti e sto attualmente cercando di trovare una copia del tuo libro (lo acquisterei se potessi!) Potresti consigliare un ulteriore pacchetto / funzione R per la costruzione di spline di regressione per le variabili continue non lineari in questo modello? Molte grazie per tutto il tuo aiuto finora.
Dan Fountain

Forse il pacchetto terrestre basato sulle spline di regressione adattiva multivariata di Friedman?
Dan Fountain,

Un'ultima domanda. La formula per Injury Severity Score (ISS) è A ^ 2 + B ^ 2 + C ^ 2 dove A, B e C sono parti del corpo diverse con un punteggio di gravità del trauma indipendente di 1-5. Pertanto, il massimo è 75 e il minimo 1 all'interno di questo set di dati. Data questa formula, i polinomi frazionali sarebbero la rappresentazione più vicina al modo in cui il punteggio viene effettivamente calcolato rispetto alle spline di regressione?
Dan Fountain,
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.