替代 SMR 算法!两步孟德尔随机化方法 TWMR 与 revTWMR 整合xQTL+GWAS数据分析基因表达与疾病的关联

news2024/11/15 7:17:00

全基因组关联研究(GWAS)是研究大型队列中基因型与表型关系的重要工具。GWAS的已知局限性主要在于从与致病变异相关的连锁不平衡区域中识别生物学机制,而无法直接获得基因层面的表型关联。为了解决这个问题,基于转录组关联研究(TWAS)的替代方法专注于使用基因表达揭示基因与性状之间的联系。尽管对于拥有基因型、转录组学和表型数据的大型队列,可以应用两阶段最小二乘回归,但这种方法仍然存在一些问题

  • i)建立这样的队列成本很高;

  • ii)从回归分析中提取基因与性状之间的因果方向并不直接。

为克服这些问题,Porcu等人提出了一种两步孟德尔随机化方法 TWMR该方法利用GWAS汇总统计数据和公开的eQTL数据关联基因型和基因表达,属于孟德尔随机化方法系列。简而言之,TWMR将遗传变异作为工具变量,基因表达作为暴露变量,感兴趣的性状作为结果在此基础上,Porcu等人还提出了一种TWMR方法的反向版本revTWMR值得注意的是,将eQTL替换为其它类型的xQTL数据,TWMR系列方法还可用于探索其他组学(如蛋白组学和甲基组学)的因果效应。

图片

▲ 上文为Porcu等人开发的方法revTWMR,于21年发表于NC。最早的TWMR方法也于2019年发表在该杂志。

为了加速TWMR和revTWMR的使用,来自瑞士洛桑大学的研究者开发了一款优化的、更快速的Python库pyTWMR,于2024年8月10日发表在 Bioinformatics [IF=4.4] 上。pyTWMR在支持GPU运算的前提下整合了TWMR于revTWMR流程,在处理高度相关的遗传变异和基因表达时更加稳健。

图片

▲ DOI: 10.1093/bioinformatics/btae505

本文主要介绍pyTWMR的使用示例,代码及相关文件在后台回复 pyTWMR 即可获得。感兴趣的铁子可以自行在下方网址了解更多信息:

  • https://github.com/soreshkov/pyTWMR/tree/master

1 pyTWMR的安装

.ipynb文件或命令行下运行以下代码进行安装:

%%bash
pip3 install git+https://github.com/soreshkov/pyTWMR.git

如果网络不好,推荐进行本地安装(需要移动到pyTWMR-master文件夹所在路径):

%%bash
# python版本大于3.10,可以运行成功
pip install ./pyTWMR-master/
  • 小编是在linux下配置环境,在window尝试配置环境时请修改上方bash为cmd。

2 导入所需的库

运行以下代码导入一些所需的库(需要提前安装)

from TWMR import TWMR
from revTWMR import revTWMR
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')

3 TWAS分析

① TWAS分析的输入是GWAS和eQTL数据,使用下方代码读入示例数据

effect = pd.read_csv('data/TWMR/ENSG00000000419.matrix', sep='\t', index_col=0)
effect.head()

图片

▲ 代码中effect表介绍:每一行代表一个 SNP;每一列代表一个基因,对应填充值为 QTL 结果中 SNP 对基因表达的效应,最后一列为 GWAS 结果中每个 SNP 对所研究性状的效应。

此外,还需要effect表中所有SNP之间的LD相关矩阵,上方总共三个SNP,所以矩阵形状为3*3

ld = pd.read_csv('data/TWMR/ENSG00000000419.ld', sep='\t', header=None).to_numpy().astype(np.float32)
ld
#array([[1.       , 0.0487694, 0.151668 ],
#       [0.0487694, 1.       , 0.118453 ],
#       [0.151668 , 0.118453 , 1.       ]], dtype=float32)

② 执行TWMR分析,将结果整合成一个表格

nGWAS = 239087 # 设置GWAS研究的样本数
nQTLs = 32000 # 设置QTLs研究的样本数
result = TWMR(
        beta=effect.drop('GWAS', axis=1).to_numpy(), 
        gamma=effect['GWAS'].to_numpy(), 
        nEQTLs=nQTLs, 
        NGwas=nGWAS, 
        ldMatrix=ld, 
        pseudoInverse=False, 
        device='cpu')
