我正在对某些单个组件保留在软件项目的源代码中的时间进行生存分析,但其中一些组件正在被survfit
函数删除。
这就是我正在做的事情:
library(survival)
data <- read.table(text = "component_id weeks removed
1 1 1
2 1 1
3 1 1
4 1 1
5 1 1
6 1 1
7 1 1
8 2 0
9 2 0
10 2 0
11 2 0
12 2 1
13 2 1
14 2 0
15 2 0
16 2 0
17 2 0
18 2 0
19 2 0
20 2 1
21 2 1
22 2 0
23 2 0
24 3 1
25 3 1
26 3 1
27 3 1
28 7 1
29 7 1
30 14 1
31 14 1
32 14 1
33 14 1
34 14 1
35 14 1
36 14 1
37 14 1
38 14 1
39 14 1
40 14 1
41 14 1
42 14 1
43 14 1
44 14 1
45 14 1
46 14 1
47 14 1
48 40 1
49 40 1
50 40 1
51 40 1
52 48 1
53 48 1
54 48 1
55 48 1
56 48 1
57 48 1
58 48 1
59 48 1
60 56 1
61 56 1
62 56 1
63 56 1
64 56 1
65 56 1
66 56 1
67 56 1
68 56 1
69 56 1", header = TRUE)
fit <- survfit(Surv(data$weeks, data$removed) ~ 1)
summary(fit, censored=TRUE)
这是输出
Call: survfit(formula = Surv(data$weeks, data$removed) ~ 1)
time n.risk n.event survival std.err lower 95% CI upper 95% CI
1 69 7 0.899 0.0363 0.830 0.973
2 62 4 0.841 0.0441 0.758 0.932
3 46 4 0.767 0.0533 0.670 0.879
7 42 2 0.731 0.0567 0.628 0.851
14 40 18 0.402 0.0654 0.292 0.553
40 22 4 0.329 0.0629 0.226 0.478
48 18 8 0.183 0.0520 0.105 0.319
56 10 10 0.000 NaN NA NA
我预计事件的数量是 69,但我有 12 个科目被丢弃。
我最初以为我在滥用包功能,并采取了一种type="interval2"
方法,在类似的情况下,但随着现在奇怪的连续数量的主题和事件计数不断下降:
as.t2 <- function(i, data) if (data$removed[i] == 1) data$weeks[i] else NA
size <- length(data$weeks)
t1 <- data$weeks
t2 <- sapply(1:size, as.t2, data = data)
interval_fit <- survfit(Surv(t1, t2, type="interval2") ~ 1)
summary(interval_fit, censored=TRUE)
接下来,我找到了我所谓的半空中解释,进一步澄清了情况。我知道这是由于在“恒定审查时间”之后出现的未审查对象造成的,但同样,为什么?
这让我以某种方式深入挖掘并阅读了有关右截断的信息,并意识到这种类型的研究与我正在经历的下降非常接近。这是克莱因和莫施伯格:
当仅观察到事件时间位于某个观察窗口$(Y_L,Y_R)$内的那些个体时,就会发生生存数据的截断。未观察到事件时间不在此区间内的个体,且调查人员无法获得有关该主题的信息。
当$Y_L$等于 0 时发生右截断。也就是说,我们仅在$X \leq Y_R$时观察生存时间$X $ 。
从我的角度来看,无论何时进入,这些水滴都为我的研究提供了重要信息。
我怎样才能停止滴?