返回顶部
首页 > 资讯 > 后端开发 > Python >R数据分析:孟德尔随机化实操
  • 204
分享到

R数据分析:孟德尔随机化实操

r语言数据分析python 2023-09-21 16:09:05 204人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

好多同学询问孟德尔随机化的问题,我再来尝试着梳理一遍,希望对大家有所帮助,首先看下图1分钟,盯着看将下图印在脑海中: 上图是工具变量(不知道工具变量请翻之前的文章)的模式图,明确一个点:我们做孟德尔的时候感兴趣的是x和y的关系,也就是小

好多同学询问孟德尔随机化的问题,我再来尝试着梳理一遍,希望对大家有所帮助,首先看下图1分钟,盯着看将下图印在脑海中:

上图是工具变量(不知道工具变量请翻之前的文章)的模式图,明确一个点:我们做孟德尔的时候感兴趣的是x和y的关系,也就是小b,但是我们直接去跑x对y的回归肯定是不对的,因为有很多的U,因此我们借助工具变量G(关于工具变量我们之前的文章有详细的解释,请自行查阅),去估计我们感兴趣的小b。

现在有天然良好的工具变量G,也就是我们的基因变量,此时有上面的图,再次重申:我们感兴趣的,最终希望得到准确估计的值是小b,按照上图我们应该有GY的关系是ab,GX的关系是a,于是乎b可以写成ab/a,就是我们感兴趣的b可以换一种思路得到,如下:

上面的式子要跑通的话,我们需要知道G-Y的关系和G-X的关系。

但是我们GY也就是基因和结局的关系已经有人给我们研究好了,我们可以直接去GWAS里面找研究好的summarydata拿来用就行。

但是我们的的GX也就是基因和暴露的关系也已经有人给我们研究好了,我们可以直接去GWAS里面找研究好的summarydata拿来用就行。

也就是说,通过孟德尔随机化,我们完全可以毫不费力地估计出我们需要的小b,也就是暴露和结局的关系----就是今天要再次给大家介绍的孟德尔随机化研究。

思路就是这么清晰。就是这么清晰。搞不明白的同学再多读几遍。

术语解析

为了帮助大家理解思想,在孟德尔随机化的实操中有几个术语得提点一波:

连锁不平衡(linkage disequilibrium):刚刚讲我们可以有很多的基因结局/暴露的关系的,就是GWAS里面好些基因可以用,这个时候我们不希望基因之间有相关(会造成double counting,使得结果偏倚):

我们实际做的时候,模式是像上图,snp之间你说不相干就不相干?当两个位点的不同等位基因的关联频率高于或低于独立随机关联的条件下的期望频率,这种情况是客观存在的,此时时这些工具变量之间相关性就叫连不平衡,其大小可以用LD r方来表示,这个指标也是我们在操作时需要设定的指标之一。

水平基因多效性(Horizontal Pleiotropy):理解这个概念先看下图:

意思是我的理想的情况是通过ab/a的操作估计出b,但是看上图,是不是免不了会出现f这条路径,如果出现了f,我们的基因和结局之间的关系就是f+ab,此时,我用原来的方法估计的就不是b了,而是b+f/a了,就不对了(始终记住我们关心的是b)。

但是如果我的基因变量很多,从而有很多的f,如果所有f的期望均值为0,那么最后我们汇总一下得到的结果也基本上就是b了,无伤大雅。但是就怕所有的f都是一边偏向的(都大于0或都小于0),此时就有问题了,叫做定向多效性directional pleiotropy,这也是为什么我们最后要做漏斗图的原因。

就是通过漏斗图一看都是所有的工具变量都是呈漏斗分布的,就说明没有偏向,这个时候我们认为定向多效性都被冲掉了,不影响。

好,解释了上面的一些术语之后,我们实操一波。

实操

最基本的例子:BMI on CHD的例子,我想看一下BMI作为暴露,CHD作为结局的mr,代码就4条:

bmi_exp_dat <- extract_instruments(outcomes = 'ieu-a-2')chd_out_dat <- extract_outcome_data(snps = bmi_exp_dat$SNP, outcomes = 'ieu-a-7')dat <- harmonise_data(bmi_exp_dat, chd_out_dat)res <- mr(dat)

结果如下,下图中有不同方法出来的我们关心的小b:

这个就算做完了,就这么简单快速。

接下来就是敏感性分析,首先是各个工具变量的异质性检验:

mr_heterogeneity(dat)

运行代码后可以得到Cochran’s Q统计量

然后是水平基因多效性检验,代码如下:

mr_pleiotropy_test(dat)

运行代码可以得到egger_intercept

然后是单个SNP结果检验,代码如下:

res_single <- mr_singlesnp(dat)

运行后可以得到每个SNP的小b

然后是留一检验,代码如下:

mr_leaveoneout(dat)

接下来,论文中还会有几个图,首先是点图,代码如下:

mr_scatter_plot(res, dat)

点图是将同一个SNP对暴露的效果放在横轴,对结局的效果放在纵轴,此时图中的斜率就是我们的估计的小b。

