R语言 从累积发生率到生存概率

gmol1639  于 2023-05-04  发布在  其他
关注(0)|答案(1)|浏览(273)

在竞争风险分析的背景下,我绘制了以下图表,代表了按性别划分的死亡(=竞争风险)随时间推移的累积发生率:

# CREATE THE SIMULATED DATASET 
# 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)
df$sex<-as.factor(df$sex)

# Plot the cumulative incidence curve 
library(cmprsk)

cum<-cuminc(df$time,df$status,group = df$sex,cencode = 0)

而不是有死亡的累积发生率,我想有生存概率(1-死亡的累积发生率)。为此,我使用了以下代码:

plot(cum, function(x) 1-x, main = "Survival Probability",xlab = "Survival proba",
     ylab = "Time in days")

但它不工作,我得到了以下错误消息:

Error in title(...) : 
  cannot coerce type 'closure' to vector of type 'character'

你知道我该怎么解决吗?

5uzkadbs

5uzkadbs1#

cuminc的对象是一个列表。列表的前两个元素分别称为"female 1""male 1"。这些列表中的每一个都是包含元素timeestvar的列表。est元素是死亡的累积发生率。为了生存,你会选择1 - est
str(cum)的输出:

str(cum)
List of 3
 $ female 1:List of 3
  ..$ time: num [1:360] 0 1 1 2 2 3 3 4 4 5 ...
  ..$ est : num [1:360] 0 0 0.00126 0.00126 0.00302 ...
  ..$ var : num [1:360] 0.00 0.00 3.16e-07 3.16e-07 7.57e-07 ...
 $ male 1  :List of 3
  ..$ time: num [1:358] 0 1 1 2 2 3 3 4 4 5 ...
  ..$ est : num [1:358] 0 0 0.00146 0.00146 0.00341 ...
  ..$ var : num [1:358] 0.00 0.00 3.56e-07 3.56e-07 8.30e-07 ...
 $ Tests   : num [1, 1:3] 0.0789 0.7788 1
  ..- attr(*, "dimnames")=List of 2
  .. ..$ : chr "1"
  .. ..$ : chr [1:3] "stat" "pv" "df"
 - attr(*, "class")= chr "cuminc"

要绘制生存曲线,请创建cum对象的副本,并修改女性和男性的est元素,然后绘制它。(wh参数用于将图例移动到与默认左上角不同的位置,该位置与生存曲线重叠。)

surv <- cum
surv[['female 1']][['est']] <- 1 - surv[['female 1']][['est']]
surv[['male 1']][['est']] <- 1 - surv[['male 1']][['est']]

plot(surv, main = "Survival Probability",xlab = "Survival probability",
     ylab = "Time in days", wh = c(0, 0.15))

这个解决方案有点古怪,在cmprsk包中可能有更好的解决方案。

相关问题