r语言孟德尔随机化分析,怎么把ivw改成随机效应模型

Python0149

r语言孟德尔随机化分析,怎么把ivw改成随机效应模型,第1张

孟德尔随机化(Mendelian randomization,MR)是以孟德尔独立分配定律为基础进行流行病学研究设计和数据分析,论证病因假说的一种方法。由基因型决定中间表型(暴露)的差异, 因果方向明确。

通过引入一个称之为工具变量的中间变量,来分析暴露因素和结局之间的因果关系

2.孟德尔随机化 vs RCT

孟德尔随机化的目的不是估计遗传效应的大小,而是估计暴露对结果的因果效应,所以与遗传变异相关的结局的平均变化幅度可能与干预措施导致的变化幅度不同

即使遗传变异与结果之间的关联程度很小,暴露的人群归因风险也不一定很低,因为暴露可能会比遗传变异解释更大的变化程度(例如,他汀类药物对低密度脂蛋白胆固醇水平的影响比低密度脂蛋白胆固醇水平与HMGCR基因变异的关联要大几倍,因此对后续结果的影响更大。)

孟德尔随机化要求大样本研究,变异发生率不能太小(最小等位基因频率MAF>5%)

3.工具变量

工具变量本身是一个计量经济学的概念,在孟德尔随机中,遗传变异被用作工具变量评估暴露对结局的因果效应,遗传变异满足工具变量的基本条件总结为(孟德尔随机化核心假设):

关联性假设——遗传变异与暴露有关

独立性假设——该遗传变异与暴露-结果关联的任何混杂因素均不相关

排他性假设——该遗传变异不会影响结果,除非可能通过与暴露的关联来实现

某研究组想了解非洲村落里的儿童补充维生素A和其死亡情况的关联,如果仅仅利用维生素A的服用情况和死亡情况去判断两者的关联,那极有可能会产生很大的偏倚,这是因为维生素A的服用情况和很多潜在因素相关,比如家庭的经济困难程度、家庭成员以及实验儿童的依从性,而这些潜在的因素也可能对儿童的身体健康有很大的影响。因此,在研究起始设计中,研究者便利用工具变量来解决这个问题。

在这里,工具变量Z是指服用维生素A这个任务,类似于随机抽签。这样的话工具变量Z便只和X服用维生素A这个行为相关,与除X以外的混杂因素不相关。

4.应用范围

行为因素与健康:基因变异引起各个倾向某行为,决定暴露状态。如ALDH2变异引起乙醛代谢障碍,改变饮酒行为,不同ALDH基因型代表饮酒量多少;

机体代谢产物与疾病关系,估计长期效应。代谢产物是基因表达的中间表型,酶的底物或者体外难测量的代谢指标:如LDL受体基因变异引起家族高胆固醇血症,比较不同基因型之间CHD发病情况的差异,可模拟血胆固醇水平和CHD发病关系;

子宫内环境暴露于子代健康关系。

5.发文分析

孟德尔随机化研究均发表在影响因子5分以上的期刊中

6.基础分析流程——TwoSampleMR

找工具变量,我们要的是基因作为工具变量,这些基因都是从别人的研究中挑出来的,所有的基因研究有个专门的库叫做genome wide association studies (GWAS)。我们需要做的就是从这个库中挑出来我们自己需要的和我们暴露相关的基因变量SNPs。

估计工具变量对结局的作用,工具变量对结局的作用也是从所有的研究中估计出来的整体效应,这样可以拒绝单个研究的偏倚。

合并多个SNP的效应量,这个效应量是我们得到暴露和结局因果效应的前提。

处理数据,用合并后的数据进行孟德尔随机化分析和相应的敏感性分析。

7.TwoSampleMR代码实现

安装相关R包

install.packages('devtools')

library('devtools')

install_github("MRCIEU/TwoSampleMR") #安装TwoSampleMR包

library('TwoSampleMR')

devtools::install_github("mrcieu/ieugwasr",force = TRUE)

获取MR base的表型ID,将结果保存为pheno_info.csv这个文件

