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

全基因组关联研究(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].valuesnQtls = 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.rhkb.cn/news/403111.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python爬虫入门教程(非常详细)适合零基础小白

一、什么是爬虫? 1.简单介绍爬虫 爬虫的全称为网络爬虫,简称爬虫,别名有网络机器人,网络蜘蛛等等。 网络爬虫是一种自动获取网页内容的程序,为搜索引擎提供了重要的数据支撑。搜索引擎通过网络爬虫技术,将…

服务器数据恢复—IBM服务器raid5阵列硬盘出现坏道的数据恢复案例

服务器数据恢复环境&故障: 一台ibm x3850服务器,有一组由5块硬盘组建的raid5磁盘阵列,上层是Redhat Linux操作系统,部署了一个oracle数据库。 raid5阵列中2块硬盘离线,阵列崩溃。经过检测发现该raid中的热备盘未激…

NC 调整数组顺序使奇数位于偶数前面(一)

系列文章目录 文章目录 系列文章目录前言 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 描述 输入一个长度…

Codeforces Round 966 (Div. 3)(A,B,C,D,E,F)

A. Primary Task 签到 void solve() {string s;cin>>s;bool bltrue;if(s.size()<2)blfalse;else{if(s.substr(0,2)"10"){if(s[2]0)blfalse;else if(s[2]1&&s.size()<3)blfalse; }else blfalse;}if(bl)cout<<"YES\n";else cout…

一套完整的NVR网络硬盘录像机解决方案和NVR程序源码介绍

随着网络技术的发展&#xff0c;视频数据存储的需求激增&#xff0c;促使硬盘录像机&#xff08;DVR&#xff09;逐渐演变为具备网络功能的网络视频录像机&#xff08;NVR&#xff09;。NVR&#xff0c;即网络视频录像机&#xff0c;负责网络视音频信号的接入、存储、转发、解码…

答题情况和每题得分

文章目录 1.提交答题情况1.PracticeDetailController.java2.PracticeDetailService.java3.PracticeDetailServiceImpl.java4.PracticeDetailDao.java5.PracticeDetailDao.xml6.reqSubmitSubjectDetailReq.java 7.dto1.SubjectDetailDTO.java2.SubjectDTO.java3.SubjectOptionDT…

<C语言>指针的深度学习

目录 一、字符指针 二、指针数组 三、数组指针 1.数组指针的定义 2.&数组名与数组名 3.数组指针的使用 四、数组参数、指针参数 1.一维数组传参 2.二维数组传参 3.一级指针传参 4.二级指针传参 五、函数指针 六、函数指针数组 七、指向函数指针数组的指针 八、回调函数 1…

HCIP-HarmonyOS Application Developer 习题(三)

1、在JS(JavaScript)Ul框架中&#xff0c;完成对平台层进行抽象&#xff0c;提供抽象接口&#xff0c;对接到系统平台的是哪一层? A. 应用层 B. 前端框架层 C. 引擎层 D. 平台适配层 答案&#xff1a;D 分析&#xff1a;适配层主要完成对平台层进行抽象&#xff0c;提供抽象接…

iOS更新后在IPhone上恢复丢失的文本消息的4种方法

您是否在更新 iPhone 软件后丢失了重要的短信&#xff1f;丢失数据可能会令人沮丧&#xff0c;尤其是当它包含有价值的信息或感性信息时。幸运的是&#xff0c;有一些方法可以在iOS更新后恢复iPhone上丢失的短信。 在这篇博文中&#xff0c;我们将讨论可用于恢复丢失的短信的不…

Edge浏览器 (文本选择)I型光标消失不见问题

Edge浏览器 I型&#xff08;文本选择&#xff09;光标消失不见的问题。 在白色背景中 光标也变成了纯白色&#xff0c;所有都是纯白 也就看不到光标在哪里了&#xff0c;会影响正常使用。 解决方案&#xff1a;把默认的I型光标替换掉 选择一个 beam*.cur , 可以在预览框中查看…

C语言家教记录(六)

导语 本次授课的内容如下&#xff1a;指针&#xff0c;指针和数组 辅助教材为 《C语言程序设计现代方法&#xff08;第2版&#xff09;》 指针 指针变量 计算机按字节划分地址&#xff0c;每个地址访问一个字节 指针变量指向变量的地址&#xff0c;指的是变量第一个字节的…

Leetcode JAVA刷刷站(39)组合总和

一、题目概述 二、思路方向 为了解决这个问题&#xff0c;我们可以使用回溯算法来找到所有可能的组合&#xff0c;使得组合中的数字之和等于目标数 target。因为数组中的元素可以无限制地重复选择&#xff0c;所以在回溯过程中&#xff0c;我们不需要跳过已经选择的元素&#x…

yolov8交互式指定区域行人计数/车辆计数

使用 Ultralytics YOLOv8 进行区域计数 (视频推理) 区域计数是一种用于统计指定区域内物体数量的方法&#xff0c;当考虑多个区域时&#xff0c;这种方法能提供更为精细的分析。这些区域可以根据用户的需求进行调整&#xff0c;并且计数过程能够在实时视频中进行。 目录 装…

Ricardo Milos

目录 一、题目 二、思路 三、payload 四、思考与总结 一、题目 <!-- Challenge --> <form id"ricardo" method"GET"><input name"milos" type"text" class"form-control" placeholder"True" va…

顺丰科技25届秋季校园招聘常见问题答疑及校招网申测评笔试题型分析SHL题库Verify测评

Q&#xff1a;顺丰科技2025届校园招聘面向对象是&#xff1f; A&#xff1a;2025届应届毕业生&#xff0c;毕业时间段为2024年10月1日至2025年9月30日&#xff08;不满足以上毕业时间的同学可以关注顺丰科技社会招聘或实习生招聘&#xff09;。 Q&#xff1a;我可以投递几个岗…

c语言---文件

这一节我准备分三个部分来带领大家了解文件 ——一、有关文件的基础知识 ————二、文件的简单操作 ————————三、文件结束的判定 ————————————四、文件缓冲区 一、文件的基础知识&#xff1a; 首先在了解文件之前&#xff0c;我们需要了解C/C程序内存…

安卓相关环境配置

安卓相关环境配置 偶尔更新。。。 JEB&#xff08;动态调试好用&#xff09; JEB动态调试Smali-真机/模拟器&#xff08;详细&#xff0c;新手必看&#xff09; 夜步城 JADX官网&#xff08;静态分析&#xff09; https://github.com/skylot/jadx/releases/tag/v1.5.0 雷…

MATLAB多项式拟合

订阅专栏或下载资源可以获得源代码:https://download.csdn.net/download/callmeup/89632160 拟合和插值 拟合和插值是两种常见的数学方法,用于以某种方式近似或估计实际数据。 拟合是在给定一组已知数据点的情况下,通过选择一个合适的数学模型来拟合数据。拟合的目标是找到…

民航管理局无人机运营合格证技术详解

1. 证书定义与意义 民航管理局无人机运营合格证&#xff08;以下简称“合格证”&#xff09;是对符合民航法规、规章及标准要求的无人机运营单位或个人进行资质认证的重要证明。该证书旨在确保无人机运营活动的安全、有序进行&#xff0c;保护国家空域安全&#xff0c;维护公众…

Linux·权限与工具-yum与vim

1. Linux软件包管理器 yum 1.1 什么是软件包 在Linux下安装软件&#xff0c;一个通常的办法是下载到程序的源代码&#xff0c;并进行编译&#xff0c;得到可执行程序。但这样做太麻烦了&#xff0c;于是有些人把一些常用的软件提前编译好&#xff0c;做成软件包(可以理解成Win…