ggsurvplot 关于置信区间的奇怪行为

Posted

技术标签:

【中文标题】ggsurvplot 关于置信区间的奇怪行为【英文标题】:Weird behavior of ggsurvplot about confidence interval 【发布时间】:2021-10-01 13:33:37 【问题描述】:

我正在为以下数据集构建生存曲线:

cont.Time <- c(5.1,5.4,5.7,5.9,5.9,6,6.1,6.3,6.8,7,7.1,7.4,7.4,7.4,7.4,7.6,8.8,8.8,8.9,9.1,9.9,9.9,10.1,10.4,10.5,11.1,11.3,11.4,11.5,11.7,13.5,13.5,14.1,14.2,15.2,15.9,16.1,16.3,16.5,16.6,16.6,16.6,16.6,16.7,16.8,16.8,16.9,16.9,17,17.1,17.2,17.3,17.5,17.5,17.8,17.9,17.9,18.4,18.7,19.4,19.6,19.7,19.9,19.9,19.9,19.9,20.1,20.3,20.5,20.6,20.8,20.9,21.1,21.2,21.2,21.3,21.7,21.9,22.1,22.4,22.9,23,23.1,23.3,23.8,24.1,24.6,24.8,24.9,24.9,25,25.1,25.1,25.2,25.3,25.4,25.4,25.6,26.6,26.7,27.1,27.2,27.4,27.4,27.5,27.6,27.6,27.8,28,28.2,28.3,28.5,28.8,28.8,28.9,28.9,29,29.1,29.2,29.4,29.6,29.9,30.1,30.5,30.6,30.6,30.6,30.6,30.6,30.7,31,31.1,31.3,31.6,31.8,32.9,33.1)
cont.Evt <- c(rep(1,54), rep(0,83))
cont.Strata <- unlist(strsplit("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYXYYYXYXYYYXYYXYXYYYXXYYYXYYXXXYYYXYYYYYXXXYYYXYXYYYYYXYYYYYYYYYYYYXYYYYYXYYYYYXYYXYYYYYXYYYYYYXYXXYYXXY",split=''))

df1 <- structure(list(Time=cont.Time,Evt=cont.Evt,Strata=cont.Strata),class="data.frame",row.names=c(NA,-137L))

(对于丑陋的演示感到抱歉,我无法将其缩小到更小)

print(df1)
#     Time Evt Strata
# 1    5.1   1      X
# 2    5.4   1      X
# 3    5.7   1      X
# ...
# 135 31.8   0      X
# 136 32.9   0      X
# 137 33.1   0      Y

当我用conf.int=TRUE 调用ggsurvplot() 时,它会构建没有置信区间的图:

p0 <- ggsurvplot(survfit(Surv(Time,   Evt) ~ Strata, data = df1[1:137,]), conf.int=TRUE)

如果我做同样的事情但表格中没有最后一行,它会开始显示一个层的置信区间:

p1 <- ggsurvplot(survfit(Surv(Time,   Evt) ~ Strata, data = df1[1:136,]), conf.int=T)

如果我删除 2 个或更多最后一行,它会根据需要显示两者的置信区间:

p2 <- ggsurvplot(survfit(Surv(Time,   Evt) ~ Strata, data = df1[1:135,]), conf.int=T)

那里发生了什么?

UPD。发现这被报告为an issue at survminer repo。

尝试调试它但不成功。我只发现只替换情节的一个组成部分就足够了:

data.Bad <- p0$plot$layers[[3]]$data
data.Good <- data.Bad[order(data.Bad$time),][1:115,]
p0$plot$layers[[3]]$data <- data.Good

【问题讨论】:

【参考方案1】:

我不知道为什么这样做的详细信息,但在您在问题中提到的github issue 中有一个ad hoc 解决方案的答案。

shilsenbeck:
I have the same problem. the problem disappeared when I added an
explicit xlim= that extends the x-axis enough to capture the max value.

因此,对于此线程中的示例,解决方案将是:

p0 <- ggsurvplot(survfit(Surv(Time, Evt) ~ Strata, data = df1[1:137,]),
                 conf.int = TRUE,
                 xlim = c(0, max(df1$Time)))

【讨论】:

以上是关于ggsurvplot 关于置信区间的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章

[概率论与数理统计]笔记:5.3 置信区间

如何在 Python 中绘制置信区间?

用survreg()和gsurvplot()绘制生存分析置信区间。

高斯过程预测置信区间奇数

怎么理解置信区间

置信区间、显著性检验和统计学意义