ao <-available_outcomes(access_token=NULL) #获取GWAS数据,但近期Google限制,容易被墙

write.csv(ao,'pheno_info.csv',row.names=F)#将数据写入本地存储

查看pheno_info.csv文件,获取与暴露相关的工具变量的信息以及结局信息。这里选择暴露为obesity class 2 (ID = 91), 结局为 type 2 diabetes (ID = 1090)

exp_dat <- extract_instruments(outcomes=91,access_token=NULL)

obesity_exp_dat <- clump_data(exp_dat)

t2d_out_dat <- extract_outcome_data(snps=obesity_exp_dat$SNP, outcomes=1090, access_token=NULL)#提取结果信息

dat <- harmonise_data(exposure_dat =obesity_exp_dat, outcome_dat= t2d_out_dat)#数据合并,计算基因对结局的合并效应量

孟德尔随机化

results <- mr(dat)

OR值

OR <- generate_odds_ratios(results)

异质性检验

heterogeneity<- mr_heterogeneity(dat)

多效性检验

pleiotropy<- mr_pleiotropy_test(dat)

逐个剔除检验

leaveoneout<- mr_leaveoneout(dat)

散点图

mr_scatter_plot(results,dat)

森林图

results_single<- mr_singlesnp(dat)

mr_forest_plot(results_single)

漏斗图

mr_funnel_plot(results_single)

实例解析

2022年10月10日

西安交通大学生物医学信息与基因组学中心杨铁林教授团队在Nature Neuroscience (IF=28.771)期刊发表了题为:Mendelian randomization analyses support causal relationships between brain imaging-derived phenotypes and risk of psychiatric disorders 的文章。

研究背景

精神类疾病是一组脑功能紊乱的复杂疾病,会导致情感、认知和行为受到干扰和破坏。全球约有数亿人患有不同的精神障碍,被列为严重的公共卫生问题。近年来,脑影像学数据在脑疾病和功能的研究中受到广泛关注。以核磁共振成像为代表的脑影像技术,可用于活体无创定量评估人脑结构、连接和功能的特性。

虽然已有大量的观察性研究证据表明,精神疾病患者与健康正常人的脑影像表型存在显著差异,但脑影像学数据与精神障碍发病机制的因果关系尚不明确,探讨脑影像表型对精神疾病的因果作用具有重要的生物学和临床研究意义。

研究方法和结果

该研究基于大规模基因组数据,对常见的10种精神类疾病(包括注意力缺陷多动症、神经性厌食症、焦虑症、孤独症、双相情感障碍、抑郁症、强迫症、创伤后应激障碍、精神分裂症、抽动症)和587个关键的脑磁共振成像(MRI)结构表型进行了因果关系评估。

正向孟德尔随机化结果发现,脑白质纤维束的上额枕束的FA值和上放射冠的ICVF值、胼胝体内矢状层的MD值、第三脑室的体积等9个脑影像表型是精神分裂症、神经性厌食症和双相情感障碍的风险因素。进一步通过反向孟德尔随机化分析显示,发现精神分裂症的发生会导致额下回眶部的表面积和体积的增加。

该研究将基因组信息作为纽带,使脑影像表型和精神疾病联系起来,避免了观察性研究中由于药物或环境、生活方式等改变引起的样本检测数据偏差的缺点,确保了研究结果的稳健性。

R语言绘图系列:

标度控制着数据到图形属性的映射,标度将我们的数据转化为视觉上可以感知的东西,比如大小、位置、颜色、形状等。标度也为我们提供了读图时所使用的工具,比如说坐标轴和图例。总的来说,可以称为引导元素。标度函数控制元素的属性,可以理解为图形的遥控器,可以用它来调整画布大小、颜色等等。此前学的shape,color,size等参数和标度函数相比显得不够灵活。

scale_fill_brewer 调色板函数

geom_errorbar()

geom_crossbar()

geom_linerange() 绘制线段

geom_pointrange() 绘制点

pointrange:点画线

首先绘制一张盒形图

在图上显示出观测值