result_df = pd.DataFrame()
result_df['Gene'] = effect.columns.drop('GWAS')
result_df['Alpha'] = result.Alpha
result_df['Standard error'] = result.Se
result_df['p-value'] = result.Pval
result_df['Heterogenity p-value'] = result.HetP
display(result_df)
# Gene Alpha Standard error p-value Heterogenity p-value
#0 ENSG00000000419 -0.005793 0.006057 0.338818 1.0
#1 ENSG00000101126 -0.013730 0.005323 0.009903 1.0

图片

结果表格的表头解释可以参照官方的说明

  • Alpha: Causal effect estimated by TWMR.

  • Se: Standard error of Alpha.

  • Pval: P-value calculated from Alpha and Se.

  • D: Cohrian Q statistics for QTLs.

  • HetP: P-value for heterogeneity test.

③ 森林图可视化TWMR结果:

# 计算置信区间
result_df['CI_lower'] = result_df['Alpha'] - 1.96 * result_df['Standard error']
result_df['CI_upper'] = result_df['Alpha'] + 1.96 * result_df['Standard error']

# 森林图可视化
fig, ax = plt.subplots(figsize=(5, 2))
y_positions = [yi+1 for yi in range(len(result_df))]
plt.errorbar(result_df['Alpha'], y_positions,
             xerr=[result_df['Alpha'] - result_df['CI_lower'], result_df['CI_upper'] - result_df['Alpha']],
             fmt='o', color='red', ecolor='black', capsize=5)
plt.yticks(y_positions, result_df['Gene'])
plt.ylim(0, max(range(len(result_df['Gene'])))+2)
plt.axvline(x=0, linestyle='--', color='red')

plt.xlabel('Causal effect (Alpha)')
plt.title('Forest Plot')
plt.show()

图片

3 RevTWMR 分析

① RevTWMR分析的输入有所差异,但同样也是来自GWAS于eQTL数据

effect = pd.read_csv("data/revTWMR/effect.matrix.tsv", sep='\t', index_col=0)
effect.iloc[0:5, -5:]

# sample_size
gwasEffect = effect.BETA_GWAS.values
nGwas = effect.N.values
sample_size = pd.read_csv("data/revTWMR/genes.N.tsv", sep='\t', index_col=0).N.to_dict()
sample_size
#{'ENSG00000000003': 9047.50387596899,
# 'ENSG00000000419': 30201.3203125,
#...
# 'ENSG00000070759': 30987.2519685039,
# 'ENSG00000070761': 30780.3671875,
# ...}

图片

 代码中effect表的介绍:每一行代表一个 SNP;每一列代表一个基因,对应填充值为 QTL 结果中 SNP 对基因表达的效应。和 TWMR 不一样的地方在于,需要将在 TWMR 输入表中的最后一列 GWAS 改名为 BETA_GWAS,同时补充标准误 SE 与 研究样本数 N。

此外,还需要提供基因的sample_size文件,描述为每个基因对应的QTL Exposure sample size:

  • standardized study size for each gene

② 执行RevTWMR分析,将结果整合成一个表格

results = {}
# 注意示例代码下方的循环只分析了前 5 个基因
for gene in effect.drop(['BETA_GWAS', 'SE', 'N'], axis=1).columns[:5]:    
    effectTbl = effect.drop(['BETA_GWAS', 'SE', 'N'], axis=1)[gene].values
    nQtls = sample_size[gene]
    
    result = revTWMR(
        effectTbl, 
        gwasEffect, 
        qtlLabels=effect.index.values, 
        gwasSizes=nGwas, 
        qtlExpSize=nQtls,
        pValIterativeThreshold=0.05, 
        pseudoInverse=False, device='cpu')
    
    results[gene] = {
        'Alpha Original': result.Alpha,
        'SE Original': result.Se,
        'P Value Original': result.Pval,
        'N Original': result.N,
        'P heterogeneity Original': result.HetP,
        'Alpha': result.AlphaIterative,
        'SE': result.SeIterative,
        'P': result.PvalIterative,
        'P heterogeneity': result.HetPIterative,
        'N': len(result.rsname)
    }
result_df = pd.DataFrame.from_dict(results, orient='index')
result_df['Gene'] = result_df.index.tolist()
result_df
# Alpha Original SE Original P Value Original N Original P heterogeneity Original Alpha SE P P heterogeneity N Gene
#ENSG00000000003 -0.024712 0.068517 0.718346 101.0 1.000000 -0.024712 0.068517 0.718346 1.000000 101 ENSG00000000003
#ENSG00000000419 -0.042308 0.035751 0.236646 123.0 0.957932 -0.042308 0.035751 0.236646 0.957932 123 ENSG00000000419
#ENSG00000000457 0.007607 0.035183 0.828817 123.0 0.942955 0.007607 0.035183 0.828817 0.942955 123 ENSG00000000457

