一起来学孟德尔随机化(Mendelian Randomization)

news2025/1/11 21:44:55

孟德尔随机化最近实在是太火了,想不关注都不行,最近也花了点时间研究了一下,和大家分享一下,共同学习。
在这里插入图片描述
什么是孟德尔随机化?
在19世纪,孟德尔用豌豆花作为实验材料,通过对豌豆花颜色、形状等特征的观察和统计分析,发现了遗传的基本规律,这就是孟德尔定律。不过,孟德尔定律只适用于单基因的遗传性状,并且无法解释复杂的多基因遗传疾病。此外,孟德尔定律也无法解释环境因素对基因表达的影响,以及基因与环境的相互作用。为了解决这个问题,著名统计学家Fisher提出了孟德尔随机化的概念。
孟德尔随机化(Mendelian randomization,简称MR)是一种基于遗传变异的因果推断方法,其基本原理是利用自然界中的随机分配的基因型对表型的影响来推断生物学因素对疾病的影响。
在这里插入图片描述
上面都是概念,下面咱们来举个例子说明一下,假设咱们想了解体重(BMI)对冠心病发病的影响。但是对冠心病影响的因素太多啦,比如高血压、高血糖等,我们怎么才能够排除混杂,确定为体重(BMI)对冠心病有影响呢?我们先要先要选定一个工具基因变量M(假设它为M),这个M要和我们研究的变量X相关,和我们结局变量和混杂因素无关。最后我们通过MR分析得出M基因对Y有影响,因为M基因对Y没有直接关联,所以M基因是通过影响暴露因素X而后从而对Y产生影响。这一联成线的过程可以看做是一个中介效应,暴露因素X(体重)就是中介变量,基因M通过对中介变量X的影响达到对Y的影响。(见下图)
在这里插入图片描述
要做孟德尔随机化要有3个假设前提:

  1. 基因M要和体重(暴露因素)强相关联。(关联性假设)
  2. 基因M和结局变量冠心病和其他混杂因素没有关联。(独立性假设)
  3. 基因M只能通过影响体重对冠心病造成影响,不能通过其他途径对冠心病造成影响。(排他性假设)
    具体怎么做,首先要用工具,目前主流使用的是TwoSampleMR包,我们需要先安装好,使用代码
devtools::install_github("MRCIEU/TwoSampleMR")

安装TwoSampleMR包会连其他的辅助包一起安装好,安装的时候,有时候Rstudio会提示你是不是要进行其他包的更新,选3不更新就行。
或者使用官方的安装代码

install.packages("remotes")
remotes::install_github("MRCIEU/TwoSampleMR")

