之前和大家详细介绍过“TwoSampleMR”包和“MRPRESSO”这两个常用的进行孟德尔随机化分析的R包,但是很多朋友实际上会用到“MendelianRandomization”这个来自CRAN的R包。这个包主要是Stephen Burgess编写的,具有一定的权威性,并且也提供了很多实用的功能,并且在某些方面弥补了TwoSampleMR包的不足。
就米老鼠看来,MendelianRandomization和TwoSampleMR的最大区别就是:
①MendelianRandomization包可以直接在模型中矫正SNP的相关性,从而不需要进行clump;而TwoSampleMR包则不能矫正SNP的相关性,必须进行clump。如果进行clump时,某些SNP不在LD参考文件中的话,就会直接剔除它们,从而使得一些信号损失掉。
②虽然MendelianRandomization包提供了Phenoscanner(http://phenoscanner.medschl.cam.ac.uk)的数据接口,但是个人感觉OpenGWAS数据库(https://gwas.mrcieu.ac.uk/)比Phenoscanner更好点,在这一点上TwoSampleMR包更好一点。
“MendelianRandomization”和“TwoSampleMR”这两个包大同小异,都是很经典的R包,前者的统计方法比较好,后者的数据接口好,都值得学习使用,而且大家还可以用一个包去验证另一个包的结果,看看有没有错误。两个包结合使用,可能会有意想不到的收获!
接下来,我带大家简单认识一下“MendelianRandomization”包:
代码语言:javascript复制install.packages(“MendelianRandomization”)#安装R包
library(MendelianRandomization) #加载R包
MRInputObject <- mr_input(bx = ldlc,bxse= ldlcse,by = chdlodds,byse = chdloddsse) #指定输入文件
这里需要注意一下,MRInputObject这个变量是一个S4对象,和咱们传统的S3对象不太一样,这主要体现在数据的操作上。首先,MRInputObject这个S4对象有11个插槽(slot):betaX,betaY,betaXse,betaYse,correlation,exposure,outcome,snps,effect_allele,other_allele和eaf。如果想提取betaX这一列的信息,应该使用MRInputObject@betaX,而不是MRInputObject$betaX。
代码语言:javascript复制MRInputObject #查看数据
接下来,使用IVW方法估算结果:
代码语言:javascript复制IVWObject1 <- mr_ivw(MRInputObject,model= "default",robust = FALSE,penalized = FALSE,correl = FALSE,weights ="simple", psi = 0,distribution = "normal",alpha = 0.05)
这里的model参数用于指定模型,一般有三个选项"default", "random" 和"fixed",其中“random”指的就是随机效应模型,“fixed”指的是固定效应模型,”default”是指当SNP个数小于或等于3个时,使用固定效应模型,否则就使用随机效应模型。一般来说,异质性大的时候我们使用随机效应模型,异质性小的时候使用固定效应模型。
参数robust是一个逻辑值,TRUE表示的使用稳健回归,它可以修正一些异常SNP对结果的影响,使得结果不会对一些异常的SNP敏感,而FALSE则代表使用标准回归,也即我们最常使用的最小二乘估计(OLS)。
参数penalized代表是否下调那些异常SNP(outlier)的权重,TURE代表下调那些异常值的权重,FALSE表示不下调。
参数correl代表是否有SNP的相关系数数据,TRUE表示有SNP间的相关系数数据,FALSE表示没有。
参数weights表示的是权重计算方法,有两个参数“simple“和”delta“。”simple“表示使用的是逆方差加权,而”delta“表示的是二阶误差估计法,具体公式如下:
这里的psi代表的就是每个SNP的暴露和结局相关性,在双样本MR研究中,由于样本间无重叠,psi是0。
参数distribution用于指定置信区间的估计方法,“normal”表示用正态分布估计置信区间,“t-dist”代表用T分布来估计。
参数alpha代表的是统计学显著性。
代码语言:javascript复制IVWObject1 #查看结果
从上图中,我们不难看出,在IVW的随机效应模型下,LDL能显著升高CHD的风险,该结果有显著的异质性。
接下来,我们使用稳健回归,并且对SNP中的outliers进行“惩罚”:
代码语言:javascript复制IVWObject2 <- mr_ivw(MRInputObject,model= "default",robust = TRUE,penalized = TRUE,correl = FALSE,weights ="simple", psi = 0,distribution = "normal",alpha = 0.05)
代码语言:javascript复制IVWObject2 # 查看结果
从上述结果可以看出,在稳健回归模型和引入“惩罚”措施后,结果仍然显著,这时候可以认为LDL和CHD有因果关联,并且LDL的升高可以增加CHD的发病风险。
关于“MendelianRandomization”包的输入文件和IVW方法就先介绍到这里,后面会和大家详细介绍它的其它功能。