结果表格的表头解释与TWMR大差不差,名称也基本一致。

③ 森林图可视化RevTWMR结果:

# 计算置信区间
result_df['CI_lower'] = result_df['Alpha'] - 1.96 * result_df['Standard error']
result_df['CI_upper'] = result_df['Alpha'] + 1.96 * result_df['Standard error']

# 森林图可视化
fig, ax = plt.subplots(figsize=(5, 2))
y_positions = [yi+1 for yi in range(len(result_df))]
plt.errorbar(result_df['Alpha'], y_positions,
             xerr=[result_df['Alpha'] - result_df['CI_lower'], result_df['CI_upper'] - result_df['Alpha']],
             fmt='o', color='red', ecolor='black', capsize=5)
plt.yticks(y_positions, result_df['Gene'])
plt.ylim(0, max(range(len(result_df['Gene'])))+2)
plt.axvline(x=0, linestyle='--', color='red')

plt.xlabel('Causal effect (Alpha)')
plt.title('Forest Plot')
plt.show()

图片

数据的准备还是比较清晰的

使用起来也比较简易

天就分享到这里了

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

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

相关文章

C语言——函数专题

1.概念 在C语言中引入函数的概念,有些翻译为子程序。C语言中的函数就是一个完成某项特定任务的一小段代码,这个代码是有特殊的写法和调用方法的。一般我们可以分为两种函数:库函数和自定义函数。 2.库函数 C语言国际标准ANSIC规定了一些常…

Docker 容器运行时如何实现与宿主机的目录挂载

虽然容器启动前挂载目录相对简单,只需要在启动容器的时候通过-v 参数即可轻松实现,但对于已运行的容器进行目录挂载则稍显复杂。本教程将深入讲解如何在不中断容器运行的情况下,为已运行的Docker容器配置目录挂载,实现灵活的数据共享与持久化策略。 一、环境准备 为了本次实…

ffmpeg采用gpu加速增加水印

1.环境需要 系统 windows10 ffmpeg,ffprobe 字体文件 python3以上版本 2.环境配置 从官网上下载ffmpeg版本https://github.com/BtbN/FFmpeg-Builds/releases,这里我用的是这个,解压之后里面包含ffmpeg,ffprobe,f…

使用Kernel Memory进行RAG评估:AI助力企业知识管理新突破

在现代企业知识管理中,随着业务的不断发展和扩展,各种文档和数据呈现爆炸式增长。为了有效且高效地管理这些知识,企业通常会导入大量文档。然而,当涉及到对文档切片质量和回答准确度的判断时,传统的人工方法显得既费时…

复现dom破坏案例和靶场

目录 1.dom型xss平台 第一关 Ma Spaghet !: (1):当get参数中存在somebody时,h2回显 (2):当get参数中不存在somebody时,h2回显 第二关Jefff: 第三关:Ugan…

【前端面试】挖掘做过的nextJS项目(中)

https://blog.csdn.net/weixin_43342290/article/details/141170360?spm1001.2014.3001.5501文章浏览阅读105次。需求:快速搭建宣传官网1.适应pc、移动端2.基本的路由跳转3.页面渲染优化4.宣传的图片、视频资源的加载优化5.seo优化全栈react web应用、tailwind css原子工具的支…

动态规划篇--代码随想录算法训练营第三十二天|343. 整数拆分,96.不同的二叉搜索树,01背包理论,01背包优化

343. 整数拆分 题目链接:. - 力扣(LeetCode) 讲解视频: 动态规划,本题关键在于理解递推公式!| LeetCode:343. 整数拆分 题目描述: 给定一个正整数 n ,将其拆分为 k …

c++47 二级指针

二级指针的输入和输出模型 指针的输入&#xff1a;主调函数分配内存 指针输出 &#xff1a;被调用函数分配内存 指针做输入第一种模型 #define _CRT_SECURE_NO_WARNINGS #include <stdlib.h> #include <string.h> #include <stdio.h>// 二级指针做输…

《计算机组成原理》(第3版)第8章 CPU的结构和功能 复习笔记

第8章 CPU的结构和功能 一、CPU的结构 &#xff08;一&#xff09;CPU的含义 CPU实质包括运算器和控制器两大部分。 对于冯诺依曼结构的计算机而言&#xff0c;一旦程序进入存储器后&#xff0c;就可由计算机自动完成取指令和执行指令的任务&#xff0c;控制器就是专用于完成…

