survfit() 为区间删失数据生成的难以置信的宽置信区间

Implausibly wide confidence intervals produced by survfit() for interval censored data

我有数据是通过间歇性访谈生成的,在访谈中询问个人是否出现某种症状。上次已知每个人 没有 有此特定症状的时间表示为 tstart。如果适用,观察到个体出现症状的时间是 tstop。使用R中的survival包,用Surv函数创建一个生存对象,指定这是区间删失数据。我想要生存函数的非参数最大似然估计。这可以使用 survfit 函数来完成,它似乎将调用传递给内部函数 survfitTurnbull。由此产生的置信区间宽得令人难以置信。我无法弄清楚为什么会这样。

# A random sample of the data using dput()
structure(list(tstart = c(0.01, 38, 0.01, 0.01, 23, 26, 0.01, 
19, 0.01, 0.01, 22, 6, 0.01, 14, 16, 0.01, 0.01, 0.01, 0.01, 
21, 15, 0.01, 0.01, 13, 10, 0.01, 0.01, 19, 0.01, 0.01, 0.01, 
0.01, 22, 17, 27, 14, 16, 0.01, 20, 27, 10, 0.01, 0.01, 16, 20, 
7, 6, 15, 0.01, 0.01), tstop = c(4.01, NA, 5.01, 8.01, NA, NA, 
5.01, NA, 3.01, 16.01, NA, 6.01, 8.01, NA, NA, 7.01, 16.01, 1.01, 
10.01, NA, NA, 5.01, 8.01, NA, NA, 2.01, 3.01, NA, 7.01, 5.01, 
2.01, 9.01, NA, NA, NA, NA, NA, 10.01, NA, NA, NA, 5.01, 10.01, 
NA, NA, NA, 7.01, NA, 14.01, 4.01)), row.names = c(NA, -50L), class = "data.frame")

survObj <- with(temp_df, Surv(time = tstart, time2 = tstop, type = "interval2"))
survFit <- survfit(SurvObj ~ 1))
summary(survFit)

置信区间不会随着时间的推移而缩小。使用整个数据集(包含大约 10 倍的事件数)并没有缩小范围。我无法弄清楚出了什么问题。

就其价值而言,这看起来不像是 软件 中的错误,而是使用像非参数最大似然估计器一样灵活的东西的潜在限制( NPMLE,也称为 Turnbull 估计器,survfit 如果您给它区间截尾数据,它是适合的)用于估计生存曲线。这个答案的 TLDR 版本是我建议您使用参数模型,例如 Weibull,使用 survival::survregicenReg::ic_paricenReg::ic_bayes。承认偏见:我是 icenReg 的作者。

关于 NPMLE 的一个有点技术性但非常相关的说明是它只将正概率质量分配给 Turnbull 区间,这些区间定义为区间的左侧是某个观察区间的左侧,右侧Turnbull 间隔的一侧是 any 观察间隔的下一个最近的右侧。为了说明,我绘制了您的观察间隔和相应的 Turnbull 间隔。

请注意,最后两个特恩布尔间隔之间存在巨大差距!这会导致非常 "jumpy" NPMLE,这也会导致跳转之间出现相当多的错误。

在花了 时间思考这个问题之后,我的快速总结是,这是仅提供少量信息的数据和太多灵活性的结果。在大多数生存分析案例中,假设一条平滑的生存曲线(例如参数分布)是合理的。只要分布不是过于严格(阅读:单参数指数分布),这种温和的平滑假设允许您从数据中获得更多信息,而无需引入太多 too偏见。

为了说明,我附上了 Weibull 拟合 + 置信区间的图以及旁边的拟合 NPMLE。

仅供参考,您在 NPMLE 中看到的框 不是 置信区间,而是 NPMLE 仅在分配给每个 Turnbull 区间的概率内是唯一的,但是如何概率在区间内的分布不影响对数似然。因此,任何通过该框的生存曲线都会使对数似然最大化。