0

我有两个生存功能,一个没有被截断,所以我有所有时间段的经验。另一个在 t = 4 之前被左截断,因此在 t > 4 之前它没有经验。我可以使用生存包在 R 中的以下代码中将两者一起绘制。

library(tidyverse)
library(survival)
library(ggfortify)

# create two survival functions
set1 <- tibble(start0 = rep(0,10), end0 = 1:10, event0 = rep(1,10))
set2 <- tibble(start0 = rep(4,10), end0 = c(5, 5, 7, 9, rep(10, 6)), event0 = rep(1,10))
combined_set <- bind_rows(set1, set2)
survival_fn <- survfit(Surv(start0, end0, event0) ~ start0, data = combined_set)

# plot the survival function:
autoplot(survival_fn, conf.int = FALSE)

如果两个函数在截断期间都经历过相同的生存经历,我想展示它们之间的生存差异 - 即直到 t = 4。我已经手动绘制了我想要实现的近似图(大小为步骤不按比例)。

这是一个简化的示例 - 实际上,我有八组不同的数据集,它们具有不同的截断周期,每组大约有 2000 个数据点。

期望的输出

4

1 回答 1

1

如果您查看survival_fn对象的结构(不是函数,而是列表),您会看到:

str(survival_fn)
List of 17
 $ n        : int [1:2] 10 10
 $ time     : num [1:14] 1 2 3 4 5 6 7 8 9 10 ...
 $ n.risk   : num [1:14] 10 9 8 7 6 5 4 3 2 1 ...
 $ n.event  : num [1:14] 1 1 1 1 1 1 1 1 1 1 ...
 $ n.censor : num [1:14] 0 0 0 0 0 0 0 0 0 0 ...
 $ surv     : num [1:14] 0.9 0.8 0.7 0.6 0.5 0.4 0.3 0.2 0.1 0 ...
 $ std.err  : num [1:14] 0.105 0.158 0.207 0.258 0.316 ...
 $ cumhaz   : num [1:14] 0.1 0.211 0.336 0.479 0.646 ...
 $ std.chaz : num [1:14] 0.1 0.149 0.195 0.242 0.294 ...
 $ strata   : Named int [1:2] 10 4
  ..- attr(*, "names")= chr [1:2] "start0=0" "start0=4"
 $ type     : chr "counting"
 $ logse    : logi TRUE
 $ conf.int : num 0.95
 $ conf.type: chr "log"
 $ lower    : num [1:14] 0.732 0.587 0.467 0.362 0.269 ...
 $ upper    : num [1:14] 1 1 1 0.995 0.929 ...
 $ call     : language survfit(formula = Surv(start0, end0, event0) ~ start0, data = combined_set)
 - attr(*, "class")= chr "survfit"

因此,尽管在 (t=0,S=1) 处仍然自动开始生存函数,但获得类似目标的一种方法是将$surv“start0=4”层中的所有项目乘以生存值t=4,然后重做绘图:

survival_fn[['surv']][11:14] <- survival_fn[['surv']][11:14]*survival_fn[['surv']][4]

在此处输入图像描述

我可以明白为什么这可能不是一个完全一致的答案,因为从 1 到 t=5 仍然有一条蓝线,而且它实际上并不是从 t=4 的第 1 层的 surv 值开始的。然而,这是使用“高级”抽象绘图范例的限制。绘图语法中内置的许多“有用”假设抑制了可定制性。在基础绘图中执行此操作并不困难,因为您可以在没有太多限制的情况下“移动事物”。

如果您确实需要根据估计的生存比例和时间构建一个阶梯函数,您可以查看这个答案,然后构建一个增强数据集,其中 ay at time=4 调整后一层。您需要为主要层添加时间 = 0 值,为第二层添加第一层的时间 = 4 值,并进行如上所示的调整。请参阅此问题和答案。 从坐标重建生存曲线

于 2021-09-13T18:42:43.190 回答