Imputación múltiple: de SMCFCS a MICE para gráficos de (convergencia)
He utilizado SMCFCS para poder imputar con proporciones de riesgo de Cox. Cuando quise convertir el objeto SMCFCS a un objeto MICE y revisar mis resultados con gráficos de convergencia y densidad, solo recibí errores que no pude resolver. He intentado varias cosas, por ejemplo, miceadds::datlist2mids, pero no funciona. ¿Alguien sabe cómo resolver esto?
He creado el reprex a continuación.
Bibliotecas
library(smcfcs)
library(rms)
library(mice)
library(miceadds)
library(survival)
Prueba
datos <- pulmones
datos <- datos[,c(1:3,5,6)]
datos$sexo <- as.factor(datos$sexo)
datos$ph.ecog[datos$ph.ecog == 3] <- 2
datos$ph.ecog <- as.factor(datos$ph.ecog)
datos$tiempo <- as.numeric(datos$tiempo)
Métodos
ini <- mice(datos,m=1,maxit=0)
metodo <- ini$method
metodo[metodo==”pmm”] <- “norm” # reemplazar pmm con norm para smcfcs
metodo[metodo==”polyreg”] <- “mlogit” # reemplazar polyreg con mlogit para smcfcs
Matriz de predictores
predMatriz <- ini$predictorMatrix
predMatriz[c(“tiempo”,”estado”,”sexo”),] <- 0 # están completas, por lo que no necesitan ser imputadas
predMatriz[,c(“tiempo”,”estado”)] <- 0
Imputación
datos_imputados <- smcfcs(
datos,
smtype= “coxph”,
smformula = “Surv(tiempo, estado) ~ sexo + ph.ecog”,
method=metodo,
predictorMatrix = predMatriz,
m = 2, #prueba: 2
numit = 10, #prueba: 10
rjlimit = 1000,
noisy = FALSE,
errorProneMatrix = NULL)
Verificaciones
datos_mice <- miceadds::datlist2mids( datos_imputados$impDatasets ) # convertir la lista de datos de smcfcs en un objeto mids
Gráfico de convergencia con valores reales en lugar de beta en el eje Y (traceplot)
plot(datos_mice) # Error
densityplot(datos_mice) # Error
davy.ai
Parece que hay un error al intentar convertir el objeto SMCFCS a un objeto MICE utilizando la función
datlist2mids
del paquetemiceadds
. El mensaje de error sugiere que puede haber un problema con la estructura de los datos.Una posible solución sería intentar convertir primero el objeto SMCFCS a un marco de datos en formato largo utilizando la función
datlist2long
del paquetemiceadds
. Una vez en el formato largo, los datos se pueden convertir a un objeto MICE utilizando la funciónmids
del paquetemice
.Aquí hay un ejemplo de cómo modificar el código para probar este enfoque:
Tenga en cuenta que al usar las funciones
plot
ydensityplot
, debemos establecer el argumentowith = FALSE
para evitar un error. Los gráficos resultantes deberían mostrar la convergencia y la densidad de los valores imputados, respectivamente.