You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中mice()插补数据运行crr() Fine-Gray模型遇Cov1参数报错

问题核心原因

cmprsk::crr()和coxph()的参数逻辑存在本质差异:

  • coxph()支持formula接口,with.mids()遍历插补集时会自动把当前插补集的变量加载到临时运行环境,直接写变量名就能读取到无缺失的插补值
  • cmprsk::crr()不支持formula接口,cov1参数要求手动传入与ftime/fstatus行序完全匹配的协变量矩阵。你之前在表达式中传入的原始数据集test1、提前在全局环境构造的cov1都不属于with.mids的临时环境,模型会直接读取全局环境下带缺失值的原始数据;直接传入mids对象、mids$imp这类list结构的对象不符合矩阵/数据框的输入要求,自然报维度错误;基于长格式插补数据构造的协变量矩阵行数是原始数据的数倍,和单插补集的生存数据长度不匹配,完全无法对应。
解决方案

方案1:手动遍历插补集适配原生crr()

不需要硬套with.mids语法,手动循环提取每个插补集构造协变量矩阵,再转成mira对象供pool合并即可,代码如下:

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)

# 存储每个插补集的模型结果
fg_fits <- vector("list", dat$m)
for(i in seq_len(dat$m)){
  # 提取第i个完成插补的无缺失数据集
  imp_dat <- complete(dat, i)
  # 基于当前插补集构造协变量矩阵
  cov_mat <- as.matrix(imp_dat[, c("x", "sex")])
  fg_fits[[i]] <- crr(
    ftime = imp_dat$time,
    fstatus = imp_dat$status,
    cov1 = cov_mat,
    failcode = 1,
    cencode = 0,
    variance = TRUE
  )
}

# 转换为mira类型后合并结果
fg_res <- as.mira(fg_fits)
summary(pool(fg_res, dfcom = nrow(test1) - ncol(cov_mat) - 1))

运行后不会再出现缺失值剔除提示,结果可正常合并。

方案2:使用兼容mice流程的Fine-Gray模型函数

直接换用支持formula接口的竞争风险函数,写法和coxph完全一致,不需要额外适配:

  • 用riskRegression::FGR():原生支持Fine-Gray模型,formula写法直接适配with.mids
library(riskRegression)
models.FG <- with(dat, FGR(Hist(time, status) ~ x + sex, cause = 1))
summary(pool(models.FG))
  • 用survival包原生的finegray()加权法:先构造Fine-Gray权重数据集,再用加权Cox模型得到等价结果,完全兼容现有mice流程
models.FG_surv <- with(dat, {
  fg_wt_data <- finegray(Surv(time, status) ~ x + sex, data = data.frame(time, status, x, sex), etype = 1)
  coxph(Surv(fgstart, fgstop, fgstatus) ~ x + sex, weight = fgwt, data = fg_wt_data)
})
summary(pool(models.FG_surv))

内容的提问来源于stack exchange,提问作者Algot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 15:21:25