然后是单个SNP效应组合的森林图用mr_forest_plot函数可以得到,mr_leaveoneout_plot可以得到留一分析的森林图,mr_funnel_plot可以帮我们得到漏斗图。

到这就出了所有需要报告的东西,做完了。

但是上面的流程有很多的前提,比如你得知道暴露和结局的GWASid才能进行下去,GWAS又有很多,比如你直接用上面的代码的话其实是MR Base GWAS catalog里面的GWAS,当然你还可以选别的,或者用自己找来的最新的GWAS都是可以的。

第一步首先是在相应的GWAS中找到暴露的summary data:

那么有那些GWAS可以供我们使用呢?我们可以直接把GWAS的目录调出来瞅瞅,代码如下:

data(gwas_catalog)

运行后大约可以得到15万个全基因组关联研究的数据,截图如下:

那么对我们而言,我们现在需要找到我们关心的暴露对应的GWAS,比如我现在要找与“blood”表型相关的GWAS,我可以写出如下代码:

exposure_gwas <- subset(gwas_catalog, grepl("Blood", Phenotype_simple))

上面的代码相当于只用Phenotype_simple这一列做筛选,当然你也可以结合其它的列比如人群,比如作者,比如地区等等,都是可以的。

选好暴露相关的GWAS之后要做的就是进一步确定基因工具变量和暴露的强度,在论文中一般是这么描述:First, relevance assumption was met considering that all SNPs have reached genome-wide significance (p < 5 × 10−8)

具体的操作如下:

exposure_gwas<-exposure_gwas[exposure_gwas$pval<5*10^-8,]

通过上面的步骤保证我们的基因工具变量一定是和暴露强相关。

然后就是将准备好的暴露的GWAS数据形成可以用来做MR分析的数据格式,需要用到fORMat_data()函数:

exposure_data<-format_data(exposure_gwas)

此时的exposure_data大概长这样:

可以看到有很多个基因工具变量SNP,这个时候我们需要考虑连锁不平衡(linkage disequilibrium):

exposure_data<-clump_data(exposure_data, clump_r2 = 0.001)

上面的代码中clump_r2则是设定的容许相关性,到这儿我们算是手动地将工具变量都筛出来了,解决了找工具变量的问题,还有一个方法是自动筛选工具变量,比如我暴露是bmi,我可以写出如下代码:

subset(ao, grepl("body mass", trait))

运行后我知道我可以选的gwasid是ieu-b-40,这个时候我也可以自动提取出工具变量,这两种方法达到的目的都是一样的:

extract_instruments('ieu-b-40')

然后依照工具变量进行结局的summary estimates的提取,提取结局的summary data也需要是需要知道GWASid的对吧,比如我现在关心的结局是收缩压,我就可以写出如下代码:

outcome_gwas <- subset(ao, grepl("Systolic", trait))

运行后我就可以知道所有的和收缩压相关的gwasid了,我选一个最新的,比如我就选下面的2021年的:

看图我们知道它对于的id是ieu-b-5075,我就这么写:

outcome_data <- extract_outcome_data(    snps = exposure_data$SNP, outcomes = "ieu-b-5075")

后续通过合并直接做mr分析就可以,流程就没有不同了。

小结

今天给大家写了孟德尔随机话的实操,文章图示例来自【中文孟德尔随机化】英国布里斯托大学MRC-IEU《R语言做孟德尔随机化》第一章:用MRBase网页工具和R包TwoSampleMR做两样本孟德尔随机化_哔哩哔哩_bilibili,感谢大家耐心看完

来源地址:https://blog.csdn.net/tm_ggplot2/article/details/127812640

--结束END--

本文标题: R数据分析:孟德尔随机化实操

