Kaggle生物信息学挑战:酶稳定性预测大赛

news2024/11/8 7:44:11

背景介绍

  • 酶的稳定性是影响其实际应用的关键因素之一。通过定点突变可以改善酶的稳定性,但实验筛选稳定性突变体的成本较高。
  • 预测突变对酶稳定性的影响,加速筛选稳定性更高的酶突变体。

概念解释 

X 残基:假设 它用 红色表示 , Y 残基:假设它用 蓝色表示 , Z 残基:假设它用 紫色表示 
  1. 突变前的角度 θ

    • 在突变发生之前,红色的 X 残基 位于中心,蓝色的 Y 残基紫色的 Z 残基 分别位于它的两侧。它们之间形成了一个特定的角度 θ
    • 这个角度 θ 表示的是 YZ 残基通过中心残基 X 的空间几何关系。这个角度可能与蛋白质的功能(如活性位点的构象)密切相关。
  2. 突变后的角度 θ'

    • 红色的 X 残基 发生突变时(例如从一种氨基酸变为另一种氨基酸),它的侧链结构或电荷特性发生变化,导致其在三维空间中的位置发生移动。
    • X 残基 的移动可能会牵拉或推动相邻的 蓝色 Y 残基紫色 Z 残基,导致它们之间的角度发生变化。新的角度用 θ' 表示。
    • 突变后的角度 θ' 可能与原先的角度 θ 不同,这种变化可能会影响蛋白质的整体结构和功能。

数据解释

  • train.csv和train_updates_20220929.csv: 训练数据集,包含已知序列及其稳定性(熔点tm)的数据。模型可以从中学习序列与稳定性之间的关系。

  • test.csv: 测试数据集,包含目标酶(GenBank: KOC15878.1)的2,413个单点突变体的序列。参赛者需要预测这些突变体的tm值。

  • sample_submission.csv: 预测结果提交的格式示例文件。

  • wildtype_structure_prediction_af2.pdb: 目标酶的野生型三维结构,由AlphaFold2预测得到。这为基于结构的特征提取和建模提供了重要先验信息

test.more.csv

这个数据中包含了对某个蛋白质序列(protein_sequence)进行突变(mutation)后的稳定性预测信息。解释下各列的具体含义:

  1. seq_id: 突变的唯一编号,可能是为了区分不同的突变而设置的流水号。

  2. protein_sequence: 完整的蛋白质氨基酸序列。

  3. pH: 进行稳定性预测时设定的pH值,这里为8。蛋白质的稳定性会受pH影响。

  4. location: 发生突变的位点,即突变前的氨基酸在序列中的位置。

  5. wild_type: 突变前的野生型氨基酸。

  6. mutation: 突变后的氨基酸。如果该列为空,表示是一个deletion突变,即缺失突变。

  7. mutation_type: 突变的类型,这里有substitution(替换突变)和deletion(缺失突变)两种。

因此这个数据详细记录了在某pH值下,蛋白质序列中的特定位点发生特定突变后,对其稳定性产生的影响。这种计算突变对蛋白质稳定性影响的方法,可用于指导蛋白质工程和定向进化实验,筛选出稳定性更高的蛋白质突变体。

wildtype_structure_prediction_af2.deepddg.ddg

这个数据展示了蛋白质的一个位点(ResID为1,野生型氨基酸为V)发生不同突变后,对蛋白质稳定性的影响。详细解释:

  1. chain: 表示这些突变发生在蛋白质的A链上。蛋白质可能由多条肽链组成,用不同字母区分。

  2. WT: 表示Wild Type,即野生型氨基酸,这里为V(Valine,缬氨酸)。

  3. ResID: 表示Residue ID,即残基编号,这里为1,表示突变发生在肽链的第一个氨基酸上。

  4. Mut: 表示Mutant,即突变后的氨基酸。这里列出了除V以外的19种氨基酸,分别用它们的单字母代码表示。

  5. ddG (kcal/mol): 表示每个突变对蛋白质稳定性的影响,单位为kcal/mol。

    • ddG > 0表示突变后蛋白质变得更稳定
    • ddG < 0表示突变后蛋白质变得更不稳定

