无法让crr() Fine-Gray模型在R中使用mice()处理估算数据(Cov1/model.matrix-problem?)

问题描述 投票:0回答:2

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

这里有一个具有不同问题集的旧示例,其中存在与 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() 正确索引协变量吗?还有其他包可以处理 mids-object 上的 CRR 分析吗?从理论上讲,我想我可以将中频转换为常用数据 -> 单独进行分析 -> 聚合数据集,我尝试使用 as.mira-command 来做到这一点,但也无法使其工作。

r survival-analysis imputation r-mice
2个回答
1
投票

### 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))



0
投票

summary(crr(ftime=test1$time,fstatus=test1$status,cov1=test1[,c(3,4)],failcode=1)) fit1 <- with(imputed_data, crr(ftime=time,fstatus=status,cov1=cbind(x,sex),failcode=1)) #cov1=cbind() summary(fit1) pool(fit1) summary(pool(fit1))

© www.soinside.com 2019 - 2024. All rights reserved.