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

如何使用ggplot绘制按地区分组的对数相对风险关联曲线

解决方案

你现有代码输出不符合预期的核心原因是初始Cox模型未纳入Region变量,无法计算不同地区对应的效应值,需要先调整模型再绘图,可按你的需求选择以下两种场景实现:

场景1:不同地区的CV效应独立(允许CV对终点的影响随地区变化)

如果需要每个地区对应单独的CV效应曲线,需要在模型中添加CV与Region的交互项,完整代码如下:

# 更新datadist统计,覆盖所有用到的变量分布
dd <- datadist(EB); options(datadist='dd')
# 建模时纳入CV、Region主效应+交互项,x=TRUE和y=TRUE用于后续正确计算置信区间
f <- cph(Surv(time, event) ~ CV * Region, data = EB, x = TRUE, y = TRUE)

# 绘图,按Region区分曲线
ggplot(Predict(f, CV, Region)) +
  aes(color = Region, fill = Region) +
  geom_ribbon(alpha = 0.2, color = NA) +
  ylab("Log relative hazard for primary outcome") +
  xlab("Continuous value") +
  ggtitle("Association between continuous value and primary endpoint by Region")

你之前看到的区间带是95%置信区间带,代表对应地区、对应CV取值下,log相对风险估计值的95%置信范围,区间越窄说明该点的效应估计稳定性越高。如果不需要显示置信区间,添加geom_ribbon(stat = "blank")即可关闭。

场景2:仅调整Region混杂因素,CV效应在所有地区一致

如果不需要CV的效应随地区变化,仅希望按地区分面展示调整了Region混杂后的效应曲线,使用主效应模型即可:

dd <- datadist(EB); options(datadist='dd')
# 仅纳入CV和Region的主效应,不添加交互
f <- cph(Surv(time, event) ~ CV + Region, data = EB, x = TRUE, y = TRUE)

# 分面展示各地区的曲线,此时所有曲线斜率一致、仅截距不同
ggplot(Predict(f, CV, Region)) +
  facet_wrap(~Region) +
  ylab("Log relative hazard for primary outcome") +
  xlab("Continuous value") +
  ggtitle("Association between continuous value and primary endpoint by Region")
补充注意事项
  • 若Region为字符型变量,建议先转成因子型再建模,避免绘图时分类排序错乱
  • 若需要展示风险比HR而非log相对风险,可在Predict调用时添加fun = exp参数,同步将y轴标签改为HR for primary outcome即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:39:00