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
相关产品推荐
相关产品推荐