安装好以后就可以开始:
第一步:就是获得暴露因素X的SNP数据,(这里就是体重BMI的SNP数据),还有结局冠心病的SNP数据。通常通过各种GWAS数据库或者GWAS文献找到。我们这里使用(https://gwas.mrcieu.ac.uk/datasets/)这个数据库的,它的好处就是直接可以通过TwoSampleMR包下载。下面是它的界面
在这里插入图片描述
我们在Trait contains:这里填入体重指数,然后筛选出很多的数据,这里我选择了ieu-a-835这个数据
在这里插入图片描述
然后我们再找冠心病相关的数据,这里选的是ieu-a-7这个数据
在这里插入图片描述
所以,我们需要下载ieu-a-835和ieu-a-7这两个数据。
我们通过TwoSampleMR包把它下载,先使用extract_instruments函数对暴露数据(就是体重BMI的SNP数据)ieu-a-835进行下载,如果是已经下载到电脑里面的数据,我们使用read_exposure_data函数和clump_data函数读取。

library(TwoSampleMR) 
exposure_dat <-extract_instruments(outcomes='ieu-a-835',clump=TRUE, r2=0.001,kb=10000,access_token= NULL)

其实clump=TRUE, r2=0.001,kb=10000,access_token= NULL这些都是默认的,你写成这样也是可以的

exposure_dat <-extract_instruments(outcomes='ieu-a-835')

在这里插入图片描述
但是这些参数还是很有必要了解一下,p1设置为很小是为了找到与暴露(这里就是与体重BMI相关的SNP),clump=TRUE, r2=0.001,kb=10000这3个指标是为了去掉连锁不平衡的。
运行成功后就生成了exposure_dat文件
在这里插入图片描述
第二部:生成exposure_dat文件后第一步就算完成了,接下来我们先看看exposure_dat的SNP数据,共有65个SNP

exposure_dat$SNP

在这里插入图片描述
因为ieu-a-7这个数据是冠心病数据,所以这一步要在ieu-a-7这个数据中找到与上面65个SNP匹配的数据,这样就生成了暴露数据,

outcome_dat<-extract_outcome_data(snps=exposure_dat$SNP,
                            outcomes='ieu-a-7', 
                            proxies = FALSE,
                            maf_threshold = 0.01,
                            access_token = NULL)

后面三个参数也是默认的,你写成这样也是可以的

outcome_dat <-extract_outcome_data(snps=exposure_dat$SNP, outcomes="ieu-a-7")

我们来看看参数的解释
在这里插入图片描述
第三部:效应等位与效应量保持统一,这一步是必须的,

dat <- harmonise_data(
  exposure_dat = exposure_dat,
  outcome_dat = outcome_dat
)

这三步走完就可以进行MR分析了,代码非常简单。mr默认使用五种方法( MR Egger,Weighted median,Inverse variance weighted,Simple mode ,Weighted mode )

res <- mr(dat)
res

在这里插入图片描述
在这里插入图片描述
b是效应值,se是标准误,pval是P值,最重要的就是看Inverse variance weighted这个方法的P值。这里P值小于0.05,表明体重和冠心病病结局是与统计意义的。
接下来进行敏感性分析
异质性检验 mr_heterogeneity,我这里是存在异质性的

mr_heterogeneity(dat)

在这里插入图片描述
水平多效性检验,如果变量工具不通过暴露影响结果,就违反了孟德尔的假设,就是存在多水平效应。

mr_pleiotropy_test(dat)

在这里插入图片描述
Leave-one-out analysis,Leave-one-out analysis是指逐步剔除SNP后观察剩余的稳定性,理想的是剔除后变化不大,这和我们的meta分析剔除法很相似。

res_loo <- mr_leaveoneout(dat)
mr_leaveoneout_plot(res_loo)

在这里插入图片描述
可视化:
散点图,可以看出趋势是正相关。

p1 <- mr_scatter_plot(res, dat)
p1

在这里插入图片描述
森林图,森林图主要是看总效应

res_single <- mr_singlesnp(dat)
mr_forest_plot(res_single)

在这里插入图片描述
我们可以通过res_single的数据进行提取
在这里插入图片描述
然后通过常规方法绘制下面这样的森林图,我已经有很多文章介绍了
在这里插入图片描述
漏斗图
mr_funnel_plot(res_single)

在这里插入图片描述
参考文献:

  1. TwoSampleMR包说明
  2. https://zhuanlan.zhihu.com/p/433138187
  3. https://zhuanlan.zhihu.com/p/564866251?utm_id=0
  4. https://mp.weixin.qq.com/s/PVPO1s7xWwQ9KH1Yk07CaQ
  5. https://www.frontiersin.org/articles/10.3389/fendo.2023.1125427/full#h11
  6. https://mp.weixin.qq.com/s/SzctCiipij3_7uICKY61Ug
  7. https://www.jianshu.com/p/58c7d8541c84

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/679962.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ESP-BOX的GUI移植

因为squareline studio软件中适配了ESP-BOX&#xff0c;所以作者本想直接使用该软件创建的工程&#xff0c;但是会出现花屏的现象&#xff0c;也不知道是不是没有做好esp-box-lite的适配。 因此只能先用squareline studio设计好GUI&#xff0c;然后再导出其代码&#xff0c;在其…

jmeter-13-使用JSR223断言(推荐)

文章目录 前言一、JSR 223 进行断言二、总结 前言 之前都在使用 BeanShell 前后置、断言等&#xff0c;但是查看官方文档时发现推荐使用 JSR223 其实 BeanShell 是 JSR223 里面的一种&#xff0c;下面我们继续了解下。 官网介绍&#xff1a;Apache JMeter - User’s Manual: C…

【数据分享】1929-2022年全球站点的逐月平均露点数据(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 对于具体到监测站点的气象数据&#xff0c;之前我们分享过1929-2022年全球气象…

ffmpeg+nginx-rtmp转发视频流

本篇博客最早发布于实验室公共博客&#xff0c;但已无人维护&#xff0c;现迁移至个人博客 nginx与nginx-rtmp-module安装 画了好几天图&#xff0c;实在有些乏力&#xff0c;找点有意思的事情做做 觉得视频流传输挺有意思&#xff0c;B站找了些视频&#xff0c;但感觉有些大…

【论文简述】IS-MVSNet:Importance Sampling-based MVSNet(ECCV 2022)

一、论文简述 1. 第一作者&#xff1a;Likang Wang 2. 发表年份&#xff1a;2022 3. 发表期刊&#xff1a;ECCV 4. 关键词&#xff1a;MVS、3D重建、重要性采样、无监督误差分布估计 5. 探索动机&#xff1a;以粗到细的方式预测深度图&#xff0c;部分缓解了对于分辨率的限…

Apache James邮件服务器搭建(linux)

1、配置jdk&#xff0c;此处不再赘述&#xff0c;随便搜一下然后照着操作即可 注意&#xff1a;后续james的版本是3.5.0&#xff0c;需要与jdk8配套 2、下载apache james &#xff0c;apacheJames 下载之后可以直接运行&#xff0c;无需安装 注意&#xff1a;此处选择3.5.0版…

人工智能数据集处理——数据清理1

目录 一、概述 二、缺失值 1、检测缺失值 使用isna() 方法检测na_df中是否存在缺失值 使用natna() 方法 2、缺失值的处理 (1) 删除缺失值 使用删除dropna() 方法删除na_df 对象中缺失值所在的一行数据 删除全为缺失值的行 删除有缺失值的行 (2) 填充缺失值 使用fill…

win10 下搭建hadoop(成功截图)

背景&#xff1a; 搭建hadoop是大数据的启蒙第一步&#xff0c;对初学者有很好的信心建设&#xff0c;建议安装版本和作者一样。话不多说&#xff0c;开始正文。 1. 下载hadoop 本文版本为3.0.0 可以Apache.org官网下载&#xff0c;也可以本人csdn资源处下载https://download.…

数据结构之静态链表

定义 用两个数组实现链表&#xff0c;一个数组存储数据&#xff0c;另一个数组记录当前数据的后继的下标。 示例 数据&#xff1a;data[] {-1, 34, 28, 53, 16, 25, -1, -1, -1, -1} 后继&#xff1a;next[] { 1, 2, 3, 4, 5, -1, -1, -1, -1, -1} 说明 -1: 表示无效值 …

Linux2.基础指令(下)

1.uname -r :输出Linux内核版本信息。 2.linux2.6.*内核默认支持的文件系统有ext3,ext2,ext4,xfs&#xff0c;不支持ufs。 3.linux查看CPU占用的命令:top。 4.题目 5.题目 6.题目 7.重定向 echo "字符串1" :在屏幕上打印字符串1。 echo "字符串1" &g…

C语言督学营(初级阶段)

文章目录 初级阶段1.编程环境搭建、调试C的历史故事写代码快速提升的方法快捷键编程环境 Clion、断点调试(单步调试) 2.数据类型、标准输入输出数据分类printf整型进制转换内存视图ASCII码表计算器 scanf的原理 3.运算符与表达式C语言的13种运算符运算符优先级 4.选择、循环1.选…

【每日算法 数据结构(C++)】—— 01 | 平方值去重统计(解题思路STL法,双指针法、流程图、代码片段)

文章目录 01 | &#x1f451; 题目描述02 | &#x1f50b; 解题思路STL法双指针法 03 | &#x1f9e2; 代码片段STL法双指针法 “Success is not final, failure is not fatal: It is the courage to continue that counts.” - Winston Churchill &#xff08;成功并非终点&am…

Redis【Redis数据类型(String、List、Set、Hash 、Zset)】(二)-全面详解(学习总结---从入门到深化)

目录 Redis数据类型_String set get append strlen setex setnx getrange setrange incr decr incrby/decrby key step mset mget getset Redis数据类型_List lrange lpop/rpop lindex llen lrem linsert lset Redis数据类型_Set smembers sism…

如何在 JavaScript 中处理 HTML 事件?

&#x1f482; 个人网站:【海拥】【游戏大全】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 寻找学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 目录 前言什么是HTML事件Jav…

基于多进程并发-进程通讯之共享内存(shared memmory)

一、什么是共享内存 操作系统对进程内存实现原理&#xff1a; 现代操作系统&#xff0c;对于内存管理&#xff0c;采⽤的是虚拟内存技术&#xff0c;也就是每个进程都有⾃⼰独⽴的虚拟内存空间&#xff0c;不同进程的虚拟内存映射到不同的物理内存中。所以&#xff0c;即使进程…

Python交互式模式的特点和用法

Python交互式&#xff08;Interactive Mode&#xff09;是一种Python语言的工作模式&#xff0c;与传统的编写、保存、运行的方式不同&#xff0c;它允许用户直接在控制台窗口中输入和执行Python代码。 Python交互式的特点包括&#xff1a; 实时性&#xff1a;每输入一条语句&a…

黑马程序员前端 Vue3 小兔鲜电商项目——(八)登录页面

文章目录 账号密码路由配置模版代码配置路由跳转 表单校验实现校验要求代码实现统一校验 登录基础业务实现统一错误信息提示Pinia 管理用户数据Pinia 用户数据持久化用户登录状态请求拦截器携带 token退出登录实现Token 失效拦截处理 登录页面的主要功能就是表单校验和登录登出…

【Redis 基础及在 Java 中的应用】

文章目录 Redis 基础及在 Java 中的应用1 Redis 入门1.1 Redis 简介1.2 Redis 下载与安装1.3 Redis服务启动与停止 2 数据类型2.1 介绍2.2 五种常用数据类型 3 常用命令3.1 字符串 string 操作命令3.2 哈希 hash 操作命令3.3 列表 list 操作命令3.4 集合 set 操作命令3.5 有序集…

软件SPI读写W25Q64硬件SPI读写W25Q64

目录 软件SPI读写W25Q64 MySPI W25Q64 主函数 硬件SPI读写W25Q64 软件SPI读写W25Q64 程序整体框架&#xff1a; SPI模块包含通信引脚封装&#xff0c;初始化&#xff0c;SPI三个基本时序单元&#xff08;起始&#xff0c;终止&#xff0c;交换一个字节&#xff09; W2…

matlab实现语音信号的频域分析及应用

1.语音信号本质上是非平稳信号。但我们可以假设语音信号在一个短时间内是平稳的&#xff0c;这样我们用稳态分析方法处理非平稳信号。应用在傅立叶分析就是短时傅立叶变换。 语音的频域分析&#xff1a;包括语音信号的频谱、功率谱、倒频谱、频谱包络等. 常用频域分析方法&am…