在使用估算数据(中型数据,使用 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 来做到这一点,但也无法使其工作。
### 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))
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))