在R中基于CPH回归开展糖尿病与尿量亚组生存分析求助
问题描述
需要在R中通过Cox比例风险(CPH)回归开展亚组分析,探究糖尿病(Y/N)与尿量(≥200ml/<200ml)的交互作用对生存结局的影响。目前已完成糖尿病亚组(覆盖所有尿量)的CPH分析,并创建了糖尿病与尿量的组合分组变量,现需基于该组合分组,分析不同尿量分组中糖尿病对生存的影响。
解决方案
1. 修正组合分组变量的代码错误
你提供的代码中存在一处笔误:xxxxl$diabfl应为xxxx$diabfl,修正后的组合分组变量创建代码如下:
# 创建尿量分组变量(≥200ml=1,<200ml=0) xxxx$uacr200 <- ifelse(xxxx$uacr >= 200, 1, 0) # 创建糖尿病+尿量的组合分组变量 xxxx$dmuacrgr <- NA xxxx$dmuacrgr[xxxx$uacr < 200 & xxxx$diabfl == "N"] <- 1 # 无糖尿病+尿量<200ml xxxx$dmuacrgr[xxxx$uacr >= 200 & xxxx$diabfl == "N"] <- 2 # 无糖尿病+尿量≥200ml xxxx$dmuacrgr[xxxx$uacr < 200 & xxxx$diabfl == "Y"] <- 3 # 有糖尿病+尿量<200ml xxxx$dmuacrgr[xxxx$uacr >= 200 & xxxx$diabfl == "Y"] <- 4 # 有糖尿病+尿量≥200ml # 将组合分组转为因子并指定参考组(建议选临床意义最明确的组,比如组1) xxxx$dmuacrgr <- factor(xxxx$dmuacrgr, levels = c(1,2,3,4), labels = c("无糖尿病+尿量<200ml", "无糖尿病+尿量≥200ml", "有糖尿病+尿量<200ml", "有糖尿病+尿量≥200ml"))
2. 基于组合分组的Cox回归分析
以下提供两种等价的分析思路,可根据需求选择:
思路一:直接纳入糖尿病与尿量的交互项建模
这种方式能直接检验交互作用的统计学显著性,同时得到各亚组的风险比:
# 拟合包含交互项的Cox模型 cox_mod_interaction <- coxph(Surv(aval, cnsr == 0) ~ trt + diabfl * uacr200 + mageg1n + mgfrg1n + msexg1n + muacrg1n + sitegr2n, data = zzzz, subset = (paramcd == "KDPDVASC"), ties = "breslow") # 查看模型结果(包括交互项的HR和P值) summary(cox_mod_interaction)
- 结果中
diabflY:uacr2001是糖尿病与尿量的交互项,其P值可判断交互作用是否显著; - 若交互项显著,可进一步分层分析:分别在
uacr200=0和uacr200=1的亚组中拟合Cox模型,查看糖尿病对生存的影响。
思路二:使用预定义的组合分组变量建模
通过组合分组变量直接对比各组的风险,直观展示不同尿量分组中糖尿病的影响:
# 拟合包含组合分组的Cox模型 cox_mod_group <- coxph(Surv(aval, cnsr == 0) ~ trt + dmuacrgr + mageg1n + mgfrg1n + msexg1n + muacrg1n + sitegr2n, data = zzzz, subset = (paramcd == "KDPDVASC"), ties = "breslow") # 查看各组相对于参考组(无糖尿病+尿量<200ml)的HR summary(cox_mod_group)
- 结果中
dmuacrgr的各水平对应的HR,可直接对比:dmuacrgr无糖尿病+尿量≥200ml:无糖尿病时,尿量≥200ml vs <200ml的HR;dmuacrgr有糖尿病+尿量<200ml:尿量<200ml时,有糖尿病 vs 无糖尿病的HR;dmuacrgr有糖尿病+尿量≥200ml:尿量≥200ml时,有糖尿病 vs 无糖尿病的HR。
3. 亚组分析结果可视化(可选)
如果需要直观展示亚组结果,可使用subgroupAnalysis函数或森林图工具:
# 使用subgroupAnalysis分析尿量亚组中糖尿病的影响 subg_cox_mod_uacr <- subgroupAnalysis(cox_mod_interaction, zzzz[zzzz$paramcd == "KDPDVASC",], treatment = "trt", subgroups = c("uacr200", "diabfl"), confint.method = "default") # 绘制森林图(以forestmodel包为例) library(forestmodel) forest_model(cox_mod_interaction, exponentiate = TRUE, include = c("diabfl", "uacr200", "diabflY:uacr2001"))
内容的提问来源于stack exchange,提问作者Leyla Shams
相关产品推荐
相关产品推荐

