如何筛选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
相关产品推荐
相关产品推荐

