R数据分析:孟德尔随机化中介的原理和实操

2023-06-20,,

中介本身就是回归,基本上我看到的很多的调查性研究中在中介分析的方法部分都不会去提混杂,都是默认一个三角形画好,中介关系就算过去了,这里面默认的逻辑就是前两步回归中的混杂是一样的,计算中介效应的时候就自动消掉了。

但是,实际上对不对,还是有待具体分析的:

Traditional, non-instrumental variable methods for mediation analysis experience a number of methodological difficulties, including bias due to confounding between an exposure, mediator and outcome and measurement error

孟德尔随机化作为一个天然的免去混杂的方法,和中介结合,整个中介又变得更纯净了,是一种更加值得推崇的中介做法,也是孟德尔随机化研究的必要的延申。

今天给大家介绍孟德尔随机化中介分析的两个方法multivariable MR (MVMR) and two-step MR

先回顾中介作用

中介分析的基本的概念,就是大家熟悉的三角形:

c是总效应,加上中介变量后,A*B是间接效应,C'是直接效应,有总效应=间接效应+直接效应。

上图中如果总效应,直接效应和间接效应方向都相同的情况下,我们还可以报告中介效应比例,为间接效应比上总效应。

上面的图中的中介效应成立依赖几个假设:

首先就是没有混杂,包括变量之间没有混杂(或者像前面写的直接抵消);暴露不会造成额外混杂;暴露和中介变量没有交互。

再看孟德尔随机化的优势之一就是不受混杂影响,得到纯净的效应,所以将孟德尔随机化延伸一步去探究中介有天然优势。

MR approach retains the benefits of using genetic instruments for causal inference, such as avoiding bias due to confounding, while allowing for estimation of the different effects required for mediation analysis

multivariable MR

按照传统的回归中介的做法思想,我们如果可以跑多变量孟德尔,就可以做出中介分析的结果,具体就是两个暴露的孟德尔,一个是我们关心的暴露,另一个是中介。

MVMR estimates the “direct” causal effects of each exposure included in the estimation on the outcome, conditional on the other exposures included in the model.

跑多变量孟德尔后我们就可以得到中介模型中的直接效应:

就是说这样子跑下来我们就可以得到下图中的c'(直接效应)和B:

再加上我们单独跑一个暴露到结局的孟德尔,我们就有总效应了,利用总效应减去直接效应我们就可以得到间接效应(有了b,a也就出来了),整个中介分析就跑完了,这个就是多变量孟德尔跑中介分析的逻辑。

MR estimates the “total” effect of the exposure on the outcome, whereas MVMR estimates the “direct” effect of each exposure on the outcome

The genetic instrument for both the primary exposure and the second exposure (mediator) are included as instruments in the analysis . The indirect effect can then be estimated by subtracting the direct effect from the total effect (akin to the difference in coefficients method)

Two-step MR

此方法也可以用来计算中介,分为两步,第一步是计算暴露对中介变量的效应得到a,第二步是计算中介到结局的效应得到b,然后两系数相乘得到中介效应。

用总效应(单独跑一个暴露到结局的孟德尔,我们就有总效应了)减去中介效应后得到直接效应,到这儿所有的系数都有了。

The indirect effect of the exposure on the outcome can then be calculated by multiplying the effect of the exposure on the mediator and the effect of the mediator on the outcome. This is equivalent to the product of coefficients method of mediation analysis.

普通的回归肯定是不能这么做的(要得到系数B必须控制暴露),但是我们是跑的孟德尔,就意味着此时的我们跑出来的暴露到中介的效应A是纯净的,相应地B也是纯净的,所以我们才能这么跑。

两步孟德尔在跑的时候要注意,第二步使用的工具变量需要排除第一步就使用过的,因为合格的工具变量本身就不能重复,按理说两步的工具变量本身不应该存在重复,所以如果有重复在第二步的时候得排除掉。

First, genetic IVs associated with the risk factor are used to determine the causal effect of the risk factor on the potential mediator (step one). Secondly, genetic IVs associated with the potential mediator and independent of those used for step one are used to determine the effect of the potential mediator on the outcome of interest (step two)

上面两种方法都是孟德尔中介做法的思想,具体到操作上会有一些问题,比如用MVMR我们得到直接效应,用总效应减去直接效应我们其实只能得到间接效应的点估计,同样的,Two-step MR也存在这个问题,我们只能得到间接效应的点估计,怎么求标准误,和置信区间是在实操中要解决的问题。

