imd 统计教程 · 交互作用与中介分析
← 教程首页 返回本模块

生存数据传统中介与因果中介你真的懂吗

聂志强实战医学统计2025-03-29 14:56:23广东


生存数据分析中介分析是一个相对比较难的方向,尤其是方法学的进展出现了因果中介的概念,更加混淆了传统生存中介的优势与因果解读。许多小伙伴对中介R包的参数设置甚至没有去仔细研读help手册,上来就干,产出的结果也不甚了解。如此,对因果中介的普及带来了相当大范围的误解。本文旨在对生存数据的因果中介与传统中介做一个全面详细的文献考究与R包结果、参数对比,做到正确抉择参数与科学解释真相。

一、传统中介vs 因果中介

因果中介分析可以被视为传统中介分析一种革命性的方法,在某些情况下可以取代传统的中介分析,但研究者并不常使用因果中介! 因果中介分析旨在定义和估计因果效应,而不是传统中介分析中的关联效应。因果中介澄清了传统中介分析的几个模糊之处,包括间接效应估计的混合和具有二元结果的模型的不可折叠性。注意,当变量为二分类、存在XM交互,或研究需精确因果解释时,推荐使用因果中介分析方法。可见,因果中介应对复杂DAG图模型更适合。因果中介基于反事实框架,定义出6类效应,比传统中介的3类要多且详细;因果中介结果与传统中介结果不一致。


二、因果视角与反事实框架

2.1因果中介的因果视角

在因果中介分析中,总效应、间接效应和直接效应是相对于暴露A中感兴趣的特定对比来定义的,即在某个参考水平(称为a)和另一个水平(称为a)之间。如果暴露是二进制的,那么我们将简单地设置a=0和a=1。总效应TE表示如果对整个人群而言,暴露从参考水平更改为新的水平a,则结果的平均变化。启发式地说,直接效应对应于如果在中介M保持固定的情况下改变暴露会发生的平均结果的变化。 两种类型的直接效应。首先,受控直接效应,CDE(m),代表结果的平均变化,如果对整个人群来说,暴露从参考水平a改变到新水平a,同时,如果暴露和介体之间存在相互作用,则介体在水平上保持恒定。CDE(m)随m的水平而变化,如果暴露和介体之间存在相互作用。其次,自然直接效应,NDE,代表了结果的平均变化,如果对整个人群来说,暴露从a变为a,同时,对于每个个体,如果暴露被设置为参考水平a,则介体保持恒定,对于该个体)。与直接效应相比,间接效应对应于如果在暴露保持固定的情况下改变介质会发生的平均结果的变化。更准确地说,自然间接效应,NIE,代表了如果对整个人群来说,暴露被固定在新的水平a,结果的平均变化,同时,对于每个个体来说,中介水平从如果暴露被设置为参考水平a自然会发生的变化到如果暴露被设置为新的水平a自然会发生的变化。下面是一个案例,详细解释因果视角。主要注意,解释起来都是“固定..水平,平均改变”。

2.2 反事实框架

反事实框架(the counterfactual framework),通过模拟干预措施(如治疗、政策等)在不同条件下可能产生的效果,来评估干预的因果效应。反事实框架的核心思想是,通过人为设定一个或改变某个变量(如暴露因素)的水平,来观察结果的变化,从而推断因果关系。 人为设定xy水平,导致比例不一定真实甚至与事实会相反,所以称为反事实。 反事实是因果中介算法中最重要的概念,其实就是为了折腾出6大指标,见1。

3. 因果中介前提是严格的研究设计

因果中介分析的前提,是很严苛的。要求严格的因果队列时间线、完全显示的混杂因素(不能包括未测量confounder)、并且队列要求起码3波以上的测量,顺序还要求是混杂因素先测量,其次暴露,再次中介,最后结果测量。这点,总结如下图。简而言之,不能瞎b用,尤其是协变量(混杂)测量是时间必须是前置。

4. regmedint 包

regmedint 包由yili等作者制作,2023年更新了2篇SCI使用说明的论文,论文比help文档详细的多。论文详细案例,可以参考具体如何解释这6类效应。regmedint包可允许交互和中介共存一个模型中。支持连续 + 二分类结局,其还支持生存结局的多种模型包括了Cox模型和AFT模型regmedint::regmedint函数默认delta法计算中介效应的置信区间,bootstrap法见 https://kaz-yos.github.io/regmedint/articles/vig_03_bootstrap.html。

智荟代码总结了regmedint包的核心参数赋值以及一键计算因果中介,需要注意的是存在多个协变量时参考值取值,默认是均值,当然也可手动指定。


5. R代码复现

R代码案例1来自,https://kaz-yos.github.io/regmedint/articles/vig_01_introduction.html。代码中需要详细斟酌的地方:协变量个数与均数(或手动指定level)、是否考虑调节效应、是否考虑中介*暴露交互。

