es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que hay un error al intentar convertir el objeto SMCFCS a un objeto MICE utilizando la función datlist2mids del paquete miceadds. 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 paquete miceadds. Una vez en el formato largo, los datos se pueden convertir a un objeto MICE utilizando la función mids del paquete mice.

    Aquí hay un ejemplo de cómo modificar el código para probar este enfoque:

    #Librerías
    library(smcfcs)
    library(rms)
    library(mice)
    library(miceadds)
    library(survival)
    
    #Prueba
    data <- lung
    data <- data[,c(1:3,5,6)]
    
    data$sex <- as.factor(data$sex)
    data$ph.ecog[data$ph.ecog == 3] <- 2
    data$ph.ecog <- as.factor(data$ph.ecog)
    data$time <- as.numeric(data$time)
    
    #Métodos
    ini <- mice(data,m=1,maxit=0)
    method <- ini$method
    method[method=="pmm"] <- "norm" # Reemplazar pmm con norm para smcfcs
    method[method=="polyreg"] <- "mlogit" # Reemplazar polyreg con mlogit para smcfcs
    
    #Matriz de predictores
    predMatrix <- ini$predictorMatrix
    predMatrix[c("time","status","sex"),] <- 0 #están completos, por lo que no necesitan imputarse
    predMatrix[,c("time","status")] <- 0 
    
    #Imputación
    db.imputed <- smcfcs(
      data,
      smtype= "coxph",  
      smformula = "Surv(time, status) ~  sex + ph.ecog",  
      method=method,
      predictorMatrix = predMatrix,    
      m = 2,        #test: 2
      numit = 10,   #test: 10
      rjlimit = 1000,           
      noisy = FALSE,            
      errorProneMatrix = NULL)
    
    #Convertir a formato largo
    db.long <- miceadds::datlist2long(db.imputed$impDatasets)
    
    #Convertir a objeto MICE
    db.mice <- mice::mids(db.long)
    
    #Comprobaciones (usar el argumento 'with = FALSE' para evitar un error)
    plot(db.mice, with = FALSE)
    densityplot(db.mice, with = FALSE)
    

    Tenga en cuenta que al usar las funciones plot ydensityplot, debemos establecer el argumento with = FALSE para evitar un error. Los gráficos resultantes deberían mostrar la convergencia y la densidad de los valores imputados, respectivamente.

Comments are closed.