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 关于置信区间的奇怪行为的主要内容,如果未能解决你的问题,请参考以下文章