delta方法
上面的流程跑通之后,对于中介分析,我们需要报告间接效应的估计值和置信区间,还有中介比例的估计值和置信区间,类似下面的这样:
[图片上传失败...(image-4f5478-1675945761799)]
但是其实我们是光跑孟德尔是得不到上面的需要的值的(比如间接效应的标准误,中介比例的标准误),此时需要借助的方法之一叫做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
[图片上传失败...(image-7bea25-1675945761799)]
delta method可以帮助我们得到ab相乘的标准误,从而算出中介效应的置信区间。
[图片上传失败...(image-19d2ce-1675945761799)]
也就是说我们知道了A,B路径的点估计和标准误,根据上面的公式就可以得到间接效应的置信区间,在R中实现起来也容易的,使用RMediation包,这个包作者有开发shiny应用,输入A,B的估计值和标准误就可以得到间接效应的估计值和标准误和置信区间了(下图圈内):
[图片上传失败...(image-e23da3-1675945761799)]
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对象生成后计算中介效应和中介比例部分代码见下:
[图片上传失败...(image-ee2ff2-1675945761799)]
通过bootstrap形成比如1000个统计量的分布后,取0.025,0.975百分位就是95置信区间.
此处我们再补一个bootstrap过程的例子,在做bootstrap的时候我们需要用到boot函数,主要参数就3个:
[图片上传失败...(image-be8a23-1675945761799)]
其中最重要的就是我们需要计算的统计量statistic,这个是以函数的形式给出的,并且该函数接受不少于2个参数,一个是数据,另一个是抽样的indices。
为了对比我先将跑的孟德尔随机化的结果贴出来:
[图片上传失败...(image-7af644-1675945761799)]
结果中有正常跑出来的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个数据集,数据不算很密,看看情况:
[图片上传失败...(image-2963e4-1675945761799)]
可以看到5种方法的系数的bootstrapt标准误都出来了,但是t3也就是IVW方法的标准误通过bootstrap是最接近原来值的,这应该也是为什么报告中介都是依照IVW的系数的原因之一。
上面演示的目的只是bootstrap的做法过程,实际我们需要改动mr_function中的return为我们需要的统计量,也就是中介效应和中介效应占比。
Propagation of error
再计算中介效应和中介比例的置信区间时也可以用误差传染法,比如下面这篇文献:
[图片上传失败...(image-789a76-1675945761799)]
这个方法比较好理解,顺带也写个例子给大家介绍一下
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
误差传染法的计算积的标准差的过程如下:
[图片上传失败...(image-95ba-1675945761798)]
完全是初中的多项式乘法,中间涉及到把较小的项删掉,应该看懂没问题,这儿就不写解释了。商的标准差计算如下:
[图片上传失败...(image-6d43b3-1675945761798)]
中间过程涉及到高中的极限,总体也不难,上面的方法就是“误差传染法”Propagation of error。掌握积和商的标准差的算法后,我们在用Two-step MR得到a和b之后就可以得到得到中介效应ab的置信区间,相应地用商的标准差算法可以算出中介占比的置信区间。
上面介绍的方法帮助我们计算出来标准误后通过正态近似后和界值对比即可得到相应的p值,比如中介效应分布画出来后和界值0对比,分布曲线下横轴和0轴曲线下面积即为p值。
整个的孟德尔随机化中介就给大家分享完了。