对 Cox 比例风险使用多重插补,然后使用 rms 包进行验证?

机器算法验证 r 生存 cox模型 数据插补 有效值
2022-03-28 11:23:31

我一直在研究mouse包,但我还没有找到一种方法来使用多重插补来制作 Cox 模型,然后使用rms包的validate()功能验证该模型。这是我到目前为止使用数据集的一些示例代码veteran

library(rms)
library(survival)
library(mice)

remove(veteran)
data(veteran)
veteran$trt=factor(veteran$trt,levels=c(1,2))
veteran$prior=factor(veteran$prior,levels=c(0,10))

#Set random data to NA 
veteran[sample(137,4),1]=NA
veteran[sample(137,4),2]=NA
veteran[sample(137,4),7]=NA

impvet=mice(veteran)
survmod=with(veteran,Surv(time,status))

#make a CPH for each imputation
for(i in seq(5)){
    assign(paste("mod_",i,sep=""),cph(survmod~trt+celltype+karno+age+prior,
        data=complete(impvet,i),x=T,y=T))
}

#Now there is a CPH model for mod_1, mod_2, mod_3, mod_4, and mod_5.

现在,如果我只使用一个 CPH 模型,我会这样做:

validate(mod_1,B=20)

我遇到的问题是如何采用 5 个 CPH 模型(每个插补 1 个),并能够创建一个池模型,然后我可以使用rms. 我知道这个mice包有一些内置的池功能,但我不相信它们可以cphrms. rms这里的关键是池化后仍然可以使用。我研究过使用 Harrell 的aregImpute()函数,但在遵循示例和文档时遇到了一些问题; mice似乎更易于使用。

2个回答

包中的fit.mult.impute函数Hmisc将绘制从创建的插补,mice就像从aregImpute. cph将与fit.mult.impute. 更难的问题是在进行多重插补时如何通过重采样进行验证。我认为没有人真正解决了这个问题。我通常采取简单的方法并使用单一插补来验证模型,使用Hmisc transcan函数,但使用多重插补来拟合最终模型并获得标准误差。

我在 Himsc 文档中查看了 fit.mult.impute() 函数的一些示例,但找不到 coxph 的示例。以防万一有人正在寻找相同的东西,这里是我如何使用 fit.mult.impute() 进行 cox 回归池的示例:

x1 <- factor(sample(c('a','b','c'),100,TRUE)
x2 <- (x1=='b') + 3*(x1=='c') + rnorm(100)
y <- x2 + 1*(x1=='c') + rnorm(100)
x1[1:20] <- NA
x2[18:23] <- NA
ttocvd = sample(0:20, 100, replace = TRUE)
CVD = sample(0:1, 100, replace = TRUE)
d <- data.frame(x1,x2,y, ttocvd, CVD)
f <- transcan(~y + x1 + x2+CVD+ ttocvd, n.impute=10, shrink=TRUE, data=d)
#f <- mice(d) #if using mice imputation 
h <- fit.mult.impute(Surv(ttocvd, CVD) ~ x1 + x2, coxph, f, data=d)
summary(h)