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

如何构造cmprsk::crr()协变量矩阵以匹配tidycmprsk::crr()结果?

如何让cmprsk::crr()与tidycmprsk::crr()的Fine-Grey竞争风险模型结果一致?

我在R中使用两个不同包拟合Fine-Grey竞争风险模型时,发现系数估计结果存在差异:

  • 在tidycmprsk::crr()中,我通过公式形式指定模型:... ~ x_bin * splines::ns(x_cont, df = 3)
  • 在cmprsk::crr()中,我手动构造协变量矩阵传入模型

最小可复现代码

# 使用tidycmprsk拟合模型
model_tidy <- tidycmprsk::crr(
  survival::Surv(ftime, fstatus) ~ x_bin * splines::ns(x_cont, df = 3),
  data = df,
  failcode = "A")

# 使用cmprsk手动构造协变量矩阵并拟合模型
X <- setNames(
  data.frame(
    cbind(df$x_bin, splines::ns(df$x_cont, df = 3), df$x_bin * splines::ns(df$x_cont, df = 3))
  ), 
  nm = c("x_bin", paste0("x_cont", 1:3), paste0("x_cont", 1:3, "x_bin"))
)

model_untidy <- cmprsk::crr(
  ftime = df$ftime,
  fstatus = df$fstatus,
  cov1 = X,
  failcode = "A")

模型结果差异

model_tidy的部分输出结果:

Variable   Coef     SE      HR     95% CI       p-value    
x_bin      0.668    1.22    1.95   0.18, 21.3   0.58       
...

summary(model_untidy)的部分输出结果:

coef exp(coef) se(coef)      z p-value
x_bin         0.270     1.310    1.337  0.202    0.84
...

即使将模型简化为... ~ x_bin这类简单形式,两个包的结果仍然不一致。请问该如何构造cmprsk::crr()的协变量矩阵,才能让它的结果与tidycmprsk::crr()完全匹配?

测试用数据

n <- 100
set.seed(1)
df <- data.frame(
  ftime = rexp(n, rate = 0.05),
  fstatus = factor(sample(c("censor", "A", "B"), n, replace = TRUE, prob = c(0.3, 0.4, 0.3)),
               levels = c("censor", "A", "B")),
  x_cont = rnorm(n, mean = 50, sd = 10),
  x_bin = rbinom(n, 1, 0.5))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 04:02:39