You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用ggsurvfit::ggsurvfit()绘制log-minus-log图?

解决ggsurvfit绘制log-minus-log图的初始值异常问题

直接修改survfit2对象的surv值会因为time=0时生存概率为1,计算log(-log(1))得到负无穷,导致绘图起始部分异常。推荐用以下两种更稳妥的方法:

方法一:利用ggplot2内置的log-minus-log变换

ggplot2自带logminuslog变换,搭配ggsurvfit直接使用,同时通过limits参数过滤异常的初始值:

library(ggsurvfit)
library(ggplot2)

# 拟合生存模型
temp <- survfit2(Surv(time, status) ~ adhere, data = df_colon)

# 绘制log-minus-log图
ggsurvfit(temp) +
  geom_step() +
  scale_y_continuous(
    name = "log(-log(生存概率))",
    trans = "logminuslog",
    # 根据你的数据调整y轴范围,避开负无穷
    limits = c(-5, 0)
  )

方法二:通过stat_surv指定变换函数

直接在stat_surv层中设置fun参数应用变换,同样可通过坐标调整隐藏异常点:

ggsurvfit(temp) +
  stat_surv(fun = \(x) log(-log(x))) +
  labs(y = "log(-log(生存概率))") +
  coord_cartesian(ylim = c(-5, 0))

额外提示:手动过滤初始点(可选)

如果需要彻底移除time=0的观测,可先处理survfit2对象,再绘图:

# 过滤time>0的观测
temp_filtered <- temp
keep_idx <- temp_filtered$time > 0
temp_filtered$time <- temp_filtered$time[keep_idx]
temp_filtered$surv <- temp_filtered$surv[keep_idx]
temp_filtered$n.risk <- temp_filtered$n.risk[keep_idx]
temp_filtered$n.event <- temp_filtered$n.event[keep_idx]
temp_filtered$n.censor <- temp_filtered$n.censor[keep_idx]

# 绘图
ggsurvfit(temp_filtered) +
  geom_step() +
  scale_y_continuous(trans = "logminuslog")

内容的提问来源于stack exchange,提问作者Stefan Hansen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 18:32:43