library(regmedint)
library(tidyverse)
#https://cran.r-project.org/web/packages/regmedint/vignettes/vig_01_introduction.html
data(vv2015)

# ---- 1. 当协变量无效应修饰----
#(即:emm_ac_mreg = NULL,emm_ac_yreg = NULL,emm_mc_yreg = NULL)

# 使用 regmedint 包进行中介分析(适用于包含生存结果的情况)
regmedint_obj1 <- regmedint(
  data = vv2015,             # 输入数据集,假设包含变量 y, x, m, c, event 等
## 变量设置
  yvar = "y",                # 结果变量(结局变量)
  avar = "x",                # 暴露变量(Exposure)
  mvar = "m",                # 中介变量(Mediator)
  cvar = c("c"),             # 协变量(Covariates),这里是cov=c向量,也可包含多个协变量covs
  eventvar = "event",        # 生存结局的事件指示变量(1 表示事件发生,0 表示删失)
## 设置用于计算效应的变量取值
  a0 = 0,                    # 暴露变量的参考值
  a1 = 1,                    # 暴露变量的处理值(对照于 a0)
  m_cde = 1,                 # 用于计算 Controlled Direct Effect (CDE) 时中介变量M=1固定的值
  c_cond = 3,                # 协变量用于条件期望计算时的取值(如风险人群的特征设置)
## 模型类型
  mreg = "logistic",         # 中介模型使用 logistic 回归(适用于二分类中介变量)
  yreg = "survAFT_weibull",  # 结局模型使用 Weibull 分布的加速失效时间模型(AFT)
## 其他设置
  interaction = TRUE,        # 指定是否包含中介与暴露变量的交互作用(TRUE 为包含)
  casecontrol = FALSE        # 是否为病例对照研究(FALSE 表示不是)
)
# 输出模型摘要结果,包括各种间接效应、直接效应及其置信区间
summary(regmedint_obj1)

# 计算cvar变量的均值
cvar_means <- colMeans(vv2015[c("c")], na.rm = TRUE)
cvar_means

#----2 当协变量有效应修饰----
#emm_ac_mreg 、 emm_ac_yreg 和 emm_mc_yreg 可以取 cvar 中协变量的子向量
regmedint_obj2 <- regmedint(data = vv2015,
                            ## Variables
                            yvar = "y",
                            avar = "x",
                            mvar = "m",
                            cvar = c("c"),
                            #中介模型和结果模型中均有 A×C 项,结果模型有 M×C
                            emm_ac_mreg = c("c"),
                            emm_ac_yreg = c("c"),
                            emm_mc_yreg = c("c"),
                            eventvar = "event",
                            ## Values at which effects are evaluated
                            a0 = 0,
                            a1 = 1,
                            m_cde = 1,
                            c_cond = 3,
                            ## Model types
                            mreg = "logistic",
                            yreg = "survAFT_weibull",
                            ## Additional specification
                            interaction = TRUE,
                            casecontrol = FALSE)
summary(regmedint_obj2)
#HR95%CI详细
summary(regmedint_obj2, exponentiate = TRUE)
#仅输出系数部分
coef(summary(regmedint_obj2, exponentiate = TRUE))

#可以在不同的 m_cde 和 c_cond 下重新评估估计值,而无需重新拟合底层模型
#--m_cde变化 cde结果不同
#--c_cond变化 全部结果不同
coef(summary(regmedint_obj2, exponentiate = TRUE, m_cde = 1, c_cond = 3))
coef(summary(regmedint_obj2, exponentiate = TRUE, m_cde = 0, c_cond = 3))
coef(summary(regmedint_obj2, exponentiate = TRUE, m_cde = 0, c_cond = 5))

6. 发散思维

1.regmedint包用于补充mediation中介的不足,除了这2个包还有其他寻求估计因果量的现代中介R包,总结如下。


2.regmedint文献相对不足,分数>10分有2篇。应用regmedint并未过多解释6大效应,仅仅计算了PM%。


小结

  1. 传统中介3类关联指标,因果中介因果6类因果指标,后者解释复杂且需要指定协变量level以及固定暴露或中介水平
  2. 经典生存中介智荟代码支持1个中介变量为二分类或者连续,regmedint支持1个中介且支持中介交互但是需要满足>3波纵向队列前提,且中介分析需严格遵循变量发生的时间顺序:混杂因素 → 暴露 → 中介 → 结果 ,前提要求高解释困难。因果生存中介智荟代码可自行计算PM%与6类效应。
  3. regmedint包文献较少,大多仅汇报PM%中介比例。经典中介PM%与因果中介PM%不一致,这是问题。除非有中介效应修饰或交互,不然还是推荐经典中介,regmedint仅作为替补


本公众号建立了学术交流群(群6),仅供SCI学术交流,人数有限需要实名制。入群请加笔者微信 popnie请备注说明:姓名-学校(单位)-专业