从数据可以看出,所有可能的单点突变(即V突变为其他19种氨基酸)都会降低蛋白质的稳定性(ddG都为负值)。

方案一

DeepDDG方法简介

  • DeepDDG是一个用于预测蛋白质点突变引起的稳定性变化(ΔΔG值)的深度学习方法。
  • 它基于蛋白质的三维结构,提取突变位点及其周围残基的结构特征和进化特征,用神经网络建模并预测突变引起的ΔΔG值。
  • 提取的特征包括:二面角(φ,ψ,ω)、溶剂可及表面积(SASA)、二级结构(onehot编码)、氢键数量、残基间Ca-Ca距离、残基间取向(Ca-Ca,Ca-C,Ca-N的单位向量)、位置特异性打分矩阵(PSSM)、多序列比对位点出现频率(PFS)、深度突变扫描(DMS)等。
  • DeepDDG利用了蛋白质数据库中大量已有的实验测定的ΔΔG数据进行训练。训练数据集中包含了与待预测蛋白质同源性较高的一些蛋白质。

测试集新增列

  • 每个突变体的 edit 数量(除了一个完全匹配野生型序列的)
  • 点突变的类型:插入(insertion)、缺失(deletion)或替换(substitution)
  • 突变发生在野生型序列中的位置索引
  • 野生型该位置的氨基酸残基
  • 突变体中插入或替换的氨基酸残基(如有)
import Levenshtein
def get_mutation_info(_row, _wildtype="VPVNPEPDATSVENVALKTGSGDSQSDPIKADLEVKGQSALPFDVDCWAILCKGAPNVLQ" \
                                      "RVNEKTKNSNRDRSGANKGPFKDPQKWGIKALPPKNPSWSAQDFKSPEEYAFASSLQGGT" \
                                      "NAILAPVNLASQNSQGGVLNGFYSANKVAQFDPSKPQQTKGTWFQITKFTGAAGPYCKAL" \
                                      "GSNDKSVCDKNKNIAGDWGFDPAKWAYQYDEKNNKFNYVGK"):
    terminology_map = {"replace":"substitution", "insert":"insertion", "delete":"deletion"}
    req_edits = Levenshtein.editops(_wildtype, _row["protein_sequence"])
    _row["n_edits"] = len(req_edits)  # 计算突变数量

    if _row["n_edits"]==0:  # 如果没有突变,则其他突变信息为空
        _row["edit_type"] = _row["edit_idx"] = _row["wildtype_aa"] = _row["mutant_aa"] = pd.NA
    else:
        _row["edit_type"] = terminology_map[req_edits[0][0]]  # 获取突变类型
        _row["edit_idx"] = req_edits[0][1]  # 获取突变位置索引
        _row["wildtype_aa"] = _wildtype[_row["edit_idx"]]  # 获取野生型氨基酸
        _row["mutant_aa"] = _row["protein_sequence"][req_edits[0][2]] if _row["edit_type"]!="deletion" else pd.NA  # 获取突变型氨基酸
    return _row

def revert_to_wildtype(protein_sequence, edit_type, edit_idx, wildtype_aa, mutant_aa):
    if pd.isna(edit_type):
        return protein_sequence
    elif edit_type!="insertion":
        new_wildtype_base = protein_sequence[:edit_idx]
        if edit_type=="deletion":
            new_wildtype=new_wildtype_base+wildtype_aa+protein_sequence[edit_idx:]
        else:
            new_wildtype=new_wildtype_base+wildtype_aa+protein_sequence[edit_idx+1:]
    else:
        new_wildtype=protein_sequence[:edit_idx]+wildtype_aa+protein_sequence[edit_idx:]
    return new_wildtype

test_df = test_df.progress_apply(get_mutation_info, axis=1)  # 对测试集逐行进行突变信息提取
test_df[["protein_sequence", "edit_type", "edit_idx", "wildtype_aa", "mutant_aa"]]

在原有 test_df 的基础上增加了一些新的列,包括:

  • n_edits: 突变的数量
  • edit_type: 突变的类型(substitution, insertion, deletion)
  • edit_idx: 突变发生的位置索引
  • wildtype_aa: 突变位置的野生型氨基酸
  • mutant_aa: 突变后的氨基酸(如果是deletion则为空)

