R中的精细灰色回归分析中的错误消息(软件包cmprsk)

tcomlyy6  于 2023-04-18  发布在  其他
关注(0)|答案(1)|浏览(189)

我正在使用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.omitcomplete.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)
sshcrbum

sshcrbum1#

使用model.matrix()将您自己的设计矩阵传递给模型

您的评论中的问题的解决方案-如果您有一个具有多个水平的因子会发生什么-是这样做的:

# Create factor with three levels
cov$income <- factor(sample(c("high", "med", "low"), nrow(cov), replace = TRUE))

# Define factors for model spec
factors <- c("sex", "income")
model_spec <- reformulate(
    paste0("age+", paste(factors, collapse = "+"))
) # ~age + sex + income

covariates_matrix <- model.matrix(
    model_spec,
    data = cov,
    contrasts.arg = lapply(cov[factors], contrasts)
)[, -1] # first column is constant intercept (1)

head(covariates_matrix, 3)
#   age sexmale incomelow incomemed
# 1  60       1         0         1
# 2  39       0         1         0
# 3  23       0         0         0

crr(df$time, df$status, covariates_matrix, failcode = 1, cencode = 0)

# convergence:  TRUE
# coefficients:
#        age    sexmale  incomelow  incomemed
#  0.0002871  0.0506400 -0.0391500 -0.0098910
# standard errors:
# [1] 0.001193 0.050910 0.062340 0.062020
# two-sided p-values:
#       age   sexmale incomelow incomemed
#      0.81      0.32      0.53      0.87

如您所见,factor变量现在每个水平都有一个系数,而不是被视为连续的。

为什么你需要这样做

您遇到的困难是cmprsk::crr()函数不支持模型公式。相反,它接受一个矩阵,这意味着所有协变量都将被强制转换为同一个类。在您的例子中,您的factor变量导致所有内容都被强制转换为character,并且通过强制转换引入NAs。作为cmprskdocs状态:
模型.矩阵函数可用于从因子生成合适的协变量矩阵
在你最初的问题中,它有一个二进制因子,我们可以只做cov$sex <- cov$sex=="male",并得到一个易于解释的二进制协变量。然而,对于更多的水平,我们需要使用model.matrix()。如果你想改变参考水平的表示方式,请参阅this question

相关问题