【问题标题】:cant get crr() Fine-Gray model to work on imputed data using mice() in R (Cov1/model.matrix-problem?)无法让 crr() Fine-Gray 模型使用 R 中的 mice() 处理估算数据(Cov1/model.matrix-problem?)
【发布时间】:2022-07-09 20:06:55
【问题描述】:

在使用推算数据(mids 类型数据,使用mice-packge 推算)进行精细灰色 Crr() 分析时遇到了重大问题。问题似乎是 Cov1 命令,因为我无法让它从中间数据中提取数据。我已经尝试了几个小时来寻找解决方案,包括使用不同类型的包和方法但没有成功。非常感谢您的帮助!

有一个旧示例具有一组不同的问题here,其中存在与 vcov 相关的问题。由于现在更新了软件包,这不再是问题。出于示范目的,我将使用相同的代码。

library(survival)
library(mice)
library(cmprsk)

test1 <- as.data.frame(list(time=c(4,3,1,1,2,2,3,5,2,4,5,1, 4,3,1,1,2,2,3,5,2,4,5,1), 
                            status=c(1,1,1,0,2,2,0,0,1,1,2,0, 1,1,1,0,2,2,0,0,1,1,2,0),
                            x=c(0,2,1,1,NA,NA,0,1,1,2,0,1, 0,2,1,1,NA,NA,0,1,1,2,0,1),
                            sex=c(0,0,0,NA,1,1,1,1,NA,1,0,0, 0,0,0,NA,1,1,1,1,NA,1,0,0)))

dat <- mice(test1,m=10, seed=1982)

#Cox regression: cause 1

models.cox1 <- with(dat,coxph(Surv(time, status==1) ~ x +sex ))                 

summary(pool(models.cox1))

#Cox regression: cause 1 or 2

models.cox <- with(dat,coxph(Surv(time, status==1 | status==2) ~ x +sex ))                 
models.cox
summary(pool(models.cox))


#### crr()

#Fine-Gray model

models.FG<- with(dat,crr(ftime=time, fstatus=status,  cov1=test1[,c( "x","sex")], failcode=1, cencode=0, variance=TRUE))                 

summary(pool(models.FG))

#8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values

#model draws from orignial dataset, thus missing values, changing to mids-dataset

models.FG<- with(dat,crr(ftime=time, fstatus=status,  cov1=dat[,c( "x","sex")], failcode=1, cencode=0, variance=TRUE))  

#Error in dat[, c("x", "sex")] : incorrect number of dimensions

#problem persists after changing to specific directory

models.FG<- with(dat,crr(ftime=time, fstatus=status,  cov1=dat$imp[,c( "x","sex")], failcode=1, cencode=0, variance=TRUE))  

#Error in dat$imp[, c("x", "sex")] : incorrect number of dimensions

# coding my own model.matrix

previous_na_action <- options('na.action')
options(na.action='na.pass')

cov1 <- model.matrix( ~ factor(x) 
                      + factor(sex),
                      data = test1)[, -1]

options(na.action=previous_na_action$na.action)

models.FG<- with(dat,crr(ftime=time, fstatus=status,  cov1=cov1, failcode=1, cencode=0, variance=TRUE))  

#8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values

# Same problem, i the same dimentional problems persist i u try to use "data=dat$imp"

# use listed imputed data as source?

longdat <- complete(dat, action='long', inc=TRUE)

previous_na_action <- options('na.action')
options(na.action='na.pass')

cov1 <- model.matrix( ~ factor(x) 
                      + factor(sex),
                      data = longdat)[, -1]

options(na.action=previous_na_action$na.action)

models.FG<- with(dat,crr(ftime=time, fstatus=status,  cov1=cov1, failcode=1, cencode=0, variance=TRUE))  

#8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values
8 cases omitted due to missing values

# still same problem
 
models.FG

有什么想法我不能让 With() 正确索引协变量吗?还有其他可以处理中间对象 CRR 分析的软件包吗?从理论上讲,我想我可以将中间值转换为普通数据->单独进行分析->收敛我尝试使用 as.mira-command 进行此操作的数据集,但也无法使其正常工作。

我们将不胜感激!由于我对 R 和 stackoverflow 还很陌生,我希望这个例子足够清楚。

【问题讨论】:

标签: r survival-analysis imputation r-mice


【解决方案1】:

自己解决了,如果其他人遇到同样的问题,请发布。不过可能需要由更资深的统计学家/R 用户进行验证。

### Proof of concept:example data from https://stackoverflow.com/questions/41794649/can-mice-handle-crr-fine-gray-model ###

library(survival)
library(mice)
library(cmprsk)
test1 <- as.data.frame(list(time=c(4,3,1,1,2,2,3,5,2,4,5,1, 4,3,1,1,2,2,3,5,2,4,5,1), 
                            status=c(1,1,1,0,2,2,0,0,1,1,2,0, 1,1,1,0,2,2,0,0,1,1,2,0),
                            x=c(0,2,1,1,NA,NA,0,1,1,2,0,1, 0,2,1,1,NA,NA,0,1,1,2,0,1),
                            sex=c(0,0,0,NA,1,1,1,1,NA,1,0,0, 0,0,0,NA,1,1,1,1,NA,1,0,0)))


sapply(test1, class)
test1[sapply(test1, is.character)] <- lapply(test1[sapply(test1, is.character)], as.factor)

dat <- mice(test1,m=10, seed=1982)



#Fine-Gray model

## create loopable list with imputed data  ##

longdat <- complete(dat, action='long', inc=TRUE) #long format for creating a list containing both original data and imputed

longdatsplit <- split(longdat, longdat$.imp) # split into imputed n to make individual vectors 

longdatlist <- list()   

for(i in 1:length(longdatsplit)) {             ##  for making list to able loop
  longdatlist[[i]] <- longdatsplit[[i]]
}

longdatlist2 <- longdatlist[- 1] #first row are non-imputed data, thus containing one more level than imputed data. 


### analysis-loop using list ###

mod <- list(analyses=vector("list", dat$m))

for(i in 1:dat$m){
  
covariates <- model.matrix(~longdatlist2[[i]]$x + longdatlist2[[i]]$sex , data = longdatlist2[[i]])[,-1]
  
  
mod$analyses[[i]] <- crr(ftime=longdatlist2[[i]]$time, fstatus=longdatlist2[[i]]$status,  cov1=covariates, failcode=1, cencode=0, variance=TRUE)

}

### Create as.mira ###

obj <- as.mira(mod)   

obj <- list(call=mod$analyses[[1]]$call, call1=dat$call, nmis=dat$nmis, analyses=mod$analyses) ## all calls originates form correct source, same as with-command

oldClass(obj) <- "mira"

summary(obj)
pool(obj)

summary(pool(obj))

【讨论】:

    猜你喜欢
    • 2022-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    相关资源
    最近更新 更多