下面给大家介绍几种解决方法。

delta方法

上面的流程跑通之后,对于中介分析,我们需要报告间接效应的估计值和置信区间,还有中介比例的估计值和置信区间,类似下面的这样:

但是其实我们是光跑孟德尔是得不到上面的需要的值的(比如间接效应的标准误,中介比例的标准误),此时需要借助的方法之一叫做delta method。

As individual level data is not available in summary data MR, bootstrapping cannot be used to estimate the confidence intervals for the indirect effect or proportion mediated, but the delta method can be used to approximate these confidence intervals if samples are independent

delta method可以帮助我们得到ab相乘的标准误,从而算出中介效应的置信区间。

也就是说我们知道了A,B路径的点估计和标准误,根据上面的公式就可以得到间接效应的置信区间,在R中实现起来也容易的,使用RMediation包,这个包作者有开发shiny应用,输入A,B的估计值和标准误就可以得到间接效应的估计值和标准误和置信区间了(下图圈内):

bootstrap方法

bootstrap方法也可以用来帮助我们计算中介效应和中介比例的置信区间:

Bootstrapping is a technique used in inferential statistics that work on building random samples of single datasets again and again. Bootstrapping allows calculating measures such as mean, median, mode, confidence intervals, etc. of the sampling.

bootstrap基本思路是对原来的分析数据进行有放回的随机抽样形成抽样数据集,bootstrap1000次就会形成1000个抽样数据集,每个抽样数据集都可以算我们需要的统计量,这样统计量的分布就出来了,也就有了置信区间。

bootstrap对象生成后计算中介效应和中介比例部分代码见下:

通过bootstrap形成比如1000个统计量的分布后,取0.025,0.975百分位就是95置信区间.

此处我们再补一个bootstrap过程的例子,在做bootstrap的时候我们需要用到boot函数,主要参数就3个:

其中最重要的就是我们需要计算的统计量statistic,这个是以函数的形式给出的,并且该函数接受不少于2个参数,一个是数据,另一个是抽样的indices。

为了对比我先将跑的孟德尔随机化的结果贴出来:

结果中有正常跑出来的b和对应的se,我通过bootstrap再将5个se跑出来,作为对比演示,代码如下:

mr_function <- function(data, indices) {
d <- dat[indices,]
jieguo <- mr(d)
return(jieguo %>% pull(b))
}
reps_mr <- boot(data=dat, statistic=mr_function, R=1000)

上面的代码中mr_function是我要喂给boot函数的statistic参数,在mr_function已经申明了我返回的值,也就是我要bootstrap的统计量是MR结果的b,所以运行完了会出来5个b的bootstrap的SE。

因为计算时间太长,上面就只设置了抽1000个数据集,数据不算很密,看看情况:

可以看到5种方法的系数的bootstrapt标准误都出来了,但是t3也就是IVW方法的标准误通过bootstrap是最接近原来值的,这应该也是为什么报告中介都是依照IVW的系数的原因之一。

上面演示的目的只是bootstrap的做法过程,实际我们需要改动mr_function中的return为我们需要的统计量,也就是中介效应和中介效应占比。

Propagation of error

再计算中介效应和中介比例的置信区间时也可以用误差传染法,比如下面这篇文献:

这个方法比较好理解,顺带也写个例子给大家介绍一下

Propagation of error refers to the methods used to determine how the uncertainty in a
calculated result is related to the uncertainties in the individual measure

误差传染法的计算积的标准差的过程如下:

完全是初中的多项式乘法,中间涉及到把较小的项删掉,应该看懂没问题,这儿就不写解释了。商的标准差计算如下:

中间过程涉及到高中的极限,总体也不难,上面的方法就是“误差传染法”Propagation of error。掌握积和商的标准差的算法后,我们在用Two-step MR得到a和b之后就可以得到得到中介效应ab的置信区间,相应地用商的标准差算法可以算出中介占比的置信区间。

上面介绍的方法帮助我们计算出来标准误后通过正态近似后和界值对比即可得到相应的p值,比如中介效应分布画出来后和界值0对比,分布曲线下横轴和0轴曲线下面积即为p值。

整个的孟德尔随机化中介就给大家分享完了。

R数据分析:孟德尔随机化中介的原理和实操的相关教程结束。

《R数据分析:孟德尔随机化中介的原理和实操.doc》

下载本文的Word格式文档,以方便收藏与打印。