Python爬虫图片:从入门到精通

在数字化时代&#xff0c;图片作为信息传递的重要媒介之一&#xff0c;其获取和处理变得越来越重要。Python作为一种功能强大且易于学习的编程语言&#xff0c;非常适合用来编写爬虫程序&#xff0c;帮助我们自动化地从互联网上获取图片资源。本文将从基础到高级&#xff0c;详…

CTF密码学小结

感觉没啥好总结的啊 基础的永远是RSA、流密码、哈希、对称密码、古典密码那一套&#xff08;密码学上过课都会&#xff09;&#xff0c;其他的就是数论的一些技巧 似乎格密码也很流行&#xff0c;以及一些奇奇怪怪的性质利用也很多 1、random设置种子后随机的性质&#xff1a…

【LiteX】【开发板】【BoChenK7】使用Python开发FPGA【Hello World、LED点灯、Memory测速、替换BIOS】

目录 开发板介绍下载仓库工程设计工程构建构建流程 工程测试Hello WorldLED点灯Memory测速替换BIOS 开发板信息 开发板介绍 手头目前只有一个购买的BoChenK7开发板&#xff0c;后续会用它来进行LiteX FPGA SoC的构建 测试可能会包括&#xff1a; LED&#xff1a;本篇文章 DDR …

【区块链+乡村振兴】“蜜链盟”乡村振兴基层治理数字化平台 | FISCO BCOS应用案例

在国家战略政策推动和新一代信息化发展应用的合力之下&#xff0c;数字乡村是互联网化、信息化和数字化在农业农村经 济社会发展中的表现。为进一步加强乡村基层治理&#xff0c;根据《中共海南省委农村工作领导小组办公室海南省农业农 村厅关于在我省乡村治理中推广运用积分制…

【Docker】Docker Volume(存储卷)

一、什么是存储卷 存储卷就是将宿主机的本地文件系统中存在的某个目录直接与容器内部的文件系统上的某一目录建立绑定关系。这就意味着&#xff0c;当我们在容器中的这个目录下写入数据时&#xff0c;容器会将其内容直接写入到宿主机上与此容器建立了绑定关系的目录。 在宿主…

xss-靶场

一、环境地址 XSS Game - Learning XSS Made Simple! | Created by PwnFunction 二、案例复现 案列1——Ma Spaghet&#xff01; <!-- Challenge --> <h2 id"spaghet"></h2> <script>spaghet.innerHTML (new URL(location).searchParams…

idea2022新建jsp项目并配置Tomcat服务器

1、创建项目 2、添加jdk 步骤如下&#xff0c;然后点击下边的create 创建项目即可 3、点击file 4、选择模块添加web 5、配置tomcat 6、依次点击 7、新建jsp文件 8、成功显示

Python 全栈系列262 使用sqlalchemy(clickhouse)

说明 再补充一篇。之前连不上的原因也挺搞笑&#xff0c;大概是deepseek把我带偏了&#xff0c; 应该是 pip3 install clickhouse-sqlalchemy -i https://mirrors.aliyun.com/pypi/simple/ 但是它教我 pip3 install sqlalchemy-clickhouse -i https://mirrors.aliyun.com/py…

Keepalived总结笔记

环境准备&#xff1a;两台安装ka的服务器&#xff0c;两台客户机&#xff0c;IP无要求&#xff0c;关闭火墙和selinux 1.在两台主机上安装ka 全局配置文件在/etc/keepalived/keepalived.conf 可以改写邮件地址和发送邮件的地址和主机唯一标识以及组播地址 配置虚拟路由&…

基于单片机的智能晾衣系统设计

摘 要 &#xff1a;在网络信息技术的推动下&#xff0c;智能家居得到了广泛应用&#xff0c;文章根据当前的市场动态&#xff0c;针对基于单片机的智能晾衣系统设计展开论述&#xff0c;具体包括两个方面的内容———硬件设计和软件设计。 关键词 &#xff1a;单片机&#xff…

经方药食两用服务平台

TOC springboot226经方药食两用服务平台 绪论 1.1研究背景与意义 信息化管理模式是将行业中的工作流程由人工服务&#xff0c;逐渐转换为使用计算机技术的信息化管理服务。这种管理模式发展迅速&#xff0c;使用起来非常简单容易&#xff0c;用户甚至不用掌握相关的专业知识…