10 votos

¿Utilizar la imputación múltiple para los riesgos proporcionales de Cox y luego validar con el paquete rms?

He estado investigando el ratones y todavía no he descubierto la manera de utilizar las imputaciones múltiples para hacer un modelo de Cox, y luego validar ese modelo con el rms del paquete validate() función. Aquí hay un código de muestra de lo que tengo hasta ahora, utilizando el conjunto de datos veteran :

library(rms)
library(survival)
library(mice)

remove(veteran)
data(veteran)
veteran$trt=factor(veteran$trt,levels=c(1,2))
veteran$prior=factor(veteran$prior,levels=c(0,10))

#Set random data to NA 
veteran[sample(137,4),1]=NA
veteran[sample(137,4),2]=NA
veteran[sample(137,4),7]=NA

impvet=mice(veteran)
survmod=with(veteran,Surv(time,status))

#make a CPH for each imputation
for(i in seq(5)){
    assign(paste("mod_",i,sep=""),cph(survmod~trt+celltype+karno+age+prior,
        data=complete(impvet,i),x=T,y=T))
}

#Now there is a CPH model for mod_1, mod_2, mod_3, mod_4, and mod_5.

Ahora bien, si sólo estuviera trabajando con un modelo de CPH, haría esto:

validate(mod_1,B=20)

El problema que tengo es cómo tomar los 5 modelos CPH (1 por cada imputación), y poder crear un modelo agrupado que luego pueda utilizar con rms . Sé que el mice tiene algunas funciones de agrupación incorporadas, pero no creo que funcionen con el cph objeto en rms . La clave aquí es poder seguir utilizando rms después de la puesta en común. Busqué el uso de Harrell's aregImpute() pero tengo problemas para seguir los ejemplos y la documentación; mice parece más sencillo de utilizar.

0 votos

Por cierto: moderadores, si creen que esta pregunta pertenece a Stack Overflow, por favor siéntanse libres de migrarla.

0 votos

Hola @JJM. Me encuentro en una situación similar en la que tengo que agrupar mis modelos cox de los diferentes conjuntos de datos imputados y luego validarlos. Para generar el único modelo combinado, ¿cómo deben combinarse los riesgos acumulados de la línea de base? Los logaritmos de los cocientes de riesgo (coeficientes) pueden combinarse fácilmente, ya que tienen normalidad asintótica. Sin embargo, para calcular las probabilidades de supervivencia también se necesita una estimación del riesgo (acumulativo) de referencia. Esto no tiene normalidad asintótica, por lo que sé, así que no estoy seguro de cómo agrupar múltiples modelos coxph en un único modelo. Muchas gracias si ves esto.

14voto

dan90266 Puntos 609

El fit.mult.impute en la función Hmisc dibujará imputaciones creadas a partir de mice al igual que lo hará de aregImpute . cph trabajará con fit.mult.impute . La cuestión más difícil es cómo hacer la validación a través del remuestreo cuando también se hace la imputación múltiple. No creo que nadie haya resuelto esta cuestión. Yo suelo tomar el camino más fácil y utilizar la imputación simple para validar el modelo, utilizando el Hmisc transcan pero utilizando la imputación múltiple para ajustar el modelo final y obtener los errores estándar.

1 votos

Gracias por su útil respuesta, Dr. Harrell. Me gustaría resumir mi comprensión de lo que ha dicho. Por favor, corríjame si lo estoy interpretando mal: fit.mult.impute() : Utilice esta opción para agrupar el cph() modelos (5 de ellos, basados en 5 imputaciones de mice ) y obtener las razones de riesgo agrupadas y los errores estándar. transcan() : Utiliza esto para crear una imputación única y validarla. Parece que esto da una validación suficientemente buena. ¿Es todo esto correcto? Realmente aprecio su ayuda, Dr. Harrell.

1 votos

Así es. La validación por imputación simple es un sustituto temporal del ajuste por imputación múltiple.

1voto

Janghou Puntos 535

Busqué algunos ejemplos en el documento Himsc para la función fit.mult.impute() pero no pude encontrar un ejemplo para coxph. Sólo en caso de que alguien esté buscando lo mismo, aquí hay un ejemplo de cómo usé fit.mult.impute() para la agrupación de regresión cox:

x1 <- factor(sample(c('a','b','c'),100,TRUE)
x2 <- (x1=='b') + 3*(x1=='c') + rnorm(100)
y <- x2 + 1*(x1=='c') + rnorm(100)
x1[1:20] <- NA
x2[18:23] <- NA
ttocvd = sample(0:20, 100, replace = TRUE)
CVD = sample(0:1, 100, replace = TRUE)
d <- data.frame(x1,x2,y, ttocvd, CVD)
f <- transcan(~y + x1 + x2+CVD+ ttocvd, n.impute=10, shrink=TRUE, data=d)
#f <- mice(d) #if using mice imputation 
h <- fit.mult.impute(Surv(ttocvd, CVD) ~ x1 + x2, coxph, f, data=d)
summary(h)

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X