DeepDDG服务器预测ΔΔG

DeepDDG服务器预测单点突变引起的折叠自由能变化(ΔΔG)具体步骤为:

  • 使用 AlphaFold2 预测野生型酶的3D结构
  • 将野生型结构文件提交到 DeepDDG 服务器
  • 服务器预测每个可能的突变位点的 ΔΔG 值
  • 将预测结果与测试集突变数据匹配,得到每个突变体的预测 ΔΔG
import pandas as pd
import numpy as np

#helper function
def read_list_from_file(list_file):
    with open(list_file) as f:
        lines  = f.readlines()
    return lines

#读取DeepDDG预测结果
ddg = read_list_from_file('../input/submit-novozymes-00/wildtype_structure_prediction_af2.deepddg.ddg.txt')

header = ddg[0]
data = [s.split() for s in ddg[1:]]

df = pd.DataFrame(data, columns = ['chain', 'WT', 'ResID', 'Mut', 'ddG'])
df.ddG = df.ddG.astype(np.float32)
df.ResID = df.ResID.astype(int)  
df.loc[:,'location'] = df.ResID -1  #change to 0-indexing

#读取测试集突变信息
test_df = pd.read_csv('../input/submit-novozymes-00/test.more.csv')
test_df.location = test_df.location.fillna(-1)
test_df.location = test_df.location.astype(int)

#生成提交文件 
if 1:
    df.loc[:,'mut_string'] = df.WT+df.location.astype(str)+df.Mut
    test_df.loc[:,'mut_string'] =  test_df.wild_type+test_df.location.astype(str)+test_df.mutation
    
    test_df = test_df.merge(df[['ddG','mut_string']], on='mut_string',how='left')  # 将预测的ddG值与测试集突变信息匹配
    submit_df = pd.DataFrame({
        'seq_id': test_df.seq_id.values,
        'tm': test_df.ddG.values,  # 直接使用ddG作为Tm预测值
    })
    submit_df.tm = submit_df.tm.fillna(0)
    submit_df.to_csv('deepddg-ddg.csv', index=False) #lb0.335
    print(submit_df)
  
print('submit_df ok!')

问题思考

  • DeepDDG 的训练数据中是否包含与测试酶相似的蛋白?
  • ΔΔG 与目标值 ΔTm 之间有何关联?
  • AlphaFold2 预测的结构特征对本次比赛的作用如何?
  • DeepDDG 的网络结构是怎样的?

方案二

特征工程

1.使用突变残基周围21个残基的三维坐标信息构建结构特征,包括相对距离、夹角。

 受这篇论文[1]的启发,我选择了离突变残基最近的21个残基来构建结构特征

2.利用B-factor、BLOSUM矩阵、DeMaSk、SASA等已有特征。

3.使用Facebook预训练的蛋白质transformer ESM提取序列嵌入特征。

4.使用PCA对嵌入特征进行降维。

构建三个XGB模型

1.XGB1:使用1800+行的训练集,特征包括ESM提取特征、B_factor、相对距离等。

2.XGB2:使用来自30个同源、相同pH组的986个突变的训练集,特征与XGB1相同。

3.XGB3:使用外部数据集中6000多行不稳定突变样本,仅使用结构特征。

集成多个公共模型

1.NESP 3D geometry:使用突变残基与蛋白质中心之间的距离作为特征。

2.FoldX:利用FoldX软件计算ddG值。

3.ThermoNet v2:使用体素化的3D结构特征和辅助的dTm目标训练CNN模型。

4.Relaxed rosetta scores:使用Rosetta软件计算relax结构的能量分数。

5.RMSD:根据分子动力学模拟轨迹计算每个残基的RMSD。

6.Different pLDDT:计算突变型与野生型的pLDDT差异。

XGB模型和公共模型进行加权集成

构建三个XGBoost模型的策略允许利用不同的数据集和特征,从多个角度学习蛋白质稳定性与突变之间的关系,并通过集成学习提高最终预测的鲁棒性和准确性。这种方法在处理复杂的生物学问题时非常有效。

