Regresión logística con splines de regresión en R

12

He estado desarrollando un modelo de regresión logística basado en datos retrospectivos de una base de datos nacional de traumatismos de lesiones en la cabeza en el Reino Unido. El resultado clave es la mortalidad a los 30 días (denotada como medida "Sobrevivir"). Otras medidas con evidencia publicada de efecto significativo sobre el resultado en estudios previos incluyen:

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 estos modelos, dada la variable dependiente dicotómica, he construido una regresión logística usando lrm.

El método de selección de variables modelo se basó en la literatura clínica existente que modela el mismo diagnóstico. Todos han sido modelados con un ajuste lineal con la excepción de ISS, que se ha modelado tradicionalmente a través de polinomios fraccionales. Ninguna publicación ha identificado interacciones significativas conocidas entre las variables anteriores.

Siguiendo el consejo de Frank Harrell, he procedido con el uso de splines de regresión para modelar ISS (hay ventajas en este enfoque resaltado en los comentarios a continuación). Por lo tanto, el modelo se especificó previamente de la siguiente manera:

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

Los resultados del modelo fueron:

> 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  

Luego utilicé la función de calibración en el paquete rms para evaluar la precisión de las predicciones del modelo. Los siguientes resultados fueron obtenidos:

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

Curvas de calibración de Bootstrap penalizadas por sobreajuste

Después de completar el diseño del modelo, creé el siguiente gráfico para demostrar el efecto del Año del incidente en la supervivencia, basando los valores de la mediana en variables continuas y el modo en variables categóricas:

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)

El código anterior dio como resultado el siguiente resultado:

Tendencia del año con baja y alta

Mis preguntas restantes son las siguientes:

1. Interpretación de splines : ¿cómo puedo calcular el valor p de las splines combinadas para la variable general?

Fuente Dan
fuente
44
Buen trabajo. Para mostrar el efecto de Año Sugiero dejando que las otras variables se fijan en los valores por defecto (mediana para continuo, modo para categórica) y varían Año en el eje x, por ejemplo, plot(Predict(rcs.ASDH, Year)). Puede dejar que otras variables varíen, formando diferentes curvas, haciendo cosas como plot(Predict(rcs.ASDH, Year, age=c(25, 35))).
Frank Harrell el
1
No sé por qué, pero no he visto muchos ejemplos de curvas de calibración con corrección de sesgo en la literatura. Parece una buena idea
charles
1
Para probar la asociación general con múltiples pruebas de df, utilice anova(rcs.ASDH).
Frank Harrell

Respuestas:

8

χ2

Dos formas recomendadas para evaluar el ajuste del modelo son:

  1. Bootstrap sobreajuste de curva de calibración suave no paramétrica corregida (por ejemplo, * loess) para verificar la precisión absoluta de las predicciones
  2. χ2

Hay algunas ventajas de las splines de regresión sobre los polinomios fraccionales, que incluyen:

  1. 0
  2. No necesita preocuparse por el origen de un predictor. Los FP suponen que el cero es un origen "mágico" para los predictores, mientras que las splines de regresión son invariables para cambiar un predictor por una constante.

Para obtener más información sobre las splines de regresión y la evaluación de linealidad y aditividad, consulte mis folletos en http://biostat.mc.vanderbilt.edu/CourseBios330 , así como la función del rmspaquete R. rcsPara las curvas de calibración de bootstrap penalizadas por sobreajuste, vea la rms calibratefunción.

Frank Harrell
fuente
Intenté preespecificar el modelo al crear un modelo completo con todas las variables clínicamente disponibles, incluidas inicialmente y con relevancia conocida para el diagnóstico y la variable de resultado. Todas fueron variables lineales continuas o dicotómicas, con la excepción de ISS que los estudios previos han identificado pueden modelarse con polinomios fraccionales. El método que utilicé para desarrollar el modelo, creo, es consistente con el "Modelo de construcción multivariada" de Willi Sauerbrei. ¿Quizás podría usar su paquete rms en R para evaluar la bondad global de ajuste? Si es así, ¿qué fórmula recomendarías?
Fuente de Dan el
Expandí mi respuesta para abordar algo de eso.
Frank Harrell
¿Podría recomendar paquetes para la ejecución de 1 y 2 para evaluar el ajuste del modelo? ¿Podría usar la función de validación en rms? En términos de splines de regresión, leí sus notas de clase y actualmente estoy tratando de localizar una copia de su libro (¡lo compraría si pudiera!) ¿Podría recomendar un paquete / función adicional de R para la construcción de splines de regresión? para las variables continuas no lineales en este modelo? Muchas gracias por toda su ayuda hasta ahora.
Fuente de Dan
¿Quizás el paquete de tierra basado en las Splines de regresión adaptativa multivariante de Friedman?
Fuente de Dan
Una última pregunta. La fórmula para el puntaje de gravedad de la lesión (ISS) es A ^ 2 + B ^ 2 + C ^ 2, donde A, B y C son diferentes partes del cuerpo con un puntaje de gravedad del trauma independiente de 1-5. Por lo tanto, el máximo es 75 y el mínimo 1 dentro de este conjunto de datos. Dada esta fórmula, ¿serían los polinomios fraccionales la representación más cercana de cómo se calcula realmente el puntaje en comparación con las splines de regresión?
Fuente de Dan