我正在使用R语言进行竞争风险分析,这要归功于Fine & Gray回归分析。下面是我的代码,其中死亡是竞争风险:
fg.model <- crr(ftime,fstatus,cov,failcode=1,cencode=0)
ftime是1 - 180天的数值变量,表示患者随访至死亡的时间(fstatus==1).如果他们在随访结束前还活着,这个变量等于180天,他们的状态等于0.综上所述,如果一个人在随访30天后死亡因此变量ftime将等于30天并且变量fstatus等于1(最大180天)并且在此期间没有死亡,因此变量ftime将等于180并且变量fstatus为0。
参数“cov”是具有两个协变量(年龄和性别转换为因子)的数据框,失败码等于1,因为死亡是竞争事件,并且删失码等于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)
既然我的数据库中有没有丢失的数据,那么该如何解释这个错误消息,以及如何解决它?
我已经尝试使用na.omit
、complete.case
和其他代码来确保代码中没有丢失数据。我还检查了数据的结构,但时间和状态是很好的数字和转换因子。
下面是一段代码,它重现了我的数据集和错误消息:
# Set the sample size
n<- 8076
# CReate a variable for follow-up time
time<- c(rep(180,6533),sample(1:179,n-6533,replace = TRUE))
# Create a variable for status
status<-ifelse(time==180,0,1) # O= alive/censored
# 1 = death
# Create age
age<-sample(18:90,n,replace = TRUE)
# Create gender
sex<-sample(c("male","female"),n,replace = TRUE)
# Combine
df<-data.frame(time,status,age,sex)
# Create cov
cov<-subset(df,select = c("age","sex"))
cov$sex<-as.factor(cov$sex)
# Run Fine Gray model
library(cmprsk)
fg.mod <-crr(df$time,df$status,cov,failcode = 1,cencode = 0)
1条答案
按热度按时间sshcrbum1#
使用
model.matrix()
将您自己的设计矩阵传递给模型您的评论中的问题的解决方案-如果您有一个具有多个水平的因子会发生什么-是这样做的:
如您所见,
factor
变量现在每个水平都有一个系数,而不是被视为连续的。为什么你需要这样做
您遇到的困难是
cmprsk::crr()
函数不支持模型公式。相反,它接受一个矩阵,这意味着所有协变量都将被强制转换为同一个类。在您的例子中,您的factor
变量导致所有内容都被强制转换为character
,并且通过强制转换引入NAs
。作为cmprsk
docs状态:模型.矩阵函数可用于从因子生成合适的协变量矩阵
在你最初的问题中,它有一个二进制因子,我们可以只做
cov$sex <- cov$sex=="male"
,并得到一个易于解释的二进制协变量。然而,对于更多的水平,我们需要使用model.matrix()
。如果你想改变参考水平的表示方式,请参阅this question。