相关知识

Lesson1:酶预测大赛1_蛋白质tm值-CSDN博客

kaggle酶稳定性预测第三名解决方案分享_侧链表面积与每个残基的无规卷曲值的比例 溶剂暴露-CSDN博客

残基接触图_残基接触图分析-CSDN博客

[lb0.335] DeepDGG server benchmark | Kaggle (方案一)

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

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

相关文章

【开发工具——依赖管理工具——Maven】

1. Maven介绍 Apache Maven 的本质是一个软件项目管理和理解工具。基于项目对象模型 (Project Object Model&#xff0c;POM) 的概念&#xff0c;Maven 可以从一条中心信息管理项目的构建、报告和文档。 对于开发者来说&#xff0c;Maven 的主要作用主要有 3 个&#xff1a; …

vue3+vite搭建脚手架项目本地运行electron桌面应用

1.搭建脚手架项目 搭建Vue3ViteTs脚手架-CSDN博客 2.创建完项目后&#xff0c;安装所需依赖包 npm i vite-plugin-electron electron26.1.0 3.根目录下创建electron/main.ts electron/main.ts /** electron/main.ts */import { app, BrowserWindow } from "electron&qu…

鸿蒙ArkTS中的获取网络数据

一、通过web组件加载网页 在C/S应用程序中&#xff0c;都有网络组件用于加载网页&#xff0c;鸿蒙ArkTS中也有类似的组件。   web组件&#xff0c;用于加载指定的网页&#xff0c;里面有很多的方法可以调用&#xff0c;虽然现在用得比较少&#xff0c;了解还是必须的。   演…

无人车之路径规划篇

无人车的路径规划是指在一定的环境模型基础上&#xff0c;给定无人车起始点和目标点后&#xff0c;按照性能指标规划出一条无碰撞、能安全到达目标点的有效路径。 一、路径规划的重要性 路径规划对于无人车的安全、高效运行至关重要。它不仅能够提高交通效率&#xff0c;减少交…

C语言心型代码解析

方法一 心型极坐标方程 爱心代码你真的理解吗 笛卡尔的心型公式&#xff1a; for (y 1.5; y > -1.5; y - 0.1) for (x -1.5; x < 1.5; x 0.05) 代码里面用了二个for循环&#xff0c;第一个代表y轴&#xff0c;第二个代表x轴 二个增加的单位不同&#xff0c;能使得…

11月7日(内网横向移动(二))

利用系统服务 SCShell SCShell是一款利用系统服务的无文件横向移动工具。与传统的创建远程服务的方法不同&#xff0c;SCShell利用提供的用户凭据&#xff0c;通过ChangeServiceConfigA API修改远程主机上的服务配置&#xff0c;将服务的二进制路径名修改为指定的程序或攻击载…

【YOLOv11[基础]】目标检测OD | 导出ONNX模型 | ONN模型推理以及检测结果可视化 | python

本文将导出YOLO11.pt模型对应的ONNX模型,并且使用ONNX模型推理以及结果的可视化。话不多说,先看看效果图吧!!! 目录 一 导出ONNX模型 二 推理及检测结果可视化 1 代码 2 效果图

力扣—不同路径(路径问题的动态规划)

文章目录 题目解析算法原理代码实现题目练习 题目解析 算法原理 状态表示 对于这种「路径类」的问题&#xff0c;我们的状态表示⼀般有两种形式&#xff1a; i. 从[i, j] 位置出发。 ii. 从起始位置出发&#xff0c;到[i, j] 位置。 这⾥选择第⼆种定义状态表⽰的⽅式&#xf…

传统RAG流程;密集检索器,稀疏检索器:中文的M3E

目录 传统RAG流程 相似性搜索中:神经网络的密集检索器,稀疏检索器 密集检索器 BGE系列模型 text-embedding-ada-002模型 M3E模型 稀疏检索器 示例一:基于TF-IDF的稀疏检索器 示例二:基于BM25的稀疏检索器 稀疏检索器的特点与优势 传统RAG流程 相似性搜索中:神经…

Javascript 获取设备信息 工具

JS获取设备信息(操作系统信息、地理位置、UUID、横竖屏状态、设备类型、网络状态、浏览器信息、生成浏览器指纹、日期、生肖、周几等) Get Device Info Online GitHub - skillnull/DeviceJs: JS获取设备信息(操作系统信息、地理位置、UUID、横竖屏状态、设备类型、网络状态、浏…

【数据仓库】

1、概述 数据仓库&#xff0c;英文名称为Data Warehouse&#xff0c;可简写为DW或DWH。 数据仓库是企业中用于集中存储和管理来自多个源的经过处理和组织的数据的系统。它为复杂的查询和分析提供了一个优化的环境&#xff0c;使得用户能够执行高级数据分析&#xff0c;以支持…

成都栩熙酷网络科技有限公司抖音小店探索

在数字经济的浪潮中&#xff0c;电商行业正以前所未有的速度蓬勃发展&#xff0c;而短视频平台的崛起更是为这一领域注入了新的活力。成都栩熙酷网络科技有限公司&#xff08;以下简称“栩熙酷”&#xff09;&#xff0c;作为这股浪潮中的佼佼者&#xff0c;凭借其敏锐的市场洞…

基于ViT的无监督工业异常检测模型汇总

基于ViT的无监督工业异常检测模型汇总 论文1&#xff1a;RealNet: A Feature Selection Network with Realistic Synthetic Anomaly for Anomaly Detection&#xff08;2024&#xff09;1.1 主要思想1.2 系统框架 论文2&#xff1a;Inpainting Transformer for Anomaly Detecti…

传输协议设计与牧村摆动(Makimoto‘s Wave)

有一条活鱼和一条死鱼&#xff0c;你准备怎么做&#xff0c;你会将活鱼红烧或将死鱼清蒸吗&#xff1f;好的食材只需要最简单的烹饪&#xff0c;不好的食材才需要花活儿。 我此前的文字几乎都在阐述一个观点&#xff0c;广域网就是那条死鱼&#xff0c;数据中心则是那条活鱼。…

基于Python的旅游景点推荐系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

程序员的生活周刊 #7:耐克总裁被裁记

0. 庙宇 这张图来自 Tianshu Liu&#xff0c; 被树木环绕的宝塔庙宇 1. 耐克总裁 耐克最近的总裁 John Donahoe 干了 5 年&#xff0c;终于被裁掉了。 这位总裁即不了解球鞋文化&#xff0c;也没有零售经验&#xff0c;但不懂事的董事会还是聘用它&#xff0c;寄托把耐克从运…

全面解析:区块链技术及其应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 全面解析&#xff1a;区块链技术及其应用 全面解析&#xff1a;区块链技术及其应用 全面解析&#xff1a;区块链技术及其应用 区…

工作流初始错误 泛微提交流程提示_泛微协同办公平台E-cology8.0版本后台维护手册(11)–系统参数设置

工作流初始错误 泛微提交流程提示_泛微协同办公平台E-cology8.0版本后台维护手册(11)–系统参数设置...-CSDN博客 工作流初始错误 泛微提交流程提示_泛微OA 工作流WebService接口使用说明 工作流初始错误 泛微提交流程提示_泛微OA 工作流WebService接口使用说明-CSDN博客 工作…

每日OJ题_牛客_春游_贪心+数学_C++_Java

目录 牛客_春游_贪心数学 题目解析 C代码 Java代码 牛客_春游_贪心数学 春游 描述&#xff1a; 盼望着&#xff0c;盼望着&#xff0c;东风来了&#xff0c;春天脚步近了。 值此大好春光&#xff0c;老师组织了同学们出去划船&#xff0c;划船项目收费如下&#xff1a;…

关于elementui el-radio 赋值问题

今天遇到这样的问题&#xff1a; 点击的时候&#xff0c;同时选中 照抄官网&#xff01; 后来发现了问题&#xff1a; 也就是说如果你的版本太低&#xff0c;就不能用value&#xff0c;而得用label&#xff0c;于是修改 <el-radio-group v-model"searchTime"&g…