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

如何筛选emmeans输出中trt2/trt1同karno值的对比并转数值

解决方法

步骤1:简化HR对比计算(推荐)

不用生成所有成对对比再筛选,直接在emmeans中通过by = "karno"参数,仅计算每个karno取值下治疗组(trt)的对比,得到的结果就是你需要的trt2/trt1在相同karno下的HR:

library(survival)
library(emmeans)
library(dplyr)
library(ggplot2)

# 拟合含交互项的Cox模型
fit <- coxph(Surv(time, status) ~ trt * karno, data = veteran)

# 直接在每个karno取值下计算trt2/trt1的HR
emm_df <- emmeans(fit, ~ trt | karno, at = list(karno = seq(0, 100, by = 5)), type = "unlink") %>%
  pairs(rev = TRUE) %>%  # 指定rev=TRUE得到trt2/trt1的对比(默认是trt1/trt2)
  summary(infer = TRUE)  # 输出置信区间和统计量

# 查看结果
head(emm_df)

此时emm_df会包含一个karno列,直接是数值类型(0、5、10...),无需额外转换,可直接用于绘图。

步骤2:如果需要从原始全对比数据筛选(备选)

若你已经生成了所有成对对比数据,可通过字符串匹配筛选目标行并提取karno数值:

library(stringr)

# 筛选trt2/trt1且karno相同的对比行
emm_filtered <- emm_df %>%
  filter(grepl("trt2 karno(\\d+) / trt1 karno\\1", contrast)) %>%
  # 提取karno的数值
  mutate(karno = as.numeric(str_extract(contrast, "(?<=karno)\\d+")))

步骤3:绘制HR变化图

使用ggplot2绘制HR随karno变化的曲线,添加置信区间:

ggplot(emm_df, aes(x = karno, y = ratio)) +
  geom_point(size = 2) +
  geom_errorbar(aes(ymin = asymp.LCL, ymax = asymp.UCL), width = 2) +
  geom_hline(yintercept = 1, linetype = "dashed", color = "red") +  # HR=1的参考线
  labs(x = "Karno功能评分", y = "风险比(HR: trt2 vs trt1)", 
       title = "不同Karno评分下治疗组的风险比对比") +
  theme_bw()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 14:05:12