值得注意的是,图上点的多少并不能完全反应原始数据的多少,因为有的点可能因为点过于密集就会被覆盖,看起来是一个点,其实可能是多个点。

因此可以使用geom_jitter函数将不同的点区分开(jitter是震荡散点),width设置如果遇到相同的点,点向左右方平移的距离。alpha设置透明度。

黑色点是离群点

还可以绘制卡槽图

varwidth参数会根据该水平下观测值的个数(n值)改变盒形图的宽度。(这里宽度去的不是观测个数的绝对值,而是平方根,以缩小差距。)

给盒子上色

分组盒形图,用不同颜色区分

画水平的盒形图

使用coord_flip函数(坐标轴翻转函数)

绘制一张直方图

bins可以设置直方图条柱的数目,默认为30。当bins和binwidth(设置条柱宽度)同时设置时,默认以binwidth为准。

新加入变量cut,根据新变量在price水平上进行一个计数

y轴由count变为density,绘制概率密度

注意下面density的写法,前后都要加..

绘制概率密度曲线:geom_density函数

堆栈密度概率曲线

geom_line/geom_path/geom_step

绘制一个简单的线图

绘制点线图,点和线需要分别添加。

如上图,线在点之上,是因为先投射了点,又投射了线。

先投射线,点就出现在了线之上。

线的颜色出现了渐变

geom_smooth函数:绘制拟合曲线

methods还有其他的方法,如glm:广义线性模型;losses:纯粹平滑;gam:广义加性模型等等(lm和glm最常用)

geom_hline绘制水平线,geom_vline绘制垂直线。xintercept和yintercept是截距,slope是斜率。

原理参考 文章 ,主要思想我认为是求出所有分布的可能(中间的一般为零假设),出现这种分布的概率。

distribution= 参数可为exact(精确模式,即依据所有可能的排列组合,仅适用于两样本问题)、approxiamate(nresample=#)(蒙特卡洛抽样,#指需要重复的次数)、asymptotic(渐进分布抽样)

lmPerm包更擅长方差分析。示例实验设计仍为5组接受不同治疗方法的多组结果比较。

实验示例仍为关节炎的治疗(两种)与效果(无、部分、显著)间的关系

实验示例为研究文盲率与谋杀率是否相关

主要为 lmp() 、 aovp() 两个函数分别对应参数法的 lm() 线性回归、 aov() 方差分析。主要格式上的区别是添加了 perm= 参数。可以为Exact(精确模式)、Prob(不断从可能的序列中抽样,直至估计的标准差在估计的p值0.1之下)、SPR(使用贯序概率比检验来判断何时停止抽样)。值得注意的是当样本观测大于10,perm="Exact"自动默认转为"Prob",因此精确检验只适用于小样本问题。

(1)简单线性回归

实验示例仍为以身高预测体重的设计

(2)多项式回归

高精度拟合身高体重回归关系

(3)多元回归

探究谋杀率与多因素的回归关系

(1)单因素方差分析

(2)单因素协方差分析

实验示例仍为药物对刚出生小鼠体重影响,协变量为怀孕时间

(3)双因素方差分析(交互效应)

实验示例:两种药物分别在不同剂量下对小鼠牙齿长度的影响。

核心思想是有放回的抽样多次(1000次)

(1)写一个能返回带研究统计量的函数;

(2)确定重复数,使用 boot() 函数处理;(一般重复1000次即可;此外有人认为初始样本大小为20-30即可得到足够好的结果);

(3) boot.ci() 函数计算统计量置信区间。

实验示例:使用mtcar数据框,采用多元回归,根据车重和发动机排量来预测汽车的每加仑行驶的英里数。想获得95%的R平方值(预测变量对响应变量可解释的方差比)的置信区间

(1)首先写函数

(2)然后使用boot()函数

(3)最后boot.ci()函数求置信区间

实验示例:使用mtcar数据框,采用多元回归,根据车总和发动机排量来预测汽车的每加仑行驶的英里数。想获取一个统计量向量--三个回归系数(截距项、车总、发动机排量)95%的置信区间。