前两期讲完了双向和两步孟德尔随机化研究的基本思路,其实它们都是从双样本孟德尔随机化(two sample Mendelian randomization, TSMR)衍生出来的,本质上没有区别。但是今天讲的多变量孟德尔随机化研究(multivariable Mendelian randomization, MVMR)和通常的双样本是有区别,其基本原理如下图所示:
这里有几点注意事项:
(1)选择的几个暴露彼此之间应该存在一定的关联,比如高密度脂蛋白(HDL),低密度脂蛋白(LDL)和甘油三酯(TG)等。
(2)一般来说,SNP只要与其中一个暴露强相关即可。
(3)应该提取SNP在所有暴露和结局中的信息,不能有缺失。
(4)进行MVMR分析需要关于暴露和结局的完整GWAS结果。
之前我和大家简单讲过IVW的核心算法,R代码如下:
代码语言:javascript复制lm(beta.outcome ~ beta.exposure, weights = 1/se.outcome^2, data = data)
在MVMR研究中,R代码如下 (以三个暴露为例):
lm(beta.outcome ~ beta.exposure1 beta.exposure2 beta.exposure3, weights = 1/se.outcome^2, data = data)
MVMR其实很简单,就是在回归模型里多加了几个自变量而已。
接下来,我将以“TwoSampleMR”包及其提供的数据进行简单实践:
代码语言:javascript复制library(TwoSampleMR)
id_exposure <- c("ieu-a-299","ieu-a-300", "ieu-a-302") # 三个暴露分别是HDL cholesterol,LDL cholesterol和Triglycerides
id_outcome <- "ieu-a-7"
exposure_dat <- mv_extract_exposures(id_exposure)
dim(exposure_dat)
[1] 432 9
我们可以看一下暴露数据的格式,这里总共有144个SNP,每个SNP对应于三个暴露的信息,因此会有上述的144*4 = 432行数据。从下图,我们可以看出SNP rs10490626和HDL没有关联,但是它和LDL强相关,所以我们需要把它纳入研究。
代码语言:javascript复制oucome_dat <- extract_outcome_data(exposure_dat$SNP, id_outcome) #提取结局数据
mvdat <- mv_harmonise_data(exposure_dat, outcome_dat) # 对数据进行harmonisation
res <- mv_multiple(mvdat) #计算结果,大家也可以试试mv_residual()函数
res
结果如下图所示:
从结果我们不难看出,在矫正了其它脂质的影响之后,HDL和冠心病的发病风险没有关联了。如果大家单独算一对一的MR,会发现这三个脂质均和冠心病相关,但在MVMR中HDL的显著性消失了,这和一些临床观测的结果一致(有临床研究观察到HDL并没有之前认为的那种保护作用)。
在进行MVMR研究时,我们不建议使用很多的暴露,因为这会带来比较严重的共线性问题,一般3~5个为宜。如果暴露间的共线性问题比较严重,建议使用“TwoSampleMR”包的mv_lasso_feature_selection()函数来帮助你去除不必要的暴露。
关于多变量孟德尔随机化研究就简单介绍到这里,希望对大家有所帮助!