本文链接: https://lsjlt.com/news/414294.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • R数据分析:孟德尔随机化实操
    好多同学询问孟德尔随机化的问题,我再来尝试着梳理一遍,希望对大家有所帮助,首先看下图1分钟,盯着看将下图印在脑海中: 上图是工具变量(不知道工具变量请翻之前的文章)的模式图,明确一个点:我们做孟德尔的时候感兴趣的是x和y的关系,也就是小...
    99+
    2023-09-21
    r语言 数据分析 python
  • 自编R语言小程序助力孟德尔随机化(Mendelian Randomization)数据挖掘
    咱们再前两期已经对孟德尔随机化进行了一个初步的介绍,孟德尔随机化步骤相对简单固定,一共就是3步,但是如果我们一个一个的对研究变量和结果数据进行筛选,也是挺费时间的,我随手写了一个R的小程序可以帮助咱们...
    99+
    2023-10-09
    r语言 小程序 开发语言
  • python肯德尔系数相关性数据分析示例
    目录前言一、定义二、使用条件三、计算公式及代码示例1.Tau-a2.Tau-b前言 相关性分析算是很多算法以及建模的基础知识之一了,十分经典。关于许多特征关联关系以及相关趋势都可以...
    99+
    2023-02-15
    python肯德尔系数相关性 python 数据分析
  • SQL随机数实例分析
    本文小编为大家详细介绍“SQL随机数实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“SQL随机数实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。要得到一个随机数,写...
    99+
    2024-04-02
  • R语言如何随机从数据框抽取一部分数据
    这篇文章将为大家详细讲解有关R语言如何随机从数据框抽取一部分数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。随机从数据框(矩阵)抽取一部分数据(col.name=col...
    99+
    2024-04-02
  • Python生成随机数实例分析
    这篇文章主要讲解了“Python生成随机数实例分析”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python生成随机数实例分析”吧!一、随机数种子为什么要提出随机数种子呢?咱们前面提到过了,...
    99+
    2023-06-29
  • R语言数据预处理操作——离散化(分箱)
    一、项目环境 开发工具:RStudio R:3.5.2 相关包:infotheo,discretization,smbinning,dplyr,sqldf 二、导入数据 # 这里...
    99+
    2024-04-02
  • python皮尔逊相关性数据分析分析及实例代码
    目录前言数值类型皮尔逊系数使用场景皮尔逊相关系数(Pearson correlation)1.定义2.线性关系判定3.正态检验1.KS检验4.计算代码前言 相关性分析算是很多算法以...
    99+
    2023-02-15
    python皮尔逊相关性 python 数据分析
  • python数据分析及可视化(十五)数据分析可视化实战篇(抖音用户数据分析、二手房数据分析)
    python数据分析的实战篇,围绕实例的数据展开分析,通过数据操作案例来了解数据分析中的频繁用到的知识内容。 抖音用户数据分析 1.理解数据 数据字段含义 了解数据内容,确保数据来源是正常的,安全合法...
    99+
    2023-09-02
    python 数据分析 开发语言
  • Python numpy线性代数与随机漫步实例分析
    本文小编为大家详细介绍“Python numpy线性代数与随机漫步实例分析”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python numpy线性代数与随机漫步实例分析”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢...
    99+
    2023-07-02
  • PHP随机数生成代码与使用实例分析
    我们还可以使用随机数设计任何我们想象的程序结构。 首先来认识一下PHP提供的随机数函数rand()。PHP的rand()函数将返回随机整数,具体使用方法如下 rand(min,max...
    99+
    2022-11-21
    PHP 随机数
  • MySql分组后随机获取每组一条数据的操作
    思路:先随机排序然后再分组就好了。 1、创建表: CREATE TABLE `xdx_test` ( `id` int(11) NOT NULL, `name` varchar(255) DEFAU...
    99+
    2022-05-21
    MySql 分组 随机获取数据
  • python数据分析绘图可视化实例分析
    本篇内容介绍了“python数据分析绘图可视化实例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言:数据分析初始阶段,通常都要进行可视...
    99+
    2023-07-02
  • r语言数据分析的实现方法是什么
    R语言是一种功能强大的编程语言和环境,特别适用于数据分析。以下是R语言实现数据分析的一般方法:1. 数据导入:使用R语言中的函数从各...
    99+
    2023-09-15
    r语言
  • Android数据持久化之File机制分析
    本文实例讲述了Android数据持久化之File机制。分享给大家供大家参考,具体如下:在使用Java SE平台开发C/S结构的软件中,File 的IO输入输出流的使用率是非常高的,通过使用IO输入输出流可以对存储介质上的文件进行读写操作,下...
    99+
    2023-05-31
    android 数据持久化 file
  • Python数据标准化的实例分析
    说明 将原始数据转换为均值为0,标准差在1范围内。 对标准化而言:如果出现异常点,由于有一定数据量,少量异常点对平均值的影响不大,因此方差变化不大。 实例 def stand_demo(): """ ...
    99+
    2022-06-02
    Python 数据标准化
  • 怎么在R语言中分析和可视化时间序列数据
    在R语言中分析和可视化时间序列数据通常使用ts(时间序列对象)或xts(扩展时间序列对象)包来处理。以下是一些常见的步骤: 导入时...
    99+
    2024-03-04
    R语言
  • R语言中怎么进行空间数据的分析和可视化
    在R语言中进行空间数据的分析和可视化通常使用到专门的空间数据处理包,比如sp、rgdal、raster、sf等。以下是一个简单的例子...
    99+
    2024-04-12
    R语言
  • Python数据分析:案例实操:使用Py
    Python爬虫太火了,没写过爬虫,都不敢说自己学过Python?! 可是刚一开始学,我就遇到了难题----数据分析!听起来很高大上,有没有? 想要做爬虫,就得先学会使用数据分析工具,制作图表这是最基本的。网上发现一个讲Pytho...
    99+
    2023-01-31
    案例 数据 Python
  • Python实现数据可视化案例分析
    目录1. 问题描述2. 实验环境3. 实验步骤及结果1. 问题描述 对右图进行修改: 请更换图形的风格请将 x 轴的数据改为-10 到 10请自行构造一个 y 值的函数将直方图上的数...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作