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

R语言cmprsk包Fine-Gray回归分析报错排查求助

关于cmprsk包crr函数报错的原因与解决方法

问题背景

使用cmprsk包的crr()函数开展Fine-Gray竞争风险分析,将死亡设为目标事件,随访结束存活设为截尾。核心代码如下:

fg.model <- crr(ftime,fstatus,cov,failcode=1,cencode=0)

变量说明:

  • ftime:1-180天的数值型随访时间
  • fstatus:1代表死亡事件,0代表随访结束存活(截尾)
  • cov:包含数值型age和已因子化的sex的数据框
  • failcode=1对应死亡事件,cencode=0对应截尾

运行后触发报错:

# NAs introduced by coercion Error in crr(ftime,fstatus,cov,failcode=1, : 
# NAs introduced by coercion NA/NaN/inf in foreign function call(arg4)

已确认数据无缺失值,ftime、fstatus为数值型,sex已完成因子化,但报错仍存在。复现代码如下:

# 设置样本量
n<- 8076
# 生成随访时间变量
time<- c(rep(180,6533),sample(1:179,n-6533,replace = TRUE))
# 生成事件状态变量
status<-ifelse(time==180,0,1) # 0=存活/截尾,1=死亡
# 生成年龄变量
age<-sample(18:90,n,replace = TRUE)
# 生成性别变量
sex<-sample(c("male","female"),n,replace = TRUE)
# 合并为数据框
df<-data.frame(time,status,age,sex)
# 提取协变量
cov<-subset(df,select = c("age","sex"))
cov$sex<-as.factor(cov$sex)
# 运行Fine-Gray模型
library(cmprsk)
fg.mod <-crr(df$time,df$status,cov,failcode = 1,cencode = 0) 

报错原因

crr()函数的cov参数要求传入矩阵格式的协变量,而非数据框。即便已将sex因子化,函数无法直接处理数据框中的因子类型,内部转换过程中会生成NA,进而触发报错。

解决方法

将协变量数据框转换为模型矩阵(自动将因子变量转换为哑变量),再传入crr()函数。修改后的代码如下:

# 将协变量转换为模型矩阵(移除截距项)
cov_matrix <- model.matrix(~ age + sex, data = cov)[, -1]

# 重新运行Fine-Gray模型
fg.mod <- crr(df$time, df$status, cov_matrix, failcode = 1, cencode = 0)

运行上述代码后,模型可正常拟合,不会再出现NA相关报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 17:07:27